Bonjour.
Pour la proposition de aokle, fais une recherche sur mysql fulltext search, il y a de la lecture
Sinon, en restant sur ton idée de départ :
1. La solution la plus simple, si c'est possible, c'est de tout stocker en majuscule (ou en minuscule, au choix).
Il te suffira alors de passer le texte recherché en majuscule avec
mb_strtoupper()
2. Logique..
Ta requête, c'est :
"SELECT distinct count(Titre) FROM livres WHERE ((Titre LIKE \"%$titre%\" )OR (Titre LIKE \"$titre\" )) ";
Sélectionne le nombre de Titre distincts vérifiant ( Titre ressemble à $titre OU titre ressemble à $titre)
Déjà, tu regardes deux fois Titre et tu ne tiens pas compte de Auteur, mais surtout tu veux ce qui vérifie les deux conditions => AND
3. (je sais il n'y a pas de 3 dans ta question)
Pas mal de petits trucs à corriger dans ton script :
-
TOUJOURS sécuriser les données reçues par POST ou GET (au moins avec
htmlentities()).
-
TOUJOURS sécuriser les données envoyées dans une requête SQL (au moins avec
mysql_real_escape_string()).
- Plutôt que de faire une requête pour compter et une pour récupérer les valeurs, tu peux te contenter de la deuxième et utiliser
mysql_num_rows() pour connaître le nombre de résultats.
- dans le HTML généré, tu vas avoir
<a name=\"#resultat\"><h2><p> </p> <p>Un résultat trouvé</P></h2></a>
C'est mal.
Tu ne devrais pas mettre un élément "bloc" comme le titre
h2 à l'intérieur d'un élément inline comme ton ancre
a.
- Toujours dans le html généré, tu gères mal les listes.
Déjà parce que tu ne devrais pas les intégrer dans des paragraphes, et aussi parce que tu devrais déclarer une seule list
ul avec plusieurs éléments
li.
4. Si tu veux faire les choses bien, il faudra aussi gérer les accents (voire les fautes).
Par exemple si tu as le livre "l'Emile", il faudrait qu'une recherche sur "émile", "emille" ou "EmiLe" le donne en résultat...
Bonjour.
Pour la proposition de aokle, fais une recherche sur mysql fulltext search, il y a de la lecture :wink:
Sinon, en restant sur ton idée de départ :
1. La solution la plus simple, si c'est possible, c'est de tout stocker en majuscule (ou en minuscule, au choix).
Il te suffira alors de passer le texte recherché en majuscule avec [url=http://fr.php.net/manual/fr/function.mb-strtoupper.php]mb_strtoupper()[/url]
2. Logique..
Ta requête, c'est :
[sql]"SELECT distinct count(Titre) FROM livres WHERE ((Titre LIKE \"%$titre%\" )OR (Titre LIKE \"$titre\" )) ";[/sql]
[i]Sélectionne le nombre de Titre distincts vérifiant ( Titre ressemble à $titre OU titre ressemble à $titre)[/i]
Déjà, tu regardes deux fois Titre et tu ne tiens pas compte de Auteur, mais surtout tu veux ce qui vérifie les deux conditions => AND
3. (je sais il n'y a pas de 3 dans ta question)
Pas mal de petits trucs à corriger dans ton script :
- [b]TOUJOURS[/b] sécuriser les données reçues par POST ou GET (au moins avec [b]htmlentities()[/b]).
- [b]TOUJOURS[/b] sécuriser les données envoyées dans une requête SQL (au moins avec [b]mysql_real_escape_string()[/b]).
- Plutôt que de faire une requête pour compter et une pour récupérer les valeurs, tu peux te contenter de la deuxième et utiliser [b]mysql_num_rows()[/b] pour connaître le nombre de résultats.
- dans le HTML généré, tu vas avoir [html]<a name=\"#resultat\"><h2><p> </p> <p>Un résultat trouvé</P></h2></a>[/html]C'est mal.
Tu ne devrais pas mettre un élément "bloc" comme le titre [b]h2[/b] à l'intérieur d'un élément inline comme ton ancre [b]a[/b].
- Toujours dans le html généré, tu gères mal les listes.
Déjà parce que tu ne devrais pas les intégrer dans des paragraphes, et aussi parce que tu devrais déclarer une seule list [b]ul[/b] avec plusieurs éléments [b]li[/b].
4. Si tu veux faire les choses bien, il faudra aussi gérer les accents (voire les fautes).
Par exemple si tu as le livre "l'Emile", il faudrait qu'une recherche sur "émile", "emille" ou "EmiLe" le donne en résultat...