Listes liées: seconde liste vide

Petit nouveau ! | 6 Messages

15 sept. 2012, 09:41

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. :?

Petit nouveau ! | 6 Messages

15 sept. 2012, 09:44

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>

Petit nouveau ! | 6 Messages

15 sept. 2012, 09:45

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.
Modifié en dernier par Kerlouan le 15 sept. 2012, 09:49, modifié 2 fois.

Petit nouveau ! | 6 Messages

15 sept. 2012, 09:46

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?

Petit nouveau ! | 6 Messages

15 sept. 2012, 09:47

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.

Petit nouveau ! | 6 Messages

15 sept. 2012, 20:54

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?