Liste déroulante en fonction d'une autre

widi70 Messages postés 679 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour à tous, je cherche à actualiser une liste déroulante suivant la réponse d'une autre liste
et suivant les choix de ces différentes listes j'affiche des produits.
Donc j'ai trouver le script suivant:
http://perso.wareteam.com/comment_demander_des_informations_au_serveur_sans_recharger_la_page-.php
Mais le seul problème est que je n'arrive pas à adapter le fait d'afficher les produits après le second
choix.
Je ne comprend pas trop le code, pouvez vous m'aidez à le à coder la suite
Je vous remercie d'avance de votre aide
A voir également:

6 réponses

dreamfeeder Messages postés 253 Statut Membre 54
 
il faudrait que tu nous donne ton code pour que l'on voit ou tu en est dans ton adaptation stp ;-)
0
widi70 Messages postés 679 Statut Membre 65
 
ok alors voici ce que j'ai fait pour l'instant un ajoutant seulement une troisieme liste par rapport au choix de la seconde:
index.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
*/
function sendData(param, page)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
//Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else

//définition de l'endroit d'affichage:
var content = document.getElementById("contenu");

XhrObj.open("POST", page);

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
}

XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData

</script>
</head>
<body>

<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="base";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select * from script_categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
echo "<form method='POST' action='valid.php'>";?> <select size="1" name="cat" OnChange="sendData('idsscat='+this.value,'liresc.php')" onKeyUp="sendData('idsscat='+this.value,'liresc.php')">

<?php
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>
</select><br><br>

<div id="contenu">
<?php
// affichage des sous-catégorie appartenant à la première catégorie.
echo "<select size='1' name='souscat'>";
$rq="Select * from script_sous_categorie where idcat=".$j." order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
}
echo "</select>";
?> </div></form>
<?php
// affichage des PRODUIT appartenant à la première SS _catégorie.
echo "<select size='1' name='prod_affiche'>";
$rq="Select * from script_produit where id_sscat=".$j." order by designation_prod;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
}
echo "</select>";
?>

</body>
</html>

liresc.php

<?php
header('Content-type: text') ; // on déclare ce qui va être afficher

// test des POST emis
if(isset($_POST['idsscat']) && !empty($_POST['idsscat']) ){
$user="root";
$host="localhost";
$password="";
$database="base";
$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
mysql_select_db($database,$connexion);

$rq="Select * from script_sous_categorie where idcat=".$_POST['idsscat']." order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
if (mysql_num_rows($result)>0)
{
echo "<form method='POST' action='valid.php'>";?> <select size="1" name="souscat" OnChange="sendData('idprod='+this.value,'lireprod.php')" onKeyUp="sendData('idprod='+this.value,'lireprod.php')">
<?php
}
else
{
echo utf8_encode("Pas de sous catégories disponible");
}
while ($dt=mysql_fetch_row($result))
{
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
}
echo "</select>";
}

?>

et le dernier que j'ai crée
lireprod.php

<?php
header('Content-type: text') ; // on déclare ce qui va être afficher

// test des POST emis
if(isset($_POST['idprod']) && !empty($_POST['idprod']) ){
$user="root";
$host="localhost";
$password="";
$database="base";
$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
mysql_select_db($database,$connexion);

$rq="Select * from script_produit where id_sscat=".$_POST['idprod']." order by designation_prod;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
if (mysql_num_rows($result)>0)
{
echo "<select size='1' name='prod_affiche'>";
}
else
{
echo utf8_encode("Pas de produits disponible");
}
while ($dt=mysql_fetch_row($result))
{
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
}
echo "</select>";
}

?>

ALors bon ça ne marche pas car ma deuxieme liste déroulante prend les valeur de la troisième lors du choix, enfin ça marche pas.
Si vous pouvez m'aider ..........;

Je vous donne le SQL aussi :


--
-- Base de données: `base`
--

-- --------------------------------------------------------

--
-- Structure de la table `script_categorie`
--

