Page 1 sur 1

Requête au résultat variable

Posté : 18 janv. 2007, 17:22
par Victor BRITO
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:

Posté : 18 janv. 2007, 17:32
par Ajoloca
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%'

Posté : 18 janv. 2007, 17:44
par Victor BRITO
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).

Posté : 18 janv. 2007, 17:48
par Ajoloca
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

Posté : 18 janv. 2007, 17:50
par Victor BRITO
Justement, j'ai essayé "fichiers.nom LIKE '...' OR fichiers.url LIKE '...'" et ça donne un résultat inattendu pour le nombre.

Posté : 18 janv. 2007, 17:53
par Ajoloca
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

Posté : 18 janv. 2007, 17:57
par Victor BRITO
Les parenthèses ne résolvent rien.

Posté : 18 janv. 2007, 17:58
par momox
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 ;)
@+

Posté : 18 janv. 2007, 18:03
par Victor BRITO
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.

Posté : 19 janv. 2007, 08:58
par mojorisin
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

Posté : 19 janv. 2007, 11:37
par Victor BRITO
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...".

Posté : 20 janv. 2007, 08:38
par mojorisin
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 ...";

Posté : 29 janv. 2007, 19:06
par Victor BRITO
Salut!

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