Problème Apostrophe dans select

Résolu
manulitox94 Messages postés 2 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 10 décembre 2010 - 10 déc. 2010 à 11:57
cs_morpheus57 Messages postés 121 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 30 décembre 2010 - 10 déc. 2010 à 16:35
Bonjour,
j'ai cherché des solutions sur google et dans les forums, mais je n'ai rien trouvé qui résoud mon problème.

Je simplifie mon code pour expliquer mon pb.

Je récupère d'un formulaire un champ avec un ' dedans (exemple: l'information) lors de la récupération, j'ajoute un addslashes(), et l'ajout ds la BDD se fait bien.
ensuite, je vais récuperer d'un formulaire toujours un champ, toujours avec un ', et je veux le comparer avec ce qui est présent dans la BDD, pour qu'il me trouve si il y a deja une entrée avec cette chaine.

j'ai donc:

$titre = utf8_decode($_POST["titre"]); //récupère le champ du formulaire

$quer = mysql_query("SELECT * FROM `webcal_entry` WHERE `cal_name` LIKE '".$titre."'")or die('Erreur SQL !
'.mysql_error()); //requete

$resultat = mysql_fetch_array($quer); //execute la requete

$nb = mysql_num_rows($quer); // nb d'enregistrements trouvés

et $nb reste toujours à 0 si il y'a un ' dans $titre.

si je passe une chaine sans ', il n'y a pas de problème, $nb==1

si j'affiche $titre, j obtient: l\'information
si j'affiche le champ de la table, j obtient: l\'information
mais il ne les considère pas comme identiques...


quelqu'un voit d'ou peut venir le probleme?
merci d'avance

4 réponses

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
10 déc. 2010 à 13:54
Pour ma part, je te conseille d'utiliser real_escape_string dans ton insertion en base. ..et d'en profiter pour utiliser MySQLi.
S.
3
manulitox94 Messages postés 2 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 10 décembre 2010
10 déc. 2010 à 16:27
bonjour et merci pour vos réponses,
@morpheus57 en allant sur le lien, ils marquent: "Il n'y a aucune raison d'utiliser les guillemets magiques, car ils ne sont plus supportés en PHP." je ne vais donc pas chercher dans cette direction, mais merci quand meme.

@syndrael j'ai essayé d'utiliser mysql_real_escape_string(), et ca fonctionne comme ca, il retrouve bien mon champ avec l'apostrophe quand je fais ma requete sur ma table.

voila le code:
pour l'insert:

//je récupere les champs du form
$qui = utf8_decode($_POST['qui']);
$titre utf8_decode($_POST[titre ]); // L'information
$description = utf8_decode($_POST['description']);

//la requete
$query = sprintf("INSERT INTO webcal_entry (`cal_user`, `cal_name`, `cal_description`) VALUES ('%s', '%s', '%s')",
$qui,
mysql_real_escape_string($titre, $link),
mysql_real_escape_string($description, $link));

//j execute la requete.
mysql_query($query, $link)or die(mysql_error()); là, l'insert dans la table est fait sans \, donc dans la table j'ai "L'information"

et quand je fais un SELECT pour comparer avec ce qu'il y a dans la table, il me le trouve bien (mais je dois ajouter un \ lorsque je fais le SELECT, sinon erreur)

$quer1 = mysql_query("SELECT * FROM `webcal_entry` WHERE `cal_name` LIKE '".addslashes($cal_name)."'")or die(mysql_error());
$nb = mysql_num_rows($quer1);
echo "nb: ".$nb."
"; // affiche 1

il me reste maintenant a voir si les champs qui ont été saisie avant que j'utilise mysql_real_escape_string() (donc avec des \ dans la BDD) sont bien reconnus ou si je dois tout rééditer...

syndrael, une question, mysqli: quel est l'intéret de l'utiliser par rapport a mysql?

merci beaucoup pour votre aide
A+
3
cs_morpheus57 Messages postés 121 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 30 décembre 2010
10 déc. 2010 à 14:14
Salut,

Tu peux regarder de ce côté aussi :
http://php.net/manual/fr/security.magicquotes.php
0
cs_morpheus57 Messages postés 121 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 30 décembre 2010
10 déc. 2010 à 16:35
Justement, je voulais dire : "Assure toi de bien avoir désactivé les magicquotes dans ta config PHP"
0
Rejoignez-nous