Probleme en PHP avec boucle for
Résolu/Fermé
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
-
9 févr. 2007 à 14:14
Jackho03 Messages postés 21 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 31 octobre 2007 - 9 févr. 2007 à 18:29
Jackho03 Messages postés 21 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 31 octobre 2007 - 9 févr. 2007 à 18:29
A voir également:
- Probleme en PHP avec boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Easy php - Télécharger - Divers Web & Internet
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Idm for mac - Télécharger - Téléchargement & Transfert
7 réponses
benkeeper
Messages postés
81
Date d'inscription
samedi 4 septembre 2004
Statut
Membre
Dernière intervention
26 janvier 2008
45
9 févr. 2007 à 14:46
9 févr. 2007 à 14:46
Bonjour,
Il faudrait si possible donner les message d'erreur qui apparaissent, ça peut aiguiller pas mal sur le type de problème.
Mais sans ça je vois déjà quelques erreur sur votre code.
Tout d'abord la premère ligne de boucle est erronée. Il faut remplacer
For($i=1;$i<13;$i)
par
For($i=1;$i<13;$i++)
En effet, dans le cas de la première ligne, la variable compteur "$i" n'est pas incrémenter à chaque tour et n'atteint donc jamais la valeur limite, ce qui fait que la boucle est infinie.
Un deuxième point moins important, la ligne "mysql_select_db($database_essoyes, $essoyes); " peut être sortie de la boucle.
Une fois la base sélectionnée toutes les requête suivante y seront automatiquement attribuées.
Enfin gros soucis vis à vis des variables du type '$mois$i '. Je ne suis même pas sur que ça marche. Il faut les remplacer par des tableaux.
Je vais reprendre les variables une par une :
- $query_mois$i : à moins que la chaine requete soit réutilisé plus tard, il n'y a pas d'interêt à la stocker. Cette variable peut donc devenir $query_mois. A chaque passage la même variable sera utilisée pour stocker temporairement la requête.
- $mois$i : elle stocke les résultats bruts de la requete et n'est pas utilisable en tant que telle, elle doit être traitée par mysql_fetch_*. Comme la précédente elle peut être temporaire et donc devenir $mois.
- $row_mois$i et $totalRows_mois$i qui sont si j'ai bien compris les variables qui seront conservées et utilisées ensuite doivent être des tableau et deviennent donc $totalRows_mois[$i] et $row_mois[$i]
Voici le code corrigé :
<?php
mysql_select_db($database_essoyes, $essoyes);
For($i=1;$i<13;$i++)
{
$query_mois = "SELECT * FROM evenements WHERE evenements.mois=$i ORDER BY id ASC";
$mois = mysql_query($query_mois$i, $essoyes) or die(mysql_error());
$row_mois[$i] = mysql_fetch_assoc($mois);
$totalRows_mois[$i] = mysql_num_rows($mois);
}
?>
Essayez ça et dites moi s'il y a des erreurs.
Dernier point important, présenté comme ça, le code sous entend que le résultat de la requête ne doit pas dépasser 1 ligne. En effet, la ligne
$row_mois[$i] = mysql_fetch_assoc($mois);
stocke uniquement la première ligne de résultat. Les lignes suivantes, si elles existent sont ignorées.
Ben
Il faudrait si possible donner les message d'erreur qui apparaissent, ça peut aiguiller pas mal sur le type de problème.
Mais sans ça je vois déjà quelques erreur sur votre code.
Tout d'abord la premère ligne de boucle est erronée. Il faut remplacer
For($i=1;$i<13;$i)
par
For($i=1;$i<13;$i++)
En effet, dans le cas de la première ligne, la variable compteur "$i" n'est pas incrémenter à chaque tour et n'atteint donc jamais la valeur limite, ce qui fait que la boucle est infinie.
Un deuxième point moins important, la ligne "mysql_select_db($database_essoyes, $essoyes); " peut être sortie de la boucle.
Une fois la base sélectionnée toutes les requête suivante y seront automatiquement attribuées.
Enfin gros soucis vis à vis des variables du type '$mois$i '. Je ne suis même pas sur que ça marche. Il faut les remplacer par des tableaux.
Je vais reprendre les variables une par une :
- $query_mois$i : à moins que la chaine requete soit réutilisé plus tard, il n'y a pas d'interêt à la stocker. Cette variable peut donc devenir $query_mois. A chaque passage la même variable sera utilisée pour stocker temporairement la requête.
- $mois$i : elle stocke les résultats bruts de la requete et n'est pas utilisable en tant que telle, elle doit être traitée par mysql_fetch_*. Comme la précédente elle peut être temporaire et donc devenir $mois.
- $row_mois$i et $totalRows_mois$i qui sont si j'ai bien compris les variables qui seront conservées et utilisées ensuite doivent être des tableau et deviennent donc $totalRows_mois[$i] et $row_mois[$i]
Voici le code corrigé :
<?php
mysql_select_db($database_essoyes, $essoyes);
For($i=1;$i<13;$i++)
{
$query_mois = "SELECT * FROM evenements WHERE evenements.mois=$i ORDER BY id ASC";
$mois = mysql_query($query_mois$i, $essoyes) or die(mysql_error());
$row_mois[$i] = mysql_fetch_assoc($mois);
$totalRows_mois[$i] = mysql_num_rows($mois);
}
?>
Essayez ça et dites moi s'il y a des erreurs.
Dernier point important, présenté comme ça, le code sous entend que le résultat de la requête ne doit pas dépasser 1 ligne. En effet, la ligne
$row_mois[$i] = mysql_fetch_assoc($mois);
stocke uniquement la première ligne de résultat. Les lignes suivantes, si elles existent sont ignorées.
Ben
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
9 févr. 2007 à 15:00
9 févr. 2007 à 15:00
Merci pour votre reponse !
en fait par la suite j'utilise encore ce code
<?php do { ?>
<span class="Style1"><?php echo $(row_mois1)['jour']; ?> - <?php echo $(row_mois1)['texte']; ?> <a href="/back/modif_eve.php?id=<?php echo $(row_mois1)['id']; ?>">Modifier</a> <a href="/back/sup_eve.php?id=<?php echo $(row_mois1)['id']; ?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php } while ($(row_mois1) = mysql_fetch_assoc($(mois1)); ?></p>
qui m'affiche donc les valeurs récupérées (sous la forme jour - texte ) et c'est mis dans une région répétées pour qu'il affiche toutes les valeurs. La aussi par la suite j'aurais voulu faire une petite boucle pour ne pas avoir a tout répété. Mais bon je verrais ca apres :)
Sinon j'ai remplacé mon code par le tien et j'obtiens cette erreur que j'obtenais aussi avant.
Parse error: parse error in c:\documents and settings\jerome\bureau\sylvain\essoyes\essai\gestion_eve.php on line 10
en fait par la suite j'utilise encore ce code
<?php do { ?>
<span class="Style1"><?php echo $(row_mois1)['jour']; ?> - <?php echo $(row_mois1)['texte']; ?> <a href="/back/modif_eve.php?id=<?php echo $(row_mois1)['id']; ?>">Modifier</a> <a href="/back/sup_eve.php?id=<?php echo $(row_mois1)['id']; ?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php } while ($(row_mois1) = mysql_fetch_assoc($(mois1)); ?></p>
qui m'affiche donc les valeurs récupérées (sous la forme jour - texte ) et c'est mis dans une région répétées pour qu'il affiche toutes les valeurs. La aussi par la suite j'aurais voulu faire une petite boucle pour ne pas avoir a tout répété. Mais bon je verrais ca apres :)
Sinon j'ai remplacé mon code par le tien et j'obtiens cette erreur que j'obtenais aussi avant.
Parse error: parse error in c:\documents and settings\jerome\bureau\sylvain\essoyes\essai\gestion_eve.php on line 10
benkeeper
Messages postés
81
Date d'inscription
samedi 4 septembre 2004
Statut
Membre
Dernière intervention
26 janvier 2008
45
9 févr. 2007 à 15:21
9 févr. 2007 à 15:21
Si les résultats bruts sont utilisés dans la suite du code il faut les stocker dans un tableau, $mois devient $mois[$i].
<?php
mysql_select_db($database_essoyes, $essoyes);
For($i=1;$i<13;$i++)
{
$query_mois = "SELECT * FROM evenements WHERE evenements.mois=$i ORDER BY id ASC";
$mois[$i] = mysql_query($query_mois, $essoyes) or die(mysql_error());
$row_mois[$i] = mysql_fetch_assoc($mois[$i] );
$totalRows_mois[$i] = mysql_num_rows($mois[$i] );
}
?>
Et la suite :
<?php
for($i = 1; $i < 13; $i++) {
do {
?>
<span class="Style1"><?=$row_mois[$i]['jour']?> - <?=$row_mois[$i]['texte'];?> <a href="/back/modif_eve.php?id=<?=$row_mois[$i]['id']?>">Modifier</a> <a href="/back/sup_eve.php?id=<?=$row_mois[$i]['id']?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php
} while ($row_mois[$i] = mysql_fetch_assoc($mois[$i]);
} //fermeture for
?>
Les lignes du type <?php echo $row_mois[$i]['jour']; ?> peuvent être remplacées par <?=$row_mois[$i]['jour'] ?> qui prend moins de place même si ça fait exactement la même chose, mais seulement dans la mesure ou le serveur php accepte les balise courtes (<? en plus de <?php )
Concernant l'erreur "Parse error: parse error in c:\documents and settings[...]gestion_eve.php on line 10" il faudrait voir la ligne en question, mais ça doit pas être bien grave, une histoire de point virgule ou de parenthèse.
Ben
<?php
mysql_select_db($database_essoyes, $essoyes);
For($i=1;$i<13;$i++)
{
$query_mois = "SELECT * FROM evenements WHERE evenements.mois=$i ORDER BY id ASC";
$mois[$i] = mysql_query($query_mois, $essoyes) or die(mysql_error());
$row_mois[$i] = mysql_fetch_assoc($mois[$i] );
$totalRows_mois[$i] = mysql_num_rows($mois[$i] );
}
?>
Et la suite :
<?php
for($i = 1; $i < 13; $i++) {
do {
?>
<span class="Style1"><?=$row_mois[$i]['jour']?> - <?=$row_mois[$i]['texte'];?> <a href="/back/modif_eve.php?id=<?=$row_mois[$i]['id']?>">Modifier</a> <a href="/back/sup_eve.php?id=<?=$row_mois[$i]['id']?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php
} while ($row_mois[$i] = mysql_fetch_assoc($mois[$i]);
} //fermeture for
?>
Les lignes du type <?php echo $row_mois[$i]['jour']; ?> peuvent être remplacées par <?=$row_mois[$i]['jour'] ?> qui prend moins de place même si ça fait exactement la même chose, mais seulement dans la mesure ou le serveur php accepte les balise courtes (<? en plus de <?php )
Concernant l'erreur "Parse error: parse error in c:\documents and settings[...]gestion_eve.php on line 10" il faudrait voir la ligne en question, mais ça doit pas être bien grave, une histoire de point virgule ou de parenthèse.
Ben
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
9 févr. 2007 à 15:29
9 févr. 2007 à 15:29
Merci encore !
Par contre je n'arrive pas a résoudre le probleme du parse !
normalement c'est a cette ligne la :
$mois[$i] = mysql_query($query_mois$i, $essoyes) or die(mysql_error());
Mais je ne vois pas ce qui ne va pas au niveau ; ou )
Par ocntre j'ai mis $query_mois[$i] pour tester aussi !
Par contre je n'arrive pas a résoudre le probleme du parse !
normalement c'est a cette ligne la :
$mois[$i] = mysql_query($query_mois$i, $essoyes) or die(mysql_error());
Mais je ne vois pas ce qui ne va pas au niveau ; ou )
Par ocntre j'ai mis $query_mois[$i] pour tester aussi !
benkeeper
Messages postés
81
Date d'inscription
samedi 4 septembre 2004
Statut
Membre
Dernière intervention
26 janvier 2008
45
9 févr. 2007 à 15:35
9 févr. 2007 à 15:35
C'est de ma faute, je me suis trompé dans mon premier message, la ligne correcte est la suivante :
$mois[$i] = mysql_query($query_mois) or die(mysql_error());
En fait la variable contenant la requête est $query_mois et il n'est pas nécessaire de préciser la variable de connexion à la base ($essoyes), puisque la base vient d'être sélectionnée juste avant elle sera utilisée par défaut pas mysql_query().
$mois[$i] = mysql_query($query_mois) or die(mysql_error());
En fait la variable contenant la requête est $query_mois et il n'est pas nécessaire de préciser la variable de connexion à la base ($essoyes), puisque la base vient d'être sélectionnée juste avant elle sera utilisée par défaut pas mysql_query().
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
9 févr. 2007 à 15:33
9 févr. 2007 à 15:33
au dernier while j'ai rajouté la )
je remet tout mon code :
<?php virtual('/essoyes/Connections/essoyes.php'); ?>
<?php
mysql_select_db($database_essoyes, $essoyes);
For($i=1;$i<13;$i++)
{
$query_mois = "SELECT * FROM evenements WHERE evenements.mois=$i ORDER BY id ASC";
$mois[$i] = mysql_query($query_mois[$i],$essoyes) or die(mysql_error());
$row_mois[$i] = mysql_fetch_assoc($mois[$i]);
$totalRows_mois[$i] = mysql_num_rows($mois[$i]);
}
?>
<?php
for($i = 1; $i < 13; $i++) {
do {
?>
<span class="Style1"><?=$row_mois[$i]['jour']?> - <?=$row_mois[$i]['texte'];?> <a href="/back/modif_eve.php?id=<?=$row_mois[$i]['id']?>">Modifier</a> <a href="/back/sup_eve.php?id=<?=$row_mois[$i]['id']?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php
} while ($row_mois[$i] = mysql_fetch_assoc($mois[$i]));
} //fermeture for
?>
et la j'obtiens une autre erreur
Erreur de syntaxe près de 'E' à la ligne 1
je remet tout mon code :
<?php virtual('/essoyes/Connections/essoyes.php'); ?>
<?php
mysql_select_db($database_essoyes, $essoyes);
For($i=1;$i<13;$i++)
{
$query_mois = "SELECT * FROM evenements WHERE evenements.mois=$i ORDER BY id ASC";
$mois[$i] = mysql_query($query_mois[$i],$essoyes) or die(mysql_error());
$row_mois[$i] = mysql_fetch_assoc($mois[$i]);
$totalRows_mois[$i] = mysql_num_rows($mois[$i]);
}
?>
<?php
for($i = 1; $i < 13; $i++) {
do {
?>
<span class="Style1"><?=$row_mois[$i]['jour']?> - <?=$row_mois[$i]['texte'];?> <a href="/back/modif_eve.php?id=<?=$row_mois[$i]['id']?>">Modifier</a> <a href="/back/sup_eve.php?id=<?=$row_mois[$i]['id']?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php
} while ($row_mois[$i] = mysql_fetch_assoc($mois[$i]));
} //fermeture for
?>
et la j'obtiens une autre erreur
Erreur de syntaxe près de 'E' à la ligne 1
benkeeper
Messages postés
81
Date d'inscription
samedi 4 septembre 2004
Statut
Membre
Dernière intervention
26 janvier 2008
45
9 févr. 2007 à 15:42
9 févr. 2007 à 15:42
>Erreur de syntaxe près de 'E' à la ligne 1
C'est une erreur renvoyée par MySQL ?
Si c'est le cas il faut vérifier que le nom des tables est correct, et rajouter des guillemets simples autour de $i dans la requête :
"SELECT * FROM evenements WHERE evenements.mois='$i' ORDER BY id ASC"
$i est censé être une valeur numérique donc ça devrait passer sans normalement mais bon à tout hasard ...
C'est une erreur renvoyée par MySQL ?
Si c'est le cas il faut vérifier que le nom des tables est correct, et rajouter des guillemets simples autour de $i dans la requête :
"SELECT * FROM evenements WHERE evenements.mois='$i' ORDER BY id ASC"
$i est censé être une valeur numérique donc ça devrait passer sans normalement mais bon à tout hasard ...
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
9 févr. 2007 à 16:05
9 févr. 2007 à 16:05
Je te remercie j'ai juste corrigé la petite ligne et ca m'a tout affiché ! Merci !
Je fermerai le topic plus tard au cas ou si j'ai encore un probleme de derniere minute !!
Merci encore ;)
Je fermerai le topic plus tard au cas ou si j'ai encore un probleme de derniere minute !!
Merci encore ;)
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
9 févr. 2007 à 18:29
9 févr. 2007 à 18:29
C'est encore moi .....
ca marche impec ca m'affiche tous les événements classé par 'mois'
Et la je voudrais rajouter un petit truc : une image qui varie suivant les differents mois.
for($i = 1; $i < 13; $i++) {
// mettre le lien vers image ici + changer le nom des images en mois[$i]
//<p align="left"><img src="/essoyes/images/mois[$i]"/></p>
do {
?>
<span class="Style1">
<?=$row_mois[$i]['jour']?>
-
<?=$row_mois[$i]['texte'];?>
<a href="/essoyes/back/modif_eve.php?id=<?=$row_mois[$i]['id']?>">Modifier</a> <a href="/essoyes/back/sup_eve.php?id=<?=$row_mois[$i]['id']?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php
} while ($row_mois[$i] = mysql_fetch_assoc($mois[$i]));
} //fermeture for
?>
voila donc en fait il ne m'affiche pas d'image et me met une erreur "Parse" correspondant a la ligne ou j'ai rajouté l'image !
donc pour résumé ce que je voudrais faire :
Faire apparaitre une image (correspondant aux differents mois : janvier, fevrier ...) et lister en dessous de ces mois tous les événements qui ont lieu durant ce mois-ci !
voila si quelqu'un pourrait encore m'aider !!
Merci !
ca marche impec ca m'affiche tous les événements classé par 'mois'
Et la je voudrais rajouter un petit truc : une image qui varie suivant les differents mois.
for($i = 1; $i < 13; $i++) {
// mettre le lien vers image ici + changer le nom des images en mois[$i]
//<p align="left"><img src="/essoyes/images/mois[$i]"/></p>
do {
?>
<span class="Style1">
<?=$row_mois[$i]['jour']?>
-
<?=$row_mois[$i]['texte'];?>
<a href="/essoyes/back/modif_eve.php?id=<?=$row_mois[$i]['id']?>">Modifier</a> <a href="/essoyes/back/sup_eve.php?id=<?=$row_mois[$i]['id']?>"onclick="return(confirm('Etes-vous sûr de vouloir supprimer cette entrée?'));">Supprimer</a></span><br />
<?php
} while ($row_mois[$i] = mysql_fetch_assoc($mois[$i]));
} //fermeture for
?>
voila donc en fait il ne m'affiche pas d'image et me met une erreur "Parse" correspondant a la ligne ou j'ai rajouté l'image !
donc pour résumé ce que je voudrais faire :
Faire apparaitre une image (correspondant aux differents mois : janvier, fevrier ...) et lister en dessous de ces mois tous les événements qui ont lieu durant ce mois-ci !
voila si quelqu'un pourrait encore m'aider !!
Merci !