[RESOLU] boucle infinie

Eléphanteau du PHP | 32 Messages

02 mai 2013, 08:49

Quelqu'un sait pourquoi j'ai une boucle infinie avec ce code ? Quand je teste la requête sur PhpMyAdmin je n'ai pas de boucle infinie
$query="SELECT id,nom_user,nb_co FROM jm_users ";
$req=mysql_query($query);
$row=mysql_fetch_row($req);

echo "<table>
<tr>
	<th>ID utilisateur</th>
	<th>Nom utilisateur</th>
	<th>Nombre connexion</th>
</tr>";
	
while (isset($row)) {
	echo "<tr>
		<th>$row[0]</th>
		<th>$row[1]</th>
		<th>$row[2]</th>
	</tr>";

}

echo "</table>";

Eléphant du PHP | 353 Messages

02 mai 2013, 09:24

Et non seulement elle est infinie mais en plus cela t'affiche tout le temps les mêmes infos.
Je t'invite à aller lire un tutoriel sur la manière de récupérer des infos de mysql ou alors d'aller lire la doc de mysql_fetch_assoc()

Eléphanteau du PHP | 32 Messages

02 mai 2013, 09:59

Je comprends pas :oops:

Eléphant du PHP | 51 Messages

02 mai 2013, 10:14

Ce que veut dire Nicolas c'est que tu n'utilises pas la bonne méthode pour récupérer tes informations, il faut effectivement utiliser la commande mysql_fetch_assoc()
echo "<table>

<tr>
        <th>ID utilisateur</th>
        <th>Nom utilisateur</th>
        <th>Nombre connexion</th>
</tr>";
        
$query="SELECT id,nom_user,nb_co FROM jm_users ";
$req=mysql_query($query);
while($row = mysql_fetch_array($req)) 
				{ 
        echo "<tr>
                <td>".$row['id']."</td>
                <td>".$row['nom_user']."</td>
                <td>".$row['nb_co']."</td>
        </tr>";

}

echo "</table>";
 
Ce code devrait mieux fonctionner, à une erreur de virgule près ;)
Modifié en dernier par Gorbi le 02 mai 2013, 11:36, modifié 1 fois.

Eléphanteau du PHP | 32 Messages

02 mai 2013, 10:24

ah merci j'avais mis
<tr>
                <td>$row['id'];</td>
                <td>$row['nom_user'];</td>
                <td>$row['nb_co'];</td>
        </tr>";

les quotes quoi et ça fonctionnait pas c'est bête ^^

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 mai 2013, 10:25

salut,

J'suis trop lent z'avez répondue entre temps mais je poste quand même :mrgreen:

la fonction isset retourne un booleen (true / false => vrai / faux).
tu définie la variable $row avant le while.
lorsque la structure while évalue la condition : isset($row) elle à comme résultat true (car effectivement $row existe).
La traduction d'une boucle while c'est tant que. Donc ton code se traduit en tant que la variable $row existe affiche la ligne.
Ce code produit bien une boucle infinie.

ce que l'on test dans la boucle while c'est le retour de mysql_fetch_assoc (mysql_fetch_array etc etc) car cette (ces) fonction(s) retourne(nt) false lorsqu'il n'y a plus de résultat à fournir.
ton code devient donc
<?php
$query="SELECT id,nom_user,nb_co FROM jm_users ";
$req=mysql_query($query);

echo "<table>
<thead>
<tr>
        <th>ID utilisateur</th>
        <th>Nom utilisateur</th>
        <th>Nombre connexion</th>
</tr>
</thead>
<tbody>";
        
while ($row=mysql_fetch_row($req);) {
        echo '<tr>
                <td>'.$row[0].'</td>
                <td>'.$row[1].'</td>
                <td>'.$row[2].'</td>
        </tr>';
}

echo '</tbody></table>';
 
je te conseil :
- D'utiliser l'extension mysqli plutot que l'extension mysql qui sera supprimer dans une future version
- D'utiliser la concaténation (comme je l'ai fait dans mon exemple) afin de rendre ton code plus lisible et d'éviter les erreurs d'interprétation de php (qui doit déterminier si tu veux $row ou $row[0] ou afficher la valeur de $rw plus [0] derrière etc etc.
- De lire ce tuto sur la façon de récupérer les données d'une base de données mysql.
- De te renseigner sur l'utilisation des table html. Comme je te l'ai déja indiqué la balise th ne s'utilise que dans une balise thead.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 32 Messages

02 mai 2013, 10:31

Merci à vous pour vos explications :D