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
Bonjour a tous,

je débute en PHP et je suis deja face a un probleme qui me parait plus lié a de la syntaxe ...
Je souhaiterais donc récupérer mes données sur ma base de données en utilisant une boucle for.
Aspect de la BDD 'essoyes' : id,mois,jour,texte

Donc j'ai crée une requete mois1 :
mysql_select_db($database_essoyes, $essoyes);
$query_mois1 = "SELECT * FROM evenements WHERE evenements.mois=1 ORDER BY id ASC";
$mois1 = mysql_query($query_mois1, $essoyes) or die(mysql_error());
$row_mois1 = mysql_fetch_assoc($mois1);
$totalRows_mois1 = mysql_num_rows($mois1);

avec "mois1" qui correspondant au mois de janvier. Je souhaiterais faire donc la meme chose jusqu'a decembre

(12) avec un boucle for.

<?php virtual('/essoyes/Connections/essoyes.php'); ?>
<?php
For($i=1;$i<13;$i)
{
mysql_select_db($database_essoyes, $essoyes);
$query_mois$i = "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);
}
?>

Mais ceci ne marche pas surement a cause de la syntaxe !

Quelqu'un pourrait-il m'aider ?

Merci
A voir également:

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
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
0
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
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
0
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
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
0
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
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 !
0
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
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().
0

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
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
0
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
>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 ...
0
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
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 ;)
0
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
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 !
0