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

Fermé
Olivier - 27 févr. 2007 à 09:01
 Alain42 - 25 juil. 2007 à 14:56
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 18707 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 273
27 févr. 2007 à 09:09
Il te suffit de glisser un <? $cat = $_POST['Categorie']; ?>
0
Où conseilles-tude le glisser dansl'exemple stp...
0
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 mercredi 25 juillet 2007 Statut Membre Dernière intervention 27 février 2009 19
25 juil. 2007 à 12:25
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
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