CREATE TABLE `script_categorie` (
`id_cat` int(5) NOT NULL auto_increment,
`designation` varchar(50) NOT NULL default '',
`comment` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_cat`),
UNIQUE KEY `designation` (`designation`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Contenu de la table `script_categorie`
--

INSERT INTO `script_categorie` (`id_cat`, `designation`, `comment`) VALUES
(1, 'Ressources Webmaster', 'Site dédié aux webmasters. Tutorials, Exemples, Codes Sources, ressources, images, Cliparts, Gifs, Forums ...'),
(2, 'Downloads', 'Téléchargement freeware, shareware...'),
(3, 'Programmation', 'Developpement programmation'),
(9, 'Logiciels de gestion', 'Logiciel de gestion, finance, comptabilité, paie, erp, stock, planning ..');

-- --------------------------------------------------------

--
-- Structure de la table `script_produit`
--

CREATE TABLE `script_produit` (
`id_produit` int(11) NOT NULL,
`id_sscat` int(11) NOT NULL,
`designation_prod` text NOT NULL,
`commentaire_prod` text NOT NULL,
PRIMARY KEY (`id_produit`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `script_produit`
--

INSERT INTO `script_produit` (`id_produit`, `id_sscat`, `designation_prod`, `commentaire_prod`) VALUES
(1, 1, 'PRODUIT 1', ''),
(2, 2, 'PROD 2', ''),
(3, 3, 'PROD 3', ''),
(4, 4, 'PROD 4', ''),
(5, 5, 'PROD 5', ''),
(6, 6, 'PROD 6', ''),
(7, 7, 'PROD 7', ''),
(8, 8, 'PROD 8', '');

-- --------------------------------------------------------

--
-- Structure de la table `script_sous_categorie`
--

CREATE TABLE `script_sous_categorie` (
`id_scat` int(5) NOT NULL auto_increment,
`idcat` int(5) NOT NULL default '0',
`designation` varchar(50) NOT NULL default '',
`comment` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_scat`),
UNIQUE KEY `designation` (`designation`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Contenu de la table `script_sous_categorie`
--

INSERT INTO `script_sous_categorie` (`id_scat`, `idcat`, `designation`, `comment`) VALUES
(5, 1, 'Php & Mysql', 'Forums, Tutorials, Codes Sources ..'),
(4, 3, 'Visual Basic', 'VB, VB.NET, Crystal Report, Access, SQL SERVER ..'),
(6, 1, 'Javascript', 'Tutorials pour javascript, Forums ...'),
(2, 1, 'Gifs animés, Icônes', 'Téléchargement gifs animés , clipart, Icones'),
(1, 1, 'Templates', 'Sites de téléchargement de modèles de site web'),
(3, 2, 'Pilotes', 'Drivers, pilotes, carte graphiques'),
(7, 2, 'Freeware, sharware', 'Freeware, sharware'),
(8, 3, 'SQL SERVER', 'Tutorials forum SQL SERVER');

Merci d'avance bcp de votre aide
0
Alain_42 Messages postés 5413 Statut Membre 894
 
salut, j'avais aidé déja qq un la dessus vas voir ce topic:

http://www.commentcamarche.net/forum/affich 2382261 ajax listes liees
0
widi70 Messages postés 679 Statut Membre 65
 
Bonjour je te remercie de ton aide, malheureusement ce post ne m'as pas été d'une grande aide car toutes mes listes se construisent très bien sauf que lorsque je fait un choix dans ma seconde liste tous les résultats de celle-ci sont transformer par les résultats de la troisieme.
Alors je sait pas trop si j'arrive à me faire comprendre.
Sinon j'ai trouvé ce site grâce ton post: http://www.roodali.com/index.php?2007/06/26/4-3-listes-deroulantes-liees-avec-ajax-php-mysql

mais il n'y a pas de zip rien à telecharger.
Donc bon j'espere que vous pourrez m'aider
0
Alain_42 Messages postés 5413 Statut Membre 894
 
Salut, je t'ai refondu un peu tes pages:

page index, il est inutile de creer tes listes 2 et 3 puisqu'elles vont être fonction du choix dans la 1, tu mets seulement les deux div qui vont les recevoir à la réponse de Ajax

index.php:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
je t'ai rajouté un argument a la fonction, l'id ou écrire a chaque reponse
*/
function sendData(param,page,id_ecrire)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
//Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else

//définition de l'endroit d'affichage:
var content = document.getElementById(id_ecrire);

XhrObj.open("POST", page);

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
}

XhrObj.setRequestHeader('Content-Type','application/x-www-­form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData

</script>
</head>
<body>

<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="base";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="SELECT * FROM script_categorie ORDER BY designation;";
$result= mysql_query ($rq) or die ("Select impossible");
?>
<form method='POST' action='valid.php'>
 <select size="1" name="cat" OnChange="sendData('idsscat='+this.value,'liresc.php','contenu2');" onKeyUp="sendData('idsscat='+this.value,'liresc.php','contenu2');">

<?php
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}
?>
</select><br><br>



<div id="contenu2"><!-- ici sera affichee la deuxieme liste --></div>
<br>
<div id="contenu3"><!-- ici sera affichee la troisieme liste --></div>

</form>
</body>
</html>


