Requête au résultat variable

Mammouth du PHP | 2937 Messages

18 janv. 2007, 17:22

Salut à tous!

Pour un projet perso, je mets au point une page de recherche. Le traitement PHP, en soi, ne pose pas de souci.

En revanche, quand j'exécute la requête suivante:

Code : Tout sélectionner

SELECT fiches.description_resume AS description_resume, fiches.nom AS fiches_nom, fiches.url AS fiches_url, rubriques.nom AS rubriques_nom, rubriques.url AS rubriques_url, menus.nom AS menus_nom, menus.url AS menus_url FROM fiches, rubriques, menus WHERE fiches.nom OR fiches.url LIKE '%Cat%à%dog%' AND id_rubrique=rubriques.id AND id_menu=menus.id
PHPMyAdmin me retourne un résultat, comme prévu, ce ne qui n'est pas le cas lorsque j'effectue la recherche via la page du site (aucun résultat). :shock:

Soit dit en passant, le site et la base de données sont codés en UTF-8.

Si la recherche porte sur 'Cat a dog' (sans accent) ou sur 'Enseigne', le site et PHPMyAdmin donnent un résultat identique.

D'où peut venir l'anomalie? :-k

P.S.: Qui a eu la fâcheuse idée de mettre un "overflow: scroll", au lieu d'un "overflow: auto"? Le code tapé sur une ligne devient invisible sous IE 7 (j'ignore ce qu'il en est chez IE <= 6 et chez FF et Opera). :roll:

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 17:32

Bonjour,

Tu est sur de cette syntaxe

Code : Tout sélectionner

fiches.nom OR fiches.url LIKE '%Cat%à%dog%'
ça ne serait pas plus tôt

Code : Tout sélectionner

fiches.nom LIKE '%Cat%à%dog%' OR fiches.url LIKE '%Cat%à%dog%'
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 2937 Messages

18 janv. 2007, 17:44

La syntaxe n'est pas en cause (sinon, PHPMyAdmin m'aurait envoyé une erreur MySQL). D'ailleurs, ta solution proposée provoque une drôle de boucle (18 résultats pour 1 seul attendu).

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 17:48

Je ne te parle pas de syntaxe dans le sens erreur, mais résultats.

Si ce que tu souhaites c'est 'a' ou 'b' = 'c' tu devras l'écrire a = c ou b = c
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 2937 Messages

18 janv. 2007, 17:50

Justement, j'ai essayé "fichiers.nom LIKE '...' OR fichiers.url LIKE '...'" et ça donne un résultat inattendu pour le nombre.

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 17:53

Surement que tu n'as tenu compte de la priorité des opérateurs
essaie avec des parenthèses (a = c ou b = c) et d = e
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 2937 Messages

18 janv. 2007, 17:57

Les parenthèses ne résolvent rien.

Mammouth du PHP | 1511 Messages

18 janv. 2007, 17:58

Juste comme ca, vérifie que les id des résultats ne soient pas les mêmes, auquel cas tu peux faire un GROUP BY, bien que cela ne résolve pas la chose complétement ;)
@+

Mammouth du PHP | 2937 Messages

18 janv. 2007, 18:03

Un GROUP BY n'est d'aucune aide.

Récapitulatif

Si j'effectue "fichiers.nom LIKE '%Cat%à%dog%'" seulement, il n'y a aucun souci.

Si j'effectue "fiches.nom LIKE '%Cat%à%dog%' OR fiches.url LIKE '%Cat%à%dog%'", 18 résultats sont affichés (résultats identiques) alors que je m'attends à un seul (aussi bien sur PHPMyAdmin que sur le site).

Si j'effectue "fiches.nom OR fiches.url LIKE '%Cat%à%dog%'", 1 résultat pour PHPMyAdmin et aucun pour le site.

Eléphant du PHP | 217 Messages

19 janv. 2007, 08:58

Problème d'encodage avec utf8.
1 / Vérifie le charset de ta page web (qu'il soit bien en utf8)
2/ Avant d'executer ta requete, execute la requete ci-dessous :
SET NAMES UTF8

Mammouth du PHP | 2937 Messages

19 janv. 2007, 11:37

La page et la base de données sont en UTF-8.

Ta solution génère une erreur du type "supplied argument is not a valid MySQL result resource...".

Eléphant du PHP | 217 Messages

20 janv. 2007, 08:38

Il faut que tu envoie la requete au serveur :
$query = "SET NAMES 'utf8'";

Ensuite tu envoies tes requetes de sélections
$query= "SELECT champ FROM table ...";

Mammouth du PHP | 2937 Messages

29 janv. 2007, 19:06

Salut!

Finalement, en recourant à la fonction utf8_decode, tout rentre dans l'ordre. 8-)