Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & PostgreSQL
PHP & PostgreSQL Forum d'entraide sur PostgreSQL avec PHP. Avant de poster -> FAQ PostgreSQL, Cours PostgreSQL. Pour les questions concernant le moteur PostgreSQL plutôt que les fonctions PHP, merci d'utiliser le forum PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/06/2012, 15h14   #1
FMDCC
Invité régulier
 
Inscription : juin 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 36
Points : 7
Points : 7
Par défaut Recherche multi critères

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.
FMDCC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2012, 10h47   #2
FMDCC
Invité régulier
 
Inscription : juin 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 36
Points : 7
Points : 7
Voilà la partie de mon code où je pense que le problème ce trouve:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?
			// connexion
			include('secure/config.php');
			pg_connect("host=$SQLhost user=$SQLlogin password=$SQLpass dbname=$SQLdbname")
			or die("Impossible de se connecter");
 
			// on récupère les critères sélectionnés
            extract($_POST);
 
            $i = 0;
 
            // si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.
            if(!empty($lst_processeur)) { $choix[] = "processeur = '$lst_processeur'"; }
            if(!empty($lst_hdd)) { $choix[] = "hdd = '$lst_hdd'"; }
            if(!empty($lst_ram)) { $choix[] = "ram = '$lst_ram'"; }
            if(!empty($lst_cg)) { $choix[] = "cg = '$lst_cg'"; }
            if(!empty($lst_ecran)) { $choix[] = "cg = '$lst_ecran'"; }
 
            // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
            $critere = $choix[0]." ";
 
            for($j=1;$j<$i;$j++) 
            {
                $critere .= " AND ".$choix[$j]." ";
            }
			// $critere = implode(" and ", $choix);
 
            // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
            if($i > 0) 
                {
                // requete de selection
				$query = "SELECT * FROM ordinateur WHERE $critere ORDER BY prix";
                }
 
            // si $i = 0, alors l'utilisateur n'a pas saisi de critère, là soit on fait la même requete mais sans "WHERE $critere", soit on lui demande de saisir au moins un critère.
            else 
                {
                $query = "SELECT * FROM ordinateur ORDER BY prix";
                }
 
			print_r($_POST);
 
			$result = pg_query($query);
			pg_close();
 
			while($ligne = pg_fetch_array($result)){
			?>
Le problème vient de la condition qui commence en ligne 29.
$i n'est jamais > 0 même lorsqu'il y a des critères.
FMDCC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2012, 11h13   #3
Fench
Expert Confirmé
 
Avatar de Fench
 
Homme
Chercheur en informatique
Inscription : mai 2002
Messages : 2 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Groenland

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2002
Messages : 2 346
Points : 3 231
Points : 3 231
Bonjour,

Vu ton code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
           $i = 0;
 
            // si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.
            if(!empty($lst_processeur)) { $choix[] = "processeur = '$lst_processeur'"; }
            if(!empty($lst_hdd)) { $choix[] = "hdd = '$lst_hdd'"; }
            if(!empty($lst_ram)) { $choix[] = "ram = '$lst_ram'"; }
            if(!empty($lst_cg)) { $choix[] = "cg = '$lst_cg'"; }
            if(!empty($lst_ecran)) { $choix[] = "cg = '$lst_ecran'"; }
 
            // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
            $critere = $choix[0]." ";
 
            for($j=1;$j<$i;$j++)
Alors $i sera toujours = à 0, c'est $j qui varie
__________________
Meuuh en AI à l'INRA
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2012, 11h41   #4
FMDCC
Invité régulier
 
Inscription : juin 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 36
Points : 7
Points : 7
Oui c'est bien là le problème. je venais juste de m'en rendre compte et j'allais poster que le problème était résolu.

merci quand même pour ton aide.
FMDCC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2012, 12h14   #5
Fench
Expert Confirmé
 
Avatar de Fench
 
Homme
Chercheur en informatique
Inscription : mai 2002
Messages : 2 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Groenland

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2002
Messages : 2 346
Points : 3 231
Points : 3 231
Petite remarque pour la prochaine fois: il existe une balise résolue cela évite de changer le titre comme tu le fais.

Bonne journée
__________________
Meuuh en AI à l'INRA
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h50.


 
 
 
 
Partenaires

Hébergement Web