Liste déroulante php,bd MySQL,pb codification

Résolu/Fermé
Ludi - 15 sept. 2008 à 10:54
 AlucardDante - 13 févr. 2012 à 11:10
Bonjour,
Je débute en php et j'essaye de faire une petite page Web pour un service de mon entreprise.
Je dois faire 4 listes déroulantes dynamiques imbriquées avec possibilité d'ajouter un nouvel élément sans passer par une autre page.
J'y vais pas par pas, et pour l'instant j'en suis juste à faire 2 listes imbriquées. Cela fonctionne mais seulement si le champs qui filtre la seconde liste est en format numérique. Mon problème est que des codifications internes existent déjà (numérique + caractère) et je voudrais les récupérer. Si je ne peux pas les utiliser, je vais devoir créer 4 tables de correspondance, alors que sans ce pb, cela ne serait pas nécessaire.

Si quelqu'un a déjà eu ce pb?
Merci
A voir également:

66 réponses

papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
17 sept. 2008 à 22:06
Bonsoir,

Alors j'essai de comprendre un peu... Mais... en passant par un "mysql_pconnect()"
Un mysql_close ne ferme pas la connection à ta BDD, si ?

Et enfin, tu ne pourrais pas résoudre ton problème avec des requêtes ajax?
-1
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
17 sept. 2008 à 22:22
Ajax n'est pas un langage, en fait c'est du javascript... Disons que c'est juste une méthode, qui permet d'actualiser certains éléments de ta page, sans avoir à recharger entièrement ta page... Pratique donc pour des listes déroulantes dynamique qui se remplissent en fonction du choix fait dans une autre liste.

Ce n'est pas bien compliqué, je peux t'expliquer vite fait si tu le souhaites! J'ai appris ça y'a pas longtemps, j'en profite :D
-1
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
17 sept. 2008 à 22:23
Trop tard, je suis en train de poster un post ou je donne un code explicatif complet ! ^^

J'ai fini dans 5 min :p

Pris de vitesse !

A+

Gaerebut
-1
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
17 sept. 2008 à 22:28
Maybe, tu verra, au meilleur ^^

A+

Gaerebut
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
15 sept. 2008 à 12:50
salut,

j'ai déjà fais faut des listes déroulante dynamique mais qu'entends-tu par imbriquées l'une dans l'autre ?

Tu peux pas donner le code aussi parce que c'est pas très clair ^^

A+

Gaerebut
-2
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
17 sept. 2008 à 22:49
J'attendais de voir la soluce de Gaerebut, mais je vais donc te laisser celle-ci également.
Mon code ne fonctionne qu'avec la librairie jquery pour javascript : https://jquery.com/ pour le télécharger.
C'est une librairie très puissante, qui permet entre autre de nombreuses animations, tel que le drag and drop etc... très simple à coder.... Mais elle facilite également les requêtes ajax. Si tu souhaites te documenter : http://jquery.developpeur-web2.com/documentation.php

Bon commençons...

Entre ton </header> et ton <body> tu insères : <script type="text/javascript" src="jquery.js"></script>
Et dans le dossier de ton site, tu copies/colles le fichier jquery.js.....

Ensuite passons au code:

je te donne un exemple, de 2 menus déroulants que j'ai créé récemment....
L'un tapes dans la table équipement.... Et récupère le type de matériel.... L'autre tape dans la table model.... Et récupère le modèle, en fonction du choix fait dans le 1er menu déroulant

fichier : _inc_select_equipment.php

<select id='select_equipment' name='select_equipment' onchange="show_form(this)">
	<option value='void'>Choose an equipment</option>
	<?php
		include("_inc_connexion.php");
		
		$query = "SELECT id_equipment, equipment FROM T_equipment ORDER BY equipment ASC";
		$rq = mysql_query($query) or die(mysql_error());
		
		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
		{
			$id_equipment = $row["id_equipment"];
			$equipment = $row["equipment"];
			
			echo "<option value='$id_equipment'>$equipment</option>";
		}
		mysql_close();
	?>
</select>


fichier : _inc_select_model.php

<select id='select_model' name='select_model'>
	<option value='void'>Choose a model</option>
	<?php
		include("_inc_connexion.php");
		
		$var=$_POST['var'];		
		
		$query = "SELECT id_model, model FROM T_model WHERE id_equipment='$var' ORDER BY model ASC";
		$rq = mysql_query($query) or die(mysql_error());
		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
		{
			$id_model = $row["id_model"];
			$model = $row["model"];
			
			echo "<option value='$id_model'>$model</option>";
		}	
		mysql_close();
	?>
</select>



et enfin le fichier javascript:

function show_form(id_form)
{		
    get_url(id_form.value);
}


function get_url(test)
{
	var selected = document.getElementById("select_equipment").options[document.getElementById("select_equipment").selectedIndex].value;
	
	$.ajax
	(
		{
			type: "POST",
			url: "_inc_select_model.php",
			data: "var="+test,
			success: 
			function(msg)
			{
				$("#tr_test").append("<td class='title'><b>Model :</b></td><td>"+ msg +"</td>");
				if(selected=="void") $("#tr_test").hide();
				else $("#tr_test").show();
			}
		}
	);
}




et le formulaire :

					<tr>
						<td class='title'><b>Equipment :</b></td><td><?php include('_inc_select_equipment.php')?></td>
					</tr>
					<tr id='tr_test'>
					</tr>


Y'a une tite fonction en plus, qui cache le 2ème menu déroulant tant que l'utilisateur n'a pas fait un choix dans le 1er menu déroulant.....
-2
Bonjour papymucho

