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

  1. #1
    Membre régulier
    Invalid parameter number: number of bound variables does not match number of tokens
    Bonjour, je fais une todo list avec comme technologie MySQL, PHP, jQuery et ajax.

    Pour le moment, mon insert de tâche, readall tâche et read tâche by id fonctionne. Mon formulaire de mise à jour s'affiche bien avec les bonnes données récupéré dans la DB.

    Lorsque je clic su l'icône pour faire un update, j'ai une erreur
    SQL: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
    J'ai beau controler les paramètres de ma requête SQL, je ne trouve pas.

    Ma fonction update:
    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
    //Fonction qui va mettre à jour une tâche dans la DB sur base de son id.
        public function updateTask($id, $title, $description, $importance, $due_date, $start_date,
                $parent, $status, $category, $prerequisite, $end_date, $estimated_time, $display_order) {
            $db = new Database;
            $sql = "UPDATE tasks SET title = :title, description = :description, importance = :importance, due_date = :due_date, "
                    . "start_date = :start_date, parent = :parent, status = :status, category = :category, prerequisite = :prerequisite, "
                    . "created_at = :created_at, now(), end_date = :end_date, estimated_time = :estimated_time, "
                    . "display_order = :display_order WHERE id_task = :id_task";
            try {
                $stmt = $db->db_connexion()->prepare($sql);
                $stmt->execute(array(':title' => $title, ':description' => $description, ':importance' => $importance, ':due_date' => $due_date, ':start_date' => $start_date,
                    ':parent' => $parent, ':status' => $status, ':category' => $category, ':prerequisite' => $prerequisite, 
                    ':end_date' => $end_date, ':estimated_date' => $estimated_time, ':display_order' => $display_order, ':id_task' => $id));
                //return true;
                $count = $stmt->rowCount;//remplace un return true, retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l'objet PDOStatement correspondant. 
                echo $count . 'modif effectuée';
                $stmt = null;
            } catch (Exception $e) {
                //s'il y a un problème PHP ou SQL, tout s'affichera ici
                print "Erreur ! " . $e->getMessage() . "<br/>";
            }
        }



    mes requêtes ajax:
    Code :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
    //Update task
                    $("body").on("click", ".editBtn", function (e) {
                        e.preventDefault();
                        edit_id = $(this).attr('id_task');
                        $.ajax({
                            url: "action.php",
                            type: "POST",
                            data: {edit_id:edit_id},
                            success: function (response) {
                                data = JSON.parse(response);
                                console.log(data);
                                //je remplis les champs avec ce qui est récupéré dans la DB.
                                $("#id").val(data.id_task);
                                $("#title").val(data.title);
                                $("#description").val(data.description);
                                $("#importance").val(data.importance);
                                $("#due_date").val(data.due_date);
                                $("#start_date").val(data.start_date);
                                $("#parent").val(data.parent);
                                $("#status").val(data.status);
                                $("#category").val(data.category);
                                $("#prerequisite").val(data.prerequisite);
                                $("#end_date").val(data.end_date);
                                $("#estimated_time").val(data.estimated_time);
                                $("#display_order").val(data.display_order);
                            }
                        });
                        //requête ajax pour l'update(ce qui est envoyé vers le server)
                        $("#update").click(function (e) {
                            if ($("#edit-form-data")[0].checkValidity()) {
                                e.preventDefault();
                                $.ajax({
                                    url: "action.php",
                                    type: "POST",
                                    data: $("#edit-form-data").serialize() + "&action=update",
                                    success: function (response) {
                                        console.log(response);
                                        /*Swal.fire({
                                            title: 'Tâche mise à jour!',
                                            icon: 'success'
                                        });
                                        $("#UpdateTaskModal").modal('hide');
                                        $("#edit-form-data")[0].reset();
                                        showAllTasks();*/
                                    }
                                });
                            }
                        });
                    });


    Mon traitement en PHP, côté serveur:
    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
    //Traitement quand clic sur editBtn, je récupère les données à afficher dans le formulaire
    if(isset($_POST['edit_id'])){
        $id = $_POST['edit_id'];
        $row = $crud->getTaskById($id);
        echo json_encode($row);
    }
     
    //traitement formulaire update quand clic sur le bouton update
    if(isset($_POST['action']) && $_POST['action'] == "update"){
        $id = $_POST['id_task'];
        echo "l'id est: " . $id;
        $title = $_POST['title'];
        $description = $_POST['description'];
        $importance = $_POST['importance'];
        $due_date = $_POST['due_date'];
        $start_date = $_POST['start_date'];
        $parent = $_POST['parent'];
        $status = $_POST['status'];
        $category = $_POST['category'];
        $prerequisite = $_POST['prerequisite'];
        $end_date = $_POST['end_date'];
        $estimated_time = $_POST['estimated_time'];
        $display_order = $_POST['display_order'];
     
        echo $crud->updateTask($id, $title, $description, $importance, $due_date, $start_date, $parent, 
                $status, $category, $prerequisite, $end_date, $estimated_time, $display_order);
    }


    ma DB:

  2. #2
    Membre régulier
    Bon ben mon delete ne fonctionne pas non plus, à mon avis quelque chose m’échappe...
    Et aucuns messages d'erreur pour le delete, juste enmpty String.

###raw>template_hook.ano_emploi###