liresc.php
<?php
header('Content-type: text') ; // on déclare ce qui va être afficher
// test des POST emis
if(isset($_POST['idsscat']) && !empty($_POST['idsscat']) ){
	$user="root";
	$host="localhost";
	$password="";
	$database="base";
	$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
	mysql_select_db($database,$connexion);

	$rq="SELECT * FROM script_sous_categorie WHERE idcat=".$_POST['idsscat']." ORDER BY designation;";
	$result= mysql_query ($rq) or die ("Select impossible");
	// $i = initialise le variable i
	$i=0;
	if (mysql_num_rows($result)>0){
	?>
		<select size="1" name="souscat" OnChange="sendData('idprod='+this.value,'lireprod.php','contenu3');" onKeyUp="sendData('idprod='+this.value,'lireprod.php','contenu3');">
	<?php
		while ($dt=mysql_fetch_row($result)){
			echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option>";
		}
		echo "</select>";
	}else{
		echo utf8_encode("Pas de sous catégories disponible");
	}
}
?> 


lireprod.php:

<?php
header('Content-type: text') ; // on déclare ce qui va être afficher

// test des POST emis
if(isset($_POST['idprod']) && !empty($_POST['idprod']) ){
	$user="root";
	$host="localhost";
	$password="";
	$database="base";
	$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
	mysql_select_db($database,$connexion);

	$rq="SELECT * FROM script_produit WHERE id_sscat=".$_POST['idprod']." ORDER BY designation_prod;";
	$result= mysql_query ($rq) or die ("Select impossible");
	// $i = initialise le variable i
	$i=0;
	if (mysql_num_rows($result)>0){
		echo "<select size='1' name='prod_affiche'>";
		while ($dt=mysql_fetch_row($result)){
			echo "<option value=".utf8_encode($dt[0]).">".utf8_encod­e($dt[2])."</option><br>";
		}
		echo "</select>";
	}else{
		echo utf8_encode("Pas de produits disponible");
	}

}

?> 
0
widi70 Messages postés 679 Statut Membre 65
 
Bonjour et merci beaucoup de ton aide.
Alors j'ai un petit probleme avec les codes que tu m'as donné, il ne s'affiche que la premiere liste déroulante.
Alors j'ai modifier dans
liresc.php et lireprod.php
echo "<select size='1' name='prod_affiche'>";

par

echo "<select size='1' name=contenu2'>";
et
echo "<select size='1' name='contenu3'>";

pour que index.php appel bien les bonnes variables, mais ça ne marche toujours pas
Merci beaucoup
0

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

Posez votre question
widi70 Messages postés 679 Statut Membre 65
 
SVP encore une tite aide
0
widi70 Messages postés 679 Statut Membre 65
 
euh SVP il vient de ou le pb?
0
Alain_42 Messages postés 5413 Statut Membre 894
 
C'est normal que ça n'affiche que la première liste au début, les deux autres sont fonction du choix dans la précedente

La modif des name des listes 2 et 3 que tu as faites ne jouent pas à ce niveau la mais seulement quand le formulaire entier (avec les 3 listes ) sera envoyé au script valid.php


pour voir un peu ce qui se passe dans index.php dans la fonction entre:

XhrObj.setRequestHeader('Content-Type','application/x-www-­f­orm-urlencoded');
XhrObj.send(param);


rajoutes une alerte:

XhrObj.setRequestHeader('Content-Type','application/x-www-­f­orm-urlencoded');
alert("data envoyes: "+param);
XhrObj.send(param);


tu verra ainsi ce qui part si ça correspond bien à la sélection dans la liste
0
Alain_42 Messages postés 5413 Statut Membre 894
 
Salut,

je t'ai completement changé la fonction javascript, celle la je la connait pour l'utiliser tout le temps

index.php:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
je t'ai changé completement la fonction Ajax
*/
function makeRequest(url,nom_champ_poste,id_lire,id_ecrire1,id_ecrire2){
	var http_request = false;
		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire1,id_ecrire2); } //affectation fonction appelée qd on recevra la reponse
		// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		obj=document.getElementById(id_lire);
		data=nom_champ_poste+"="+obj.value;
                //alert("valeurs envoyee: "+data);
        http_request.send(data);
}

function traitementReponse(http_request,id_ecrire1,id_ecrire2) {
	var affich="";
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
					// cas avec reponse de PHP en mode texte:
			//chargement des elements reçus dans la liste
			var affich_list=http_request.responseText;
			//alert(affich_list);
				obj1 = document.getElementById(id_ecrire1);
				obj2 = document.getElementById(id_ecrire2);
				
				//on efface d'abord leslistes eventuelement affichée
				 obj1.innerHTML = "";
				  obj2.innerHTML = "";
				  
				 //puis on affiche le contenu de la liste concernée 
                obj1.innerHTML = affich_list;
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}
}//fin fonction Ajax

