Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
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 14/04/2011, 16h58   #1
Membre à l'essai
 
Inscription : mai 2005
Messages : 112
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Belgique

Informations forums :
Inscription : mai 2005
Messages : 112
Points : 22
Points : 22
Par défaut listes déroulantes liées entre elles sur base d'une seule table

Bonjour à tous,

Je voudrais créer 3 listes déroulantes inter-dépendantes qui partiraient de la même table sql.

Je voudrais que lorsque je sélectionne un nom dans la première liste, seules les villes correspondant à cette personne apparaissent dans la 2e liste et que lorsque je choisis une ville de la 2e liste, seuls les numéros correspondant à cette ville et à ce nom s'affichent.
Dans la 3e liste lorsque je choisis un numéro, les données relatives à ce numéro s'affichent sous la liste. Pour l'instant c'est la seule chose que j'ai réussi à faire.

Les 3 critères pour ces listes sont repris dans la même table et non dans 3 tables différentes.

voici le code:

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
 
<?php
   $db2 = mysql_connect("localhost", "root", "");
   if (!$db2)
   {
     echo "erreur: " . mysql_error();
      exit;
   }
 
   if (!mysql_select_db("crm_fr",$db2))                                        
   {                                                                     
      echo "erreur: " . mysql_error();
      exit;                                                               
   }               
   $sql = "SELECT * FROM  noms";   
?>
 
<table>
<tr><td>
 
<form class="form" method="post" enctype="multipart/form-data" >
 
<select name="nr" style="background-color:red;color:#FFFFFF;margin: 10px 0px 0px 0px;" onchange="submit();">
 
<option class="noprint">S&eacute;lectionnez le numéro:</option>
 
<?php
   $result=mysql_query($sql);
   if (!$result)
   {
     echo "Impossible d'exécuter la requête ($sql) " . mysql_error();
      exit;
   }
 
   if (mysql_num_rows($result) == 0) {
   echo "Aucune ligne trouvée";
   exit;
  }
  while ($record = mysql_fetch_array($result))
    {
    echo '<option>'.$record['NR'].'</option>';
    }
echo "</select></form></td></tr></table>";
 
 if (isset($_POST['nr'])) { 
 
       $sql = 'SELECT * FROM pharmacies WHERE NR = "'.$_POST['nr'].'"'; 
       $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
 
   while ($donnees=mysql_fetch_array($req))  
				{
        echo "<table class='conditionstable'>
		<tr>
			<td>".$donnees['Customer']."</td>
		</tr>
		<tr>
			<td>APB: ".$donnees['NR']."</td>
		</tr>
	</table>
	";
	}}  
	else { 
       echo '';  
}
?>
Merci à tous pour votre aide ;-)
san1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 18h49   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Tu devrais faire ça en Ajax avec jQuery par exemple. L'action change sur la liste 1 charge la liste 2 et l'action change sur la liste 2 charge la liste 3. C'est assez simple à réaliser. Tu peux sûrement te faire la main avec ces tutos et revenir nous voir si tu bloque toujours.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 12h09   #3
Membre à l'essai
 
Inscription : mai 2005
Messages : 112
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Belgique

Informations forums :
Inscription : mai 2005
Messages : 112
Points : 22
Points : 22
Bonjour,

Merci pour ta réponse

J'ai finalement réussi à lier les listes entre elles mais par contre je n'arrive pas à afficher le résultat obtenu.
Lorsqu'un nom est choisi, ma 2e liste affiche correctement les numéros correspondants mais je voudrais que lorsque dans cette 2e liste je choisis un numéro, toutes les données relatives à ce numéro s'affichent sous le formulaire mais ça ne marche pas Je ne reçois pas d'erreur mais rien ne s'affiche.

Merci à tous pour votre aide!

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
<?php
 
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "bdd";
 
$idr = isset($_POST['rep'])?$_POST['rep']:null;
$idrapb = isset($_POST['APB'])?$_POST['APB']:null;
?>
 
<?php
 
if(isset($_POST['ok']) && isset($_POST['APB']) && $_POST['APB'] != "")
{
    $region_selectionnee = $_POST['rep'];
    $dept_selectionne = $_POST['APB'];
}
?>
 
 
<?php
$connexion = mysql_pconnect($serveur, $admin, $mdp);
 
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
 
	$sql1 = "SELECT `id_rep`, `rep`".
    " FROM `rep`".
    " ORDER BY `id_rep`";
 
    $rech_regions = mysql_query($sql1);
 
    $code_region = array();
 
    $region = array();
 
    $nb_regions = 0;
 
    if($rech_regions != false)
    {
        while($ligne = mysql_fetch_assoc($rech_regions))
        {
            array_push($code_region, $ligne['id_rep']);
            array_push($region, $ligne['rep']);
 
            $nb_regions++;
        }
    }
    ?>
 
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
 
