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] Formulaire avec nombre variable de listes liées : count($_POST)


Sujet :

AJAX

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [AJAX] Formulaire avec nombre variable de listes liées : count($_POST)
    1er pb : le submit exécute une fonction JS resultat() qui normalement renvoie dans le div blocresultat du fichier index.php le résultat d'une requête SQL appelée dans le fichier resultat.php. Pour faire simple, le fichier resultat.php renvoie dans cet exemple les valeurs des $_POST nécessaires à la requête et non le résultat de la requête. C'est le count($_POST) qui me donne le nombre de listes liées utilisées sachant que seule m'intéresse la valeur du dernier $_POST (hormis la valeur du 1er $_POST du formulaire qui ne fait pas partie des listes liées). J'ai donc deux valeurs à récupérer pour pouvoir traiter ma requête SQL.

    sur le submit, le var r = "<?php echo (count($_POST)); ?>"; dans la fonction JS affiche 0.

    2ème pb : juste esthétique. Comment effacer une liste liée dans le formulaire si elle n'est pas utilisée.
    Si vous souhaitez tester, la branche 2 liée à la branche 2-2 n'est pas liée à un 3ème niveau.
    Cela fait 3 jours que je tourne en rond sur le 1er pb.
    Je vous remercie par avance pour votre aide.
    Le fichier index.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
    <?php
     
    function afficherTableau($array) {
        echo '<pre>';
        print_r($array);
        print_r(count($array));
        echo '</pre>';
    }
     
    // Initialisation ou récupération des variables 
    $type = !empty($_POST['type']) ? $_POST['type'] : '0';
    $niveau1 = !empty($_POST['niveau1']) ? $_POST['niveau1'] : '0';
    $niveau2 = !empty($_POST['niveau2']) ? $_POST['niveau2'] : '0';
    $niveau3 = !empty($_POST['niveau3']) ? $_POST['niveau3'] : '0';
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <script type='text/javascript'>

    Code js : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
                function getXhr() {
                    var xhr = 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;
                    }
                    return xhr;
                }
     
                /**
                 * Méthodes qui seront appelées sur le click du bouton
                 */
                function goNiveau2() {
                    var xhr = getXhr();
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            leselect = xhr.responseText;
                            document.getElementById('blocniveau2').innerHTML = leselect;
                        }
                    }
                    xhr.open("POST", "niveau2.php", true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    sel = document.getElementById('niveau1');
                    niveau1 = sel.options[sel.selectedIndex].value;
                    xhr.send("niveau1=" + niveau1);
                }
     
                function goNiveau3() {
                    var xhr = getXhr();
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            leselect = xhr.responseText;
                            document.getElementById('blocniveau3').innerHTML = leselect;
                        }
                    }
                    xhr.open("POST", "niveau3.php", true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    sel = document.getElementById('niveau2');
                    niveau2 = sel.options[sel.selectedIndex].value;
                    xhr.send("niveau2=" + niveau2);
                }
     
                function resultat() {
                    var r = "<?php echo (count($_POST)); ?>";
                    if (r != 0) {
                        alert(r);
                    }
                    var xhr = getXhr();
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            leselect = xhr.responseText;
                            document.getElementById('blocresultat').innerHTML = leselect;
                        }
                    }
                    xhr.open("POST", "resultat.php", true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    sel = document.getElementById('type');
                    type = sel.value;
                    switch (r) {
                        case 2:
                            sel2 = document.getElementById('niveau1');
                            niveau1 = sel2.value;
                            xhr.send("type=" + type + "&niveau1=" + niveau1);
                            break;
                        case 3:
                            sel2 = document.getElementById('niveau2');
                            niveau2 = sel2.value;
                            xhr.send("type=" + type + "&niveau2=" + niveau2);
                            break;
                        case 4:
                            sel2 = document.getElementById('niveau3');
                            niveau3 = sel2.value;
                            xhr.send("type=" + type + "&niveau3=" + niveau3);
                            break;
                        default:
                            break;
                    }
                }
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
            </script>
        </head>
        <body>
            <div id="global">
                <?php
                afficherTableau($_POST);
                    ?>
                <form  method="post" onsubmit="resultat();">
                    <fieldset>
                        <legend>Le type</legend>
                        <div id="bloctype">
                            <select name="type" id="type">
                                <option value="0">Aucun</option>
                                <?php
                                mysql_connect("localhost", "root", "");
                                mysql_select_db("test");
                                $res = mysql_query("select * from TYPE order by NOM_TYPE");
                                while ($row = mysql_fetch_assoc($res)) {
                                    echo "<option value='" . $row["id_type"] . "'>" . $row["nom_type"] . "</option>";
                                }
                                ?>
                            </select>
                        </div>
                    </fieldset>
                    <fieldset>
                        <legend>Liste li&eacute;es</legend>
                        <label>Niveau 1</label>
                        <select name='niveau1' id='niveau1' onclick='goNiveau2()'>
                            <option value='0'>Aucune</option>
                            <?php
                            mysql_connect("localhost", "root", "");
                            mysql_select_db("test");
                            $id = 1;
                            $res = mysql_query("select * from BRANCHE  where ID_BRANCHE_PARENT=" . $id . " order by NOM_BRANCHE");
                            while ($row = mysql_fetch_assoc($res)) {
                                echo "<option value='" . $row["id_branche"] . "'>" . $row["nom_branche"] . "</option>";
                            }
                            ?>
                        </select>
                        <label>Niveau 2</label>
                        <div id='blocniveau2' style='display:inline'>
                            <select name='niveau2'id='niveau2' onclick='goNiveau3()' >
                                <option value='0'>Choisissez dans la liste</option>
     
                            </select>
                        </div>
     
                        <label>Niveau 3</label>
                        <div id='blocniveau3' style='display:inline'>
                            <select name='niveau3' id='niveau3'>
                                <option value='0'>Choisissez dans la liste</option>
                            </select>
                        </div>
                    </fieldset>
                    <input type='submit' id='submit' value='Valider' />
                </form>
                <!--
                // affichage du resultat
                -->
                <div id='blocresultat'></div>
     
            </div>
        </body>
    </html>

    Les fichiers niveau 2.php et niveau3.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
    <?php
    	echo "<select name='niveau2' id='niveau2' onclick='goNiveau3()'>";
    	if(isset($_POST['niveau1'])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("test");
    		$res = mysql_query("select * from BRANCHE where ID_BRANCHE_PARENT=" . $_POST['niveau1'] . " order by NOM_BRANCHE");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row['id_branche']."'>".$row['nom_branche']."</option>";
    		}
    	}
     
    	echo "</select>";
    ?>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    	echo "<select name='niveau3' id='niveau3'>";
    	if(isset($_POST['niveau2'])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("test");
    		$res = mysql_query("select * from BRANCHE where ID_BRANCHE_PARENT=" . $_POST['niveau2'] . " order by NOM_BRANCHE");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row['id_branche']."'>".$row['nom_branche']."</option>";
    		}
    	}
     
    	echo "</select>";

    Le fichier resultat.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
    <?php
     
    echo 'j\' y suis';
    switch (count($_POST)) {
        case 2:
            echo $_POST['type'] . '' . $_POST['niveau1'];
            break;
        case 3:
            echo $_POST['type'] . '' . $_POST['niveau2'];
            break;
        case 4:
            echo $_POST['type'] . '' . $_POST['niveau3'];
            break;
        default:
            break;
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut suite
    J'ai modifié ma fonction resultat() pour passer toutes les variables du formulaire, y compris celles qui peuvent être vides.
    Voici le code :
    Code JS : 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
     
                function resultat() {
                    var xhr = getXhr();
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            leselect = xhr.responseText;
                            document.getElementById('blocresultat').innerHTML = leselect;
                        }
                    }
                    xhr.open("POST", "resultat.php", true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    sel = document.getElementById('type');
                    type = sel.value;
                    sel1 = document.getElementById('niveau1');
                    niveau1 = sel1.value;
                    sel2 = document.getElementById('niveau2');
                    niveau2 = sel2.value;
                    sel3 = document.getElementById('niveau3');
                    niveau3 = sel3.value;
                    xhr.send("type=" + type + "&niveau1=" + niveau1 + "&niveau2=" + niveau2 + "&niveau3=" + niveau3);
                }

    J'avance. J'espère que c'est dans la bonne direction. Maintenant, je vais essayer de récupérer les infos dans resultat.php.

Discussions similaires

  1. formulaire avec champ texte et listes deroulantes liées
    Par tarah01 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/03/2011, 19h26
  2. Formulaire avec nombre de champ variable
    Par david87 dans le forum IHM
    Réponses: 0
    Dernier message: 21/04/2008, 11h16
  3. [AJAX] Formulaire avec deux listes dynamiques liées
    Par gotcha5832 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/03/2007, 11h40
  4. Formulaire avec nombre de lignes de saisie variable
    Par NadègeG dans le forum Langage
    Réponses: 9
    Dernier message: 03/10/2006, 09h10
  5. Execution formulaire avec une variable
    Par dsj dans le forum Access
    Réponses: 9
    Dernier message: 08/09/2005, 20h46

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