Enregistrement avec PDO
Mike
-
Mike -
Mike -
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 :
C'est à dire enregistrer les caractères sous forme de balise.
Je précise que tout fonctionnait avec mysqli.
Merci.
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');Et mon code de connection :
$t=$_POST['text'];
$id=$_POST['id'];
$connexion->exec('UPDATE textes SET texte= "'.$t.'" WHERE id_texte="'.id.'"');
?>
<?phpComment remédier à ce problème?
$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();
}
?>
C'est à dire enregistrer les caractères sous forme de balise.
Je précise que tout fonctionnait avec mysqli.
Merci.
A voir également:
- Enregistrement avec PDO
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
- Enregistrement - Guide
- Comment couper un enregistrement audio - Guide
- Comment enregistrer une conversation avec mon téléphone - Guide
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.
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.
$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.
Avec l'exemple de ma requête, pourrais tu me montrer une requête préparée?
Merci.