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 plus simple et plus "jolie" [PHP 5.0]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Par défaut Requête plus simple et plus "jolie"
    Bonjour,
    J'ai ce morceau de 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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     $section=$_POST[section];
     $nom = $_POST[nom];
     $sexe = $_POST[sexe];
     $naissance = $_POST[naissance];
     $ville = $_POST[ville];
     $licence = $_POST[licence];
     $paye = $_POST[paye];
     $caution = $_POST[caution];
     $certif = $_POST[certif];
     $photo = $_POST[photo];
     $admail = $_POST[admail];
     
    if ($section != '')
     {
            $parametre1=" AND Section = '$section'";
            }
    // -------------------------------------------------------------------
    if ($nom != '')
     {
            $parametre2=" AND Nom LIKE '$nom%'";
            }
    // -------------------------------------------------------------------
    if ($sexe != '')
            {
            $parametre3=" AND Sexe = '$sexe'";
            }
    // -------------------------------------------------------------------
    if ($naissance != '')
     {
     $parametre4=" AND Date_naissance LIKE '%$naissance%'";
     }
    // -------------------------------------------------------------------
    if ($ville == '')
     {
     $parametre5='';
     }else{
     $parametre5=" AND Ville = '$ville'";
     } 
    // -------------------------------------------------------------------
    if ($licence == '')
     {
     $parametre6='';
     }else{
     $parametre6=" AND Licence LIKE '$licence%'";
     }
    // -------------------------------------------------------------------
    if ($paye != '')
            {
            $parametre7=" AND Paye = '$paye'";
            }
    // -------------------------------------------------------------------
    if ($caution != '')
            {
            $parametre8=" AND Caution = '$caution'";
            }
    // -------------------------------------------------------------------
    if ($certif != '')
            {
            $parametre9=" AND C_medical = '$certif'";
            }
    // -------------------------------------------------------------------
    if ($photo != '')
            {
            $parametre10=" AND Photo = '$photo'";
            }
    // -------------------------------------------------------------------
    if ($admail != '')
            {
            $parametre11=" AND Adresse_mail != ''";
            }
    // -------------------------------------------------------------------
    et cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query="SELECT ID, Section, Nom, Prenom, Sexe, Date_naissance, Adresse, Code_postal, Ville, Tel_perso, Tel_famille, Paye, Caution, C_medical, Photo, Licence, Adresse_mail FROM adherents WHERE 1 $parametre1 $parametre2 $parametre3 $parametre4 $parametre5 $parametre6 $parametre7 $parametre8 $parametre9 $parametre10 $parametre11 ORDER BY Nom ASC";
    Ca marche très bien, mais je trouve que c'est lourd et pas très élégant.
    Vous voyez une autre solution plus claire svp ?

  2. #2
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 108
    Par défaut
    ba deja tu peux mettre toutes tes conditions dans la même variable $parametre ? ou alors c est voulu je ne sais pas,

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Par défaut
    Citation Envoyé par marielaure2805 Voir le message
    ba deja tu peux mettre toutes tes conditions dans la même variable $parametre ? ou alors c est voulu je ne sais pas,
    Oui c'est voulu parce que chaque paramètre correspond à une case cochée ou une liste déroulante

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($_POST['section']) $parametre[] = "Section = '". $_POST['section'] ."'";
    if ($_POST['nom']) $parametre[] = "Nom LIKE '%". $_POST['nom'] ."%'";
    ...
     
    $query="SELECT ID, Section, Nom, Prenom, Sexe, Date_naissance, Adresse, Code_postal, Ville, Tel_perso, Tel_famille, Paye, Caution, C_medical, Photo, Licence, Adresse_mail FROM adherents WHERE ". (implode(" AND ", $parametre));
    J'ai pas testé mais ça devrait marcher.

  5. #5
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Je ferais 2 tableaux , un correspondant au requêtes nécessitant un like et un autre avec celles ayant une égalité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $arr = array();
    $arr_like = array();
     
    $arr['Section'] = $_POST['section'];
    $arr_like['Nom'] = $_POST['nom'];
    Puis tu traites chaque tableau pour chaque entrée tu crées tes conditions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql1 = '';
    foreach($arr as $key => $val)
    {
    $sql1 .= ' AND '. $key .' = "'.$val .'"';
    }
     
    $sql2 = '';
    foreach($arr_like as $key => $val)
    {
    $sql2 .= ' AND '. $key . ' LIKE "'.$val.'"';
    }
    Ce qui donnera la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query='SELECT ID, Section, Nom, Prenom, Sexe, Date_naissance, Adresse, Code_postal, Ville, Tel_perso, Tel_famille, Paye, Caution, C_medical, Photo, Licence, Adresse_mail FROM adherents WHERE 1 '.$sql1.$sq2;

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    J'y vais de ma version, toute procédurale, donc simple et rapide

    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
     
    <?php
    $section=$_POST[section];
    $nom = $_POST[nom];
    $sexe = $_POST[sexe];
    $naissance = $_POST[naissance];
    $ville = $_POST[ville];
    $licence = $_POST[licence];
    $paye = $_POST[paye];
    $caution = $_POST[caution];
    $certif = $_POST[certif];
    $photo = $_POST[photo];
    $admail = $_POST[admail];
     
    $buffer = '';
     
    if ($section != '') $buffer .= " AND Section = '$section'";
    if ($nom != '')     $buffer .= " AND Nom LIKE '$nom%'";
    if ($sexe != '')    $buffer .= " AND Sexe = '$sexe'";
    if ($naissance != '') $buffer .= " AND Date_naissance LIKE '%$naissance%'";
    if ($ville == '')   $buffer .= " AND Ville = '$ville'";
    if ($licence == '') $buffer .= " AND Licence LIKE '$licence%'";
    if ($paye != '')    $buffer .= " AND Paye = '$paye'";
    if ($caution != '') $buffer .= " AND Caution = '$caution'";
    if ($certif != '')  $buffer .= " AND C_medical = '$certif'";
    if ($photo != '')   $buffer .= " AND Photo = '$photo'";
    if ($admail != '')  $buffer .= " AND Adresse_mail != ''";
     
    $query="SELECT ID, Section, Nom, Prenom, Sexe, Date_naissance, Adresse, Code_postal, Ville, Tel_perso, Tel_famille, Paye, Caution, C_medical, Photo, Licence, Adresse_mail FROM adherents WHERE 1 $buffer ORDER BY Nom ASC";

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Par défaut
    Bonjour,

    J'ai adopté la méthode de jml94.
    Non pas que les autres étaient mauvaises, mais celle-ci est la plus simple et la plus "claire" aussi à mes yeux.

    Merci en tout cas de votre aide

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 16/08/2010, 00h23
  2. Réponses: 6
    Dernier message: 09/11/2007, 09h38
  3. [layout]il existe pas des layout plus simple et plus rapide?
    Par soad dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 28/11/2005, 11h03

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