Problemes d'affichage avec une boucle tanque

Signaler
Messages postés
19
Date d'inscription
jeudi 10 novembre 2005
Statut
Membre
Dernière intervention
16 décembre 2005
-
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Bonjour,

Je souhaiterais afficher les resultats de ma table par liste comme ci dessous:

Nom Sujet Envoyeur ...

Mon code fonctionne bien lorsque la table est pleine mais lorsquelle est vide, j'obtient des erreurs.

"Warning: mysql_data_seek() [function.mysql-data-seek]: Offset 0 is invalid for MySQL result index 3 (or the query data is unbuffered) in /liste_messages.php on line 121"

Voici mon code:

Code pour me connecter a ma base, ainsi que ma requete

mysql_select_db($database_dbprotect, $dbprotect);$requet "SELECT login, message, vue, id, envoyeur, sujet FROM msg Where login '$login'";
$query = mysql_query($requet, $dbprotect);
$nb = mysql_num_rows($query);
?>

Code pour afficher:

<form action="" method="post" name="affichage">
<td height="37">&nbsp;</td>
<td width="27%" align="left" valign="top">
<?php while($tab=mysql_fetch_assoc($query)) {
if($tab['vue'] == 0) {?>
[lire_messages.php?id=<?php echo $tab['id'];?> <?php echo ''.$tab['envoyeur'];?>]

<?php } }?>
</td>
<td align="left" valign="top">
<?php mysql_data_seek($query, 0);
while($tab=mysql_fetch_assoc($query)) {
if($tab['vue'] == 0) { ?>
<?php echo $tab['sujet'];?>

<?php } }?>

Please avez vous une solution à me proposer.
Merci

6 réponses

Messages postés
47
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
4 janvier 2006

C'est logique; cette erreur est expliquée ici : http://fr2.php.net/function.mysql-data-seek.
Tu essaies de faire pointer (dans le cas où il n'y a pas de résultats) le pointeur mysql sur le premier enregistrement (inexistant) . Vérifie si mysql_num_rows est >0 avant d'effectuer ton affichage
Debutant informatique :-)
Messages postés
19
Date d'inscription
jeudi 10 novembre 2005
Statut
Membre
Dernière intervention
16 décembre 2005

ok je vais regarder ca, je te remercie.
oui debutant en php :)
Messages postés
47
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
4 janvier 2006

Ne te méprends pas, débutant informatique c'est ma signature, je ne me permettrais pas de te dire ça...


if($nb>0)
{//Code d'affichage comme il est maintenant}
else
{
echo "Il n'y a aucun résultat à votre requête";
}
Debutant informatique :-)
Messages postés
19
Date d'inscription
jeudi 10 novembre 2005
Statut
Membre
Dernière intervention
16 décembre 2005

voila ca fonctionne apres modif :

<?php if(($nb = mysql_num_rows($query)) >=1){ mysql_data_seek($query, 0);
while($tab=mysql_fetch_assoc($query)) {
if($tab['vue'] == 0) { ?>
<?php echo $tab['sujet'];?>

<?php } } }?>

mais j'ai une autre erreur, apres que j'envoie ma requette pour effacer mes donner dans ma base, je fait un header sur la meme page pour la raffraichir mais il me met une autre erreur:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL-Link resource in c:\documents and settings\pekultra\mes documents\site sans nom 1\liste_messages.php on line 116

J'ai essayer avec mysql_affected_rows(); mais ca me met toujours la meme erreur . tu aurais une idée stp?
Messages postés
47
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
4 janvier 2006

Peut etre peux tu nous envoyer le fichier complet (en précisant où est la ligne 116) et en nous expliquant ce que tu entends par "effacer mes données dans la base"

Debutant informatique :-)
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

pourquoi fais tu...

if(($nb = mysql_num_rows($query)) {...

Alors que $nb existe déja (tu le fais juste après la requète)... comme le dit tetedemul... qui plus est je trouve que tu te complique la vie... .. .

- pourquoi un if vide sur la session ?
- A quoi sert la balise de formulaire au debut du code html alors que tu affiche des liens après ?
- Au lieu de if($mavar == 0){... fais if(empty($mavar)){...
- Pourquoi faire deux fois la même boucle...

Moi je ferais plutot comme ça...

session_start();

if(!isset($_SESSION['login'])){
header('Location: index.php?erreur=intru');
}

require_once('connexion.php');

mysql_select_db($database_dbprotect, $dbprotect) or die('la table '.$database_dbprotect.'n\'existe pas... .. .');
$query 'SELECT login, message, vue, id, envoyeur, sujet FROM msg WHERE login'.addslashes($login);
$result = mysql_query($query, $dbprotect);
$nb = mysql_num_rows($result);

echo '';

if($nb > 0) {
while($tab = mysql_fetch_assoc($result)) {
if(empty($tab['vue'])) {
echo '----

,
'.$tab['envoyeur'].',
'.$tab['sujet']'.,
';
} else {
echo '----

,
'.$tab['envoyeur'].',
'.$tab['sujet']'.,
';
}
}
} else {
echo '----

Vous n\'avez aucun message... .. .,

';
}

echo '
';

@ tchaOo°