Problème de 2 Listes déroulantes (PHP mySQL)

Olivier -  
 Alain42 -
Voilà, j'explique mon cas... Pour ajouter un nouvel article dans ma bdd, je veux sélectionner une Catégorie d'article puis un Genre selon la Catégorie sélectionnée en cherchant ces éléments par requêtes SQL. La sélection de la Catégorie fonctionne mais celle du Genre reste vide car je sais pas comment écrire la requête avec l'élément sélectionné dans la Catégorie comme clé...

Exemple:
<label for="Categorie">Catégorie:</label>
<select name="Categorie" class="SELECT">
<?php
$sql = "SELECT categorie FROM categories order by 1";
$result = db_query($database_name,$sql);
while ($row = mysql_fetch_row($result)){
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
?>
</select>
<br />
<label for="Genre">Genre:</label>
<select name="Genre" class="SELECT">
<?php
$sql1 = "SELECT id_cat FROM categories WHERE categorie='".$cat."'";
$result1 = db_query($database_name,$sql1);
$row1 = mysql_fetch_row($result1);
$sql2 = "SELECT genre FROM genres WHERE id_cat='".$row1[0]."' ORDER BY id_gen";
$result2 = db_query($database_name,$sql2);
while ($row2 = mysql_fetch_row($result2)){
echo "<option value=\"".$row2[0]."\">".$row2[0]."</option>";
}
?>
</select>

Dans cet exemple je dois définir $cat.

Merci de me venir en aide.
A voir également:

3 réponses

Jean-François Pillou Messages postés 19261 Date d'inscription   Statut Webmaster Dernière intervention   63 277
 
Il te suffit de glisser un <? $cat = $_POST['Categorie']; ?>
0
Olivier
 
Où conseilles-tude le glisser dansl'exemple stp...
0
Olivier
 
Voici le Form tel qu'il est:

<form action="validadd.php" id="formu" class="css" onSubmit="return formCheck(this);">
<fieldset>
<legend>Ajouter Nouveau article</legend>
<label for="nom">Nom:</label>
<input type="text" name="nom" id="nom" />
<br />
<label for="qte_Stock">Stock:</label>
<input type="text" name="qte_Stock" id="stock" />
<br />
<label for="prix">Prix:</label>
<input type="text" name="prix" id="prix" />
<br />
<label for="Categorie">Catégorie:</label>
<select name="Categorie" class="SELECT">
<?php
$sql = "SELECT categorie FROM categories order by 1";
$result = db_query($database_name,$sql);
while ($row = mysql_fetch_row($result)){
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
?>
</select>
<br />
<label for="Genre">Genre:</label>
<select name="Genre" class="SELECT">
<?php
$sql1 = "SELECT id_cat FROM categories WHERE categorie='".$cat."'";
$result1 = db_query($database_name,$sql1);
$row1 = mysql_fetch_row($result1);
$sql2 = "SELECT genre FROM genres WHERE id_cat='".$row1[0]."' ORDER BY id_gen";
$result2 = db_query($database_name,$sql2);
while ($row2 = mysql_fetch_row($result2)){
echo "<option value=\"".$row2[0]."\">".$row2[0]."</option>";
}
?>
</select>
<br />
<label for="nom">Editeur:</label>
<input type="text" name="editeur" id="editeur" />
<br />
<label for="photo">Photo:</label>
<input name="fichier" type="file"/>
<br/><br/>
<input type="Submit" value="AJOUTER" class="valid" name="envoie">
<input type="Reset" value="ANNULER" class="valid" name="effacer" >
</fieldset>
</form>

Ne faisant pas de POST, je ne vois pas où l'insérer et encore moins résoudre mon affaire.

Merci d'avance.
0
ted470 Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   19
 
salut, peut-être que ceci correspondra à tes attentes:
http://www.roodali.com/index.php?2007/07/03/9-2-listes-deroulantes-liees-avec-ajax-mysql-php
et la démo:
http://www.roodali.com/MES_COURS_FOR_WEB/double-combo/index.php
0
Alain42
 
Est ce que cela peut te convenir, trois fichiers, respectes les noms:

config.php

<?php
$host="localhost";
$Login="xxxxxx";
$Pass="xxxxxxx";
$DB="test";
$Table="etudiants";
$champ_niv="niveau";
$champ_etud="etudiants";
?>



listes_liees.php

<html>
<head>
<!-- Script de listes deroulantes liees avec appel par AJAX, (evite le rechargement de la page) -->
<script language="Javascript"type="text/JavaScript">
// Requette AJAX
function makeRequest(url,id_niveau,id_ecrire){
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_ecrire); } //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_niveau);
data="val_sel="+obj.value;
http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
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;
obj = document.getElementById(id_ecrire);
obj.innerHTML = affich_list;
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
</script>
</head>
<?php
include ("config.php");
// Connexion a la base de donnees
$AccesBase = mysql_connect($host,$Login,$Pass);
mysql_select_db($DB,$AccesBase);
$QuestionBase = "SELECT DISTINCT $champ_niv FROM $Table ORDER BY $champ_niv ASC " ;
$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
$nombre_enr=mysql_num_rows($result_recherche);
?>
<body>
<form name="test1" method="post" action="liste_liees.php" >
<div id="id_list1">Niveau:<br>
<select name="niv1" id="id_niv1" onChange="makeRequest('rep_PhpAjax.php','id_niv1','id_list2')">
<option>-- Choisissez --</option>
<?php
while ($row=mysql_fetch_assoc($result_recherche)){
?>
<option value="<?php echo $row[$champ_niv]?>"><?php echo $row[$champ_niv]?></option>
<?php
}
?>
</select>
<br><br>
</div>


<div id="id_list2">
<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
</div>
</form>
</body>
</html>



RepPhpAjax.php

<?php
// script PHP interrogation Base de donnees pour reponse a la requette AJAX
include ("config.php");

// Connexion a la base de donnees
$AccesBase = mysql_connect($host,$Login,$Pass);
mysql_select_db($DB,$AccesBase);
$QuestionBase = "SELECT * FROM $Table WHERE ".$champ_niv."='".$_POST[val_sel]."' ORDER BY ".$champ_etud." ASC " ;
$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
// construction de la liste deroulante
$aff=="";
$aff=$aff."Etudiants:<br>
<select name='niv1' id='cont_list2' >
<option>-- Choisissez --</option>";
while ($row=mysql_fetch_assoc($result_recherche)){
$aff.="<option value=\"$row[$champ_etud]\">$row[$champ_etud]</option>";
}
$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax
echo $aff;
?>
0