Inclure une variable dans un code mySQL

HTML BOY
Invité n'ayant pas de compte PHPfrance

12 janv. 2011, 14:42

Bonjour,
je vous présente mon problème :
J'ai une 'Base de donnée mySQL' composé de 4 colonne : achat1, achat2, act1, act2.
Et j'aimerais qu'en postant un chiffre (1 ou 2), php puisse en faire une variable puis l'inclure pour en faire un nom de colonne.
Je sais, c'est très dur à expliquer, mais vous serez plus éclairé sur mon problème une fois le code lu :mrgreen: !
if(isset($_GET['activer']))
{
$id = $_GET['activer']; //$id est en fait le chiffre entre 1 et 2 posté
foreach ($armes as $arme)
{
if($arme['id'] == $id)
{
if('1' <= $arme['variable'])
{
$nouveau_ach = $arme['variable']-1;
$nouveau_act = $arme['variableact']+1;
$act = 'act'.$id; //Ici on configure une variable qui va prendre ce chiffre et en faire : act1 ou act2
$ach = 'achat'.$id; //Ici on configure une autre variable qui va prendre ce chiffre et en faire : achat1 ou achat2
mysql_query("UPDATE game SET '$act'='$nouveau_ach' WHERE perso='$pseudo'"); //Et c'est ici où j'ai mon probleme (Aucun message d'erreur, mais aucune action)
mysql_query("UPDATE game SET '$ach'='$nouveau_act' WHERE perso='$pseudo'"); //Et là aussi, le problème est au niveaux de $ach et $act ...
header('location:jeu.php?invent');
}
break;
}
}
}
Voilà, je tiens à remercier tout ce qui se pencherons sur le sujet =D>
Si jamais vous ne comprenez pas quelque chose, dîtes le moi surtout !

ViPHP
ViPHP | 2577 Messages

12 janv. 2011, 15:23

Bonjour,

Je ne vois pas l'initialisation de $pseudo

Les variables me semble inversées :
SET '$act'='$nouveau_ach'
SET '$ach'='$nouveau_act'

De plus
- il vaut mieux tester mysql_errno() pour vérifier que tout s'est bien passé et afficher mysql_error() sinon
- après un update tu peux tester le nombre de lignes concernées (mysql_affected_row() ?)
- tu peux faire l'update avec 1 seul ordre SQL

HTML BOY
Invité n'ayant pas de compte PHPfrance

12 janv. 2011, 15:27

Ha oui, tu as raison, les variable était inversé, mais même une fois mis à l'endroit c'est toujours le même problème ...
Mais merci de ton aide :mrgreen:

HTML BOY
Invité n'ayant pas de compte PHPfrance

12 janv. 2011, 15:34

Voici le code une fois modifié :
if(isset($_GET['activer']))
{
$id = $_GET['activer']; //$id est en fait le chiffre entre 1 et 2 posté
foreach ($armes as $arme)
{
if($arme['id'] == $id)
{
if('1' <= $arme['variable'])
{
$nouveau_ach = $arme['variable']-1;
$nouveau_act = $arme['variableact']+1;
$act = 'act'.$id; //Ici on configure une variable qui va prendre ce chiffre et en faire : act1 ou act2
$ach = 'achat'.$id; //Ici on configure une autre variable qui va prendre ce chiffre et en faire : achat1 ou achat2
mysql_query("UPDATE game SET '$act'='$nouveau_act', '$ach'='$nouveau_ach' WHERE perso='$pseudo'"); //Et c'est ici où j'ai mon probleme (Aucun message d'erreur, mais aucune action) je pense que ça provient de $ach et $act
header('location:jeu.php?invent');
}
break;
}
}
}

ViPHP
ViPHP | 2577 Messages

12 janv. 2011, 15:58

Je reprends 2 des remarques :
Je ne vois pas l'initialisation de $pseudo

il vaut mieux tester mysql_errno() pour vérifier que tout s'est bien passé et afficher mysql_error() sinon

$SQL = "UPDATE game SET '$act'='$nouveau_act', '$ach'='$nouveau_ach' WHERE perso='$pseudo'");
mysql_query($SQL);
if (mysql_errno() <> 0)
{
echo $SQL;
echo mysql_error();
exit;
}

HTML BOY
Invité n'ayant pas de compte PHPfrance

12 janv. 2011, 16:41

A propos de $pseudo, il est initialisé ne t'en fait pas.
Mais pour le code que tu m'as dit d'ajouter une erreur s'affiche :

Notice: Undefined variable: SQL in C:\wamp\www\jeu php\invent.php on line 18
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''achat2'='2', 'act2'='1' WHERE perso='Irvine'' at line 1

HTML BOY
Invité n'ayant pas de compte PHPfrance

12 janv. 2011, 16:44

Oups, désolé, je me suis trompé, voici le message d'erreur qui apparait :

UPDATE game SET 'act2'='1', 'achat2'='2' WHERE perso='Irvine'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''act2'='1', 'achat2'='2' WHERE perso='Irvine'' at line 1

HTML BOY
Invité n'ayant pas de compte PHPfrance

12 janv. 2011, 16:50

Oui, j'ai trouvé, je suis trop content !
En fait il suffisait d'enlever les apostrophes :
mysql_query("UPDATE game SET '$ach'='$nouveau_ach', '$act'='$nouveau_act' WHERE perso='$pseudo'");
Et ça donné ça :
mysql_query("UPDATE game SET $ach='$nouveau_ach', $act='$nouveau_act' WHERE perso='$pseudo'");
Et tout cas, c'est grâce à ton petit code Mazarini, merci infiniment ^^

ViPHP
ViPHP | 2577 Messages

12 janv. 2011, 17:05

$SQL = "UPDATE game SET '$act'='$nouveau_act', '$ach'='$nouveau_ach' WHERE perso='$pseudo'");
$SQL = "UPDATE game SET $act='$nouveau_act', $ach='$nouveau_ach' WHERE perso='$pseudo'");

Il faut virer les ' autour des noms de variable