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 :

Formulaire avec 15 critères de choix


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 110
    Points : 73
    Points
    73
    Par défaut Formulaire avec 15 critères de choix
    Bonjour à tous,

    Je travaille en php5 et PhpMyadmin.

    Je désire créer un formulaire dans lequel je vais proposer 15 critères avec un choix oui/non

    En fin de formulaire je pense récupérer la valeur de chaque variable et tester leur valeur (avec des IF ... ELSE ...) pour créer une variable qui représentera ma clause WHERE.
    dans une requête SQL.

    Mon problème est que je n'ai pas encore commencé et que pour créer ma variable finale il va falloir que je "teste" tous les cas de figure soit 2 puissance 15 possibilités (plus de 32 000)

    La saisie des 32 000 IF ne me dérange pas forcément mais je me dit qu'il y a peut-être une manière de faire plus intelligente d'autant plus qu'ensuite j'ai un peu peur du temps que la requête va prendre.

    J'espère avoir été clair et je remercie d'avance celui ou celle qui pourra m'éclairer.

  2. #2
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    32 000 if

    Non clairement il faut éviter, ne serait-ce que pour la maintenance

    Peut-tu donner un peu d'explication sur le sujet, surtout concernant les 12 test. Il y a forcement un moyen de gérer le problème autrement.

    Par exemple imaginons un cas simple :
    Une recherche dans une base de données de client avec deux choix : chercher un nom et/ou un prénom.

    D'après ce que j'ai compris de comment tu souhaiterais faire cela serrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(nom && !prenom)
    SELECT * FROM clients WHERE nom = "nom";
    else if (!nom && prenom)
    SELECT * FROM clients WHERE prenom = "prenom";
    else if(nom && prenom)
    SELECT * FROM clients WHERE nom = "nom" AND prenom = "prenom";
    else
    SELECT * FROM clients;
    La solution basique pour ce problème est de générer la requête SQL "dynamiquement" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $where = array();
    if(!empty($_GET['nom'])
    $where[] = 'nom = "' . $_GET['nom'] . '"';
    if(!empty($_GET['prenom'])
    $where[] = 'prenom = "' . $_GET['prenom'] . '"';
     
    $sql = "SELECT * FROM clients";
    if(count($where) > 1){
        $sql .= ' WHERE ' . $where[0];
        for($i = 1; $i < count($where); $i++)
            $sql .= ' AND ' . $where[$i];
    }
    //exécution de la requête
    Ce code n'est pas optimisé mais donne une idée de l'approche à avoir.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 110
    Points : 73
    Points
    73
    Par défaut
    La requête dynamique me plaît mais le problème est que mes champs ne sont vides ou renseignés mais avec oui ou non.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 110
    Points : 73
    Points
    73
    Par défaut
    Ma remarque est idiote. Dans le cas de variables renseignées ou vides il y a 2 cas (ton exemple) dans le cas du oui/non il y en a 4.
    Et pour 15 critères cela ferait 60 cas soit 500 fois moins que prévu. Je tests et je te réponds

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 110
    Points : 73
    Points
    73
    Par défaut
    Je vois cela demain. Merci car je penses que la solution est dans ta proposition.. Bonne soirée

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 110
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    J'ai écrit et testé mon script en suivant ta proposition et ça marche à merveille.

    Merci pour le conseil et le temps gagné.

    Bonne fin de journée.

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 548
    Points
    16 548
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Le code d'humitake n'est pas simple, voici comment faire :
    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
    <?php
     
    $where = array();
     
    if ( ! empty($_GET['nom']) {
       $where[] = 'nom = "' . $_GET['nom'] . '"';
    }
    if ( ! empty($_GET['prenom']) {
       $where[] = 'prenom = "' . $_GET['prenom'] . '"';
    }
     
    $sql_where = (empty($where)) ? null : ' WHERE '.implode(' AND ', $where);
    $sql = 'SELECT * FROM clients'.$sql_where;
     
    ?>

  8. #8
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Effectivement c'est mieux, par contre il te manque une parenthèse fermente à tes if et il faut retirer les double quotes lors du push sinon il y en aura en trop.

    Il faudrait que je me force à utiliser implode() plus souvent, c'est quand même bien pratique

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
     
    $where = array();
     
    if ( ! empty($_GET['nom'])) {
       $where[] = 'nom = ' . $_GET['nom'];
    }
    if ( ! empty($_GET['prenom'])) {
       $where[] = 'prenom = ' . $_GET['prenom'];
    }
     
    $sql_where = (empty($where)) ? null : ' WHERE '.implode(' AND ', $where);
    $sql = 'SELECT * FROM clients'.$sql_where;
     
    ?>

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

Discussions similaires

  1. [XL-2003] obtenir une donnée avec plusieurs critères de choix
    Par spico45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2009, 14h34
  2. Réponses: 2
    Dernier message: 30/10/2008, 19h30
  3. Rechdom dans un formulaire avec deux critères
    Par isabelle b dans le forum IHM
    Réponses: 11
    Dernier message: 13/05/2008, 01h28
  4. ouvrir un formulaire avec un critère précis, est-ce possible?
    Par Utilisateur débutant dans le forum IHM
    Réponses: 4
    Dernier message: 02/01/2008, 12h09
  5. formulaire avec une liste a choix multiples
    Par pogy dans le forum Langage
    Réponses: 22
    Dernier message: 03/05/2006, 01h12

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