Insérer un texte dans une BDD en PHP

Résolu
XecK Messages postés 405 Statut Membre -  
rjl Messages postés 591 Statut Membre -
Bonjour,
je cherche à insérer un texte dans un base de donnée, pour cela, j'utilise une fonction PHP :
$result = $bdd->exec('INSERT INTO Commentaire values (default,\''.$pseudo.'\',\''.$texte.'\',current_date,current_time(0))');

Pour gérer les accents, j'utilise utf8_decode sur les deux variables, mais si l'une des deux contient une côte/apostrophe : la requête ne fonctionne pas.
Une idée ?

6 réponses

  1. XecK Messages postés 405 Statut Membre 56
     
    up
    0
  2. XecK Messages postés 405 Statut Membre 56
     
    up2
    0
  3. XecK Messages postés 405 Statut Membre 56
     
    up3
    0
  4. rjl Messages postés 591 Statut Membre 49
     
    Bonsoir,
    Je ne suis que débutant mais l'absence de réponse m'incite à faire une ou deux observations :
    Je suis surpris du nombre de quote et apostrophes... Doivent-elles être appareillées (une quote pour une quote et des apostrophes se répondant aux bons endroits ?
    J'ai cru comprendre qu'en temps normal cette INSERT fonctionnait (en l'absence de " ou ' dans les variables) ;
    Ainsi, (default,\''.$pseudo.'\',\''.$texte.'\',current_date,current_time(0))');
    C'est une bonne chose car entre les apostrophes echappée ou non, la lecture n'est pas facile ?
    Je ne connaissait pas la fonction UTF8_decode() et à vrai dire me serait perso plus intéresssé à UTF8_encode() pour passer en utf8 !
    Pour autant, je suis allé sur le net et j'ai trouvé un message publié chez alsacreation qui traite de la fonction UTF8_decode() et du maintient des apostrophes... Peut-être une piste intéressante ? Je te laisse poursuivre car tu es à l'évidence plus pointu que moi.
    Bonne chance... RJL2721

    UTF8_decode() pour afficher de l'UTF8 - Alsacreations

    forum.alsacreations.com/topic-17-59722-1-UTF8decode-pour-affich...

    9 messages - 3 auteurs - 12 janv.
    -Après utilisation de utf8_decode tous les caractères accentués sont bien affichés mais pas les "oe" de oeuf par exemple et les apostrophes.
    0
    1. XecK Messages postés 405 Statut Membre 56
       
      En fait, j'ai mis autant de côtes car : il faut que les variables soient entre côtes : \'XXX\'
      Mais il faut dire au langage qu'il s'agit d'une variable et non pas d'une chaîne : '.$xxx.'
      Ce qui donne au total : \''.$xxx.'\'
      Si on peut faire plus simple, je suis preneur, mais là n'est pas la question.
      Il me faut en fait une fonction PHP qui prenne une variable, et renvoie une transformation : tout les ' deviennent \'\'
      Je cherche aussi une fonction qui transforme les retour-chariots en balise <br />
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rjl Messages postés 591 Statut Membre 49
     
    J'insiste (sans doute bêtement !).
    Mon observation principale portait sur la fonction UTF8_decode().
    Tu dis l'utiliser pour deux variables, mais si l'une des deux contient une quote ou apostrophe : la requête ne fonctionne pas !
    Par cette fonction, vérifie que l'apostrophe ne devienne pas un point d'interrogation ?
    je cite "http://www.cylman.com/php-probleme-avec-le-caractere-apostrophe-arrondie-transforme-en-point-interrogation-par-utf8-decode_qr17.html" :
    Problème avec le caractère ' apostrophe (arrondie) transformé en ? par utf8_decode

    Le caractère ' est un caractère unicode sur 3 bits qui n'a pas d'équivalent en ISO-8859. Il est parfois associé sur les claviers à la touche Shif-4, que les rédacteurs utilisent. Lorsque les données sont stockées en utf8 cela ne pose aucun problème. Mais pour les afficher en ISO-8859, la fonction utf8_decode le remplace par un joli ?

    Il faut utiliser iconv qui convertira avec l'élément équivalent.

    Par exemple :
    function cleanText($intext) {
    $intext=str_replace('<![CDATA[','',$intext);
    $intext=str_replace(']]>','',$intext);
    if (function_exists('iconv')) {
    $intext = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $intext);
    }
    if(detectUTF8($intext))
    return "".purge_iso88591(utf8_decode($intext))."";
    else
    return "".purge_iso88591($intext)."";
    }

    A tout hasard ! RJL2722
    0
    1. XecK Messages postés 405 Statut Membre 56
       
      Je comprend, mais je trouve ça plutôt étrange puisque après l'utilisation d'utf8_decode, soit ça marche parfaitement, doit il y a une apostrophe et le script s'arrête... Or je peut mettre des ? donc mes variables et cela marche tout de même...
      Ceci étant dis, ton exemple str_replace que je vais utiliser je pense : j'avais oublier l'existence de cette fonction mais ce sera parfais dans mon cas...
      Je te remercie donc chaleureusement.
      0
    2. XecK Messages postés 405 Statut Membre 56
       
      Au final, j'ai juste sorti mes variables de ma requête :

      $result = $bdd->prepare('INSERT INTO Commentaire values (default, :pseudo , :texte ,current_date,current_time(0))');
      $result->execute(array('pseudo' => $pseudo,'texte' => $texte));

      Mais il ne faut pas oublier les espaces autour de :pseudo et :texte, sinon ça marche pas (j'avais fais comme ça à l'origine)
      0
  7. rjl Messages postés 591 Statut Membre 49
     
    Donc le problème est réglé... ce qui est l'essentiel.
    Merci d'avoir communiqué le pourquoi et la correction
    RJL2723
    0