Page 1 sur 2
[Problème] UPDATE et Foreach
Posté : 07 mars 2007, 14:52
par Tom2me
Bonjour,
Après une multitude d'essais afin d'essayer comprendre mon erreur je me tourne vers ma dernière solution le forum php france

.
Je souhaite modifier une base de donnée en fonction d'un formulaire,
mon formulaire se presente sour la forme d'un tableau qui a chaque ligne possède un input.
Pour etre plus claire :
un tableau avec une colonne personne et une colone score
personne un login.
score est un input.
j'envoi mon formulaire à l'arrivé j'effectue un foreach sur la liste des personne et modifie leur score.
Voici le code de l'envoi:
Code : Tout sélectionner
foreach($Bd->listeEtu() as $row){
$log=$row['login']
$Bd->ajouteRang($log,$_POST[$log]);
}
Et de la fonction dans le fichier Bd.php :
Code : Tout sélectionner
public function ajouteRang($log, $rang) {
try {
return $this->connexion->query("UPDATE `Etudiants` SET `score`=".$rang." WHERE `login`=".$log.");");
}
catch (PDOException $e) {
throw new RequeteException("Probleme lors de l'envoi de la requete");
}
}
Posté : 07 mars 2007, 15:21
par jojolapine
et ? quel est le problème ?
Posté : 07 mars 2007, 15:31
par Tom2me
Oups désolé ^^
Je récupère mon exeption donc affiche du message : Problèmes lors de l'envoi de la requête.
Ce qui m'étonne c'est qu'une fois sortie de la boucle ma requête fonctionne !
Posté : 07 mars 2007, 15:45
par jojolapine
essaye d'afficher $log et $_POST[$log], pour voir si tout correspond bien ...
Posté : 07 mars 2007, 15:49
par Tom2me
j'ai effectuer les vérification come je l'ai dit le prolbème vient vraiment de la présence de ma fonction dans ma boucle si je sort la fonction de la boucle mon score est changé mais seulement pour la personne contenu dans la variable $log évidement!
mon foreach me permettant d'update pour chaque personne contenue dans la BD je n'ai plus aucune solution
Existe t il une contre indication pour le foreach et le update ???
Posté : 07 mars 2007, 15:59
par jojolapine
change ta fonction en ceci:
public function ajouteRang($log, $rang) {
$sql="UPDATE `Etudiants` SET `score`=".$rang." WHERE `login`=".$log;
try {
return $this->connexion->query($sql);
}
catch (PDOException $e) {
throw new RequeteException("Problème lors de l'envoi de la requête suivante: ".$sql);
}
}
et montre moi le résultat de l'exécution
Posté : 07 mars 2007, 16:02
par jojolapine
au passage, tu as une erreur dans ta requête sql.... il y a une parenthèse de trop
Posté : 07 mars 2007, 16:05
par mere-teresa
Le pb de requête arrive-t-il sur un utilisateur précis ? Sur le premier de la boucle ? Sur tous ?
Je te conseille d'afficher à l'écran toutes les requêtes que tu cherches à faire...
Posté : 07 mars 2007, 16:19
par Tom2me
Le problème intervient dès la première boucle à la première execution de la requete
Voila j'ai fait un echo de mon expeption !
exception 'RequeteException' with message 'Probleme lors de l'envoi de la requete suivante: UPDATE `Etudiants` SET `score`=23 WHERE `login`=alan.fortune' in /poursuitetude/BD/BD.php:193 Stack trace: #0 /presentation/ajoutrang2.php(13): Bd->ajouteRang('alan.fortune', 23) #1 {main}Exception

robleme lors de l'envoi de la requete suivante: UPDATE `Etudiants` SET `score`=23 WHERE `login`=alan.fortune
Posté : 07 mars 2007, 16:27
par jojolapine
bon déja on voit qu'il y a un problème de quotes, il en manque autour du login:
$sql="UPDATE `Etudiants` SET `score`=".$rang." WHERE `login`='".$log."'";
essaye ceci, et dis nous si le problème persiste
Posté : 07 mars 2007, 16:41
par Tom2me
exception 'RequeteException' with message
'Probl譥 lors de l'envoi de la requ괥 suivante: UPDATE `Personne` SET `score`=23 WHERE `login`='alan.fortune''
in poursuitetude/BD/BD.php:193 Stack trace: #0 presentation/ajoutrang2.php(12):
Bd->ajouteRang('alan.fortune', 23) #1 {main}Exception

robl譥 lors de l'envoi de la requ괥 suivante: UPDATE `Personne` SET `score`=23 WHERE `login`='alan.fortune'
Voila ce qui est relevé
Mais techniquement il n'y aucune contrainte vis a vis de l'association du foreach et de l'update ?
Posté : 07 mars 2007, 17:15
par Tom2me
Après d'autres test il s'avère que le problème se repete avec n'importe quel type de requête (SELECT * from Personne par exemple)
Un code tel que :
Code : Tout sélectionner
foreach($Bd->listetu() as $row){
echo $row['login'];
$Bd->envoiRequete("SELECT * from Personne");
}
Ne marche pas !!!! Le problème ne vient pas de envoiRequete puisque j'utilise cette fonction dans d'autres cas ! (Cette fonction sert à envoyer une requete a executer).
On peut donc conclure que l'execution de n'importe quel requete dans une boucle du type foreach($Bd->listEtu() as $row) bug ![/code]
Posté : 07 mars 2007, 17:19
par mere-teresa
foreach($Bd->listetu() as $row)
Quel est le type de $BD->listetu() ?
Posté : 07 mars 2007, 17:20
par jojolapine
montre nous donc ta fonction listetu()
Posté : 07 mars 2007, 18:19
par Tom2me
Après encore 15000 tentatives voici l'evolution !
Code : Tout sélectionner
$Bd->connecter();
$Bd2->connecter();
foreach ($Bd->listeEtu() as $row) {
$login=$row['login'];
$var=str_replace(".","8",$login);
$nom=$row['nom'];
$prenom=$row['prenom'];
$groupe=$row['groupe'];
$rang=$_GET[$var];
echo $var."<br/>";
echo $login."<br/>";
echo $rang."<br/>";
//$Bd2->envoiRequete("UPDATE `Etudiants` SET `rang`=".$rang." WHERE `idetu`='alan.fortune';");
// $Bd2->envoiRequete("REPLACE INTO `Etudiants` (login,nom,prenom,groupe,rang) VALUES ('".$login."','".$nom."','".$prenom."',".$groupe.",".$rang.");");
$Bd2->envoiRequete("REPLACE INTO `Etudiants` (login, rang) VALUES ('".$login."',".$rang.");");
echo "ok miracle alleluia c cool<br />";
}
le résultat :
Code : Tout sélectionner
alan8fortune
alan.fortune
102
ok miracle alleluia c cool
fabie8lecler
fabie.lecler
103
exception 'RequeteException' with message 'Probleme lors de l'envoi de la requete' in /hometu/dossiersCommuns/projets/dut-info-pg11-2007/poursuitetude/BD/BD.php:40 Stack trace: #0 /hometu/dossiersCommuns/projets/dut-info-pg11-2007/poursuitetude/presentation/ajoutrang2.php(24): Bd->envoiRequete('REPLACE INTO `E...') #1 {main}Exception :Probleme lors de l'envoi de la requete