</script>
</head>
<body>

<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="base";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="SELECT * FROM script_categorie ORDER BY designation;";
$result= mysql_query ($rq) or die ("Select impossible");
?>
<form method='POST' action='valid.php'>
 <select size="1" name="cat" id="cat" OnChange="makeRequest('liresc.php','idsscat','cat','contenu2','contenu3');">

<?php
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "<option value=".($dt[0]).">".($dt[1])."</o­ption>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}
?>
</select><br><br>



<div id="contenu2"><!-- ici sera affichee la deuxieme liste --></div>
<br>
<div id="contenu3"><!-- ici sera affichee la troisieme liste --></div>

</form>
</body>
</html>


liresc.php

<?php
header('Content-type: text') ; // on déclare ce qui va être afficher
// test des POST emis
//ce test est inutile si le script est appelé c'est qu'on lui envoie qq chose

//recup des valeurs postées
$idsscat=$_POST['idsscat'];
//pour tester ton script tu mets
//$idsscat=une valeur existante dans ta base
	$user="root";
	$host="localhost";
	$password="";
	$database="base";
	$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
	mysql_select_db($database,$connexion);

	$rq="SELECT * FROM script_sous_categorie WHERE idcat=".$idsscat." ORDER BY designation";
	//ta table se nomme bien script_sous_categaorie ?
	$result= mysql_query ($rq) or die ("Select impossible");
	// $i = initialise le variable i
	$i=0;
	if (mysql_num_rows($result)>0){
	?>
		<select size="1" name="souscat" id="souscat" OnChange="makeRequest('lireprod.php','idprod','souscat','contenu3','contenu2');">
	<?php
		while ($dt=mysql_fetch_row($result)){
			echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option>";
		}
		echo "</select>";
	}else{
		echo utf8_encode("Pas de sous catégories disponible");
	}

?> 


lireprod.php

<?php
header('Content-type: text') ; // on déclare ce qui va être affiche

// test des POST emis: 
//ce test est inutile si le script est appelé c'est qu'on lui envoie qq chose

//recup des valeurs postées
$idprod=$_POST['idprod'];
//pour tester ton script tu mets
//$idsscat=une valeur existante dans ta base
	$user="root";
	$host="localhost";
	$password="";
	$database="base";
	$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
	mysql_select_db($database,$connexion);

	$rq="SELECT * FROM script_produit WHERE id_sscat=".$idprod." ORDER BY designation_prod;";
	$result= mysql_query ($rq) or die ("Select impossible");
	
	if (mysql_num_rows($result)>0){
		echo "<select size='1' name='prod_affiche'>";
		while ($dt=mysql_fetch_row($result)){
			echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option>";
		}
		echo "</select>";
	}else{
		echo utf8_encode("Pas de produits disponible");
	}
?> 


il faut d'abord tester tes deux scripts appelés

par exemple pour tester liresc.php, tu mets une valeur provisoire pour $idsscat
et tu appelles le script directement en tapant son adresse dans ton navigateur, il doit t'afficher la liste correspondant à la sous cat provisoire que tu as mis

idem pour lireprod.php

aussi si pb pour voir ce que tu reçoit, tu décommentes dans la fonction: //alert(affich_list);

et pour voir ce que la fonction envoie aux scripts php, tu décommentes : //alert("valeurs envoyee: "+data);

voilà ça devrait marcher comme ça.


@lain
0
Alain_42 Messages postés 5413 Statut Membre 894
 
Salut,

en complement:
si on selection l'élément affiché par defaut dans la liste, le onChange ne lance pas la fonction Ajax.

pour remedier à ça il suffit d'ajouter une option Choisissez dans la liste

ex dans index.php

..................
<form method='POST' action='valid.php'>
 <select size="1" name="cat" id="cat" OnChange="makeRequest('liresc.php','idsscat','cat','con­tenu2','contenu3');">
<option value=-1>Choisissez</option>
<?php
while ($dt=mysql_fetch_row($result))
.............


et tu fais pareil pour les script liresc.php et lireprod.php

et dans la fonction pour éviter d'appeler si Choisissez est resélectionné tu rajoutes à ce niveau la:

................
obj=document.getElementById(id_lire);
if(obj.value==-1){
    //si Choisissez a ete selectionné on sort de la fonction
    return;
}
data=nom_champ_poste+"="+obj.value;
.........................
0