update dans 2 tables?

Eléphant du PHP | 250 Messages

07 mai 2007, 22:47

Bonsoir, je n'arrive pas à effectuer un update dans 2 tables différentes....
Les champs sont les memes dans les deux tables.
(le code qui suit est volontairement épuré)
$rsa = "UPDATE membres SET blabla = test WHERE id = " . $id .";"; 
mysql_query($rsa) or die('Erreur SQL '.$rsa.'<br>'.mysql_error());
if($rsa){
                    $_SESSION['blabla']=' test';
  }
$rsb = "UPDATE blabla SET blabla = test  WHERE id = " . $id .";"; 
mysql_query($rsb) or die('Erreur SQL '.$rsb.'<br>'.mysql_error());
header("Location: page_membre.htm");
 mysql_close();
?>

oox
Invité n'ayant pas de compte PHPfrance

07 mai 2007, 22:55

Peut être ça ne te convient pas, mais tu n'as pas d'autres choix ... Sauf si ce n'est revoir ton MCD car pour te trouver dans une telle situation, il y a de fortes chances que ta base soit mal conçue.

ViPHP
ViPHP | 5924 Messages

07 mai 2007, 23:26

Une erreur ?
Laquelle marche, laquelle ne marche pas ?
Les noms sont-ils les noms réels ?

Eléphant du PHP | 250 Messages

08 mai 2007, 19:20

voici le "vrai" code, le premier update s'effectue mais pas le second:
$rsa = "UPDATE membres SET billet= billet-500, vehicule= 'cheval', img_vehicule='./vehicule/cheval.gif', 
etat_vehicule='vide', img_etatvehicule='images/jetonvert.gif', posx_vehicule=posx, posy_vehicule=posy, ptdep=2,
exp=exp+0.1, mp='Vous avez acheté un cheval' WHERE id = " . $id .";"; 
mysql_query($rsa) or die('Erreur SQL '.$rsa.'<br>'.mysql_error());
if($rsa){
                    $_SESSION['billet']= $_SESSION['billet']-500;
                    $_SESSION['vehicule']= 'cheval';
                    $_SESSION['img_vehicule']= './vehicule/cheval.gif';
                    $_SESSION['etat_vehicule']= 'vide';
                    $_SESSION['img_etatvehicule']= './images/jetonvert.gif';
				    $_SESSION['posx_vehicule']= $_SESSION['posx'];
				    $_SESSION['posy_vehicule']= $_SESSION['posy'];
				    $_SESSION['ptdep']= '2';
                    $_SESSION['exp']= $_SESSION['exp']+0.1;
                    $_SESSION['mp']= 'Vous avez acheté un cheval';
			   }
$rsb = "UPDATE vehicule SET vehicule= 'cheval', img_vehicule='./vehicule/cheval.gif', etat_vehicule='vide', img_etatvehicule='images/jetonvert.gif',
posx_vehicule='$posx', posy_vehicule='$posy', ptdep=2 WHERE id = " . $id .";"; 
mysql_query($rsb) or die('Erreur SQL '.$rsb.'<br>'.mysql_error());
header("Location: son_achat.htm");
 mysql_close();
?>
Je pense qu'avec une seule requète cela doit etre faisable, j'ai testé avec UNION et JOIN mais sans succès.

ViPHP
ViPHP | 5924 Messages

08 mai 2007, 23:30

Dans la mesure où les 2 tables semblent avoir l'identifiant en commun, c'est surtout je pense le shéma de tes tables qui cloche un peu.
Tu ne peux pas fusionner les 2 tables ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 mai 2007, 10:56

Pas bien compris la question, mais dans tous les cas, tu es obligé de faire un update par table.

Sinon, tu dois avoir un message d'erreur sur ta première requête (et nous le donner aurait été une bonne idée ;)) car si la structure des tables est identique (outre le fait que tu ne devrais effectivement pas avoir deux tables dans ce cas et que la conception est à revoir) il est peu probable que ceci soit juste :
$rsa = "UPDATE ... posx_vehicule=posx, posy_vehicule=posy ... "; 
Manque les apostrophes, les $ des variables, sortir les variables de la chaine, de plus tu as un ";" en trop à la fin de ta requête (idem pour la seconde ceci dit)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 259 Messages

09 mai 2007, 11:59

hello,

si mes souvenirs sont bons, tu peux updater deux tables en meme temps tout simplement comme ca :

UPDATE table1, table2 SET table1.champ='valeur', table2.champ='valeur' WHERE table1.champ=table2.champ AND table2.champ='valeur'

Eléphant du PHP | 250 Messages

09 mai 2007, 21:18

Je retiens la soluce de Jules et la testerai, sinon, j'ai résolu (betement) mon pb, à savoir que l'id de la table véhicule n'était pas défini :oops: donc le second update ne fonctionnait pas!
Ryle, je vais réécrire le code plus proprement mais il fonctionne tout de meme :?