Recherche multi critères [Resolu] - PHP - Programmation
Marsh Posté le 18-06-2012 à 15:45:50
1) fais un echo de ta requête SQL pour voir ce qu'elle fait.
2) dans ton moteur de recherche, ça serait bien de réafficher les paramètres saisis correspondant au résultat de la requête
Edit : dans mon logiciel de help-desk ASTRES (cf ma signature), j'ai codé pleins de moteurs de recherche de ce type. Tu peux regarder comment j'ai fait
Marsh Posté le 18-06-2012 à 15:53:23
Tes 2 remarques sont bonnes et je vais déjà les appliquer et voir ce que ça donne.
Je jeterai également un oeil sur ce logiciel.
Merci pour ton aide.
Marsh Posté le 18-06-2012 à 17:35:18
Je n'y suis toujours pas parvenu.
Voilà un aperçu de mon code avec tout d'abord le formulaire puis le traitement php.
Code :
|
Code :
|
Marsh Posté le 18-06-2012 à 17:43:44
<OPTION VALUE=null></OPTION> -> déjà, ça, c'est pas bon, vaudrait mieux mettre <OPTION VALUE=""></OPTION>
Pour info, pas besoin de faire $choix[$i++] = "....";
Tu peux faire direct : $choix[] = "...";
Pour savoir si t'as des critères, juste un if (!empty($choix)).
Et pour les and à ajouter entre les critères :
$critere = implode(" and ", $choix);
Marsh Posté le 18-06-2012 à 18:05:54
Le problème, c'est que dès le début, j'ai l'impression que mes critères sont toujours nuls
Code :
|
J'ai ajouté cette ligne pour voir les critères demandé et rien n'en sors comme critère.
Pour la fonction implode avec les AND, j'ai ce message d'erreur malgré que ce soit les bons arguments.
Warning: implode() [function.implode]: Bad arguments.
Marsh Posté le 19-06-2012 à 09:57:05
T'as quoi quand tu fais print_r($_POST); ?
Cela dit, lignes 8 et 10 du script rechercheOrdinateur.php me paraissent louches
Marsh Posté le 19-06-2012 à 10:33:07
Avec print_r($_POST);, j'obtiens bien les critères sélectionnés.
Si je choisis par exemple disque dur 320 Go, j'ai:
Array ( [Processeur] => [DisqueDur] => 320 [Ram] => [CG] => [ecran] => )
Concernant les lignes 8 et 10, il s'agissait de test que j'avais oublié de supprimer.
Code :
|
Marsh Posté le 19-06-2012 à 11:31:52
Problème résolu.
Tout d'abord dans mon code sur le formulaire, je faisais une grosse confusion entre l'attribut name et id et je fais appelle au nom donné dans l'id pour le sript php avec POST...
Rien ne pouvez en sortir donc. Ca m'a toujours rendu confu ces 2 attributs name et id.
Puis pour la condition qui commence en ligne 29, j'ai ajouté une incrémentation du compteur i pour chaque critère remplis.
Ce qui nous donne au final:
Code :
|
Merci pour ton aide rufo.
Marsh Posté le 19-06-2012 à 11:43:41
name => c'est le nom du champ dans le formulaire, récupéré côté serveur dans $_GET ou $_POST. Y'a que ds balise de formulaire qui peuvent avoir un name.
id => n'importe quelle balise peut avoir un id. Sert surtout pour le JS ( getElementById() ) ou le CSS.
Une balise peut avoir un name ET un id (et en plus, la valeur de ces 2 attributs peut être identique, mais c'est pas obligé).
Et pour info, pas de style dans le HTML (utilisation de l'attribut "style" dans le html à éviter au maximum -> utiliser css). Pareil, éviter le JS intrusif dans le html. JS uniquement dans des fichiers js.
Marsh Posté le 19-06-2012 à 11:43:47
plop
tu peux commencer par envoyer un array associatif directement, ca t'evitera de galerer ensuite et c'est plus clean
Code :
|
ca te permet de recup directement un array $criteria
Code :
|
code a l'arrache et pas testé mais le principe est normalement ok.
Marsh Posté le 19-06-2012 à 12:02:02
je t'ai commenté un peu tout ca.
sinon n'oublie pas d'echaper correctemment tes valeurs
mysql_real_escape($key) ou mysql_real_escape($value)
pour limiter les injections SQL (je sais plus c'est lequel pour postgres...)
tu peux aussi utiliser PDO et des statements pour faire ca propre.
Marsh Posté le 19-06-2012 à 12:10:35
ah et sinon 'extract()' c'est le mal..
a la limite 'extract($_POST, EXTR_PREFIX_ALL, "extracted_" );' pour prefixer ces nouvelles variables.
Marsh Posté le 19-06-2012 à 13:06:50
C'est clair, extract(), vaut mieux éviter ...
Marsh Posté le 18-06-2012 à 15:16:56
Bonjour,
Je bloque actuellement sur la manière de coder mon moteur de recherche sur mon site.
Je fais une vérification sur chaque critère pour voir s'ils possèdent une valeur auquel cas je les ajoute dans un tableau qui les régroupera toute en ayant déjà la forme prête pour la futur requête SQL.
Puis gràce à une boucle, je rajoute les AND de ma requête.
Grâce au compteur utilisé auparavant pour le tableau, je verifie s'il y a eu au moins un critère et je lance la requete avec le WHERE regroupant toutes les critères.
Voilà l'adresse du site pour vous faire une idée.
http://hightechservices.free.fr/ordinateur.php
Lors de n'importe quelle recherche, je retrouve toujours le seul est unique enregistrement contenu dans la table Ordinateur de ma base de données.
Avez-vous une idée sur ce qui ne va pas?
D'avance merci.
Message édité par fmdcc le 19-06-2012 à 11:39:23