Bonjour,

Je me suis mis recemment dans l'univers du PHP. Bref, j'essaye de faire une page web ayant trois liste déroulante où il y a deux qui sont reliées entre eux. En effet, il s'agit de gérer des clés dans un établissement, les trois liste déroulante indique le nom et le prénom du client, le numéro de la clé et le numéro de la copie (qui dépend du numéro de la clé).
J'ai réussi à coder les trois liste déroulante en utilisant ajax dans mon code. Mais mon problème maintenant est comment capturer les données dans ces listes dans la variable POST afin de les traiter et enregistrer dans ma base données cette réservation.
Je mets à votre disposition les parties de codes concerné et je vous remercie d'avance.

la page web à afficher takekey.php :

<html>
<head>
    <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
    <script>
        function getKeynum(val) {
            $.ajax({
                type: "POST",
                url: "inc/ajax.php",
                data: "keynum="+val+"&action=getKeynum",
                success: function(data){
                    //console.log(data);
                    $("#keycopy").html(data);
                }
            });
        }
    </script>
</head>

<body>
    <?php
        include 'inc/database.php';
        include 'inc/methods';
        include 'inc/ajax.php';
        $sql ="select concat(first, ' ', last) as utilisateur from client order by utilisateur";
        $option = dropdown_populate($db, $sql, 'utilisateur');
    ?>
    <form action="bookprocess.php" method="post">
    <p><label>Client</label></p>
    <select name="client">
        <option selected="client">Choisir un client</option>
        <?php
        foreach ($option as $client) { ?>
            <option value="<?= $client ?>"><?= $client ?></option>
            <?php
        }?>
    </select>
    <?php
        $sql = "select keynum from clef where keystatus = 'available' GROUP BY keynum";
        $option = dropdown_populate($db, $sql, 'keynum');
    ?>
    <p><label>Clé disponible</label></p>
    <select name="cle" onchange="getKeynum(this.value)">
        <option selected="cle">Choisir une clé</option>
        <?php
        foreach ($option as $key) { ?>
            <option value="<?= $key ?>"><?= $key ?></option>
            <?php
        }
        ?>
    </select>

     <p><label>Copie de clé</label></p>
    <select name="copy" id="keycopy">
        <option selected="copy">Choisir une copie</option>
</select>
        <?php
        $_POST = array();
        ?>
        </br><input type="button" name="submit" value="renvoyer">
    </form>
</body>
</html>

le fichier database.php :

<?php
    $DBHOST='localhost';
    $DBUSER='root';
    $DBPASS='';
    $DBNAME='keys';

    $db = new PDO("mysql:host=$DBHOST;dbname=$DBNAME",$DBUSER,$DBPASS);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

le fichier ajax.php

<?php

include 'database.php';

//include 'resources/jquery.1.12.0.min.js';

    $action = "";
    if(isset($_POST['action']))
    {
        $action = $_POST['action'];
    }

    switch($action)
    {
        case 'getKeynum':
            $keynum = $_POST["keynum"];
            $option1 = array();
            $stmt = $db->prepare("select keycopy from clef where keynum ='". $keynum . "' and keystatus = 'available'");
            //$stmt->bindParam(':keynum', $keynum);
            $stmt->execute();

            $row = $stmt->fetchall(PDO::FETCH_ASSOC);
            //var_dump($stmt);
            for ($i = 0; $i < $stmt->rowCount(); $i++) {
                $option1[$i] = $row[$i]['keycopy'];
            }

            $html = "<option selected='cle'>Choisir une clé</option>";
                foreach ($option1 as $value)
                {
                    $html .= "<option value='" .$value."'> " .$value. " </option>";
                }

            //$result = json_encode($option1);

            echo $html;

            break;
    }

le fichier methods.php

    function dropdown_populate($db, $sql, $index)
    {
        $stmt = $db->prepare($sql);
        $stmt->execute();
        $row = $stmt->fetchall(PDO::FETCH_ASSOC);
        for ($i = 0; $i < $stmt->rowCount(); $i++) {
            $option[$i] = $row[$i][$index];
        }
        return $option;
    }

7 réponses


Si tu fais un var_dump de ton $_POST après la validation du formulaire tu verras ce que te retourne les select,
$_POST['client']
$_POST['cle']
$_POST['copy']

Il me semble qu'il manque l'attribut name a tes champs

@Keller : en faisant un var_dump
j'ai uniquement un tableau vide

array(0) { } 

Si tu affiches le HTML de ta page, les champs ont tous bien des valeurs ?

Ce qui est posté par ajax tu peux récupérer car à la variable REQUEST..

Je m'explique, si dans ta requête AJAX, tu postes par exemple val, tu peux faire $mavariable = $_REQUEST['val'];

@Keller
oui quand j'inspecte la page ça me donne bel et bien toutes les valeurs dans mes balises HTML

Bonsoir.
Si tu utilises une requête en ajax, soit via javascript, pourquoi est-ce que tu inclues la page concernée ?
Ta requête sera faite via l'url.
Par contre, pourquoi est-ce que tu vides la variable $_POST dans ton formulaire ?