Bonjour,

Je voudrais créer un systeme de livraison en ligne

Ce que je fais

J'essaye de créer un site d'achat en ligne, avec un systeme de validation par administration

Voici quelque screen
https://prnt.sc/icu708
https://prnt.sc/icua2k

<?php
session_start();
$connect = new PDO("mysql:host=127.0.0.1; dbname=shop;charset=utf8" ,"root","");
if (isset($_POST['submit'])) {
    if(isset($_POST['statut'] ))
        if (!empty($_POST['statut']) ) {
            $statut = htmlspecialchars($_POST['statut']);

                    $insert = $connect->prepare('UPDATE achat SET statut = ? WHERE id = ?  ');
                    $insert->execute(array($statut));

        } else{
            header('location: profil.php?error vide');
        }

}

?>
<!DOCTYPE html>
<html>
<head>
    <title>Livraison</title>
</head>
<body>

    <form method="POST">
        <input type="text" name="statut">
        <input type="submit" name="submit" value="Livrer">
    </form>

</body>
</html>

Ce que je veux

Je voudrais modifier une colonne de la table ACHAT dont la valeur est : "En cours de vérification" Par ce que j'écrirais dans l'input de la page livrer.php
https://prnt.sc/icuc5t

Ce que j'obtiens

J'obtiens cette erreur Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\basePHP\livrer.php on line 11

Je pense savoir d'où elle vient mais je ne sais pas la rectifier, je pense que le code ne trouve pas quel ID doit être modifier, car dans
$insert = $connect->prepare('UPDATE achat SET statut = ? WHERE id = ? ');
si j'enlève le WHERE id = ? , sa modifie le statut de toutes les commandes

2 réponses


Bonjour.
Tu as cette erreur, car tu définis 2 paramêtres dans ta requête, mais tu ne lui passes qu'une valeur dans la méthode execute.
Donc pour commencer, tu devrais spécifier dans l'url le nom du paramêtre, comme par exemple livrer.php?id=2, ensuite dans le code du traitement du formulaire par exemple :

if (isset($_POST['statut']) && !empty($_GET['id'])) {
    if (!empty($_POST['statut']) ) {
        $id = $_GET['id'];
        $statut = htmlspecialchars($_POST['statut']);
        $insert = $connect->prepare('UPDATE achat SET statut = ? WHERE id = ?');
        $insert->execute(array($statut, $id));
    }
}

Merci de ta réponse mais cela ne marche toujours pas

<?php
session_start();
$connect = new PDO("mysql:host=127.0.0.1; dbname=shop;charset=utf8" ,"root","");
if (isset($_POST['submit'])) {

    if (isset($_POST['statut']) && !empty($_GET['id'])) {
    if (!empty($_POST['statut']) ) {
        $id = $_GET['id'];
        $statut = htmlspecialchars($_POST['statut']);
        $insert = $connect->prepare('UPDATE achat SET statut = ? WHERE id = ?');
        $insert->execute(array($statut, $id));
    }

        } else{
            header('location: profil.php?error vide');
        }

}

?>
<!DOCTYPE html>
<html>
<head>
    <title>Livraison</title>
</head>
<body>

    <form method="POST">
        <input type="text" name="statut">
        <input type="submit" name="submit" value="Livrer">
    </form>

</body>
</html>

Je reçois l'erreur

header('location: profil.php?error vide');

je pense que le code n'arrive toujours pas a trouvé l'id

j'ai bien utiliser livrer.php?id=2 dans l'url

Merci infiniment pour ta réponse en ésperant que tu m'aideras +