Comment gérer les apostrophes d'un mot provenant d'un formulaire ?

Résolu
cs_bonobos
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005
- 17 nov. 2005 à 13:21
cs_bonobos
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005
- 17 nov. 2005 à 15:12
Bonjour,
Dans un formulaire l'utilsateur entre le nom d'une commune par exemple :
L'isle Jourdain..
<td>Commune :</td>
<td>"></td>

Dans un tableau s'affiche le nom de la commune, au passage la souris le nombre de ventes dans cette commune et le lien pour acceder à toutes les ventes de cette commune.
<?php //affiche la commune, le nbre de ventes pour cette commune et le lien pour voir ttes les ventes de cette commune
$req = mysql_query("select * from vente where commune='$vente[commune]'");
$resultats = mysql_numrows($req);
echo '<td bgcolor='.$bgcolor.'>';?>
<?php $lien="index.php?liste=ventes&choix=commune&ville_choisi=".$vente['commune'];
{?>
<?php echo ('['.$lien.' '.$vente ['commune'].']');
}?>
</td>

Et je viens de m'apercevoir que les communes qui contiennent une apostrophe n'affichent pas le nombre de ventes ! Par contre celles qui ne contiennent pas d'apostrophes affichent correctement par exemple:
Il y a X constructions à Grenade
comment puis-je remédier à celà ? Merci.

4 réponses

malalam
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
2 mars 2010
25
17 nov. 2005 à 13:34
Hello,

erreur fatale...
Tu aurais dû enregistrer tes commune,s dans ta base, en échappant les caractères dangereux, avec par exemple la fonction dédies : mysql_real_escape_string().

Ensuite, tu aurais "de-echappé" ces noms avant de les afficher dans ton champ texte.

Et lors de la saisie utilisateur, ben tu les aurais "re-échappées" avant d'effectuer la recherche dans ta table.

Là, en l'occurence, tu peux peut-être tricher...(mais pense à refaire ta table et les insertions, parce que c'est dangereux, en plus...) :
$commune = str_replace ("'", "%",$vente['commune']);
$req = mysql_query("select * from vente where commune LIKE $commune");

2 choses néanmoins :

on n'utilise pas select * !
Ensuite, c'est $vente['commune'] et pas $vente[commune]. Donc ta requête aurait dû être :

$req = mysql_query("select cequetucherches from vente where commune='".$vente['commune']."'");
3
cs_bonobos
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005

17 nov. 2005 à 14:15
Salut et merci pour la rapidité de la réponse...
Je t'ai entendu et fait ceci:
<?php //affiche la commune, le nbre de ventes pour cette commune et le lien pour voir ttes les ventes de cette commune
$commune = str_replace ("'", "%",$vente['commune']);
$req = mysql_query("select * from vente where commune LIKE $commune");
$resultats = mysql_numrows($req); <=== ici la ligne 168 mais je pense que c'est celle du dessus qui crée probléme !

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in d:\easyphp\www\gbf\ventes.php on line 168

D'autre part entrer ttes les communes à la main dans une table serait un boulot de titan !
0
malalam
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
2 mars 2010
25
17 nov. 2005 à 15:03
Je ne connaissais pas mysql_numrows...à ma connaissance, il n'y a que mysql_num_rows()



Essaye ta requête en dur : prends une de tes communes avec une
apostophe, remplace l'apostrophe par % et fais ta requête avec ce mot à
la place de $commune.



Ah oui...pas lapeine :

LIKE '$commune'
0
cs_bonobos
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005

17 nov. 2005 à 15:12
Grand merci et bon aprés-midi
0