[PHP+Javascript]

Fermé
juliee - 15 juin 2007 à 15:46
 julie - 18 juin 2007 à 12:45
salut,
voila mon probleme, je voudrais faire deux listes, une qui contient le niveau d'etude et la deuxieme qui selon le niveau d'etude affiche les etudiant correspondants...

je sait que il faut faire deux select le premier est "niveau" et le deuxieme "etudiants", et que il faut mettre pour le premier : onChange='fctJavascript();'

sauf que les etudiants sont inseré dans une bases de donnée... normalement on doit les recuperer avec php et les passer a javascript mais comment faire?

si vous avez un code deja fait svp balancer le sinon essayer de m'aider

merci d'avance
A voir également:

3 réponses

Bonjour,

Pourquoi vouloir passer par Javascript ?

Tu fais un formulaire, tu mets une première liste avec onChange=Submit();
Dans la balise form tu mets action=nom du script
Dans ton script tu mets et le html et le traitement php.
Au moment ou l'utilisateur change dans la liste une, il y aurra appel du script, et à ce moment là tu va lire dans la base en fct de l'élement sélectionné puis tu cree une deuxième liste et tu réafiches ta page html.

Un peu difficile à expliquer.

Vas voir sur Google en tapant "PHP listes déroulante liées"
0
N'ayant pas eu de réponse j'ai concocté un petit script à base de requette Ajax
3 fichiers :
config.php:
----------------------------------------------------------
<?php
$host="localhost";
$Login="";
$Pass="";
$DB="test";
$Table="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;
?>
--------------------------------------------------------------------------------------------------------------------

Dis moi si cela t'a aidé
0
merci grace a toi ca marche
0