[php - sql] Boucle infinie, mais où ?
Résolu
Une pattate qui vole
Messages postés
35
Date d'inscription
Statut
Membre
Dernière intervention
-
Une pattate qui vole Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
Une pattate qui vole Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et à tous.
Comme le titre du sujet le suggère, j'ai une boucle infinie dans mon code ... Enfin, plus exactement, j'ai l'erreur suivante : « Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\BDD-PHP\affichage_adherant.php on line 43 ».
Étant donné que cette ligne correspond à une condition "while", j'en déduis qu'il doit s'agir d'une boucle infinie, mais je n'arrive pas à en déterminer la cause.
Voici mon code :
Si vous voyez où se trouve l'erreur, ce sera avec un grand plaisir que je vous remercierais pour me la signaler et m'expliquer comment régler le problème.
Sur ce, je vous souhaite une bonne journée.
Comme le titre du sujet le suggère, j'ai une boucle infinie dans mon code ... Enfin, plus exactement, j'ai l'erreur suivante : « Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\BDD-PHP\affichage_adherant.php on line 43 ».
Étant donné que cette ligne correspond à une condition "while", j'en déduis qu'il doit s'agir d'une boucle infinie, mais je n'arrive pas à en déterminer la cause.
Voici mon code :
if(isset($_POST['IdTypeMandat'])) { $info=$_POST['IdTypeMandat']; $sql1="SELECT IDAdherant FROM listemandat WHERE listemandat.IdTypeMandat = '$info'"; $chaine=""; $id=mysql_fetch_array(mysql_query($sql1)); $n=0; do { if($n == 0) { $chaine.="adherant.IDAdherant = '".$id['IDAdherant']."'"; $n=1; }else{ $chaine.="OR adherant.IDAdherant = '".$id['IDAdherant']."'"; } }while($id=mysql_fetch_array(mysql_query($sql1))); $sql2="SELECT * FROM adherant WHERE ".$chaine; }
Si vous voyez où se trouve l'erreur, ce sera avec un grand plaisir que je vous remercierais pour me la signaler et m'expliquer comment régler le problème.
Sur ce, je vous souhaite une bonne journée.
A voir également:
- [php - sql] Boucle infinie, mais où ?
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Logiciel sql - Télécharger - Bases de données
- Code gta 5 ps3 vie infinie - Guide
- Php alert ✓ - Forum PHP
4 réponses
là :
do
{
if($n == 0)
{
$chaine.="adherant.IDAdherant = '".$id['IDAdherant']."'";
$n=1;
}else{
$chaine.="OR adherant.IDAdherant = '".$id['IDAdherant']."'";
}
}while($id=mysql_fetch_array(mysql_query($sql1)));
ta condition est toujours la même : la requête est exécutée.
ta requête :
SELECT IDAdherant FROM listemandat WHERE listemandat.IdTypeMandat = '$info'
va aller chercher tous les ID dans ta table, et à la boucle suivante... va recommencer.
c'est pour ça que ça tourne en rond, parce que ta condition est toujours vraie ;)
do
{
if($n == 0)
{
$chaine.="adherant.IDAdherant = '".$id['IDAdherant']."'";
$n=1;
}else{
$chaine.="OR adherant.IDAdherant = '".$id['IDAdherant']."'";
}
}while($id=mysql_fetch_array(mysql_query($sql1)));
ta condition est toujours la même : la requête est exécutée.
ta requête :
SELECT IDAdherant FROM listemandat WHERE listemandat.IdTypeMandat = '$info'
va aller chercher tous les ID dans ta table, et à la boucle suivante... va recommencer.
c'est pour ça que ça tourne en rond, parce que ta condition est toujours vraie ;)
Il n'y a qu'un seul = dans ta boucle, tu initialize $id au lieu de le comparer.
Il faut mettre ==
Il faut mettre ==
while($id == mysql_fetch_array(mysql_query($sql1)))
Bon ... j'avais oublié que l'informatique était plus stupide que le cerveau humain (et que certain humain avait un cerveau informatique).
J'ai modifier mon code un tout petit peu et je n'ai plus de boucle infinie.
J'ai maintenant un autre problème, mais je vais regarder ou ça bloque avant de poser la question.
Merci de vos suggestion, elle m'ont aidé à me dire : « Ça ne mène pas à grand chose, qu'ai-je fait de différent à l'habitude. » Et j'ai trouvé.
J'ai modifier mon code un tout petit peu et je n'ai plus de boucle infinie.
if(isset($_POST['IdTypeMandat'])) { $info=$_POST['IdTypeMandat']; $sql1="SELECT IDAdherant FROM listemandat WHERE listemandat.IdTypeMandat = '$info'"; $chaine=""; $idreq=mysql_query($sql1); $id=mysql_fetch_array($idreq); $n=0; do { echo '<br>IDAdhearant = '.$id['IDAdherant']; if($n == 0) { $chaine.="adherant.IDAdherant = '".$id['IDAdherant']."'"; echo '<br>$n = '.$n; $n=1; echo '<br>$n = '.$n; }else{ $chaine.="OR adherant.IDAdherant = '".$id['IDAdherant']."'"; echo '<br>$n = '.$n; } }while($id=mysql_fetch_array($idreq)); $sql2="SELECT * FROM adherant WHERE ".$chaine; }
J'ai maintenant un autre problème, mais je vais regarder ou ça bloque avant de poser la question.
Merci de vos suggestion, elle m'ont aidé à me dire : « Ça ne mène pas à grand chose, qu'ai-je fait de différent à l'habitude. » Et j'ai trouvé.
Bonjour,
je pense que le problème vient du fait que tu initialises
$id = mysql_fetch_array($idreq);
et que la condition du while est $id = mysql_fetch_array($idreq);
les 2 variables $id et $idreq ont toujours la même valeur donc en gros $id = $id en permanence.
je pense que le problème vient du fait que tu initialises
$id = mysql_fetch_array($idreq);
et que la condition du while est $id = mysql_fetch_array($idreq);
les 2 variables $id et $idreq ont toujours la même valeur donc en gros $id = $id en permanence.
non, il n'y a plus de problème. désolé, j'ai pas mis résolu en haut ...
Le problème venait de la syntaxe tout simplement.
Je mettais en une ligne :
mysql_fetch_array entre la requête dans un tableau et fait automatiquement le passage à la valeur suivante du tableau à chaque nouvel appel de la fonction.
Merci quand même ^^
Le problème venait de la syntaxe tout simplement.
Je mettais en une ligne :
$id=mysql_fetch_array(mysql_query($sql1))Je suis donc passé à deux ligne :
$idreq=mysql_query($sql1) $id=mysql_fetch_array($idreq)
mysql_fetch_array entre la requête dans un tableau et fait automatiquement le passage à la valeur suivante du tableau à chaque nouvel appel de la fonction.
Merci quand même ^^