11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai un souci avec mon code et je n'arrive pas à comprendre la logique. Peut-être c'est le choix qu'il ne fallait pas faire...
En effet, j'ai un input (champ) datepicker et un liste déroulante dans mon formulaire. J'ai aussi 2 tables dans ma BD : materiels et demande_materiels. Les 2 tables sont liées par une clé étrangère : materiel_id dans la table demande_materiels. J'aimerais quand que je choisie une date dans le champ datepicker, de récupérer dans ma liste déroulante les matériels disponibles à cette date. C-à-d que les matériels disponibles sont ceux qui n'existe pas dans la table demande_materiels. Je compare la date choisie dans le champ datepicker avec l'intervalle de temps : date_debut_demande et date_fin_demande de la table demande_materiels. Si la date choisie existe dans cet intervalle de temps, elle n'est pas disponible. Ci-dessous un exemple de code :


// formulaire html
<form>
     <input type="text" name="datePick" class="datepicker" id="datePick">
     <select name="materiel[]" id="materiel">
           <option value="">- - - Choisissez votre matériel - - -</option>
     </select>
</form>


// code js
$(document).ready(function() {
     var = $datePick = $('#datePick');
     var = $materiel = $('#materiel');
 
   $.ajax({
        url: 'action.php',
        data: 'done',
        dataType: 'json',
        success: function(json) {
            $datePick.each(json, function() {
                $(this).val();
            });
        }
    });
 
    $datePick.on('change', function() {
        var val = $(this).val();
 
        if(val != '') {
            $materiel.empty();
 
            $.ajax({
                url: 'action.php',
                data: 'date_d='+ val,
                dataType: 'json',
                success: function(json) {
                    $.each(json, function(index, value) {
                        $materiel.append('<option value="'+ index +'">'+ value +'</option>');
                    });
                }
            });
        } else {
            $materiel .empty();
            $materiel .append('<option value="">- - - Sélectionnez votre matériel - - -</option>');
        }
    });
});


// code php : action.php
if(isset($_GET['done']) || isset($_GET['date_d'])) {
        // connexion db
        require_once('db.php');
 
        $json = array();
 
       if (isset($_GET['date_d'])) {
            $sql = '
                    SELECT *
                    FROM materiels m
                    LEFT JOIN demande_materiels dm
                    ON dm.materiel_id = m.materiel_id
                    WHERE dm.demande_materiel_id = '.$_GET['date_d'].'
                ';
            $req = $db->prepare($sql);
            $req->execute() or die(print_r($req->errorInfo()));
            // Création de la liste
            foreach ($req->fetchAll() as $data){
                $json[$data["materiel_id"]][] = utf8_encode($data["materiel_nom"]);
            }
        }
 
        // envoi du résultat au success
        echo json_encode($json);
    }


Voilà en gros ce que j'ai fait et ça ne fonctionne pas. J'aimerais de l'aide si quelqu'un a déjà rencontré ce problème. Merci par avance !

Cdlt,
Bonjour,
Il me semble que tu aies une erreur sur la délcaration de tes variables :

var = $datePick = $('#datePick');
var = $materiel = $('#materiel');

As-tu plus de précision sur ce qui ne fonctionne pas? Est-ce la récupération des dates? le code php?
Bonjour @Foolcrow,

Merci de me répondre. Je n'ai pas d'erreur dans mon code. C'est juste ce que je souhaiterais faire ne marche pas. Mais j'ai trouvé une astuce pour contourner ça.

Merci bcp !

Cdlt,