Insérer un texte dans une BDD en PHP

Résolu/Fermé
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 - 21 juil. 2012 à 14:33
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 - 23 juil. 2012 à 09:30
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

XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
21 juil. 2012 à 15:52
up
0
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
21 juil. 2012 à 18:21
up2
0
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
21 juil. 2012 à 20:49
up3
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
21 juil. 2012 à 22:35
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
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
21 juil. 2012 à 23:41
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
22 juil. 2012 à 14:31
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
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
Modifié par XecK le 22/07/2012 à 14:54
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
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
22 juil. 2012 à 15:25
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
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
23 juil. 2012 à 09:30
Donc le problème est réglé... ce qui est l'essentiel.
Merci d'avoir communiqué le pourquoi et la correction
RJL2723
0