[RESOLU] erreur syntaxe

Eléphanteau du PHP | 12 Messages

22 oct. 2013, 16:11

Bonjour,

Quelqu'un peut il m'aider à résoudre ce problème
$index='N° '.$_POST['num_timbre'];

// lecture de la table 
   		$sql= 'DELETE FROM '.$_SESSION['chemin_collec'].' WHERE yvert='.$index;
   		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

Voici l'erreur

N° 999999Erreur SQL !
DELETE FROM timbresdefrance_collections.mich WHERE yvert=N° 999999
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 '° 999999' at line 1

La table comporte bien la colonne "yvert" avec le texte "N° 999999"

Merci

Mammouth du PHP | 504 Messages

22 oct. 2013, 16:19

Slt,
$sql= "DELETE FROM '".$_SESSION['chemin_collec']."' WHERE yvert= '".$index."'";

Eléphanteau du PHP | 12 Messages

22 oct. 2013, 17:47

Désolé, ça ne marche pas j'ai toujours la même erreur

N° 999999Erreur SQL !
DELETE FROM 'timbresdefrance_collections.mich ' WHERE yvert= 'N° 999999'
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 ''timbresdefrance_collections.mich ' WHERE yvert= 'N° 999999'' at line 1

Eléphant du PHP | 170 Messages

22 oct. 2013, 18:00

Salut,

une autre :
$sql= "DELETE FROM ".$_SESSION['chemin_collec']." WHERE yvert='".$index."'";
on va y arriver :)

ViPHP
xTG
ViPHP | 7331 Messages

22 oct. 2013, 18:28

$sql= "DELETE * FROM ". mysql_real_escape_string($_SESSION['chemin_collec']) ." WHERE yvert='". mysql_real_escape_string($index) ."'";
;)

Toujours protéger les variables injectées dans une requête SQL.
Sinon c'est la porte ouverte au malheur.

Eléphanteau du PHP | 12 Messages

22 oct. 2013, 19:52

celle-ci fonctionne !!
$sql= "DELETE FROM ".$_SESSION['chemin_collec']." WHERE yvert='".$index."'";
Toujours pas compris pourquoi ?

ViPHP
xTG
ViPHP | 7331 Messages

22 oct. 2013, 20:05

Hum je pensais le * obligatoire mais à lire la doc mysql ce n'est pas le cas...
La différence fondamentale vient de la protection de la variable injectée pour le nom de table.
Si tu regardes ton message d'erreur on y voit un espace à la fin.

Eléphant du PHP | 170 Messages

22 oct. 2013, 20:11

Toujours pas compris pourquoi ?
le champ `yvert` est une chaine de caractères et doit être encadré par des simples cotes, ce que tu n'avais pas fait.

Par contre prends bien en compte la remarque de xTG sur les injections SQL

EDIT: j'avais pas vu la réponse de xTG, mais on est pas d'accord. ( et j'ai raison :) )
EDIT 2 : on est pas d'accord parce que xTG est sur la code de damien_55 et moi sur le tien. (donc j'ai rien dit)