je me suis inspiré de votre code mai j'ai un problème, aucune erreur d'exécution, mais juste que la deuxième liste ne s'affiche pas et donc ne me permet pas un choix lorsque la première est renseigné.

J'ai une première liste contenu dans une base de donnée concernant des catégories d'annuaire

Le premier fichier _inc_select_catannu.php

<select id="select_catannu" name="select_catannu" OnChange="show_form(this)">
<option value="void">Catégorie</option>
<?php
include("connect.php");
		$query = "SELECT id_catannu , catannu FROM wmi_categorie ORDER BY wmi_categorie . id_catannu ASC LIMIT 0, 100 ";
		$rq = mysql_query($query) or die(mysql_error());
		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
		{
			$id_cat = $row["id_catannu"];
			$categorie = $row["catannu"];
			echo "<option value='$id_cat'>$categorie</option>";
		}
include("disconnect.php");
?>
</select>


puis un deuxième fichier pour la seconde liste (sous catégorie de l'annuaire)
Chaque catégorie donne accés à une liste de sous catégorie

_inc_select_souscatannu.php

<select id="select_souscat" name="select_souscat">
<option value="void">Sous catégorie</option>
<?php
include("connect.php");
		$var=$_POST['var'];
		$query = "SELECT id_souscatannu , catannu , sous_catannu FROM wmi_souscategorie WHERE catannu='$var' ORDER BY sous_catannu ASC LIMIT 0, 300 ";
		$rq = mysql_query($query) or die(mysql_error());
		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
		{
			$id_souscat = $row["catannu"];
			$souscat = $row["sous_catannu"];
			
			echo ("<option value='$id_souscat'>$souscat</option>");
		}
include("disconnect.php");
?>
</select>


le code javascript inséré dans le <head> de ma page formulaire d'où je fait appel aux deux fichiers .php

et enfin l'extrait de mon code html du fichier formulaire avec extention .php où
j'ai inséré : <script type="text/javascript" src="jquery.js"></script> entre </head> et <body>


......
....
..
function show_form(id_form)
{		
    get_url(id_form.value);
}
function get_url(test)
{
	var selected = document.getElementById("select_catannu").options[document.getElementById("select_catannu").selectedIndex].value;
	
	$.ajax
	(
		{
			type: "POST",
			url: "_inc_select_souscatannu.php",
			data: "var="+test,
			success: 
			function(msg)
			{
				$("#tr_test").append("<td class='title'><b>Sous catégorie</b></td><td>"+ msg +"</td>");
				if(selected=="void") $("#tr_test").hide();
				else $("#tr_test").show();
			}
		}
	);
}
</script></head>
<script type="text/javascript" src="jquery.js"></script>
<body><form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
  <div align="center"></div>
<p align="center">
<table width="500" border="0" align="center">
<p align="center">
</p><tr>
      <td><font face="Verdana" size="2">Nom</font></td>
      <td><input name="champ1" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">Prénom</font></td>
      <td><input name="champ2" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">Titre du site</font></td>
      <td><input name="champ3" type="text"> (50 caractères maximum)</td>
    </tr><tr>
      <td><font face="Verdana" size="2">URL du site</font></td>
      <td><input name="champ4" type="text"> (http:// obligatoire)</td>
    </tr><tr>
      <td><font face="Verdana" size="2">Catégorie</font></td>
      <td><?php include('_inc_select_catannu.php')?></td>
   </tr><tr id='tr_test'>
   </tr><tr>
      <td width><font face="Verdana" size="2">Votre Email</font></td>
      <td width><input name="zone_email" type="text"></td>
    </tr><tr>
      <td valign="top"><font face="Verdana" size="2">Description (255 caractères maximum)</font></td>
      <td><textarea name="zone_texte" cols="40" rows="10"></textarea></td>
    </tr><tr>
      <td valign="top">
        <input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="4">
        <input name="nbre_zone_listecat" type="hidden" id="nbre_zone_listecat" value="1">
        <input name="nbre_zone_listecat" type="hidden" id="nbre_zone_listesouscate" value="1">
        <input name="nbre_zones_texte" type="hidden" value="1">
	<input name="nbre_zone_email" type="hidden" value="1">
	<input name="titre_champ1" type="hidden" value="Nom">
	<input name="titre_champ2" type="hidden" value="Prénom">
	<input name="titre_champ3" type="hidden" value="Titre du site (50 caractères maximum)">
	<input name="titre_champ4" type="hidden" value="URL du site">
	<input name="categorie_url" type="hidden" value="Catégorie">
	<input name="souscate_url" type="hidden" value="Sous catégorie">
	<input name="titre_email" type="hidden" value="Votre Email">
	<input name="titre_zone" type="hidden" value="Description (255 caractères maximum)"></td>
      <td><div align="center">
<input type="reset" name="Reset" value="Effacer">          
<input type="submit" name="envoi" value="Envoyer">
        </div></td>
    </tr>
  </table>
  <div align="center"></div>
</form></body></html>



Ceci n'est qu'un extrait du code car il est assé long, j'ai des scripts de différentes vérifications et autres. L'ensemble du formulaire fonctionne correctement à l'exéption de la deuxième liste déroulante qui ne s'affiche pas aprés sélection dans la première.

Pourriez vous si possible m'aider à vérifier ce code, car aprés plusieurs essai infructueux, je ne voi pas le problème, il est vrai que je ne suis pas dévelopeur, mais je me débrouille et là j'en perd mon latin....

Merci
0