Requête SQL

Résolu
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

  1. 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
    1. 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. Merci ça marche !
        Pourquoi cette méthode est dangereuse ? Je découvre tout juste donc je sais pas grand chose :)
        1. 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']);
          
        2. Ah oui effectivement. Merci pour ton aide, je vais modifier tout ça. Encore merci :)