IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] XMLHttpRequest et les checkboxes


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut [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 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

  2. #2
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    La vraiment je ne comprends pas :
    Mes 4 champs texte sont mis à jour correctement depuis edit.php, et je recoit le bon nom de formulaire, et le bon nom selectionné dans ma liste.
    Je fait un affichage de xhr.responseText et je vois ce code js la par exemple :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var form1 = document.forms['edit_dl'];
    form1.elements['nom'].value ='FM Firefox';
    form1.elements['description'].value ='Navigateur rapide et sur !';
     form1.elements['icon'].value ='portail_image/applications/firefox_ico.png';
     form1.elements['ddl'].value ='\\\\srv-fichiers-vm\\Applications$\\FireFox\\V19\\FMFirefoxCE-19.0-fr.msi';
    form1.elements['40'].checked = true;

    La derniere ligne est en fait documents.forms['edit_dl'].elements['40'] ...
    Et ma checkbox id='40' est bien celle qui faut cocher ! c'est fou parce que c'est la checkbox id='33' qui se coche !

  3. #3
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Bon je me répond à moi tout seul, j'ai trouvé la solution, désolé du dérangement

    ca faisait un ptit paquet de temps que, je cherchait, et j'avais d'autres tâches à faire alors ...

    Ne JAMAIS nommer des id de checkboxes que avec des valeurs numériques.
    Ici tout simplement, je cherchais la bête légendaire, mais l'erreur était simple :

    Dans ma boucle :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    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'].");";
    }

    Il prenait l'élément "n" de mon formulaire et pas la checkbox nommée "n".
    J'ai tout simplement rajouté "cb" devant le nom de mes checkboxes générées (cb1, cb2, ...) et la, comme par magie il me coche les bonnes !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] XMLHttpRequest et les liens relatifs
    Par Loenix dans le forum AJAX
    Réponses: 4
    Dernier message: 21/10/2011, 10h38
  2. Sélection automatique de tous les checkbox d'un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/08/2005, 09h55
  3. Pb avec les checkbox: tout sélectionner,récupération valeurs
    Par bubble_gum dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/10/2004, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo