IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Recherche multi critères [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Points : 49
    Points
    49
    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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Points : 49
    Points
    49
    Par défaut
    Voilà la partie de mon code où je pense que le problème ce trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    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 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Vu ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Points : 49
    Points
    49
    Par défaut
    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.

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    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 353
    Points : 3 390
    Points
    3 390
    Par défaut
    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)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Recherche multi-critères ou un seul
    Par jack1234 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2005, 08h56
  2. Recherche multi-critères
    Par PAUL87 dans le forum Access
    Réponses: 66
    Dernier message: 13/12/2005, 12h12
  3. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 19h33
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo