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
26 sept. 2008 à 16:20
Toutes mes excuses..... met celle-ci à la place ;)

Il manquait 2/3 trucs tu t'en seras rendu compte, puis le param n'était pas le bon.

function ajax(strthis)
{
	$.ajax
	(
		{
			type: "POST",
			url: "select_localisation.php",
			data: "var="+param,
			success: function(msg){alert( "Data Saved: "+msg );}
		}
	);
}



Edit : pour répondre a ta dernière question, il faut que tu déclares tes 2 fichiers js, jquery et ajax.
Tu le fais sur 2 lignes donc :

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="ajax.js"></script>
0
IDEM, ALERT n'apparaît pas.
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
26 sept. 2008 à 16:25
Bon envoie moi le code stp :)

Si alert n'apparaît pas, ça signifie que la fonction ajax n'est pas appelé
0
- connexion.php

<?php
// connection à la base de données
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('essai', $base) ;
?>


- index.php
<HTML>

<HEAD>
<?php
    // appel du fichier contenant les paramètres de connexion au SGBD
    include "connexion.php";
    ?>
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript" src="ajax.js"></script>
</HEAD>


<BODY>
<table id='formulaire'>
  <tr id='tr_affaire'>
    <td class='title'><b>Selectionnez une affaire :</b></td><td><?php include('select_affaire.php')?></td>
  </tr>
  <tr id='tr_localisation'>
  </tr>
</table>


</BODY>
</HTML>


- select_affaire.php

<HTML>
<HEAD>
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="ajax.js"></script>
</HEAD>

<BODY>

<select id='select_affaire' name='select_affaire' onchange="ajax(this)">
  <option value='void_affaire'>Choisir une affaire</option>
  <?php
    include("connexion.php");
    
    $query = "SELECT DISTINCT affaire FROM analyses ORDER BY affaire ASC";
    $rq = mysql_query($query) or die(mysql_error());
    
    while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
    {
      $affaire = $row["affaire"];
      echo "<option value='$affaire'>$affaire</option>";
    }
    mysql_close();
  ?>
</select>

</BODY>
</HTML>


- select_localisation.php

<HTML>

<HEAD>
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="ajax.js"></script>
</HEAD>


<BODY>
<select id='select_localisation' name='select_localisation'>
  <option value='void_localisation'>Choisir une localisation</option>
  <?php
    include("connexion.php");
    
    $var=$_POST['var'];
    
    $query = "SELECT DISTINCT localisation FROM analyses WHERE affaire='$var' ORDER BY localisation ASC";
    $rq = mysql_query($query) or die(mysql_error());
    while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
    {
      $localisation = $row["localisation"];
      echo "<option value='$localisation'>$localisation</option>";
    }  
    mysql_close();
  ?>
</select>

</BODY>
</HTML>


- ajax.js

function ajax(strthis)
{
  $.ajax
  (
    {
      type: "POST",
      url: "select_localisation.php",
      data: "var="+param,
      success: function(msg){alert( "Data Saved: "+msg );}
    }
  );
}


- jquery.js: pas de modif
0

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

Posez votre question
Merci de m'aider! J'ai l'impression d'être un vrai boulet! lol

Alors ok, j'ai tout recopié comme tu me l'as écrit.

Quand je clique sur une affaire, il m'affiche le message d'erreur suivant:

Data Saved: <select id='select_localisation' name='select_localisation'>
<option value='LOCALISATION XXYYZZ'> LOCALISATION XXYYZZ </option> </select>

Mais il ne m'affiche pas la boîte de saisie de la localisation...
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
26 sept. 2008 à 17:00
mais non lol... Y'a quelques temps je ne savais pas le faire moi-même ;-)
Le tout c'est que tu comprennes bien au passage, car c'est toi qui rajoutera le dernier select (info3) ;-)

Donc maintenant c'est bon, il passe bien dans la fonction ajax.

remplace le contenu du fichier ajax.js par celui-ci :

- fichier ajax:

function ajax(strthis)
{
	var param = strthis.value;
                var selected_affaire = document.getElementById("select_affaire").options[document.getElementById("select_affaire").selectedIndex].value;
	
	$.ajax
	(
		{
			type: "POST",
			url: "select_localisation.php",
			data: "var="+param,
			success: 
			function(msg)
			{
				$("#tr_localisation").append("<td class='title'><b>Selectionnez une localisation :</b></td><td>"+ msg +"</td>");
			}
		}
		//if(selected_affaire=="void_affaire") $("#tr_localisation").hide();
		//else $("#tr_localisation").show();
	);
}
0
Effectivement, maintenant il me propose la localisation. C'est à cause des 2 lignes mises en commentaires qu'il ne m'affiche pas la localisation. Si on les met en commentaire, cela fonctionne.
mais ce qui est amusant, c'est lorsque je sélectionne une affaire, il affiche donc le choix de la localisation.
Par contre, si je me suis plantée d'affaire et que je change mon choix dans ma liste d'affaire, il affiche une seconde boîte de saisie de la localisation! Du coup, on collectionne les boîtes de saisie de localisations.
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
26 sept. 2008 à 17:15
C'est justement à ça que servent les 2 lignes passées en commentaires ;-)
(hide = cacher, show = montrer)

Donc maintenant que nous avons cerné le problème. Remplace le contenu de ton fichier ajax.js par celui-ci :

$(document).ready
(
    function animation()
    {
	hide_select();
    }
);


function hide_select()
{
     $("#tr_localisation").hide();
}


function ajax(strthis)
{

	var param = strthis.value;
                var selected_affaire = document.getElementById("select_affaire").options[document.getElementById("select_affaire").selectedIndex].value;
	
	$("#tr_localisation").empty();

	$.ajax
	(
		{
			type: "POST",
			url: "select_localisation.php",
			data: "var="+param,
			success: 
			function(msg)
			{
				$("#tr_localisation").append("<td class='title'><b>Selectionnez une localisation :</b></td><td>"+ msg +"</td>");
			}
		}
		if(selected_affaire=="void_affaire") $("#tr_localisation").hide();
		else $("#tr_localisation").show();
	);
}






EDIT : il manquait cela désolé : $("#tr_localisation").empty();
Tu as juste a remplacer le fichier ajax.js par celui ci donc :) ça devrait être bon
0
et je n'ai plus de boîte de saisie des localisations... lol
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
26 sept. 2008 à 17:21
Arghhh :) bon tiens : je passe quelques trucs en commentaires, nous reprendrons plus tard si tu le veux bien je termine mes cours.

- fichier ajax.js

/*
$(document).ready
(
    function animation()
    {
	hide_select();
    }
);


function hide_select()
{
     $("#tr_localisation").hide();
}
*/

function ajax(strthis)
{

	var param = strthis.value;
                var selected_affaire = document.getElementById("select_affaire").options[document.getElementById("select_affaire").selectedIndex].value;
	
	$("#tr_localisation").empty();

	$.ajax
	(
		{
			type: "POST",
			url: "select_localisation.php",
			data: "var="+param,
			success: 
			function(msg)
			{
				$("#tr_localisation").append("<td class='title'><b>Selectionnez une localisation :</b></td><td>"+ msg +"</td>");
			}
		}
		//if(selected_affaire=="void_affaire") $("#tr_localisation").hide();
		//else $("#tr_localisation").show();
	);
}





La ligne $("#tr_localisation").empty(); devrait bloqué le problème d'affichage
0
je reviens juste sur ce script parce que je n'arrive pas à récupérer les valeurs des choix dans le menu déroulant, j'ai l'impression que le value dans le select est perdu dans la fonction ajax !
y aurait'il une solution ?
merci
0
athome Messages postés 54 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 27 septembre 2010 4
20 sept. 2010 à 12:18
en fait le problème vient du navigateur, c'est un soucis de xmlhttprequest, as tu rencontré ce problème ? et sinon as tu une solution ?
0
Pas de problème! Au contraire, je te remercies pour ton aide!

Passes un bon WE! Moi je vais travailler à l'intégration de ma 3e liste déroulante!
0
ps: je viens de tester! Et cela fonctionne parfaitement!
T'es trop fort! ;-) Merci.
A moi de réfléchir un peu maintenant!
0
BONJOUR ETANT NOVICE EN MATI2RE DE PROGRAMATION JE REQUIERE VOTRE AIDE POUR LE PROBLEME SUIVANT.
JE SOUHAITE L4AFFICHAGE D'IMAGE SUR MA PAGE WEB ces image ce trouve dans la repertoire aaaa dans le dossier www d'easy php, ne voulant pas surcharger ma base de donnée j'ai mis en place le lien suivant (C:/Program%20Files/EasyPHP%202.0b1/www/aaaa/image35418ff3dea57108e292ccb8397aacb4.jpg) dans ma base pour accéder a mon image, j'ai nommer IMAGE EN TEXT 120 pour lire cette image en php j'utilise le code suivant
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--Serif WebPlus 10 HTML Export-->
<!--Supports HTML 4.01-->
<meta name="Generator" content="Serif WebPlus 10.1.1.036">
<title>Inscription</title>
<META http-equiv="Page-Enter" CONTENT="RevealTrans(Duration=1.000,Transition=23)">
<?php

$link = mysql_connect("localhost", "root", "");
$bdd = mysql_select_db('poiuytreza', $link);
$query = mysql_query('select * from image', $link);
while ($row = mysql_fetch_assoc($query)) {
echo "<img src=".$row['IMAGE'].">";
}
mysql_close($link);
?>