<select name="rep" id="rep" onchange="document.forms['chgdept'].submit();">
 
  <option value="-1">Choisissez un nom</option>
 
    <?php
    for($i = 0; $i < $nb_regions; $i++)
    {
?>
 
  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option>
 
<?php
    }
    ?>
</select>
 
    <?php
    mysql_free_result($rech_regions);
 
    if(isset($idr) && $idr != -1)
    {
      $sql2 = "SELECT `id_ph`, `APB`".
        " FROM `ph`".
        " WHERE `id_rep` = ". $idr ."".
        " ORDER BY `APB`;";
 
		if($connexion != false)
        {
            $rech_dept = mysql_query($sql2, $connexion);
            $nd = 0;
 
            $code_dept = array();
            $nom_dept = array();
 
			while($ligne_dept = mysql_fetch_assoc($rech_dept))
            {
                array_push($code_dept, "");
                array_push($nom_dept, $ligne_dept['APB']);
                $nd++;
            }
            ?>
 
<select name="APB" id="APB" onchange="submit();">
 
            <?php  
            for($d = 0; $d<$nd; $d++)
            {
			?>
			 <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]); ?></option>
			<?php
            }
?>
 
</select>
</form>
 
<?php
        }
        mysql_free_result($rech_dept);
 
		 if (isset($_POST['APB'])) { 
			   $sql = 'SELECT * FROM ph WHERE APB = "'.$_POST['APB'].'"';
			   $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
 
			   while ($donnees=mysql_fetch_array($req))  
				{
		       echo "<table class='conditionstable'>
					<tr>
						<td>".$donnees['Customer']."</td>
						<td>".$donnees['City']."</td>
					</tr>
 
					</table>
			";
				}}  
		 else { 
		       echo '';  
		}
		}
?>
 
<?php
    mysql_close($connexion);
}
else
{
?>
 
<?php
}
?>
</body>
 
</html>
san1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 22h28   #4
Membre à l'essai
 
Inscription : mai 2005
Messages : 112
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Belgique

Informations forums :
Inscription : mai 2005
Messages : 112
Points : 22
Points : 22
Je n'ai pas encore réussi à résoudre le souci mais je pense que cela vient du fait que je n'arrive pas à récupérer le numéro que je choisis dans ma 2e liste pour faire afficher les données.

Je crois que le souci est par ici mais je ne sais pas comment faire dire que php doit afficher les données relatives au numéro sélectionné dans la 2e liste

Pour l'instant j'ai indiqué $_POST['APB'] en espérant qu'il récupère le numéro sélectionné dans la 2e liste mais ici ça ne fonctionne pas

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
 
mysql_free_result($rech_dept);
 
if (isset($_POST['APB'])) { 
   $sql = 'SELECT * FROM ph WHERE APB = "'.$_POST['APB'].'"';
   $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
 
   while ($donnees=mysql_fetch_array($req))  
	{
       echo "<table class='conditionstable'>
		<tr>
			<td>".$donnees['Customer']."</td>
			<td>".$donnees['City']."</td>
		</tr>
	</table>
	";
	}}  
	 else { 
	       echo '';  
	}
}
?>
san1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 12h08   #5
Membre à l'essai
 
Inscription : mai 2005
Messages : 112
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Belgique

Informations forums :
Inscription : mai 2005
Messages : 112
Points : 22
Points : 22
Bonjour,

J'ai adapté un peu mon code, les 2 listes sont bien liées entre elles mais je ne parviens pas à récupérer la valeur sélectionnée dans la 2e liste pour afficher des données par rapport à cette valeur.

voici le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (isset($_POST[$code_dept[$d]])) { 
			   $sql = 'SELECT * FROM pharmacies WHERE APB = "'.$_POST[$code_dept[$d]].'"';
			   $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
			   while ($donnees=mysql_fetch_array($req))  
				{
		       echo "<table class='conditionstable'>
					<tr>
						<td>test:".$donnees['APB']."</td>
						<td>".$donnees['rep']."</td>
					</tr>
 
					</table>
			";
				}}  
		 else { 
		       echo '';  
		}
		}
Je reçois une erreur "undefined offset"
san1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h15.


 
 
 
 
Partenaires

Hébergement Web