Problème Requête SQL avec '

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème Requête SQL avec '

Re: Problème Requête SQL avec '

par Ryle » 31 mai 2012, 23:09

sprintf permet de formater une chaine... c'est souvent utilisé dans les tutos, mais j'avoue que personnellement je n'ai jamais compris l'intérêt de cette fonction pour faire des requêtes SQL. Celles-ci n'ont pas besoin d'un format d'affichage et pire que tout, c'est une vrai galère pour savoir quel valeur est utilisée à quel endroit.

Quoi qu'il en soit, pour que cela fonctionne, il faut que tu remplaces la variable dans ta requête sql par un spécificateur qui permettre à la fonction de savoir quoi remplacer (c'est pas clair, je sais, mais avec l'exemple ça te parlera plus ;))
$sql= sprintf("update cycle set titre_cycle='%s' where id_cycle=%d", mysql_real_escape_string($titre_cycle), $id_cycle);
Dans cet exemple, le %s va être remplacé par le premier argument (donc le titre protégé), le %d par le second argument (donc l'id cycle). Quand il n'y a que 2 valeurs à remplacer, ça va encore, mais dès qu'il y en a 10, c'est vite la pagaille pour repérer dans quel ordre ils doivent être...

Personnellement je trouve ceci plus lisible et plus facile à maintenir :
$sql= "UPDATE cycle SET titre_cycle='" . mysql_real_escape_string($titre_cycle) . "' WHERE id_cycle=" . $id_cycle;

Re: Problème Requête SQL avec '

par Dynamic88 » 31 mai 2012, 15:52

C'est quelque chose que j'ai lu dans un tutoriel... mais avec ou sans cela ne fonctionne pas...

Re: Problème Requête SQL avec '

par kny » 31 mai 2012, 14:47

Quelle est l'utilité de sprintf pour écrire la requête?

Re: Problème Requête SQL avec '

par Dynamic88 » 31 mai 2012, 14:41

Merci de vos conseils, j'ai utilisé cette fonction de cette façon. Je comprend maintenant ou était mon erreur. Mais cela ne marche toujours pas.
Est ce bien de cette façon que l'on utilise la fonction mysql_real_escape_string()?


$sql= sprintf("update cycle set titre_cycle='$titre_cycle' where id_cycle='$id_cycle'",mysql_real_escape_string($titre_cycle));
Merci d'avance.

Re: Problème Requête SQL avec '

par Dynamic88 » 31 mai 2012, 14:39

$sql= sprintf("update cycle set titre_cycle='$titre_cycle' where id_cycle='$id_cycle'",mysql_real_escape_string($titre_cycle));

voilà comment j'ai utilisé cette fonction.

Re: Problème Requête SQL avec '

par Ryle » 30 mai 2012, 19:33

Histoire d'être un peu plus précis sur le problème que tu rencontres : lorsque tu enregistres une chaine de caractère en base, tu délimite celle-ci avec des apostrophes :
INSERT INTO taTable (champ1, champ2, ...) VALUES ('valeur1', 'valeur2', ...);
du coup si ta valeur contient une apostrophe, SQL ne saura plus identifier où se termine la chaine : " 'l'arbre' " il va considérer que tu as une chaine "l", puis une instruction "arbre" qu'il ne connait pas et qui génère une erreur.

Pour éviter cela, il faut protéger les chaines contenant des apostrophes en ajoutant généralement un antislash pour que ta base sache qu'il s'agit d'un caractère apostrophe et non de la fin de la chaine : 'l\'arbre'

C'est là que la fonction mysql_real_escape_string() intervient puisqu'elle va protéger les caractères spéciaux de tes valeurs pour qu'elles puissent être utilisées dans ta base de données.

Voilà en gros l'origine du problème et le comment le résoudre. Une fois que tu seras à l'aise avec ceci tu pourras te pencher sur la gestion des magic quotes (en fonction de la configuration, php ajoute lui même des "\" mais pas toujours comme on voudrait) et les aspect sécurité (injection sql)

Re: Problème Requête SQL avec '

par Xartrick » 30 mai 2012, 18:33

Salut,

Tu peux aussi utiliser htmlscpecialchars ou htmlentities lorsque tu enregistre le textfield .
Le caractère ' n'est pas filtré par ces fonctions comme ce n'est pas des caractères spécial au HTML.

Re: Problème Requête SQL avec '

par momox » 30 mai 2012, 14:34

Htmlentities est à utiliser à l'affichage, pas à l'enregistrement, et ne prémunit pas des injections SQL.

Re: Problème Requête SQL avec '

par Akirami » 30 mai 2012, 14:12

Salut,

Tu peux aussi utiliser htmlscpecialchars ou htmlentities lorsque tu enregistre le textfield .

Re: Problème Requête SQL avec '

par momox » 30 mai 2012, 13:36

Tu utilises l'extension mysql ou mysqli ?
Si c'est mysql, utilises mysql_real_escape_string sur ta variable, si c'est mysqli, utilises mysqli_real_escape_string.

Problème Requête SQL avec '

par Dynamic » 30 mai 2012, 11:57

Bonjour,

J'ai un petit problème avec mes requête SQL, quand je modifie un textfield qui contient un ' cela ne me met une erreur... Quelqu'un aurait une solution?

Exemple : si je modifie le texte de ma base de données

si j'écris l'arbre ==== SQL ERROR
si j'écris l arbre ==== la modification se passe correctement.


Merci d'avance.