[PHP/MySQL] Problèmes de ' et "

Résolu/Fermé
roukmouth Messages postés 26 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 10 mars 2010 - 27 avril 2005 à 10:48
 dede - 26 juil. 2009 à 12:41
Bonjour,
je possède une base de données qui contient des fiches de films.
La table utilisée ici s'appelle "liens" et les titres sont contenus dans le champs "lien_titre".

Dans une première page, je ressors tous les films contenus dans ma base de données, en cliquant sur l'un d'eux, une nouvelle page s'ouvre pour nous faire découvrir sa fiche. Mais voilà, si le film possède un apostrophe ('), cela ne fonctionne pas.

Voici comment je ressors mes films dans la première page :
$query = "	SELECT * FROM liens ORDER BY lien_titre";
$result = mysql_query ($query) or die ("Exécution de la requête impossible");
$nblignes = mysql_num_rows ($result);
for ($i=0; $i<$nblignes; $i++)
	{
      	$ligne = mysql_fetch_array ($result);
	extract($ligne);
	echo "	<tr>
		      <td width='50%'>
		                 <center>			                                      <br>
		                 <a href='fichelien_auto.php?t=$lien_titre'>
                                                            <h3>$lien_titre</h3></b></a>";
...

Jusqu'ici tout va bien...

Et voici la page avec laquelle j'éprouve des difficultés à afficher les films avec des titres contenant des apostrophes (mais aussi les signes "+" et "&" mais, cela ne me dérange pas trop) :
$query = "	SELECT * FROM liens
	WHERE lien_titre='$t'";
	$result = mysql_query ($query) or die ("Exécution de la requête impossible");
	$nblignes = mysql_num_rows ($result);
	for ($i=0; $i<$nblignes; $i++)
				{
				$ligne = mysql_fetch_array ($result);
				extract($ligne);
								echo "	<h3><b>$lien_titre</b></h3>
						Ajouté le $lien_date par $lien_membre<br>
						<b>Catégorie : </b>$lien_categorie<br>";
					}
				include($lien_page); //lien_page contient l'adresse d'un fichier qui contient lui-même d'autres informations sur le film.
		}

Voici en résumé la page affichant les fiches de film. Je me doute que mon problème se trouve dans $query, il faudrait certainement jouer avec les ' et les ", mais comment... J'ai déjà essayé de les intervertir, mais sans succès et d'écrire aussi
SELECT * FROM liens
				WHERE lien_titre="'.$t.'"'
en intervertissant également les guillemets et les appostrophes, mais cela n'a rien changé.

Aidez-moi, s'il vous plaît, je débute en PHP/MySQL. Merci d'avance.
A voir également:

13 réponses

Il y a aussi les fonctions:

htmlspecialchars ("mon texte avec des ", des ', des < ou >, et tout le tsoin tsoin")

combinée avec la fonction mysql_real_escape_string ('encore du texte")

Notez que, si votre texte est entouré de "", il faut mettre un \ devant tous les " dans votre texte (même chose pour les ' si il est entouré de ' ' ). C'est ce qu'on appelle l'échappement (un peu comme les voitures, mais ça pollue moins ^^).

Ça protège non seulement contre la plupart des sources d'erreurs (si pas toutes ^^), et aussi contre le code malicieu (quelqu'un qui essayerai d'introduire du code html dans votre site via un pseudo, une signature, ..., ou faire des requêtes mysql par ce même moyen, du hack quoi ^^).
2
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
27 avril 2005 à 15:02
ah, oui en effet, et ben pour cette exception du met des petits
addslashes :

$var = addslashes($var);

++
1
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 10:59
Salut =)

ben le truc serait peut-être de remplacer les quote ( quote = ' ) par un autre truc avant d'écrire dans ta base et de faire l'inverse en la lisant.
0
roukmouth Messages postés 26 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 10 mars 2010 2
27 avril 2005 à 11:14
J'y ai pensé mais je ne sais pas le faire, alors si tu le sais... Sinon, merci quand même
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 11:26
tu peux le faire avec la fonction
str_replace("'","opopop",$tavariable);

ça ce sera avant l'écriture dans ta base et après lecture avant de l'afficher tu fais l'inverse :
str_replace("opopop","'",$tavariable);


bon tu mets ce que tu veux à la place de "opopop" =) c'était un exemple

++
0
roukmouth Messages postés 26 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 10 mars 2010 2
27 avril 2005 à 11:38
Merci beaucoup, j'essaye tout de suite...

Mais, il faut le placer dans un script, non ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 12:17
Mais, il faut le placer dans un script, non ??

oui oui bien sur :-)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
27 avril 2005 à 14:08
Ce n'est pas du tout la peine de remplacer quoi que ce soit : tu peux mettre des ' dans tes infomrmation de la base, et pour les afficher, tu met simplement :
echo "blabla".$var."blabla<BR>";
où $var peut contenir le texte suivant :
j'ai tres fait, mais bon je viens de manger !

Ca te l'affichera correctement, le tout est de ne mettre en permanence que des " " et non ' '.
Et dans les requetes, il te faut mettre :
"SELECT ... WHERE id = '".$machin."' ..."

Toujours ' puis ". la variable et ." puis '

++
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 14:52
ben nan, chuis po d(\opopop)accord !!!
parce que dans un champ de type varchar par exemple, tu veux insérer j'ai faim, c'est po ma faute à moi, ta requête sera :
INSERT INTO A_TABLE_TOUT_LE_MONDE VALUES('j'ai faim, c'est po ma faute à moi');

eh ben il va arrêter la valeur au 2è ' trouvé, donc marchera po !!!
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 15:08
je vais être chiant là, mais est-ce que la caractère d'échappement est bien le slash en SQL ?
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
27 avril 2005 à 15:12
Le pb ne vient pas du SQL mais du php,
Si on enregistre un texte dans lequel aparait des ' ,comme par exemple :
j'ai plus fain.
Il faut fare :
<?php

 $texte = "J'ai fain";
 $texte = addslashes($texte);

 $query = "INSERT INTO ... VALUES ('".$texte."',......)";
?>



:)
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 15:24
ben en fait.... je ne suis pas certain...

parce que dans :
 $query = "INSERT INTO ... VALUES ('".$texte."',......)";
ce qui délimite ta chaine ce sont les double quote et non les simple. tu peux mettre autant de ' que tu veux entre " et " en php (enfin il me semble...) ce serait donc bien à SQL que cela poserait problème. enfin bon, Roukmouth, ça marche ou pas ?
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
27 avril 2005 à 15:49
Bon ben faut savoir... (cf post 7) :DD
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
27 avril 2005 à 15:52
ben justement quand je disais eh ben il va arrêter la valeur au 2è ' trouvé, donc marchera po !!!, "il" c'est SQL et non php.

Mais bon, comme dirait l'autre, c'est du détail :-)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
27 avril 2005 à 16:00
vi c sur !
0