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

Langage PHP Discussion :

Requête sur une fourchette chiffrée pour un moteur de recherche


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut Requête sur une fourchette chiffrée pour un moteur de recherche
    Toujours pour parfaire le moteur de recherche que j'ai développé (voir mes anciens post), j'ai inclus dans mon formulaire de recherche une valeur chiffrée (prix), compris dans une fourchette : entre 0 et 100 euros, entre 101 et 200 euros, etc.

    Je voudrais donc que ma requête aboutisse, c'est-à-dire que mon moteur de recherche ressorte les résultats de la fourchette donnée.

    Pour les autres requêtes de mon formulaire, cela donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <php if (isset($_POST['transaction']) && $_POST['transaction'] != "no") {
        $transaction = " AND transaction = '".mysql_real_escape_string($_POST['transaction'])."'";
    } else {
        $transaction = "";
    } ?>
    Mais cela n'est valable que si les champs de recherche sont strictement identiques aux champs de la base de données. J'ai bien essayé de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php if (isset($_POST['prix']) && $_POST['prix'] != "no") {
        if ('prix'>0 AND 'prix'<=45) {
        $prix = " AND prix = '".mysql_real_escape_string($_POST['prix'])."'";
    } else {
        $prix = "";
    }
    }
      ?>
    Quelle que soit la valeur que j'entre dans le champ, il m'affiche tous les résultats sans en tenir compte.

    Comment faire pour que la recherche respecte la valeur entrée dans la fourchette indiquée ?

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    que contient $_POST['prix'] ? est-ce que c'est une fourchette, ou une valeur numérique ?

    Quand tu fais 'prix'>0 AND 'prix'<=45, tu compares la chaîne de caractères "prix" avec les entiers 0 et 45... Il est normal que le résultat soit toujours le même quel que soit l'envoi du formulaire...

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    Dans ma base de données, j'ai précisé que c'était une valeur numérique (smallint) et non une valeur texte. Dans ce dernier cas, j'aurais sû comment résoudre la requête .

    Dans mon formulaire, je voudrais faire un menu déroulant proposant des fourchettes de prix : entre 0 et 100 euros, entre 101 et 200...

    Du coup, j'avais essayé de reprendre les mêmes valeurs pour émettre mes conditions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php if (isset($_POST['prix']) && $_POST['prix'] != "no") {
        if ('prix'>0 AND 'prix'<=100) {
        $prix = " AND prix = '".mysql_real_escape_string($_POST['prix'])."'";
    } 
     if ('prix'>100 AND 'prix'<=200) {
        $prix = " AND prix = '".mysql_real_escape_string($_POST['prix'])."'";
    }
     
    else {
        $prix = "";
    }
    }
      ?>
    Ceci est un exemple mais je voudrais effectivement que ma requête reprenne les valeurs chiffrées de la fourchette et scruter les valeurs de la base de données qui sont comprises dans cette fourchette.

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Si tes fourchettes sont linéaires, tu pourrais leur affecter une valeur numérique et utiliser cette valeur pour retrouver les bornes. Par exemple, "0" pour la fourchette "entre 0 et 100", "1" pour la fourchette "entre 101 et 200", "2" pour la fouchette "entre 101 et 200", etc... La borne min serait alors égale à la valeur de $_POST['prix'] multipliée par 100 et la borne max égale à la borne min + 100...

    ex (non testé) :
    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
    // formulaire
    <select name="prix">
        <option value="no">choisir une fourchette</option>
        <option value="0">entre 0 et 100</option>
        <option value="1">entre 100 et 200</option>
        <option value="2">entre 200 et 300</option>
        <option value="3">entre 300 et 400</option>
        <option value="4">entre 400 et 500</option>
    </select>
     
    <?php
    // code de traitement du formulaire
    $prix = "";
    if (isset($_POST['prix']) && $_POST['prix'] != "no"))
    {
        $borne_min = 100 * (int) $_POST['prix'];
        $borne_max = $borne_min + 100;
        $prix = ' AND prix BETWEEN '.$borne_min.' AND '.$borne_max;
    }
    Si les fourchettes ne sont pas linéaires, tu peux récupérer les bornes avec sscanf ou une expression régulière.

    ex (toujours pas testé) :
    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
    // formulaire
    <select name="prix">
        <option value="no">choisir une fourchette</option>
        <option>entre 0 et 100</option>
        <option>entre 100 et 250</option>
        <option>entre 250 et 400</option>
        <option>entre 400 et 800</option>
        <option>entre 800 et 2500</option>
    </select>
     
    <?php
    // code de traitement du formulaire
    $prix = "";
    if (isset($_POST['prix']) && $_POST['prix'] != "no"))
    {
        list($borne_min, $borne_max) = sscanf($_POST['prix'], 'entre %d et %d');
        $prix = ' AND prix BETWEEN '.$borne_min.' AND '.$borne_max;
    }

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    Merci pour ta réponse, j'utilise la première suggestion. Cependant, dans un soucis de compréhension, peux-tu me dire à quoi correspond $borne_min ?

    Est-ce que ça correspond à 100 + la valeur minimum de la fourchette que j'ai choisie, ou bien est-ce que c'est juste la valeur minimum de la fourchette que j'ai choisie ?

  6. #6
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    En fait j'ai compris tout seul comme un grand !

    $borne_min correspond à la valeur multiple minimale de chaque fourchette. Ce qui implique que les fourchettes de la liste soient déclinées sur le même multiple. Par exemple : entre 0 et 100, entre 100 et 200... et non pas entre 0 et 50, entre 50 et 150... Là avec ce code la recherche ne correspondra pas à la fourchette sélectionnée.



    Merci encore

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

Discussions similaires

  1. Outil pour requêter sur une base oracle
    Par redenil dans le forum Débuter
    Réponses: 2
    Dernier message: 18/03/2010, 22h16
  2. Requête sur une chaîne de caractères
    Par Hakunamatata dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/04/2006, 18h27
  3. Requête sur une partie d'un champ
    Par KEROZEN dans le forum Access
    Réponses: 4
    Dernier message: 26/03/2006, 20h50
  4. Requête sur une requête dynamique...
    Par kluh dans le forum Access
    Réponses: 4
    Dernier message: 17/11/2005, 19h59
  5. Conseils sur une API simple pour Windows
    Par alejandro dans le forum Choisir un environnement de développement
    Réponses: 4
    Dernier message: 28/04/2005, 18h12

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