[RESOLU] Erreur lors d'une insertion PDO

Eléphanteau du PHP | 45 Messages

10 févr. 2023, 10:37

Bonjour lors de mon insertion j'obtiens cette erreur :
PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\MonoStage\paymentRevolut.php on line 154
INSERT INTO paymentrevolut (namePerson, NumCB, dateExpiration, cvv) VALUES (:namePerson, :numCB, :dateExp, :cv)

Et voici le code :

Le formulaire :
<form action="paymentRevolut.php" method="POST">
    <div class="container p-0">
        <div class="card px-4">
            <p class="h8 py-3">Payment Details</p>
            <div class="row gx-3">
            <div class="col-12">
                    <div class="d-flex flex-column">
                        <p class="text mb-1">Total du panier</p><br/>
                        <p>Vide pour l'instant<p>
                        <!-- <input type="number" value="Total du panier" name="cvvPay"> -->
                    </div>
                </div>
                <div class="col-12">
                    <div class="d-flex flex-column">
                        <p class="text mb-1">Nom de la personne</p>
                        <input class="form-control mb-3" type="text" placeholder="Name" value="Barry Allen" name="NamePerson">
                    </div>
                </div>
                <div class="col-12">
                    <div class="d-flex flex-column">
                        <p class="text mb-1">Numéro de carte</p>
                        <input class="form-control mb-3" type="number" placeholder="1234 5678 435678" name="NumCB">
                    </div>
                </div>
                <div class="col-6">
                    <div class="d-flex flex-column">
                        <p class="text mb-1">Date d'expiration de la carte</p>
                        <input class="form-control mb-3" type="month" placeholder="MM/YYYY" name="DateExpiration">
                    </div>
                </div>
                <div class="col-6">
                    <div class="d-flex flex-column">
                        <p class="text mb-1">CVV/CVC</p>
                        <input class="form-control mb-3 pt-2 " type="password" placeholder="***" name="cvvPay">
                    </div>
                </div>
                <div class="col-12">
                    <div class="btn btn-primary mb-3">
                        <input type="submit" value="Valider le paiement" name="btnSendPay">
                        <!-- <span class="ps-3">Valider le paiement</span> -->
                        <span class="fas fa-arrow-right"></span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>
Le traitement du formulaire (l'insertion vers la BDD) :
<?php
    if(isset($_POST["btnSendPay"])){
        $data = [
            'NamePerson'=> $namePerson,
            'NumCB'=> $numCB,
            'DateExpiration' => $dateExp,
            'cvvPay' => $cv,
        ];
        $sql = "INSERT INTO paymentrevolut (namePerson, NumCB, dateExpiration, cvv) VALUES (:namePerson, :numCB, :dateExp, :cv)";
        $stmt= $access->prepare($sql);
        $stmt->execute($data);
        echo $sql;
    }else{
        die("Veuillez remplir les champs SVP !!!");
    }
?>
J'espère avoir des retours sur mon problème, merci d'avance ! Bonne journée !

Mammouth du PHP | 1967 Messages

10 févr. 2023, 11:26

Attention à la casse, c'est sensible ces choses là...

et puis il leur faut aussi de la cohérence.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 45 Messages

10 févr. 2023, 12:02

Je sais que ces choses là sont sensibles...Mais je n'ai mis un minimum de sécurité car je veux juste tester un paiement pas très complexe sur ma propre machine et je ne le mettrais pas en ligne donc il n'y aura pas de problèmes s'il n'y a pas de sécurité.

Je volais juste savoir ce qui ne va pas dans mon code ou dans ma manière de faire...merci de bien vouloir me guider si c'est possible.

Avatar du membre
Mammouth du PHP | 1609 Messages

10 févr. 2023, 12:08

Salut,

Il y a bien un problème de casse et de cohérence comme signalé par Spols ! à un moment faut essayer de comprendre au lieu de se braquer.

Les index du tableau $data doivent correspondre aux paramètres de la requête. La c'est un peu n'importe quoi...

Avec :
:namePerson, :numCB, :dateExp, :cv

Le tableau devrait être :
$data = [
    'namePerson'=> $namePerson,
    'numCB'=> $numCB,
    'dateExp' => $dateExp,
    'cv' => $cv,
];

Soit vous changez les index du tableau, soit vous changez les paramètres de la requête pour que tout ça corresponde, sinon forcément ça ne peut pas fonctionner.

Bonne journée !!
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 45 Messages

10 févr. 2023, 12:36

Merci ! Je faisais n'importe quoi depuis le début...Dsl pour le dérangement. C'était vraiment brouillon...C'est bon j'ai pu réussir ce que je voulais faire.
Encore dsl et Bonne journée !