no save
Assistance
Achat
News

Forum | programmation
[php/AJAX] Listes déroulantes
Alain42, le mar. 28 août 2007 à 17:28:59
Je suis revenu de mon rendez vous, j'ai eu un peu de temps alors je t'ai fait tes scripts pour ce dont tu as besoin:

3 fichiers toujours

config.php:

<?php
$host="localhost";
$Login="xxxxxxx";
$Pass="yyyyyyyy";
$DB="gest_process"; // le nom de ta base
?>

page1.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">Liste1:<br>
<select name="niv1" id="id_niv1" onChange="makeRequest('rep_PhpAjax.php','id_niv1','id_niv2')">
<option>-- Choisissez --</option>
<option value="impact">impact</option>
<option value="processus">processus</option>
<option value="instancedecision">instance decision</option>
</select>
<br><br>
</div>


<div id="id_niv2">
<!-- 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");
//recup de la valeur postee par Ajax (nom de la table)
$table=$_POST['val_sel'];
if($table=="Choisissez") {exit;}
//generation des noms des champs en fonction de la table (si ils s'appelaient tous pareils il serait inutile de faire ça)
switch ($table){
case "impact":
$id="id_impact";
$nom="LibelleImpact";
break;
case "instancedecision":
$id="Id_Instance_Decision";
$nom="Nom";
break;
case "processus":
$id="Id_Processus";
$nom="NomProcessus";
break;
}

// Connexion a la base de donnees
$AccesBase = mysql_connect($host,$Login,$Pass);
mysql_select_db($DB,$AccesBase);
$QuestionBase = "SELECT * FROM $table " ;
$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
// construction de la réponse PHP à Ajax
$aff="<table BORDER=\"6\" CELLPADDING=\"6\" CELLSPACING=\"10\" Width=\"60%\">";
$aff.="<tr><th Width=\"60%\">Nom</th><th colspan=\"2\"Width=\"40%\">Actif</th></tr>";// ligne des titres du tableau
while ($row=mysql_fetch_assoc($result_recherche)){
//cocher le bouton radio en focntion de l'etat Actif oui/non lu dans la base
if($row['Actif']=="oui"){$check_oui="checked"; $check_non="";}else{$check_oui=""; $check_non="checked";}
// generation des lignes de la reponse
$aff.="<tr><td><input type=\"text\" name=\"$row[$id]\" value=\"$row[$nom]\"></td>";
$aff.="<td><input type=\"radio\" name=\"radio_oui_$row[$id]\" $check_oui >oui</td>";
$aff.="<td><input type=\"radio\" name=\"radio_non_$row[$id]\" $check_non >non</td></tr>";
}
$aff.="</table>";
// envoi reponse Php a Ajax qui va afficher tout ça dans la page
echo $aff;
?> Configuration: Windows XP
Firefox 2.0.0.6
PrécédentAlain42
août 07
imae14
août 07
Suivant
REPONSES
loranl
avr. 06
techer jean-françois
févr. 07
loranl
mars 07
karim
mai 07
imane14
août 07
Alain42
août 07
imae14
août 07
Alain42
août 07
Alain42
août 07
imae14
août 07
Version Web
Réalisé par RedShift
no save