PHP/SQL $_POST dans un INSERT INTO

Résolu
Bonjour,
J'essaie de faire fonctionner ce code mais je n'y arrive pas..

$bdd->exec('INSERT INTO comment(comment) VALUES($_POST['comment']) ');

J'espère que vous pourrez m'aider.

Merci d'avance

Bonne journée

7 réponses

Résumé de la discussion

Le problème porte sur l’exécution d’un INSERT en PHP utilisant $_POST['comment'], l’instruction INSERT INTO comment(comment) VALUES($_POST['comment']) provoquant des erreurs de syntaxe et un parse error. Plusieurs réponses insistent sur la nécessité d’entourer la valeur de $_POST['comment'] de guillemets dans la requête ou d’employer une concaténation correcte pour former une chaîne SQL valide. Des conseils mentionnent aussi l’usage des guillemets simples autour de la concaténation, ou l’adoption de requêtes préparées avec liaison de paramètres, afin d’éviter les erreurs de syntaxe et les injections. D’autres éléments évoquent des erreurs de syntaxe liées à des guillemets manquants ou à une mauvaise gestion de la concaténation, ce qui peut expliquer les messages d’erreur affichés.

Bobot (l’IA à votre service)
  1. oui si je fait echo $_POST['comment'] sa affiche.

    L'erreur de la page avec le INSERT INTO c'est:

    Parse error: syntax error, unexpected T_STRING in /data/web/5/1/monsite.org/htdocs/comment.php on line 22

    La ligne 22 donc la ligne oú il y a le INSERT INTO.
    1
    1. Salut,

      si $_POST['comment'] est une string, ne pas oublier les guillemets !

       $bdd->exec('INSERT INTO comment(comment) VALUES \'.$_POST['comment'].'\' '); 
      1
      1. Questin débile:

        Pourquoi tu met des points \'.$_POST['comment'].'\
        0
      2. Pour la concaténation de strings.

        C'est comme ça qu'elle se fait en php.
        0
      3. Da'illeurs il manque un guillemet :

         $bdd->exec('INSERT INTO comment(comment) VALUES \' '.$_POST['comment'].'\' ');
        0
      4. Sa me met tjr la même erreur T_T
        0
      5. Il manquait un guillemet ;)
        0
    2. il y a bien une valeur dans ton POST ?
      0
      1. tu t'es trompé dans tes cotes, c'est un double guillemet qu'il faut :

        $bdd->exec("INSERT INTO comment(comment) VALUES($_POST['comment']) ");
        0
        1. Avec les double guillemets j'ai:
          Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /data/henry/web/5/1/buddhashop.toile-libre.org/htdocs/comment.php on line 22
          0
          1. et si tu vire le POST de ta requête en remplaçant par une autre variable ?
            $lala = 'lala';
            $bdd->exec("INSERT INTO comment(comment) VALUES($lala) ");  
            0
          2. Tu veux dire quelque chose comme ça?

            $temp = $_POST['comment'];
            $bdd->exec("INSERT INTO comment(comment, date) VALUES($temp, NOW()) ");
            0
          3. oui, par exemple, mais si ça ne marche pas, essaye avec une variable définie "normalement" ($lala = 'lala')
            0
          4. ça sa ne marche pas..

            $temp = $_POST['comment'];
            $bdd->exec("INSERT INTO comment(comment, date) VALUES($temp, NOW()) ");
            0
        2. Merci beaucoup pour toutes les réponses.

          Une autre idée? Parce que jusque là rien ne fonctionne..
          0
          1. $Requete = ('INSERT INTO comment(comment) VALUES \'.$_POST['comment'].'\' ');  
            
            echo $Requete;
            exit;


            Je veux juste voir ce que contient réellement la requete. Pas besoin d 'aller au bout du script.
            0
          2. Quand je met ton code j'obtient ça.

            Parse error: syntax error, unexpected T_STRING in /data/henry/web/5/1/buddhashop.toile-libre.org/htdocs/comment.php on line 22
            0
          3. Le code est bien sur la page comment.php ?

            L'erreur est située ailleurs, et je pense même sur une autre page...

            A quelle ligne est située le exit ?

            Si avant 22, alors c'est sur que l'erreur est sur une autre page (sur la page comment.php par exemple ?). Sinon, c'est possible que ce soit ailleurs.

            Utilise les exit, echo, print_r pour situer précisément un bug dont tu n'arrives pas à déterminer sa provenance.
            0
          4. Le code est bien sur la page comment.php ?
            OUI

            L'erreur est située ailleurs, et je pense même sur une autre page...
            non

            A quelle ligne est située le exit ?
            24

            Si avant 22, alors c'est sur que l'erreur est sur une autre page (sur la page comment.php par exemple ?). Sinon, c'est possible que ce soit ailleurs.
            L'erreur est sur la page comment.php

            Utilise les exit, echo, print_r pour situer précisément un bug dont tu n'arrives pas à déterminer sa provenance.

            L'erreur vient précisément du $_POST['comment'] car si je met autre chose que ça, par exemple \'test mot\' ,ça marche.
            0
          5. Utilises tu les exceptions avec PDO ?

            Essaye ceci (mais j'aime pas parce que pas propre ) :

             $bdd->exec("INSERT INTO comment(comment) VALUES  '$_POST['comment']\' ");
            0
        3. Hello,
          J'ai denouveau le même problème avec le WHERE.

          Mon code:

          $reponse = $bdd->query('SELECT user, password FROM compte WHERE user= :user');
          $prep->bindValue(':user', $_POST['user'], PDO::PARAM_STR);
          $donnees = $reponse->fetch();
          if($_POST['password'] == $donnees['password']){
          echo 'test';
          }
          0