PB avec PDO avec les qotes

Par snakeboarder, il y a 8 ans


Bonjour la room,

Je rencontre un petit problème avec mon code.
J'utilise PDO mais je ne maitrise pas encore très bien le Data Objects

Le principe

je récupère par ajax => le dernier id utilisé et un commentaire depuis un textarea.
Je veux faire un update dans la base de données, mais j'ai un problème d'enregistrement dès que quelqu'un ajoute une quote " ' " dans le textarea.
la moindre quote mets une valeur null a la place du commentaire.

Ce que je fais en code

<?php session_start(); require("../config/database.php"); $id = $_POST["id"]; $commentaire = $_POST["commentaire"]; /* $id=3; $commentaire = "l'état n°3 èé uûü$€#~}{"; */ //$commentaire = str_replace("'","\'", $commentaire); /* Création d'un objet "reqcommentaire" pour une requête préparée UPDATE du commentaire */ $reqcommentaire = $db->prepare("UPDATE noteznous SET commentaire = '$commentaire' Where id_enquete = $id "); /* Exécution de la requête "reqcommentaire" */ $reqcommentaire->execute(); /* Ferme le curseur "reqcommentaire" pour pouvoir executer une nouvelle requête */ $reqcommentaire->closeCursor(); /* Ferme la connexion a la base de données */ $db = null;

Ce que je voudrais

Eviter les injection sql
Eviter d'utiliser la fonction "str_replace()" et rester en PDO

8 réponses

Carouge10, il y a 8 ans

Il s'agit de préparer la requête avec des marqueurs.
Vous aurez plus d'info sur la méthode prépare de pdo

Comme je l'ai dit, pour styliser le code, il suffit d'utiliser la balise </ > et d'insérer le code entre les ...

snakeboarder, il y a 8 ans

@Carouge10,

Merci beaucoup pour l'aide

Carouge10, il y a 8 ans

Bonjour,

Tu as la méthode quote de PDO qui permet de protéger de ses éléments.
Sinon pour être plus lisible sur ton post, utilise la balise "< />" pour mettre ton code

Carouge10, il y a 8 ans

Je t'invite a revoir également la méthode prepare de PDO car là, tu ne l'utilises pas correctement

snakeboarder, il y a 8 ans

Bonsoir @Carouge10 ,
Comment utiliser correctement le PDO pour une update ?
avec des valeures $_POST venue d'ajax

Merci pour vos réponses

snakeboarder, il y a 8 ans

Faut-il déjà maitre la requête sql
"UPDATE noteznous
SET commentaire = '$commentaire'
Where id_enquete = $id
"
dans une variable du style $req = ' la requête sql '
Pouvzez -vous me préciser ou m'expliquer l'erreur comise en PDO

Merci

Carouge10, il y a 8 ans

1/ On protège le commentaire des données pouvant être dangereuse (les " ou '...)
2/ On fais une requête propre pour protéger des injections SQL

<?php session_start(); require("../config/database.php"); $id = $_POST["id"]; $commentaire = $_POST["commentaire"]; /* $id=3; $commentaire = "l'état n°3 èé uûü$€#~}{"; */ //$commentaire = str_replace("'","\'", $commentaire); // Protection du commentaire $commentaire = $db->quote($commentaire); /* Création d'un objet "reqcommentaire" pour une requête préparée UPDATE du commentaire */ $reqcommentaire = $db->prepare("UPDATE noteznous SET commentaire = ? WHERE id_enquete = ?"); /* Exécution de la requête "reqcommentaire" */ $reqcommentaire->execute(array($commentaire, $id); /* Ferme le curseur "reqcommentaire" pour pouvoir executer une nouvelle requête */ $reqcommentaire->closeCursor(); /* Ferme la connexion a la base de données */ $db = null;

Je fais ça à la volée.

snakeboarder, il y a 8 ans

SET commentaire = ?
WHERE id_enquete = ?

Désoler Je suis vraiment pas un bon codeur lol
mais je ne comprends pas pourquoi vous mettez des " ? " dans la rquête sql
Quel est l'interet ou le fonctionnement ...

Sinon comment on fait pour mettre en page correctement le code dans le forum (avec le cadre noir et les syntaxes colorisés).
Je suis nouveau