Quand j'active mon fichier php en local a la place de mon image j'ai une icone blanche avec un triangle un rond et un carrer de couleur comme ce que l'on trouve quand on recoit un mail avec des image qui ne s'ouvre pas comment puis je faire pour avoir mon image a la place de cette icone, ou me suis je trmoper? merci d'avance de prendre du temps pour m'aider a regler mon probleme car je rame grave
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
1 déc. 2008 à 13:57
Bonjour Lundam,

- Dans ton select "_inc_select_souscatannu.php" :
$query = "SELECT id_souscatannu , catannu , sous_catannu FROM wmi_souscategorie WHERE catannu='$var' ORDER BY sous_catannu ASC LIMIT 0, 300 ";
Il est inutile de séléctionner "catannu" si tu ne t'en sers pas.... Ce n'est pas nécessaire pour la condition WHERE (tu peux lui poser la condition WHERE catannu='$var', sans avoir besoin de mettre catannu dans le select..)

- Certaines choses ne te servent à rien qui plus est. J'avais posté cela à titre d'exemple pour faire vite, repris sur l'un de mes codes.... La fonction show_form() par exemple ;-)

- Tu peux très bien faire une seule fonction... Je te post un exemple a peu près similaire.

- Tu as mis des parenthèses dans ton echo ("...."); Dans le deuxième select.....
Sans les parenthèses ça devrait marcher mieux ;-) Repasse ici si ce n'est pas le cas. J'ai modifié ton second fichier aussi, tu récupérais dans $id_souscat = catannu ?!


Le premier fichier _inc_select_catannu.php

<select id="select_catannu" name="select_catannu" OnChange="change_option(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>



Le second fichier : _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, 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["id_souscatannu"];
			$souscat = $row["sous_catannu"];
			
			echo "<option value='$id_souscat'>$souscat</option>";
		}
include("disconnect.php");
?>
</select>




Dans ton fichier javascript :

function change_option(strthis)
{
	$("#div_sous_catannu").empty();
	
	var id_cat = strthis.value;
	
//alert(id_cat);

	$.ajax
	(
		{
			type: "POST",
			url: "_inc_select_souscatannu.php",
			data: "var="+id_cat,
			success:
			function(msg)
			{
				$("#div_sous_catannu").append(msg);
			}
		}
	);
}



et enfin le fichier html :
<body>
	<?php
		echo "<div id='div_catannu'>";
		include('_inc_select_catannu.php');
                                echo "</div>";
		echo "<br />";
		echo "<div id='div_sous_catannu'>";
		include('_inc_select_souscatannu.php');
		echo "</div>";
	?>
</body>



Cordialement.



0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
1 déc. 2008 à 14:03
EDIT : obsolète.
0
Pour tous ceux qui veulent comprendre en detail comment ca fonctionne :
http://forum.phpfrance.com/faq-tutoriels/formulaires-listes-deroulantes-dynamiques-liees-t4562.html
0
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
16 sept. 2008 à 11:18
haaa ouai ... juste ça ok moi j'essayé de comprendre le principe en fait ! lol

Mais j'aurai peut-être dû voir ton code plutôt j'aurai peut-être vu :p

Tu peux aussi faire ça plutôt :

Remplace ça :

$sql2 = "SELECT distinct `localisation`".
" FROM `analyses`".
" WHERE `affaire` = ". $idr ."".
" ORDER BY `localisation`;"; 


PAR SA :

$sql2 = "SELECT distinct `localisation` FROM `analyses` WHERE `affaire` = '".$idr."' ORDER BY `localisation`";


A+

Gaerebut
-1
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
16 sept. 2008 à 20:18
Ok no problème!

ben bien sûr que ça fonctionne qu'est-ce que tu crois ! MDR (je blague)

heu ben ouai sûrement tu aura d'autre problème !

Envoie moi des message privé si tu veux de mon aide, je te répondrais dans la minute ^^

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 à 02:47
Je précise que quand je dis que je te répondrai dans la minute, c'est si tu m'envoie ça entre 9h du matin et 17h ! Puis de 20h à 00h00 je fais quelque pause entre 2 oui oui je suis un humain malgrès tout ;)

A+

Gaerebut
-1
Bonjour Gaerebut!
Es-tu sûr d'être humain? Tu ne t'arrêtes jamais!!! Quels horaires!

Alors effectivement j'ai dejà des problèmes...
2 listes déroulantes dynamiques c'est bien, mais il m'en faut 1 troisième... J'ai cherché mais je bloque, je ne sais pas comment faire les boucles, ni quoi faire de mon form... Je suis paumée pour être honnête! lol ça dépasse mon petit niveau!

Peux-tu me donner un coup de pouce?
0
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
17 sept. 2008 à 11:38
Ok !

D'abord désolé j'ai 1 heure de retard! ^^

J'ai oublié de suivre ce post avec les mails ...

Donc bon ... comme je te disais au début, je comprend pas ce que tu veux faire ! LOL

T'aurai pas une capture d'écran des liste imbriqué pour voir ?STP

Merci

A+

gaerebut
-1