Erreur SQL

Tonyloup35
Invité n'ayant pas de compte PHPfrance

25 févr. 2010, 22:15

Bonjour à tous!!

J'ai mis en ligne un catalogue de présentation de produits, avec image description et titre.
Seulement quand je veux modifier une entrée, une erreur sql s'affiche quand je la soumet.

La voici:

Code : Tout sélectionner

Erreur SQL ! UPDATE catalogue SET titre='Premier produit informatique', prix='200', visibilite='oui', type='Decoration', description='' WHERE id= 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 '' at line 1
Pourtant sur mon pc (wamp), ça fonctionne très bien.

Voici mon code:
if(!empty($_POST)){
extract ($_POST);
$ip=$_SERVER["SERVER_ADDR"];
$description=addslashes($description);
$titre=addslashes($titre);
$nom=addslashes($nom);
if ($nom == ""){
$sql="UPDATE catalogue SET titre='$titre', prix='$prix', visibilite='$visibilite', type='$type', description='$description' WHERE id={$_POST['id']}";
}
else{
$sql="UPDATE catalogue SET titre='$titre', prix='$prix', nom='$nom', visibilite='$visibilite', type='$type', description='$description' WHERE id={$_POST['id']}";
}
mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
header("Location: index.php");
}
En espérant que quelqu'un puisse me donner une réponse.

Merci beaucoup

ViPHP
ViPHP | 5462 Messages

25 févr. 2010, 22:33

il trouve pas ton "id"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 févr. 2010, 00:35

Au cas où le message de stealth35 ne soit pas suffisamment clair (sic), si tu regardes le message d'erreur, tu pourras voir la requête qu'il a exécuté. Et, dans cette requête, à la fin, dans le WHERE, l'id n'est pas présent.

Cela signifie que lors de la construction de ta requête, l'id n'a pas été ajouté.
Le gros conseil que je te donne, c'est d'utiliser une vrai concaténation pour construire tes requêtes, voir mieux encore, les masques d'interprétations :
// pas bien
$sql="UPDATE catalogue SET titre='$titre', prix='$prix', visibilite='$visibilite', type='$type', description='$description' WHERE id={$_POST['id']}";

// mieux
$sql='UPDATE catalogue SET titre="'.$titre.'", prix="'.$prix.'", visibilite="'.$visibilite.'", type="'.$type.'", description="'.$description.'" WHERE id='.$_POST['id'];

// encore mieux. Je te laisse consulter la doc de sprintf pour comprendre comment marche cette fonction
$sql = sprintf("UPDATE catalogue SET titre='%s', prix='%s', visibilite='%s', type='%s', description='%s WHERE id=%s",
    $titre, $prix, $visibilite, $type, $description, $_POST['id']);
C'est vrai que PHP propose de parser le contenu des chaines encadrées par des ", mais non seulement, c'est lourd en temps d'exécution, mais en plus, tu as des soucis d'interprétation, comme dans le cas présent.

Ah, oui, et au fait, dernière chose, quand on a un soucis avec une requête SQL générée en PHP, la 1ère étape pour débugger, c'est de faire afficher cette requête
echo $sql
et d'essayer de l'exécuter depuis PhpMyAdmin, pour voir si ça viens réellement du SQL.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Tonyloup35
Invité n'ayant pas de compte PHPfrance

26 févr. 2010, 13:33

Merci pour vos réponses!!

J'ai réussi à corriger l'erreur!!

Bonne continuation

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 févr. 2010, 14:20

Modération :
Puisque ta question est résolue, je l'indique en ajoutant la petite icône verte "Résolu" pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.

TTu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente, si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer