Toujours un pb de foreach...

Signaler
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007
-
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007
-
Bonjour à tous,

J'ai toujours un pb d'update de bdd lorsque j'utilise l'argument foreach.

foreach
($annee
as $clef
= > $valeur
)
{

echo( ""
.$valeur
." ='"
.$classe
[$clef
]."'
"
);
}

cela me renvoit un couple de données année= classe par ex
1994=2DE
1995=1ERE
1996=TALE
....
Ca fonctionne avec un echo mais dans la requête


foreach
( $annee
as $clef
=> $valeur
)
{

$sql
=
( "UPDATE lh_classe SET $valeur ='"
.$classe
[$clef
]."'"
);
$req
= mysql_query
($sql
)
or die
( mysql_error
()
)
;

}

Ca s'arrête à la première itération et me renvoi une erreur de syntaxe mysql.
Je ne vois pas du tout ce qui cloche ??
Merci de votre aide.

8 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello again,



$sql
=
( "UPDATE lh_classe SET
$valeur ='"
.$classe
[$clef
]."'"
);



est faux.

A la place de $valeur dans ta requete tu dois avoir un nom de champ! La ta requete ne veut rien dire.

Tu veux mettre a jour un champ...et ce champ ne s'appelle surement pas $valeur.
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

Bonjour,

Le pb, c'est que $valeur prend le nom de chaque année du select, qui lui même est défini lors par l'envoi d'un précédent form.
je m'explique :
1er form

année d'arrivee ($arrivee) = par ex 1994
année de départ ($départ) = par ex 2000
submit le form

2ème form construit à partir du 1er
$min = $_POST['$arrivee'];
$max = $_POST['$depart'];

for($i=$min; $i <=$max; $i++){
<select name="année[]>
<option value='$i'>$i</option>
</select>
}

dans la bdd, chaque champ porte le nom d'une année entre 1988 et 2005, mais je ne connais pas le nom des champs lorsque j'utilise la requête update.
c'est pour ça que $valeur est nécessaire.
En l'occurence, l'update fonctionne mais j'ai une syntaxe un peu bizarre :

$sql
= 'UPDATE `lh_classe` SET
`'
. $valeur
.'` = "'
.$classe
[$clef
].'" WHERE `id` = '
. $resultat
[ 'id'
].''
;
$req
= mysql_query
($sql
)
or die
( mysql_error
()
)
;
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ah ok je n'avais pas pige du tout :-)



Ta syntaxe est normale en fait. C'est bien ce qu'il faut faire.
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

merci de ton aide en tout cas ;-)
Messages postés
143
Date d'inscription
vendredi 5 juillet 2002
Statut
Membre
Dernière intervention
18 mars 2006
1
Salut a toi !



- Peux-tu nous montrer le resultat d'un echo "
$sql" pour chaque requete générée ?

(juste un echantillon)



- Egalement le message d'erreur que te renvois Mysql ??



Merci a+
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

Voila le résultat du echo"$sql";
UPDATE `lh_classe` SET `nom` "Damez",`prenom` "gilles",`1998` = "BEP1" WHERE `id` = 5UPDATE `lh_classe` SET `nom` = "Damez",`prenom` = "gilles",`1999` = "BEP1" WHERE `id` = 5UPDATE `lh_classe` SET `nom` = "Damez",`prenom` = "gilles",`2000` = "BEP1" WHERE `id` = 5UPDATE `lh_classe` SET `nom` = "Damez",`prenom` = "gilles",`2001` = "BEP1" WHERE `id` = 5UPDATE `lh_classe` SET `nom` = "Damez",`prenom` = "gilles",`2002` = "BEP1" WHERE `id` = 5

Sachant que j'insère aussi un nom et un prénom récupérer sur une autre table pour un id récupéré lui aussi sur une autre table.

Quant au message d'erreur il est de cette forme (très classique) :

Check the manual that corresponds to your MySQL server version for the right syntax to use near '1998='BEP1' WHERE id='5''
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Je n'avais pas compris que tu avais encore des erreurs !



$sql

= 'UPDATE `lh_classe` SET
`'
. $valeur
.'` = "'
.$classe
[$clef
].'" WHERE `id` = '
.$resultat
['id'
];
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

je n'ai plus de message d'erreur mais la requête (comme tu peux le voir) contient des quote à l'envers .
en fait lorsque je fais :$sql "UPDATE 'lhclasse' SET ".$valeur." '".$classe[$clef]."' WHERE id='".$resultat['id']."'");
Ca ne fonctionne pas et me retourne l'erreur indiquée ds le message précédent.
Du coup, j'ai consulter la bdd, et fait un update bidon pour voir la syntaxe.
la requête que tu m'as fournie est bonne mais n'est pas acceptée par le serveur pour des histoires de quote à l'envers. J'ai donc fait un copier/coller et modifié les valeurs qui m'intéressaient.
C la 1ère fois que je rencontre ce pb et j'avoue que je ne comprends pas pourquoi !!!