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:
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> </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> </td>
<td> </td>
<td><input type="submit" name="button" id="button" value="Envoyer"></td>
<td> </td>
<td> </td>
</tr>
</table>
<p> </p>
</form>
<p> </p></div>
</body>
</html>
<?php
mysql_free_result($rs_agent1);
mysql_free_result($rs_dom);
?> |
Page traitant les requêtes :
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 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.