Enregistrement avec PDO

Fermé
Mike - Modifié par Mike le 12/06/2014 à 11:25
 Mike - 12 juin 2014 à 12:16
Bonjour à tous !

Je suis face à un problème plutôt agaçant, j'utilisais mysqli pour faire mes enregistrements, mais pour faire plus propre, je suis passé à PDO.

Mon soucis :
Afin de permettre la modification du contenu d'une page web, j'utilise TinyMCE pour éditer mes pages et j'enregistre le contenu dans ma BDD.

Globalement, comment ça se passe :
Je clique sur mon texte à modifier, TinyMCE apparait, je fais mes modifs et je clique sur "OK".

Le problème est qu'il enregistre les balises HTML sous forme de caratères, exemple : %3Cp%3E correspond à <p>.

Ma BDD est de type MyISAM, interclassement utf8_general_ci .

Ci joint le code qui enregistre :
include('../../modele/connexion.php');
$t=$_POST['text'];
$id=$_POST['id'];
$connexion->exec('UPDATE textes SET texte= "'.$t.'" WHERE id_texte="'.id.'"');
?>
Et mon code de connection :
<?php
$PARAM_hote='localhost'; // le chemin vers le serveur
$PARAM_port='';
$PARAM_nom_bd='mabase'; // le nom de votre base de données
$PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter

try
{
$connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}

catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
?>
Comment remédier à ce problème?
C'est à dire enregistrer les caractères sous forme de balise.
Je précise que tout fonctionnait avec mysqli.
Merci.



A voir également:

2 réponses

Bonjour

C'est de l'encodage url, ça m'étonnerait beaucoup que PDO ait quelque chose à voir là-dedans.
Ça vient sûrement d'une option de TinyMCE.
Tu peux toujours t'en tirer en faisant $t=urldecode($_POST['text']), mais il vaudrait mieux maîtriser les options de TinyMCE.

Au passage, utiliser PDO sans les requêtes préparées n'est pas "propre" du tout, pour autant que ce mot ait un sens.
1
Merci pour la réponse rapide et fonctionnelle, je découvre PDO.
Avec l'exemple de ma requête, pourrais tu me montrer une requête préparée?
Merci.
0
$stmt=$connexion->prepare('UPDATE textes SET texte= :txt  WHERE id_texte= :id');
$stmt->execute(array(":txt"=>$t, ":id"=>$id));


1- tu fais un "prepare" en remplaçant les valeurs par des "paramètres nommés" , ici :txt et :id. Ce 'prepare' te rend un objet de type PDOStatement

2- tu fais un "execute" sur cet objet PDOStatement, en lui passant un tableau dont les clés sont les paramètres nommés, et les valeurs celles que tu veux transmettre.

Tu noteras (ce n'est pas un oubli de ma part) qu'il n'y a pas de quotes autour des paramètres nommés dans la requête. PDO se charge de les mettre et de protéger des injections.
0
Merci beaucoup pour le petit cours, ça m'aide grandement à comprendre.
0