Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/08/2011, 12h29   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 11
Points : 2
Points : 2
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 :
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 :
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.
Pucho Faritas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 12h08   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
voici une façon de s'y prendre :
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
<?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" ...>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/08/2011, 17h33   #3
Invité de passage
 
Inscription : octobre 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 11
Points : 2
Points : 2
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 :
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 :
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 :
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 :
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.
Pucho Faritas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 18h21   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
do ... while ne marche pas ici. Il faut utiliser while ...

Code :
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 :
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);
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 12h01   #5
Invité de passage
 
Inscription : octobre 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 11
Points : 2
Points : 2
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 :
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 :
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;
}
Pucho Faritas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 12h26   #6
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Un copier-coller ne doit pas se faire les yeux fermés, mais en COMPRENANT.

Dans ton formulaire, tu as ca :
Code :
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 :
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']) : '';
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 18h37   #7
Invité de passage
 
Inscription : octobre 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 11
Points : 2
Points : 2
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 :
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 :
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.
Pucho Faritas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 18h57   #8
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
rawsrc a donné ici une astuce pour le "WHERE ... AND ..." fort astucieuse.

Voici la modification :
Code :
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 :
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 :
1
2
// Clause WHERE : concatenation des criteres de selection
$ClauseWhereAnd = (empty($where)) ? NULL : " WHERE ".implode(" AND ", $where);
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h14   #9
Invité de passage
 
Inscription : octobre 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 11
Points : 2
Points : 2
Bonjour Jérôme,

ça marche Nickel !:

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

Olivier.
Pucho Faritas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h43.


 
 
 
 
Partenaires

Hébergement Web