Requête SQL

Résolu/Fermé
franck7801 - Modifié par franck7801 le 29/05/2013 à 16:10
 franck7801 - 29 mai 2013 à 17:02
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
29 mai 2013 à 16:18
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
29 mai 2013 à 16:14
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
Merci ça marche !
Pourquoi cette méthode est dangereuse ? Je découvre tout juste donc je sais pas grand chose :)
0
Utilisateur anonyme
29 mai 2013 à 16:57
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
Ah oui effectivement. Merci pour ton aide, je vais modifier tout ça. Encore merci :)
0