Requête SQL

Résolu
franck7801 -  
 franck7801 -
Bonjour,

J'ai crée un formulaire d'ajout d'articles, mais j'ai un petit problème. Lorsque dans ma partie contenu il y a un mot avec une apostrophe, la requête ne s'exécute pas a cause de l'apostrophe. Voici mon code d'ajout.


extract($_POST);
$sql = "INSERT INTO test(titre,contenu) VALUES ('$titre','$contenu')";
$req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

J'ai déjà essayé sans les apostrophes et tout fonctionnent à merveille.

Merci pour votre aide !


3 réponses

Utilisateur anonyme
 
Bonjour

C'est normal que ça ne marche pas avec une apostrophe. L'apostrophe sert à délimiter les valeurs que tu mets dans VALUES.

Pour éviter ça, il faut "échapper" les apostrophes (et autres caractères spéciaux, d'ailleurs) avant d'insérer tes données dans ta requête :

extract($_POST);  // très dangereux....
$titre = mysql_real_escape_string($titre);
$contenu = mysql_real_escape_string($contenu);
$sql = "INSERT INTO test(titre,contenu) VALUES ('$titre','$contenu')";
$req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
1
Utilisateur anonyme
 
Bonjour, je vais répondre mais je suis pas sur de mon coups...moi je ferais cela

je transformerais la string en tableau et avec une boucle je chercherais l'apostrophe. Si il y en as un j'insérerais un \ pour l'échapper.

j 'espère que cela peut vous aider

bonne journée
0
franck7801
 
Merci ça marche !
Pourquoi cette méthode est dangereuse ? Je découvre tout juste donc je sais pas grand chose :)
0
Utilisateur anonyme
 
le extract($_POST) est dangereux car il crée des variables dans ton programme en dehors de ton contrôle. Il est très facile de modifier un formulaire et de l'envoyer à ton script.
Si j'ajoute dans le formulaire un champ que j'appelle 'admin' et auquel je donne la valeur 1, ça va créer dans ton programme une variable $admin qui vaudra 1. Tu imagines les possibilités ?

Il est nettement préférable d'extraire soi-même une par une les variables auxquelles on s'attend :
$titre = mysql_real_escape_string($_POST['titre']);
$contenu = mysql_real_escape_string($_POST['contenu']);
0
franck7801
 
Ah oui effectivement. Merci pour ton aide, je vais modifier tout ça. Encore merci :)
0