+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité régulier
    Inscrit en
    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.

  2. #2
    Invité régulier
    Inscrit en
    juin 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 36
    Points : 7
    Points
    7

    Par défaut

    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.

  3. #3
    Expert Confirmé Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    mai 2002
    Messages
    2 348
    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 348
    Points : 3 160
    Points
    3 160

    Par défaut

    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)

  4. #4
    Invité régulier
    Inscrit en
    juin 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 36
    Points : 7
    Points
    7

    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
    Expert Confirmé Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    mai 2002
    Messages
    2 348
    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 348
    Points : 3 160
    Points
    3 160

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •