Page 1 sur 1

Erreur SQL avec ' dans texte

Posté : 02 août 2015, 17:06
par bob56@
Bonjour à tous et bon dimanche :D

Voilà mon soucis:

J'utilise L'éditeur tinymce pour écrire les messages.

<textarea> </textarea> dans page

par exemple, message posté dans tinymce: j'aime le bon vin rouge !
commande sql d'insertion
$sql = "INSERT INTO `table_abonnes` (civ, nom, prenom, age, adresse, CP, ville, tel, email, abo, comment_page, date_post ) VALUES ('$civ','$nom','$prenom','$age','$adresse','$CP','$ville','$tel','$email','$abo','$sql', now()) ";

Message erreur:
Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité de 'aime le bon vin rouge!

lorque j'édite dans tinymce j\'aime le bon vin rouge ! aucun message erreur et l'insertion s'effectue sans problème dans la base de donnés et le retour est correct. Le problème vient lorsque j'utilise ' dans le texte. Avec " pas d'erreur ?

Structure colonne base:
Nom = comment_page
Type = VARCHAR
Taille= 255
Défault = aucune
Interclassement= Latin1_swedish_ci


Par avance merci

Re: Erreur SQL avec ' dans texte

Posté : 02 août 2015, 17:14
par tof73
http://php.net/manual/fr/mysqli.real-escape-string.php
à appliquer sur tous les champs qui contiennent du texte.

Re: Erreur SQL avec ' dans texte

Posté : 03 août 2015, 19:48
par bob56@
bonjour tof73 :D

J'ai essayé à partir des explications du manuel sans y arriver, il y a surement un couic de mon côté #-o

Par contre avec simplement ce rajout dans ma page PHP
$sql = addslashes( $sql );
çà fonctionne parfaitement .

Au plaisir et encore merci !

Re: [RESOLU] Erreur SQL avec ' dans texte

Posté : 04 août 2015, 09:16
par xTG
Quelle librairie utilisez-vous pour dialoguer avec la base de données ?
mysql ?
mysqli ?
pdo ?
autre ?

Le addslashes n'est pas une solution, et n'est surtout pas à utiliser pour ce cas là.
En effet les fonctions d'échappements sont là pour protéger les données en entrées de table et font bien plus que le addslashes.

Re: [RESOLU] Erreur SQL avec ' dans texte

Posté : 04 août 2015, 10:07
par bob56@
Bonjour xTG

voilà la page sur laquelle je travaille (*) et qui sauve les données dans la base.


* insérer des donnés avec l'éditeur tinymce
<?php
include("fonctions.php");   
if (isset ($_POST['valider'])){
    //On récupère les valeurs entrées par l'utilisateur :
    $civ=$_POST['civilite'];
    $nom=$_POST['nom'];
    $prenom=$_POST['prenom'];
    $age=$_POST['age'];
    $adresse=$_POST['adresse'];
    $CP=$_POST['CP'];
    $ville=$_POST['ville'];
    $tel=$_POST['tel'];
	$email=$_POST['email'];
    $abo=$_POST['abo'];
	$sql=$_POST['comment_page'];
	$date_post=$_POST['date_post'] = date("d-m-Y H:i:s");
		 
		
     //On affiche l'écran de rappel
    //gérer le féminin
    $e='';
    if(($civ=='Mme')||($civ=='Mlle')){
        $e='e';
    }
    //gérer le nom complet du magazine
     if ($abo=='sexe'){
        $mag='J\'aime le sexe.';
    }
    elseif ($abo=='pied'){
        $mag='J\'ai le pied marin.';
    }
    elseif ($abo=='oeil'){
        $mag='J\'ai l\'oeil vif.';
    }
	elseif ($abo=='vin'){
        $mag='J\'aime le vin.';
    }
    else{
        $mag='J\'ai la rate qui se dilate.';
    }
    echo' <h4><strong><u>Vos renseignements</u></strong></h4>';
    echo' <strong>Vous êtes :</strong>';
    echo $civ.' '.$nom.' '.$prenom.'<br><br><strong> Votre âge:</strong> '.$e.' ? '.$age.' ans.<br><br><strong>Votre adresse :</strong><br>'.$adresse.'<br>'.$CP.' '.$ville.'<br><br><strong>Votre téléphone : </strong>'.$tel.'<br><br><strong>Votre email : </strong>'.$email.'<br><br><strong>date du post: </strong>'.$date_post.'<br><br><strong>commentaires :</strong>'.$sql.'<br><br>';
	    echo'<strong>Vous avez choisit de vous abonner à: </strong>';
    echo'<h3>'.$mag.'<br><h2>Encore un grand merci de vous être abonnée à notre magazine <u>'.$abo.' </u></h2>';

	
	
	    //On alimente la base de données
     //On se connecte
		
	    connectMaBase();
	 
    //On prépare la commande sql d'insertion
	
     $sql = addslashes( $sql ); 
	
	 $sql = "INSERT INTO `table_abonnes` (civ, nom, prenom, age, adresse, CP, ville, tel, email, abo, comment_page, date_post ) VALUES ('$civ','$nom','$prenom','$age','$adresse','$CP','$ville','$tel','$email','$abo','$sql', now()) ";

	
	 
	
  // $sql = "INSERT INTO `table_abonnes` (civ, nom, prenom, age, adresse, CP, ville, tel, email, abo, comment_page, date_post ) VALUES ('$civ','$nom','$prenom','$age','$adresse','$CP','$ville','$tel','$email','$abo','$sql', now()) ";

 
    /*on lance la commande (mysql_query) et au cas où, 
    on rédige un petit message d'erreur si la requête ne passe pas (or die) 
    (Message qui intègrera les causes d'erreur sql)*/
    mysql_query ($sql) or die ('Erreur SQL mon cher Boby!<br><br>'.$sql.'<br>'.mysql_error()); 
     // on ferme la connexion
    mysql_close();
} 
/*ECRAN QUI S AFFICHE SI L ON N A RIEN CLIQUE DONC A L ARRIVEE SUR LA PAGE*/
/*SEULE LA CONDITION ELSE EST DANS DES BALISES PHP PUIS LA PAGE HTML REPREND SON COURS*/
else{
}

Re: [RESOLU] Erreur SQL avec ' dans texte

Posté : 04 août 2015, 10:37
par xTG
D'un point de vue sécurité il faudrait remplacer les appels mysql par des appels à mysqli ou bien à PDO.
La librairie mysql n'est plus maintenue et déconseillée par PHP.

Exemple d'utilisation comme indiqué dans la documentation avec la librairie mysql :
$civ = mysql_real_escape_string($civ);
Avec mysqli il n'y a qu'à rajouter un i, la migration est donc simple. ;)

Re: [RESOLU] Erreur SQL avec ' dans texte

Posté : 04 août 2015, 12:24
par bob56@
alors là xTG chapeau bas, moins de 15 minutes pour comprendre et faire le changement. =D>

Merci

Re: [RESOLU] Erreur SQL avec ' dans texte

Posté : 04 août 2015, 12:52
par bob56@
Image