Forum Programmation.php Insertion Mysql

Posté par  .
Étiquettes : aucune
0
19
avr.
2005
Bonjour à tous,
Je souhaite intégrer des données de façon automatiques dans ma base de donnée Mysql, et j'ai une erreur car mes données contiennent du texte donc des quotes (simples et/ou double...)
Voila la ligne d'insert :
$requete1="insert into truc ( `id` , `nom` , `description` , `qte` , `prix` , `prixf` , `marque` , `url` , `img` , `famille` ) values ('$col1','$col2','$col3','$col4','$col5','$col6','$col7','$col8','$col9','$col10') ";
Et il plante lorsque je veux insérer par exemple :
Bonjour, je m'appel blabla..."
A cause du ' je pense.
Alors A L'AIDE !!!
Merci à tous.
  • # '".$val."'

    Posté par  . Évalué à 1.

    et "INSERT INTO truc ( `id` , `nom` , `description` , `qte` , `prix` , `prixf` , `marque` , `url` , `img` , `famille` ) VALUES ('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."','".$col6."','".$col7."','".$col8."','".$col9."','".$col10') "; ca fonctionne pas non plus ?
    le truc que tu insères à quel type de donnée ?
    varchar ? text ? autre chose ?
    • [^] # Re: '".$val."'

      Posté par  . Évalué à 1.

      Non hélas je l'avais essayé avant mais ça ne fonctionne pas nom plus :(
      Mes données sont soit de type text soit varchar !
  • # Un indice

    Posté par  . Évalué à 2.

    • [^] # Re: Un indice

      Posté par  . Évalué à 0.

      Euh...
      Je ne vois pas comment l'utiliser dans mon cas ?!
      Ce que je veux c juste pouvoir mettre dans mes données text ou varchar du blabla avec des quotes et autres caractéres spéciaux sans que sa pose pb !
      • [^] # Re: Un indice

        Posté par  . Évalué à 1.

        Je te conseille de l'utiliser strictement comme dans l'exemple 1, l'exemple 2 ou même l'exemple 3 (sauf qu'il s'agit de SELECT et pas d'INSERT, mais c'est exactement le même problème que celui que tu décris)
        • [^] # Re: Un indice

          Posté par  . Évalué à 1.

          Salut...
          en fait, je crois qu'il faut que tu mettes 2 ' de suite au lieu d'un seul.
          en PHP, ca donne quelque chose comme ca :
          $var = str_replace("'", "''", $var);

          remplacement de ' par '' (2 ')
        • [^] # Re: Un indice

          Posté par  . Évalué à 1.

          Voila ce que j'ai fait, sa ne marche pas !

          $requete= "insert into truc (id, nom, description, qte, prix, prixf, marque, url, img, famille) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', quote_smart($col1), quote_smart($col2), quote_smart($col3), quote_smart($col4), quote_smart($col5), quote_smart($col6), quote_smart($col7), quote_smart($col8), quote_smart($col9, quote_smart($col10)) ";

          Et voila l'erreur générée :

          erreur d'interrogation de la base, You have an error in your SQL syntax near '(GU00448), quote_smart(Bla bla-bla), quote_smart(Retrouvez les enfi' at line 1

          HELP ;)
          • [^] # Re: Un indice

            Posté par  . Évalué à 2.

            echo $requete;

            et affiche nous ce que ca donne :o
            • [^] # Re: Un indice

              Posté par  . Évalué à 0.

              c bon en fait !!!
              J'ai utilisé le remplacement d'un ' par 2' et sa marche nickel !!!
              Merci à tous !
              • [^] # Re: Un indice

                Posté par  (site web personnel) . Évalué à 1.

                Hmmm ... ça fait bien gruik quand même.

                Une solution plus propre serait re reprendre la chaîne insert proposée par nicodache (1er post), et de remplacer les $colX par des mysql_real_escape_string($colX), comme l'a si bien indiqué Olivier.
          • [^] # Re: Un indice

            Posté par  . Évalué à 0.

            Il te faudrait concaténer le résultat de la fonction quote_smart avec la chaine que forme ta requête. i.e. :

            $requete= "insert into truc (id, nom, description, qte, prix, prixf, marque, url, img, famille) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', ".quote_smart($col1).", ".quote_smart($col2)." etc. ...

            et si la valeur à insérer est du type chaine de caractères, n'oublie pas les quotes :

            '".quote_smart($col1)."' pour chaque occurrence.
  • # addslashes()

    Posté par  . Évalué à 1.

    Je te conseille d'utiliser la fonction addslashes pour chacune des chaines que tu comptes insérer :
    http://fr2.php.net/manual/fr/function.addslashes.php(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.