Aller au contenu

Erreur dans la syntaxe SQL


Etamine

Messages recommandés

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Et oui c'est encore moi :o°

Merci de lire mon message...

Donc après avoir résolu le problème de connexion et d'inscription sur mon jeu grâce à vous :o° , je suis face à un autre problème :rtfm:

Je veux améliorer les caractéristique d'un joueur. Suite à un formulaire qui redirige vers cette page:

<?php 
//connexion à infoscompte.
@mysql_connect("localhost","root","")
  or die("Impossible de se connecter à la base de données.");
@mysql_select_db("jeu")
  or die("Impossible de se connecter à la base de données.");
  $req = mysql_query("SELECT * FROM infoscompte WHERE login='".$_SESSION['pseudo']."'") or die(mysql_error());
  $data = mysql_fetch_array($req);
//connexion à joueurs.	  
  $req = mysql_query("SELECT * FROM joueurs WHERE pseudo='".$_SESSION['pseudo']."'") or die(mysql_error());
  $data = mysql_fetch_array($req);

$piece=$data['piece'];
if ($piece-1000>=0)
{

$force=$data['force'];
$force=$force+=1;
$piece=$piece-=1000;

$sql="UPDATE  joueurs SET force='".$force."', piece= '".$piece."' WHERE pseudo='".$_SESSION['pseudo']."'"; 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());  

}
else
{}

header('Location: Accueil.php');
?>

...Je tombe sur cette erreur : 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 'force='2', piece= '0' WHERE pseudo='Aethanor'' at line 1

Apparemment j'ai une erreur dans ma syntaxe... Oui mais où? Et quelle serait la bonne syntaxe?

Merci d'avance pour vos réponses :yahoo:

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, 35ans Posté(e)
Zilex Membre 91 messages
Baby Forumeur‚ 35ans‚
Posté(e)

Essai en enlevant les simples quotes autour des variables de type int (force et piece ici).

$sql="UPDATE  joueurs SET force=".$force.", piece= ".$piece." WHERE pseudo='".$_SESSION['pseudo']."'";

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

J'ai essayé. éa ne change rien. Mais l'erreur doit bien venir de cette ligne. :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 35ans Posté(e)
Zilex Membre 91 messages
Baby Forumeur‚ 35ans‚
Posté(e)
WHERE pseudo='Aethanor'' at line 1

Il y un petit soucis entre les simples quotes et les doubles quotes, ton pseudo contient une apostrophe ?

WHERE pseudo='".addslashes($_SESSION['pseudo'])."'";

?

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Non. Et dans ce cas ça me mettrait une parse error non?

Effectivement. Je me demande pourquoi ça met ça. J'ai vérifié mon code mais je n'ai rien trouvé.

Lien à poster
Partager sur d’autres sites

Membre, 35ans Posté(e)
Zilex Membre 91 messages
Baby Forumeur‚ 35ans‚
Posté(e)

Nop l'erreur est au niveau de la requette pas de php.

Ta chaine en php est délimitée par les double quote (""), donc il peux y avoir autant de simple quote que tu veux (' '). Par contre ta chaine dans la requette sql est délimitée par les sq donc si ta variable php en a aussi ca coince.

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Quand tu parles de la variable php, tu parles du nom du joueur? Parce que dans ce cas là je vois pas pourquoi. Il y a aucun sq dedans.

Lien à poster
Partager sur d’autres sites

Membre, 35ans Posté(e)
Zilex Membre 91 messages
Baby Forumeur‚ 35ans‚
Posté(e)

Oui je parle de ta variable de Session.

test au pire :

echo $_SESSION['pseudo'];

et tu seras fixé :rtfm:

Sinon je ne vois pas comme ca.

Lien à poster
Partager sur d’autres sites

Membre, 36ans Posté(e)
Petisuis Membre 312 messages
Baby Forumeur‚ 36ans‚
Posté(e)

Utilise des doubles quote au lieu des simples quote.

$sql='UPDATE joueurs SET force="'.$force.'", piece= "'.$piece.'" WHERE pseudo="'.$_SESSION['pseudo'].'"';

mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

Ca te fera en plus gagner quelques millièmes de secondes sur ton code :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

J'ai mis ça:

$sql="UPDATE  joueurs SET force=".$force.", piece= ".$piece." WHERE pseudo=".$_SESSION['pseudo'].""; 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

Mais ça ne marche pas. :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 36ans Posté(e)
Petisuis Membre 312 messages
Baby Forumeur‚ 36ans‚
Posté(e)

Ah ouais là ça risque de pas marcher :rtfm:

Essaie ma requête.

Et si ça marche pas, essaie celle-ci :

$sql='UPDATE joueurs SET force='.$force.', piece='.$piece.' WHERE pseudo="'.$_SESSION['pseudo'].'"';

mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

Lien à poster
Partager sur d’autres sites

Membre, 35ans Posté(e)
Zilex Membre 91 messages
Baby Forumeur‚ 35ans‚
Posté(e)

Honte a nous, force est un mot clé sql !!!

Il te faut renommer ton champs dans ta table, rien de plus !

J'ai fait mon test de mon coté et ca a marché :

<?php

@mysql_connect("localhost","root","");
@mysql_select_db("testdivers");

$piece=5;
$force=3;
$pseudo = "Aethanor";
$sql="UPDATE joueurs SET [u][b]force2[/b][/u]=".$force.", piece= ".$piece." WHERE pseudo='".$pseudo."';";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());  

echo "cool ! ";

?>

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Aucune des deux ne marche :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 36ans Posté(e)
Petisuis Membre 312 messages
Baby Forumeur‚ 36ans‚
Posté(e)

Sans renommer le champ, si force est un mot-clé, remplace :

force

par

`force`

(les guillemets accessibles par Alt Gr + 7)

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Oui ça marche merci beaucoup!!

J'aurais du m'en douter parce que j'avais déjà renommé le champ piece qui était 'or' avant^^

Merci a tous pour votre aide :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, 35ans Posté(e)
Zilex Membre 91 messages
Baby Forumeur‚ 35ans‚
Posté(e)

Ca je connaissais pas :rtfm:

Honte a nous (au moins a moi) de pas avoir vu ca !

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×