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
Réponse acceptée

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 ...

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

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

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

Merci pour vos réponses

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

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.

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

@Carouge10,

Merci beaucoup pour l'aide