[Problème] UPDATE et Foreach

Petit nouveau ! | 8 Messages

07 mars 2007, 14:52

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 :D .

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"); } }

ViPHP
ViPHP | 3607 Messages

07 mars 2007, 15:21

et ? quel est le problème ?

Petit nouveau ! | 8 Messages

07 mars 2007, 15:31

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 !

ViPHP
ViPHP | 3607 Messages

07 mars 2007, 15:45

essaye d'afficher $log et $_POST[$log], pour voir si tout correspond bien ...

Petit nouveau ! | 8 Messages

07 mars 2007, 15:49

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 ???

ViPHP
ViPHP | 3607 Messages

07 mars 2007, 15:59

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
Modifié en dernier par jojolapine le 07 mars 2007, 16:02, modifié 1 fois.

ViPHP
ViPHP | 3607 Messages

07 mars 2007, 16:02

au passage, tu as une erreur dans ta requête sql.... il y a une parenthèse de trop

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

07 mars 2007, 16:05

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...
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Petit nouveau ! | 8 Messages

07 mars 2007, 16:19

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 :Probleme lors de l'envoi de la requete suivante: UPDATE `Etudiants` SET `score`=23 WHERE `login`=alan.fortune
Modifié en dernier par Tom2me le 07 mars 2007, 16:59, modifié 1 fois.

ViPHP
ViPHP | 3607 Messages

07 mars 2007, 16:27

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

Petit nouveau ! | 8 Messages

07 mars 2007, 16:41

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 :Probl譥 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 ?

Petit nouveau ! | 8 Messages

07 mars 2007, 17:15

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]

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

07 mars 2007, 17:19

foreach($Bd->listetu() as $row)
Quel est le type de $BD->listetu() ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
ViPHP | 3607 Messages

07 mars 2007, 17:20

montre nous donc ta fonction listetu()

Petit nouveau ! | 8 Messages

07 mars 2007, 18:19

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