Page 1 sur 1

Listes liées: seconde liste vide

Posté : 15 sept. 2012, 09:41
par Kerlouan
Bonjour;
J'ai besoin de créer deux listes liées.
Je débute en JS, PHP.
A force de fouiner et avec un conseil sur un autre forum je suis passé par AJAX.
J'ai tenté d'adapter les tutos à mon cas mais un souci apparait: la seconde liste reste vide.
Ma première liste a pour id "choix_partie" et la seconde "choix_theme".
J'ai créé au départ une requête à ma BDD "liste_competences" qui contient les champs: id****partie***theme****intitule
Contrairement aux tutos j'ai préféré récupérer le texte de l'option de mon premier select qui a été choisie car j'ai plusieurs lignes avec le même champ partie.

Je vais essayer d'écrire la suite en plusieurs fois car j'ai droit à un superbe "spam" qui m'empêche d'envoyer le message en entier. :?

Re: Listes liées: seconde liste vide

Posté : 15 sept. 2012, 09:44
par Kerlouan
Suite du message:
Voici un extrait du code html:
<div id="conteneur_partie">
	<label id="label_choix_partie">Choix de la partie:</label>
	<select name="choix_partie" id="choix_partie" disabled="true" onChange='activation_theme()'>
	<option selected value="selection">--Sélectionnez ci-dessous--</option>
	<?php
		while( $ligne = $requete->fetch() ) // on récupère la liste des membres
				{?>
				<option value="<?php echo $ligne->partie;?>"><?php echo $ligne->partie;?></option>
				<?php
				}
		$requete->closeCursor();
	?>
	</select>
	<input type="button" name="nouvelle_partie" value="Nouvelle partie" disabled="true"id="bouton_nouvelle_partie" onClick='action_nouvelle_partie()'/>
	</br>
	</div>

		<!-- Conteneur THEME -->
	<div id="conteneur_theme">
	<label id="label_choix_theme">Choix du thème:</label>
	<div id="div_theme" style='display:inline'>
	<select name="choix_theme" id="choix_theme" disabled="true" onChange='activation_intitule_competence()'>
	<option selected>--Sélectionnez ci-dessous--</option>
	</select>
	</div>
	<input type="button" name="nouveau_theme" value="Nouveau thème" disabled="true" id="bouton_nouveau_theme"/ onClick='action_nouveau_theme()'>
	</br>
	</div>

Re: Listes liées: seconde liste vide

Posté : 15 sept. 2012, 09:45
par Kerlouan
Suis désolé d'envoyer en plusieurs fois mais impossible sinon. Bizarre.

Voici les fonctions créées:
[javascript]
<script>
var xhr = null;

function getXhr(){
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
}

function activation_theme()
{
var choix_partie = document.getElementById("choix_partie").selectedIndex;
if (choix_partie!=0)
{
document.getElementById('label_choix_theme').disabled = false;
document.getElementById('choix_theme').disabled = false;
document.getElementById('bouton_nouveau_theme').disabled = false;
document.getElementById('label_choix_theme').style.color = "black";
}


getXhr();
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4 && xhr.status == 200)
{
Nouveau_Select_theme = xhr.responseText;
document.getElementById('div_theme').innerHTML = Nouveau_Select_theme;
}
}

xhr.open("POST","ajax.php",true); //ajax.php reçoit les paramètres de l'objet xhr
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

sel = document.getElementById('choix_partie');
PartieChoisie = sel.options[sel.selectedIndex].text; //Je prends le text et non le value
xhr.send("PartieChoisie"+PartieChoisie);
}


</script>
[/javascript]

J'ai testé via un alert à cet endroit et ma variable 'PartieChoisie' contient bien ce que j'ai sélectionné dans le premier select. Donc j'envoie bien quelque chose.

Re: Listes liées: seconde liste vide

Posté : 15 sept. 2012, 09:46
par Kerlouan
Le fichier ajax.php:
<?php
		header("Content-Type: text/plain");
        echo "<select name='choix_theme'>";
        if(isset($_POST["PartieChoisie"])){
               $requete = $bdd->query('SELECT  DISTINCT theme FROM liste_competences WHERE partie='.$_POST["PartieChoisie"].'');
			   $requete-> setFetchMode(PDO::FETCH_OBJ); 
                 while( $ligne = $requete->fetch() ) // on récupère la liste des membres
				{
				echo '<option value='.$ligne['theme'].'>'.$ligne['theme'].'</option>';
				}
		$requete->closeCursor();
        }
        echo "</select>";
?>
J'ai testé un echo $_POST['PartieChoisie'] et j'ai droit à un undefined index. Donc ma variable n'existe pas alors que je l'ai envoyée et qu'elle contient quelque chose?

Re: Listes liées: seconde liste vide

Posté : 15 sept. 2012, 09:47
par Kerlouan
En l'état actuel des choses le choix d'option du premier select crée bien un second select mais vide. :?
Si quelqu'un a une idée, je suis preneur. :)
Et encore désolé pour cette multiplication des posts. Pas eu le choix.
Merci.

Re: Listes liées: seconde liste vide

Posté : 15 sept. 2012, 20:54
par Kerlouan
Aucun succès. :(
Je cherche encore et encore et j'ai trouvé une erreur:
[javascript]xhr.send("PartieChoisie"+PartieChoisie);[/javascript]
"=" oublié.
Ma variable "PartieChoisie" est enfin définie.
Hélas mon second select est toujours vide.
Est-ce que sa construction est erronée?
Ma requête est-elle valable?