[AJAX] XMLHttpRequest et les checkboxes
Bonjour à tous,
Je suis à la limite de la syncope, car mon script à un comportement bizarre, et mon problème est un peu spécifique.
Je m'explique :
J'ai une page sur laquelle je génère des checkboxes en php depuis des noms dans une table SQL.
admin.php
Code:
1 2 3 4 5 6 7 8 9
| $reponse_cb = $connexion->query("SELECT * FROM organisational_unit");
$count_cb=0;
echo "<li><input type='checkbox' name='all'>Tous les groupes</input></li>";
while($row = $reponse_cb->fetch())
{
echo "<li> <input type='checkbox' class='group_cb' id='".$row['id']."' name='".$row['id']."' >".$row['nom']."</input> </li>";
$count_cb++;
}
$reponse_cb->closeCursor(); |
Donc la, mes checkboxes sont bien générées, avec les bon IDs, noms,etc... Et après avec un onChange sur une liste déroulante :
admin.php
Code:
1 2 3
| <form name="edit_dl" method="POST" action="<?php $_SERVER['PHP_SELF'] ?>" >
<select id="liste_dl_edit" name="liste_dl_edit" onChange="xmlhttprequest(this.form)" > |
J'appelle la fonction js suivante :
script.js
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
function xmlhttprequest(f)
{
var liste = f.elements["liste_dl_edit"]; // on définit dans liste this.form.nom pour acceder au properties quickly
var index = liste.selectedIndex; // on recupere l'index selectionné dans la liste
//liste.options[0]=null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
xhr.open("POST", "includes/edit.php", true); // ici on définit la methode POST sur edit.php
xhr.onreadystatechange = function() { // ici on utilise le retrieve asynchrone afin de ne pas être bloquant
if(xhr.readyState == 4) // dès que les données sont recues
eval(xhr.responseText);
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = "nom="+liste.options[index].value+"&form="+f.name;
xhr.send(data);
} |
Avec en parametre "f" qui est le nom de mon formulaire. Cette fonction crée deux variables POST et les soumet à edit.php.( l.28/29)
Maintenant dans edit.php, je génère du code javascript en ayant bien recu le nom selectionné dans la liste déroulante (nom) et le nom du formulaire (form).
edit.php :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
$connexion = connexion_bdd();
$id_logiciel=0;
$reponse = $connexion->query("SELECT * FROM liste_telechargements WHERE nom = '".$_POST['nom']."'"); // on recupere les infos du telechargement à éditer
echo "var form1 = document.forms['".$_POST['form']."'];";
while($row = $reponse->fetch()) // on recup les infos sur le telechargement a editer et on les rentrent dans les elemnt du formulaire
{
$id_logiciel = $row['id'];
echo " form1.elements['nom'].value ='".$row['nom']."';";
echo " form1.elements['description'].value ='".$row['description']."';";
echo " form1.elements['icon'].value ='".$row['lien_icone']."';";
echo " form1.elements['ddl'].value ='".addslashes($row['lien_telechargement'])."';";
}
$reponse->closeCursor();
$reponse_c = $connexion->query("SELECT * FROM intermediaire WHERE id_logiciel = '".$id_logiciel."'");
while($row_c = $reponse_c->fetch()) // on recup les infos sur les OU dans lequel le telechargement est deployé
{
echo "form1.elements['".$row_c['id_ou']."'].checked = true;";
//echo "alert(".$row_c['id_ou'].");";
}
$reponse_c->closeCursor(); |
Je voudrais que selon les valeurs récuperées dans ma table "intermediaire", les checkboxes avec un id correspondant soit cochées.
Donc le je remplit dynamiquement mon formulaire sur admin.php. Ca marche super bien pour les éléments générés en html de base (les 4 zones de saisies) mais pour les checkboxes (gen en php), et bien elles ne veulent pas se cocher.
Alors que l'id (et le nom) sont les même que ceux retournés en resultat de la bdd.
J'ai essayé en dur, de créer en html un checkbox, et de le cocher à chaque appel de xmlhttprequest(f) en faisant comme je fais dans mon while dans edit.php. Seulement en dur, il me coche la case avec un evenement onChange, une fois sur deux !
Pour moi c'est incompréhensible, j'ai debuggé avec la console Js, il ne m'indique aucune erreur.
Je remercie grandement les gens qui auront lu, et encore plus ceux qui pourrait me dire quel peut être la cause du souci.
Merci beaucoup :calim2:
Cdt,
Vespiras