imane14
2 sept. 2007 à 11:46
BONJOUR,
Je te renvoie les scripts:
modifajax.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(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", "repPhpAjax.php", 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 modifier(champ,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", "modifajax.php", 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_niv1").value;
obj1=document.getElementById("c").value;
obj2=document.getElementById("s").value;
data2="val_sel2="+obj2;
data1="val_sel1="+obj1;
data="val_sel="+obj;
alert(data);
alert(data1);
alert(data2);
// http_request.send(data&data1&data2);
}
function traitementReponse(http_request,id_ecrire)
{
var affich="";
if (http_request.readyState == 4 && 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
// Connexion a la base de donnees
$db_conn = mysql_connect("localhost", "edf", "edf")
or die("Imposssible d'établir la connexion avec le serveur!");
mysql_select_db('edf', $db_conn) or die("Imposssible d'établir la connexion avec la base de données!");
/*$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="">
<div id="id_list1" title= >Champs à paramétrer:<br>
<select name="niv1" id="id_niv1" onChange="makeRequest('id_niv1','id_niv2')">
<option>-- Choisissez --</option>
<option value="impact">impact</option>
<option value="processus">processus</option>
<option value="instancedecision">instance decision</option>
</select>
<input name="champ" type="text" id="c">
<select name="select" id="s">
<option value="0">0</option>
<option value="1">1</option>
</select>
<br>
<br>
</div>
<div id="id_niv2">
<!-- ici sera charge la reponse mode texte de PHP à la request AJAX
-->
</div>
<div id="id_niv3">
<input name="ajout_champs" type="button" value="Ajouter" onClick="modifier('champ','id_niv1')">
<input name="modif_champs" type="submit" value="Modifier">
<input name="valid_champs" type="submit" value="Valider">
</div>
</form>
</body>
</html>
page1.php
<?php
// script PHP interrogation Base de donnees pour reponse a la requete
//AJAX
//recup de la valeur postee par Ajax (nom de la table)
$table=$_POST['val_sel'];
$actif=$_POST['val_sel1'];
$ajout=$_POST['val_sel2'];
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
$db_conn = mysql_connect("localhost", "edf", "edf")
or die("Imposssible d'établir la connexion avec le serveur!");
mysql_select_db('edf', $db_conn) or die("Imposssible d'établir la connexion avec la base de données!");
$QuestionBase = "INSERT INTO processus VALUES ('','".$ajout."','".$actif."')";
$result_recherche=mysql_query($QuestionBase) or die(mysql_error());
// construction de la réponse PHP à Ajax
echo"<table BORDER=\"6\" CELLPADDING=\"6\" CELLSPACING=\"10\"Width=\"60%\">";
echo"<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']==1)
{
$check_oui="checked";
$check_non="";
}
else
{
$check_oui="";
$check_non="checked";
}
// generation des lignes de la reponse
echo"<tr><td><input type=\"text\" name=\"$row[$id]\"value=\"$row[$nom]\"></td>";
echo"<td><input type=\"radio\" name=\"radio_oui_$row[$id]\"$check_oui >oui</td>";
echo"<td><input type=\"radio\" name=\"radio_oui_$row[$id]\"$check_non >non</td></tr>";
}
echo"</table>";
// envoi reponse Php a Ajax qui va afficher tout ça dans la page
//echo $aff;
?>
repAjaxPhp.php
<?php
// script PHP interrogation Base de donnees pour reponse a la requete
//AJAX
//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
$db_conn = mysql_connect("localhost", "edf", "edf")
or die("Imposssible d'établir la connexion avec le serveur!");
mysql_select_db('edf', $db_conn) or die("Imposssible d'établir la connexion avec la base de données!");
$QuestionBase = "SELECT * FROM $table " ;
$result_recherche=mysql_query($QuestionBase) or die(mysql_error());
// construction de la réponse PHP à Ajax
echo"<table BORDER=\"6\" CELLPADDING=\"6\" CELLSPACING=\"10\"Width=\"60%\">";
echo"<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']==1)
{
$check_oui="checked";
$check_non="";
}
else
{
$check_oui="";
$check_non="checked";
}
// generation des lignes de la reponse
echo"<tr><td><input type=\"text\" name=\"$row[$id]\"value=\"$row[$nom]\"></td>";
echo"<td><input type=\"radio\" name=\"radio_oui_$row[$id]\"$check_oui >oui</td>";
echo"<td><input type=\"radio\" name=\"radio_oui_$row[$id]\"$check_non >non</td></tr>";
}
echo"</table>";
// envoi reponse Php a Ajax qui va afficher tout ça dans la page
//echo $aff;
?>
en fait, maintenant il affiche les elements qui sont déjà dans la base de données, mais si je veux ajouter un nouveau element, il n'arrive pas à créer une nouvelle zone de texte dans le tableau pour rajouter l'element que j'ai saisi.
Je pense qu'il faut ajouter qqc dans la fonction traitementReponse de la page1.php!!!
Par exemple si je choisi impact dans ma liste déroulante, il m'affiche process1 et le bouton actif est coché(ce que contient la table processus), maintenant j'ecris procss2 dans la zone de texte champ et je choisi 0 dans la liste select pour dire qu'il est non actif.
qd je clique sur le bouton ajouter, il affiche dans une petite fenetre:
val_sel=processus/ val_sel1=process2/val_sel2=0 .mais rien ne se rajoute dans le tableau du coup dans la base de données.
Merci de ton aide alain42.