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 multicritères paramétrée par un formulaire [MySQL]


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Recherche multicritères paramétrée par un formulaire
    Bonjour,
    Malgré pas mal d'heure de recherche sur les forums je n'ai pas trouvé la solution complète à mon problème.

    Mon objectif : trier dans une table les enregistrements vérifiant 2 critères sélectionnés dans des menus déroulants (les éléments de chaque menu déroulant proviennent d'une table différente).Jusqu'ici je vois ce qu'il faut faire.

    Si aucun des 2 critères n'est sélectionné c'est à dire si les menus déroulants restent sur "tout" la requête renvoie l'ensemble des enregistrements.Si un seul des 2 critères est activé la requête ne tient compte que de ce seul critère.
    (Je me limite pour l'instant à 2 critères mais j'aimerai en mettre d'avantage.)

    Tables utilisées:
    affaires contenant:id, intitule,nature_tache,id_agent1,id_domaine
    agents contenant:id, nom,prenom
    domaines contenant:id,domaine

    Pages php:
    rech_multi_aff.php : formulaire de paramétrage de la requête. Méthode GET, 2 variables URL utilisées : $_GET['choix_pren'] et $_GET['choix_dom']
    affic_rech_multi_aff.php : page d'affichage des résultats de la requête


    Formulaire de sélection :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <?php require_once('Connections/ConnexionCCED.php'); ?>
    <?php
    if(!isset($_GET['choix_pren']))$_GET['choix_pren']=1;
    if(!isset($_GET['choix_dom']))$_GET['choix_dom']=1;
    //init d'utilisateurs si non déclaré
    ?>
     
    <?php
     
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    $query_rs_agent1 = "SELECT * FROM agents";
    $rs_agent1 = mysql_query($query_rs_agent1, $ConnexionCCED) or die(mysql_error());
    $row_rs_agent1 = mysql_fetch_assoc($rs_agent1);
    $totalRows_rs_agent1 = mysql_num_rows($rs_agent1);
     
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    $query_rs_dom = "SELECT * FROM domaines";
    $rs_dom = mysql_query($query_rs_dom, $ConnexionCCED) or die(mysql_error());
    $row_rs_dom = mysql_fetch_assoc($rs_dom);
    $totalRows_rs_dom = mysql_num_rows($rs_dom);
    ?>
    <!DOCTYPE html> 
    <html lang="fr">
    <head>   
    <meta http-equiv="content-type" content="text/html; charset="utf-8" />
    <link rel="stylesheet" href="style/style_def.css" />
    <script src="script.js"></script>
     
    </head>
     
    	<body>
              <div id="region_modif1">
                <form name="form1" method="get" action="affic_rech_multi_aff.php">
                  <table width="200" border="1">
                    <tr>
                      <td>Agent1:</td>
                      <td><select name="select" size="1" id="select">
                        <option value="0" <?php if (!(strcmp(0, $_GET['choix_pren']))) {echo "selected=\"selected\"";} ?>>TOUT</option>
                        <?php
    do {  
    ?>
                        <option value="<?php echo $row_rs_agent1['id']?>"<?php if (!(strcmp($row_rs_agent1['id'], $_GET['choix_pren']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rs_agent1['prenom']?></option>
                        <?php
    } while ($row_rs_agent1 = mysql_fetch_assoc($rs_agent1));
      $rows = mysql_num_rows($rs_agent1);
      if($rows > 0) {
          mysql_data_seek($rs_agent1, 0);
    	  $row_rs_agent1 = mysql_fetch_assoc($rs_agent1);
      }
    ?>
                      </select></td>
                      <td>&nbsp;</td>
                      <td>Domaine:</td>
                      <td><select name="select2" size="1" id="select2">
                        <option value="1" <?php if (!(strcmp(1, $_GET['choix_dom']))) {echo "selected=\"selected\"";} ?>>TOUT</option>
                        <?php
    do {  
    ?>
                        <option value="<?php echo $row_rs_dom['id']?>"<?php if (!(strcmp($row_rs_dom['id'], $_GET['choix_dom']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rs_dom['domaine']?></option>
                        <?php
    } while ($row_rs_dom = mysql_fetch_assoc($rs_dom));
      $rows = mysql_num_rows($rs_dom);
      if($rows > 0) {
          mysql_data_seek($rs_dom, 0);
    	  $row_rs_dom = mysql_fetch_assoc($rs_dom);
      }
    ?>
                      </select></td>
                    </tr>
                    <tr>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                      <td><input type="submit" name="button" id="button" value="Envoyer"></td>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                    </tr>
                  </table>
                  <p>&nbsp;</p>
                </form>
              <p>&nbsp;</p></div>
     
    	</body>
    </html>
    <?php
    mysql_free_result($rs_agent1);
     
    mysql_free_result($rs_dom);
    ?>
    Page traitant les requêtes :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    <?php require_once('Connections/ConnexionCCED.php'); ?>
    <?php
    //init des variables si non déclarées
    if(!isset($_GET['choix_pren']))$_GET['choix_pren']="";
    if(!isset($_GET['choix_dom']))$_GET['choix_dom']="";
    ?>
     
    <?php
     
    //// Définitions de variables :///
    $crit_1=$_GET['choix_pren'];
    $crit_2=$_GET['choix_dom'];
     
     
    //// Définitions des choix critère 1 et 2 activés ? /////
     
    if (isset ($_GET['choix_pren']))
    	{
    		$clause_crit_1_where="WHERE id_agent1=$crit_1";
    		$clause_crit_1_and="AND id_agent1=$crit_1";
    	}
    elseif (!isset($_GET['choix_pren']))
    	{
    		$clause_crit_1_where=="";
    		$clause_crit_1_and=="";
    	}
     
     
    if (isset ($_GET['choix_dom']))
    	{
    		$clause_crit_2_where="WHERE id_domaine=$crit_2";
    		$clause_crit_2_and="AND id_domaine=$crit_2";
    	}
     
    elseif (!isset ($_GET['choix_dom']))
    	{
    		$clause_crit_2_where=="";
    		$clause_crit_2_and=="";
    	}
    //// Listes des requêtes////
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    if ($crit_1=="" AND $crit_2=="")
     	{    //// La requête///
    		$requet="SELECT intitule,nature_tache,id_domaine,id_agent1 FROM affaires";
    		//// Son résultat ////
    		$reponse= mysql_query($requet, $ConnexionCCED) or die(mysql_error());
    		$ligne = mysql_fetch_array($reponse);
    	 }
    elseif ($crit_1=="")
    	{
    	   //// La requête///
    		$requet="SELECT intitule,nature_tache,id_domaine,id_agent1 FROM affaires WHERE id_domaine='$crit_2'";
    		//// Son résultat ////
    		$reponse= mysql_query($requet, $ConnexionCCED) or die(mysql_error());
    		$ligne = mysql_fetch_array($reponse);
     
    	}
    elseif ($crit_2=="")
    	{
    	   //// La requête///
    		$requet="SELECT intitule,nature_tache,id_domaine,id_agent1 FROM affaires WHERE id_agent1='$crit_1'";
    		//// Son résultat ////
    		$reponse= mysql_query($requet, $ConnexionCCED) or die(mysql_error());
    		$ligne = mysql_fetch_array($reponse);
    	}
    else  //// si les 2 critères ont été activés////
    	{
    		//// La requête///
    		$requet="SELECT intitule,nature_tache,id_domaine,id_agent1 FROM affaires WHERE id_agent1='$crit_1' AND id_domaine='$crit_2'";
    		//// Son résultat ////
    		$reponse= mysql_query($requet, $ConnexionCCED) or die(mysql_error());
    		$ligne = mysql_fetch_array($reponse);
    	}
    ?>
    <!DOCTYPE html> 
    <html lang="fr">
    <head>   
    <meta http-equiv="content-type" content="text/html; charset="utf-8" />
    <link rel="stylesheet" href="style/style_def.css" />
    <script src="script.js"></script>
    </head>
     
    	<body>
     
              <div id="region_modif1">
              <table id="tableau">
      <tr>
        <td>intitule</td>
        <td>nature_tache</td>
        <td>id_domaine</td>
        <td>id_agent1</td>
       </tr>
      <?php do { ?>
        <tr>
          <td><?php echo $ligne['intitule']; ?></td>
          <td><?php echo $ligne['nature_tache']; ?></td>
          <td><?php echo $ligne['id_domaine']; ?></td>
          <td><?php echo $ligne['id_agent1']; ?></td>  
        </tr>
        <?php } while ($ligne = mysql_fetch_array($reponse)); ?>
    </table>
       </div>
    	</body>
    <!-- InstanceEnd --></html>
    Problème :
    Quelle que soit la sélection des critère1 et critère 2 la requête renvoie systématiquement l'ensemble des enregistrements.
    Pourtant le formulaire renvoie bien les 2 variables $_GET.
    Je n'arrive pas à faire afficher le choix "tout" systématiquement au démarrage du formulaire

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    voici une façon de s'y prendre :
    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
    <?php
    // connexion a la bd
    include ('./connexion-bd.php');
     
    // -------------------
    // initialisation/récupération des variables + protection contre injection sql
    $critere1 = (isset($_POST['choix_1']))? mysql_real_escape_string($_POST['choix_1']) : '';
    $critere2 = (isset($_POST['choix_2']))? mysql_real_escape_string($_POST['choix_2']) : '';
    $critere3 = (isset($_POST['choix_3']))? mysql_real_escape_string($_POST['choix_3']) : '';
    // [........]
     
    // -------------------
    // RECHERCHE : construction du WHERE ...
    $is_where = 0;
    $clauseWhereAnd = "";
     
    if ($critere1!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " le_critere_1 LIKE '%".$critere1."%' ";
    	$is_where = 1;
    }
    if ($critere2!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " le_critere_2 LIKE '%".$critere2."%' ";
    	$is_where = 1;
    }
    if ($critere3!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " le_critere_3 LIKE '%".$critere3."%' ";
    	$is_where = 1;
    }
    // [........]
     
    // -------------------
    // RECHERCHE : REQUETE
    $recherche_requete = "SELECT * FROM T_LATABLE ".$clauseWhereAnd.";";
    $recherche_resultat = mysql_query($recherche_requete, $ConnexionCCED) or die(mysql_error());
    // affichage
    while($recherche_ligne = mysql_fetch_array($recherche_resultat))
    {
    	// [........]
    }
    // -------------------
    ?>
    ps : en fonction du type de recherche souhaité, on peut remplacer :
    - " AND " ("tous les critères") -> par " OR " ("au moins 1 critère")
    - ... LIKE '%".$criterex."%' "; ("comme ...) -> par ... = '".$criterex."' "; (égal à)

    ps2 : ici, j'ai choisi <form method="post" ...>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour Jérôme,
    et merci de t'intéresser à mon problème. En suivant tes conseils j'ai modifié le formulaire de cette façon :

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    <?php require_once('Connections/ConnexionCCED.php'); ?>
    <?php
    if(!isset($_POST['choix_1']))$_POST['choix_1']=0;
    if(!isset($_POST['choix_2']))$_POST['choix_2']=0;
    //init d'utilisateurs si non dclar
    ?>
     
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
     
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
     
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
     
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    $query_rs_agent1 = "SELECT * FROM agents";
    $rs_agent1 = mysql_query($query_rs_agent1, $ConnexionCCED) or die(mysql_error());
    $row_rs_agent1 = mysql_fetch_assoc($rs_agent1);
    $totalRows_rs_agent1 = mysql_num_rows($rs_agent1);
     
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    $query_rs_dom = "SELECT * FROM domaines";
    $rs_dom = mysql_query($query_rs_dom, $ConnexionCCED) or die(mysql_error());
    $row_rs_dom = mysql_fetch_assoc($rs_dom);
    $totalRows_rs_dom = mysql_num_rows($rs_dom);
    ?>
    <!DOCTYPE html> 
    <html lang="fr"><!-- InstanceBegin template="/Templates/index_public.dwt.php" codeOutsideHTMLIsLocked="false" --> 
    <head>   
    <meta http-equiv="content-type" content="text/html; charset="utf-8" />
     
    <link rel="stylesheet" href="style/style_def.css" />
    <script src="script.js"></script>
     
    </head>
     
    	<body>
        <header>
     
        </header>
     
          <nav>
            <ul id="nav">
              <li> <a href="#">Administration</a></li>
              <li> <a href="file:///C|/wamp/www">Suivi Affaires</a>
                <ul class="sousMenu">
                  <li><a href="Public/tt_affaires.php">Toutes les affaires</a></li>
                  <li><a href="Public/rech_mult_aff.php">Recherche multi-critres</a></li>
                  <li><a href="Public/rech_mot_aff.php">Recherche par mot cls</a></li>
                </ul>
              </li>
              <li> <a href="#">Suivi Marchs</a>
                <ul class="sousMenu">
                  <li><a href="#">Tous les marchs</a></li>
                  <li><a href="#">Recherche multi-critres</a></li>
                  <li><a href="#">Recherche par mot cls</a></li>
                </ul>
              </li>
              <li> <a href="#">Suivi Etudes</a>
                <ul class="sousMenu">
                  <li><a href="#">Toutes les tudes</a></li>
                  <li><a href="#">Recherche multi-critres</a></li>
                  <li><a href="#">Recherche par mot cls</a></li>
                </ul>
              </li>
            </ul>
     
              <div id="region_modif1">
                <form name="form1" method="post" action="affic_rech_multi_aff2.php">
                  <table width="200" border="1">
                    <tr>
                      <td>Agent1:</td>
                      <td><select name="select" size="1" id="select">
                        <option value="0" <?php if (!(strcmp(0, $_POST['choix_1']))) {echo "selected=\"selected\"";} ?>>TOUT</option>
                        <?php
    do {  
    ?>
                        <option value="<?php echo $row_rs_agent1['id']?>"<?php if (!(strcmp($row_rs_agent1['id'], $_POST['choix_1']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rs_agent1['prenom']?></option>
                        <?php
    } while ($row_rs_agent1 = mysql_fetch_assoc($rs_agent1));
      $rows = mysql_num_rows($rs_agent1);
      if($rows > 0) {
          mysql_data_seek($rs_agent1, 0);
    	  $row_rs_agent1 = mysql_fetch_assoc($rs_agent1);
      }
    ?>
                      </select></td>
                      <td>&nbsp;</td>
                      <td>Domaine:</td>
                      <td><select name="select2" size="1" id="select2">
                        <option value="1" <?php if (!(strcmp(1, $_POST['choix_2']))) {echo "selected=\"selected\"";} ?>>TOUT</option>
                        <?php
    do {  
    ?>
                        <option value="<?php echo $row_rs_dom['id']?>"<?php if (!(strcmp($row_rs_dom['id'], $_POST['choix_2']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rs_dom['domaine']?></option>
                        <?php
    } while ($row_rs_dom = mysql_fetch_assoc($rs_dom));
      $rows = mysql_num_rows($rs_dom);
      if($rows > 0) {
          mysql_data_seek($rs_dom, 0);
    	  $row_rs_dom = mysql_fetch_assoc($rs_dom);
      }
    ?>
                      </select></td>
                    </tr>
                    <tr>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                      <td><input type="submit" name="button" id="button" value="Envoyer"></td>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                    </tr>
                  </table>
                  <p>&nbsp;</p>
                </form>
              <p>&nbsp;</p></div>
            <!-- InstanceEndEditable --></nav>
        </section>
     
    	</body>
    </html>
    <?php
    mysql_free_result($rs_agent1);
     
    mysql_free_result($rs_dom);
    ?>
    J'ai été obligé de rajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!isset($_POST['choix_1']))$_POST['choix_1']=0;
    if(!isset($_POST['choix_2']))$_POST['choix_2']=0;
    Sinon le navigateur m'indiquait que les variables étaient inconnues.

    Sur la page d'affichage j'ai modifié le code de cette façon
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?php require_once('Connections/ConnexionCCED.php'); ?>
     
     
    <?php
    // initialisation/récupération des variables + protection contre injection sql
    $critere1 = (isset($_POST['choix_1']))? mysql_real_escape_string($_POST['choix_1']) : '';
    $critere2 = (isset($_POST['choix_2']))? mysql_real_escape_string($_POST['choix_2']) : '';
    $critere3 = (isset($_POST['choix_3']))? mysql_real_escape_string($_POST['choix_3']) : '';
    // [........]
     
    // -------------------
    // RECHERCHE : construction du WHERE ...
    $is_where = 0;
    $clauseWhereAnd = "";
     
    if ($critere1!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " id_agent1 LIKE '%".$critere1."%' ";
    	$is_where = 1;
    }
    if ($critere2!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " id_domaine LIKE '%".$critere2."%' ";
    	$is_where = 1;
    }
     
    // [........]
     
    // -------------------
    // RECHERCHE : REQUETE
    $recherche_requete = "SELECT * FROM affaires ".$clauseWhereAnd.";";
    $recherche_resultat = mysql_query($recherche_requete, $ConnexionCCED) or die(mysql_error());
    // affichage
    //while($recherche_ligne = mysql_fetch_array($recherche_resultat))//
    {
    	// [........]
    }
    // -------------------
    ?>
    <!DOCTYPE html> 
    <html lang="fr"><!-- InstanceBegin template="/Templates/index_public.dwt.php" codeOutsideHTMLIsLocked="false" --> 
    <head>   
    <meta http-equiv="content-type" content="text/html; charset="utf-8" />
    <link rel="stylesheet" href="style/style_def.css" />
    <script src="script.js"></script>
     
    </head>
     
    	<body>
        <header>
     
        </header>
     
          <nav>
            <ul id="nav">
              <li> <a href="#">Administration</a></li>
              <li> <a href="file:///C|/wamp/www">Suivi Affaires</a>
                <ul class="sousMenu">
                  <li><a href="Public/tt_affaires.php">Toutes les affaires</a></li>
                  <li><a href="Public/rech_mult_aff.php">Recherche multi-critres</a></li>
                  <li><a href="Public/rech_mot_aff.php">Recherche par mot cls</a></li>
                </ul>
              </li>
              <li> <a href="#">Suivi Marchs</a>
                <ul class="sousMenu">
                  <li><a href="#">Tous les marchs</a></li>
                  <li><a href="#">Recherche multi-critres</a></li>
                  <li><a href="#">Recherche par mot cls</a></li>
                </ul>
              </li>
              <li> <a href="#">Suivi Etudes</a>
                <ul class="sousMenu">
                  <li><a href="#">Toutes les tudes</a></li>
                  <li><a href="#">Recherche multi-critres</a></li>
                  <li><a href="#">Recherche par mot cls</a></li>
                </ul>
              </li>
            </ul>
    </nav>
     
                  <div id="region_modif1">
              <table id="tableau">
      <tr>
        <td>intitule</td>
        <td>nature_tache</td>
        <td>id_domaine</td>
        <td>id_agent1</td>
       </tr>
      <?php do { ?>
        <tr>
          <td><?php echo $recherche_ligne['intitule']; ?></td>
          <td><?php echo $recherche_ligne['nature_tache']; ?></td>
          <td><?php echo $recherche_ligne['id_domaine']; ?></td>
          <td><?php echo $recherche_ligne['id_agent1']; ?></td>  
        </tr>
        <?php } while ($recherche_ligne = mysql_fetch_array($recherche_resultat)); ?>
    </table>
       </div>
    	</body>
    </html>
    Mais le navigateur m'indique undefined variable au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <td><?php echo $recherche_ligne['intitule']; ?></td>
          <td><?php echo $recherche_ligne['nature_tache']; ?></td>
          <td><?php echo $recherche_ligne['id_domaine']; ?></td>
          <td><?php echo $recherche_ligne['id_agent1']; ?></td>
    Tu vois ce qui plante ?? Sachant que je teste le code avec dreamweaver.

    Un grand merci d'ores et déjà pour ton aide.

  4. #4
    Invité
    Invité(e)
    Par défaut
    do ... while ne marche pas ici. Il faut utiliser while ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      <?php while ($recherche_ligne = mysql_fetch_array($recherche_resultat)) { ?>
        <tr>
          <td><?php echo $recherche_ligne['intitule']; ?></td>
          <td><?php echo $recherche_ligne['nature_tache']; ?></td>
          <td><?php echo $recherche_ligne['id_domaine']; ?></td>
          <td><?php echo $recherche_ligne['id_agent1']; ?></td>  
        </tr>
        <?php } ?>
    et :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    <?php require_once('Connections/ConnexionCCED.php'); ?>
    <?php
    //init d'utilisateurs si non dclar
    $choix_1 = (isset($_POST['choix_1']))? $_POST['choix_1'] : 0;
    $choix_2 = (isset($_POST['choix_2']))? $_POST['choix_2'] : 0;
    ?>
     
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
     
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
     
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
     
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    $query_rs_agent1 = "SELECT * FROM agents";
    $rs_agent1 = mysql_query($query_rs_agent1, $ConnexionCCED) or die(mysql_error());
    $row_rs_agent1 = mysql_fetch_assoc($rs_agent1);
    $totalRows_rs_agent1 = mysql_num_rows($rs_agent1);
     
    mysql_select_db($database_ConnexionCCED, $ConnexionCCED);
    $query_rs_dom = "SELECT * FROM domaines";
    $rs_dom = mysql_query($query_rs_dom, $ConnexionCCED) or die(mysql_error());
    $row_rs_dom = mysql_fetch_assoc($rs_dom);
    $totalRows_rs_dom = mysql_num_rows($rs_dom);
    ?>
    <!DOCTYPE html> 
    <html lang="fr"><!-- InstanceBegin template="/Templates/index_public.dwt.php" codeOutsideHTMLIsLocked="false" --> 
    <head>   
    <meta http-equiv="content-type" content="text/html; charset="utf-8" />
     
    <link rel="stylesheet" href="style/style_def.css" />
    <script src="script.js"></script>
     
    </head>
     
    	<body>
        <header>
     
        </header>
     
          <nav>
            <ul id="nav">
              <li> <a href="#">Administration</a></li>
              <li> <a href="file:///C|/wamp/www">Suivi Affaires</a>
                <ul class="sousMenu">
                  <li><a href="Public/tt_affaires.php">Toutes les affaires</a></li>
                  <li><a href="Public/rech_mult_aff.php">Recherche multi-critres</a></li>
                  <li><a href="Public/rech_mot_aff.php">Recherche par mot cls</a></li>
                </ul>
              </li>
              <li> <a href="#">Suivi Marchs</a>
                <ul class="sousMenu">
                  <li><a href="#">Tous les marchs</a></li>
                  <li><a href="#">Recherche multi-critres</a></li>
                  <li><a href="#">Recherche par mot cls</a></li>
                </ul>
              </li>
              <li> <a href="#">Suivi Etudes</a>
                <ul class="sousMenu">
                  <li><a href="#">Toutes les tudes</a></li>
                  <li><a href="#">Recherche multi-critres</a></li>
                  <li><a href="#">Recherche par mot cls</a></li>
                </ul>
              </li>
            </ul>
     
              <div id="region_modif1">
                <form name="form1" method="post" action="affic_rech_multi_aff2.php">
                  <table width="200" border="1">
                    <tr>
                      <td>Agent1:</td>
                      <td><select name="select" size="1" id="select">
                        <option value="0" <?php if (!(strcmp(0, $choix_1))) {echo "selected=\"selected\"";} ?>>TOUT</option>
                        <?php
    do {  
    ?>
                        <option value="<?php echo $row_rs_agent1['id']?>"<?php if (!(strcmp($row_rs_agent1['id'], $choix_1))) {echo "selected=\"selected\"";} ?>><?php echo $row_rs_agent1['prenom']?></option>
                        <?php
    } while ($row_rs_agent1 = mysql_fetch_assoc($rs_agent1));
      $rows = mysql_num_rows($rs_agent1);
      if($rows > 0) {
          mysql_data_seek($rs_agent1, 0);
    	  $row_rs_agent1 = mysql_fetch_assoc($rs_agent1);
      }
    ?>
                      </select></td>
                      <td>&nbsp;</td>
                      <td>Domaine:</td>
                      <td><select name="select2" size="1" id="select2">
                        <option value="1" <?php if (!(strcmp(1, $choix_2))) {echo "selected=\"selected\"";} ?>>TOUT</option>
                        <?php
    do {  
    ?>
                        <option value="<?php echo $row_rs_dom['id']?>"<?php if (!(strcmp($row_rs_dom['id'], $choix_2))) {echo "selected=\"selected\"";} ?>><?php echo $row_rs_dom['domaine']?></option>
                        <?php
    } while ($row_rs_dom = mysql_fetch_assoc($rs_dom));
      $rows = mysql_num_rows($rs_dom);
      if($rows > 0) {
          mysql_data_seek($rs_dom, 0);
    	  $row_rs_dom = mysql_fetch_assoc($rs_dom);
      }
    ?>
                      </select></td>
                    </tr>
                    <tr>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                      <td><input type="submit" name="button" id="button" value="Envoyer"></td>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                    </tr>
                  </table>
                  <p>&nbsp;</p>
                </form>
              <p>&nbsp;</p></div>
            <!-- InstanceEndEditable --></nav>
        </section>
     
    	</body>
    </html>
    <?php
    mysql_free_result($rs_agent1);
     
    mysql_free_result($rs_dom);
    ?>
    Dernière modification par Invité ; 28/08/2011 à 18h41.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour Jérôme,

    J'ai modifié le code en suivant tes indications pour l'affichage des résultats de la requête désormais le tableau des résultats s'affiche correctement.
    Mais les filtres n'agissent pas. Quels que soient les choix dans le formulaire l'ensemble des enregistrements de la table affaires s'affichent. J'ai rajouté ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    /* Vérification que les variables Post passent bien*/
    print_r($_POST);
    ?>
    je m'aperçois que les choix du formulaire sont bien pris en compte. Mais la requête ne filtre pas suivant les champs id_agent1 et id_domaine de la table affaire qui sont des clés étrangères.
    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
    <?php
    // initialisation/récupération des variables + protection contre injection sql
    $critere1 = (isset($_POST['choix_1']))? mysql_real_escape_string($_POST['choix_1']) : '';
    $critere2 = (isset($_POST['choix_2']))? mysql_real_escape_string($_POST['choix_2']) : '';
    $critere3 = (isset($_POST['choix_3']))? mysql_real_escape_string($_POST['choix_3']) : '';
    // [........]
     
    // -------------------
    // RECHERCHE : construction du WHERE ...
    $is_where = 0;
    $clauseWhereAnd = "";
     
    if ($critere1!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " id_agent1 LIKE '%".$critere1."%' ";
    	$is_where = 1;
    }
    if ($critere2!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " id_domaine LIKE '%".$critere2."%' ";
    	$is_where = 1;
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Un copier-coller ne doit pas se faire les yeux fermés, mais en COMPRENANT.

    Dans ton formulaire, tu as ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                      <td>Agent1:</td>
                      <td><select name="select" size="1" id="select">
    <!-- ... -->
                      <td>Domaine:</td>
                      <td><select name="select2" size="1" id="select2">
    <!-- ... -->
    Il serait judicieux de récuperer les bons noms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    // initialisation/récupération des variables + protection contre injection sql
    $critere1 = (isset($_POST['select']))? mysql_real_escape_string($_POST['select']) : '';
    $critere2 = (isset($_POST['select2']))? mysql_real_escape_string($_POST['select2']) : '';

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Mea culpa maxima , tu as raison. Je n'ai pas fait assez attention.

    Désormais les valeurs de select et select2 servent bien à filtrer la base. ça marche.
    Peux-tu STP me traduire en français le bout de code suivant (c'est du PHP ou du sql ?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $is_where = 0;
    $clauseWhereAnd = "";
     
     
    if ($critere1!='')
    {
    	$clauseWhereAnd .= ($is_where==0)? " WHERE " : " AND ";
    	$clauseWhereAnd .= " id_agent1 LIKE '%".$critere1."%' ";
    	$is_where = 1;
    }
    Car il reste un dernier soucis.
    Par défaut les critères de recherche du formulaire sont calés sur "tout" ce qui correspond aux valeurs select=0 etselect2=0 qui ne correspondent à aucune clé primaire des tables agents et domaines.

    Ne reste-t-il pas un bout de code à écrire pour répondre aux situations suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    si select = 0 et select2=0 alors $clauseWhereAnd est vide et donc $recherche_requete = selection de tous les enregistrements
    si select=0 et select2<>0 alors $clauseWhereAnd vaut " id_domaine LIKE '%".$critere2."%' "
    si select<>0 et select2=0 alors $clauseWhereAnd vaut " id_domaine LIKE '%".$critere1."%' "
    Le code que tu as créé prévoit-il ces hypothèses ? Je pose la question car je ne comprend pas le bout de code du début de mon message.

    En tout cas un grand merci pour ton aide et ta patience.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    rawsrc a donné ici une astuce pour le "WHERE ... AND ..." fort astucieuse.

    Voici la modification :
    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
    <?php
    // initialisation/récupération des variables + protection contre injection sql
    $critere1 = (isset($_POST['select']))? mysql_real_escape_string($_POST['select']) : '';
    $critere2 = (isset($_POST['select2']))? mysql_real_escape_string($_POST['select2']) : '';
    // -------------------
    // RECHERCHE : construction du WHERE ...
    $where = array(); // on va creer un array
     
    if ($critere1!='' && $critere1!=0) // si critere 1 renseigné
    {
    	$where[] = " id_agent1 LIKE '%".$critere1."%' "; // on stocke dans l array $where
    }
    if ($critere2!='' && $critere2!=0) // si critere 2 renseigné
    {
    	$where[] = " id_domaine LIKE '%".$critere2."%' "; // on stocke dans l array $where
    }
    // Clause WHERE : concatenation des criteres de selection (contenus dans l array $where)
    $ClauseWhereAnd = (empty($where)) ? NULL : " WHERE ".implode(" AND ", $where);
    // -------------------
    // RECHERCHE : REQUETE
    $recherche_requete = "SELECT * FROM T_LATABLE ".$ClauseWhereAnd.";";
    $recherche_resultat = mysql_query($recherche_requete, $ConnexionCCED) or die(mysql_error());
    ?>
    Ca prend automatiquement en compte tous les cas de figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    - $critere1 oui - $critere2 oui 	-> "SELECT * FROM T_LATABLE WHERE id_agent1 LIKE '%".$critere1."%' AND id_domaine LIKE '%".$critere2."%';"
    - $critere1 oui - $critere2 non 	-> "SELECT * FROM T_LATABLE WHERE id_agent1 LIKE '%".$critere1."%';"
    - $critere1 non - $critere2 oui 	-> "SELECT * FROM T_LATABLE WHERE id_domaine LIKE '%".$critere2."%';"
    - $critere1 non - $critere2 non 	-> "SELECT * FROM T_LATABLE;"
    C'est cette ligne qui permet d'obtenir ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Clause WHERE : concatenation des criteres de selection
    $ClauseWhereAnd = (empty($where)) ? NULL : " WHERE ".implode(" AND ", $where);

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour Jérôme,

    ça marche Nickel !:

    Un ENORME merci pour ta précieuse aide et ta réactivité.

    Olivier.

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

Discussions similaires

  1. [OpenOffice][Base de données] Recherche multicritères par formulaire
    Par Alvis14 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 08/06/2015, 18h31
  2. Réponses: 1
    Dernier message: 23/12/2009, 12h21
  3. [débutant]recherche multicritères sur formulaire
    Par maitreblitosaure dans le forum IHM
    Réponses: 5
    Dernier message: 09/06/2006, 22h44
  4. Formulaire de recherche multicritères
    Par Michel DELAVAL dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 09h32
  5. Formulaire Recherche MultiCritère et RunTime
    Par fbu78 dans le forum Runtime
    Réponses: 9
    Dernier message: 06/01/2006, 17h52

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