PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 28-06-2015 15:17:03

cyberthommy
Membre
Inscription : 28-06-2015
Messages : 4

MYSQL et les caractères spéciaux

Bonjour,

J'ai crée une requête INSERT INTO qui fonctionne parfaitement bien jusqu'au moment ou l'utilisateur utilise les apostrophes dans le formulaire qui renseigne ma table. L'entrée dans mysql se fait avec tous les caractères spéciaux, sauf les apostrophes. Mes pages sont en UTF-8 ainsi que ma table mysql. Quelqu'un aurait-il une idée?

Hors ligne

#2 28-06-2015 17:17:17

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : MYSQL et les caractères spéciaux

Bonjour,

admettons que $machaine contienne le contenu contenant des apostrophes,


$machaine=addslashes($machaine);
$sql="INSERT INTO matable (numcol1,numcol2,varcol3) VALUES ($col1,$col2,'$machaine')";
 

Bon dimanche


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 29-06-2015 11:21:26

cyberthommy
Membre
Inscription : 28-06-2015
Messages : 4

Re : MYSQL et les caractères spéciaux

Bonjour,

Merci pour votre réponse.
Malheureusement ça ne fonctionne pas. Je n'ai aucune insertion dans ma base.
Voici le bout de code en question. L'erreur est pout être ailleurs.

<?php
mysql_connect('xxx', 'xxx', 'xxx') or die("Impossible de se connecter au serveur");
mysql_select_db('xxx') or die("Base de données inexistante");
$yyy=addslashes($yyy);
$requete=mysql_query("INSERT INTO xxx VALUES('$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[yyy]') ");
écho "Bla bla bla";
?>

Encore une fois merci pour votre aide.

Bonne journée.
Cyberthommy

Dernière modification par cyberthommy (29-06-2015 11:21:58)

Hors ligne

#4 29-06-2015 13:56:17

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

Re : MYSQL et les caractères spéciaux

il faux plutôt utiliser :
http://php.net/manual/fr/function.mysql … string.php
ainsi pour que cela produise un effet :
$requete=mysql_query("INSERT INTO xxx VALUES('$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','".mysql_escape_string($_POST[yyy])."') ");

Hors ligne

#5 29-06-2015 16:25:05

cyberthommy
Membre
Inscription : 28-06-2015
Messages : 4

Re : MYSQL et les caractères spéciaux

Merci Tof 73
ça fonctionne à merveille.
Pour ceux que ça intéresse :
http://hoplaserevices.heb3.org/

Hors ligne

#6 02-07-2015 12:19:35

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : MYSQL et les caractères spéciaux

Bonjour,

Malheureusement ça ne fonctionne pas. Je n'ai aucune insertion dans ma base.
....
$yyy=addslashes($yyy);
$requete=mysql_query("INSERT INTO xxx VALUES('$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[xxx]','$_POST[yyy]') ");

Visiblement vous n'avez rien compris au code que je vous ai fourni, votre code en est une parfaite démonstration.
Deux choses essentielles à dire sur votre code :
1) on ne doit jamais insérer directement dans une requête SQL les variables publiques $_POST ou $_GET sous peine d'être vulnérable aux attaques par injection SQL pour le moins, et il y en a d'autres. MySQL_real_escape_string() ne vous protège en rien, du moins elle n'offre aucune garantie à ce niveau. De plus elle est dépréciée comme il est indiqué dans le lien fourni par tof73, donc ne l'utilisez plus sous peine de voire votre code générer des erreurs sous peu.
2) $yyy=addslashes($yyy);
Ensuite ce code ne fera strictement rien dans votre contexte, sauf à écrire $yyy=addslashes($_POST['yyy']); et de passer ensuite $yyy dans votre requête et non $_POST['yyy']. D'ailleurs vous ne l'avez peut-être pas remarqué mais il n'y a pas de variables $_POST['xxxx'] explicites dans le code que je vous ai fourni. Je suis en effet passé par des variables intermédiaires.

Si vous avez des questions n'hésitez pas, c'est toujours mieux que de transformer son site en passoire.

Bonne journée


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 02-07-2015 14:15:49

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

Re : MYSQL et les caractères spéciaux

sur http://php.net/manual/fr/function.addslashes.php
"Pour échapper les paramètres de base de données, vous devez utiliser les fonctions d'échappement spécifiques à votre base de données (i.e. mysqli_real_escape_string() pour MySQL"

sur http://php.net/manual/fr/function.mysql … string.php
"Cette fonction doit toujours (avec quelques exceptions) être utilisée avant d'envoyer la requête à MySQL afin de protéger vos données d'injection de caractères pouvant dévoyer cette requête."

donc dire qu'il vaut mieux utiliser addslashes que mysqli_real_escape_string est faux.

Hors ligne

#8 02-07-2015 16:17:31

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : MYSQL et les caractères spéciaux

Bonjour,

Je vous suggère vous aussi de lire ce que j'ai écrit

admettons que $machaine contienne le contenu contenant des apostrophes,
$machaine=addslashes($machaine);

Donc je le répète en clair addslashes a pour seul but d'échapper les apostrophes dans une chaîne de caractères et encore QUE si on est sur MySQL! Les autres caractères spéciaux n'étant pas l'objet de la question initiale, je le rappelle également.

Maintenant si vous voulez vous renseigner sur comment on doit normalement gérer les choses à ce niveau, je vous invite à lire ce post: http://www.developpez.net/forums/d12434 … tions-sql/

bonne journée.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums