Décrivez ici votre problème ou ce que vous cherchez à faire.

Bonjour,
j'ai besoin d'un peu d'aide pour ma requête sql en PDO.
Elle fonctionne à peu près bien mais dans ma table, les apostrophes génèrent une erreur.
J'ai donc fait en sorte qu'il n'y ait plus de souci avec ça, mais du coup, les lettres à accent ne ressortent pas en utf-8.

J'ai alors parcouru le forum et la solution semble qu'il faille que je fasse une préparation PDO correcte.

Le souci, c'est que je ne vois pas comment m'y prendre avec le nom du champs qui est aussi une variable!
Pouvez-vous m'aider?

$sql = $DB->query("UPDATE formationsqcm SET ".$_POST["name"]." = '".htmlentities($_POST["value"], ENT_QUOTES)."' WHERE idQcm = '".$_POST["pk"]."' ");

Ce que je veux

Un coup de pouce pour une requête SQL propre.

Ce que j'obtiens

Du codage de caractère non conforme.

5 réponses


syngates68127
Réponse acceptée

Salut !

Même si effectivement le mieux est de faire une requête préparée quel que soit le cas, pour ton cas à toi ça ne change rien au fait que le champ est variable dans ta requête. Est-ce que les champs à mettre à jour ($_POST['name']) sont envoyés par les utilisateurs ? Parce que dans ce cas là c'est problématique et j'ai du mal à imaginer un système où on ouvrirait cette possibilité aux utilisateurs de toucher à la BDD de cette manière.

En soi pour la partie variable de ta requête je ne vois pas de problème, et pour la requête préparée ça serait comme ça :

$sql = $DB->prepare("UPDATE formationsqcm SET ".$_POST["name"]." = :valeur1 WHERE idQcm = :valeur2");
$sql->execute(["valeur1" => $_POST['value'], "valeur2" => $_POST["pk"]);

bonjour.
utilise une requête préparée et tu n'auras plus ce problème.
tu pourras ainsi te protéger des injections sql car html... n'est pas fait pour cela

Hexa
Auteur

Merci pour ta réponse, mais c'est justement ma question.
Comment faire une requêtre préparée quand le nom d'un champs est une variable?
Je sais le faire quand le nom du champs est fixe et que leurs valeurs sont des variables...!

Hexa
Auteur

Yes!
Merci pour cette réponse, ça fonctionne et ça a corrigé mes soucis d'utf-8!!!

Juste une petite correction:
$sql = $DB->prepare("UPDATE formationsqcm SET ".$_POST["name"]." = :valeur1 WHERE idQcm = :valeur2");
$sql->execute(["valeur1" => $_POST['value'], "valeur2" => $_POST["pk"]]);

Il manque un crochet fermant à la fin de la requête...

Merci beaucoup!

cela reste ouvert aux injections sql.
il faudrait vérifier que la variable saisi existe.