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 PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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 html : Sélectionner tout - Visualiser dans une fenêtre à part
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 Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
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 PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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
Cdt,
Vespiras
Partager