Page 1 sur 1

update dans 2 tables?

Posté : 07 mai 2007, 22:47
par YVES
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();
?>

Posté : 07 mai 2007, 22:55
par oox
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.

Posté : 07 mai 2007, 23:26
par Sékiltoyai
Une erreur ?
Laquelle marche, laquelle ne marche pas ?
Les noms sont-ils les noms réels ?

Posté : 08 mai 2007, 19:20
par YVES
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.

Posté : 08 mai 2007, 23:30
par Sékiltoyai
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 ?

Posté : 09 mai 2007, 10:56
par Ryle
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)

Posté : 09 mai 2007, 11:59
par Jules Petibidon
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'

Posté : 09 mai 2007, 21:18
par YVES
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 :?