8519 sujets

Développement web côté serveur, CMS

Bonjour,

Je ne comprends pas pourquoi les données que j'envoie en post ne s'enregistrent pas dans la base de données.
Par contre, avec le code de la modification du bénéficiaire, lorsque je le modifie, ce champ se modifie bien dans la BDD, mais aucun autre champ si je les modifies.
Pouvez-vous m'aider SVPL en regardant mon code, si vous voyez quelque chose que je n'ai pas fait correctement.
D'avance merci de votre aide.

Mon script d'envoi des données en post :

if (isset($_POST['submit3'])) {
    $DonID                  = $_POST['DonID'];
    $vads_date              = $_POST['vads_date'];
    $codeagence             = $_POST['codeagence'];
    $nomclient              = $_POST['nomclient'];
    $vads_amount            = $_POST['vads_amount'];
    $vads_cust_first_name   = $_POST['vads_cust_first_name'];
    $vads_cust_last_name    = $_POST['vads_cust_last_name'];
    $vads_cust_address      = $_POST['vads_cust_address'];
    $vads_cust_zip          = $_POST['vads_cust_zip'];
    $vads_cust_city         = $_POST['vads_cust_city'];
    $vads_cust_email        = $_POST['vads_cust_email'];
    $vads_cust_cell_phone   = $_POST['vads_cust_cell_phone'];

    $statement = $bdd->prepare("UPDATE don SET vads_date = ?, codeagence = ?, nomclient = ?, vads_amount = ?, vads_cust_first_name = ?, vads_cust_last_name = ?, vads_cust_address = ?, vads_cust_zip = ?, vads_cust_city = ?, vads_cust_email = ?, vads_cust_cell_phone = ? WHERE DonID = ?");
    $statement->execute(array($vads_date, $codeagence, $nomclient, $vads_amount, $vads_cust_first_name, $vads_cust_last_name, $vads_cust_address, $vads_cust_zip,  $vads_cust_city, $vads_cust_email, $vads_cust_cell_phone, $DonID));
}


Mon formulaire :

<form class="form-inline" action="" role="form" method="post" enctype="multipart/form-data">

                <input type="hidden" name='vads_date' value="<?php echo date('d/m/Y H:m:s'); ?>">
                <input type="hidden" name="DonID" value="<?php echo $_POST['DonID']; ?>">
                <input type="hidden" name="codeagence" value="<?php echo $_POST['codeagence']; ?>">
                <input type="hidden" name="nomagence" value="<?php echo $item['nomagence']; ?>">

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="nomclient">Nom du bénéficiaire à modifier</label>
                    <input style="width:250px" type="text" class="form-control" name="nomclient" value="<?php echo $item['nomclient']; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="nomvoyage">Modifier le bénéficiaire</label>
                    <?php
                    $codeagence = $_POST['codeagence'];
                    $r = $bdd->prepare('SELECT * FROM client WHERE codeagence = ?');
                    $r->execute(array($codeagence));
                    echo '<select class="ml-4" style="height:38; border:none; text-align:center"  name="nomclient">';
                    echo '<option value="" selected>-- Modifier le bénéficiaire --</option>';
                    // pour chaque élément du tableau, on affiche une balise "option"
                    foreach ($liste as $a)
                        echo '<option value="' . $a["nomclient"] . '">' . $a["prenomclient"] . " " . $a["nomclient"] . " et " . $a["prenomconjoint"] . " " . $a["nomconjoint"] . '</option>';
                    echo '</select>';
                    ?>
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_amount">Montant du don</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_amount" name="vads_amount" value="<?php echo $vads_amount; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_first_name">Prénom du donateur</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_first_name" name="vads_cust_first_name" value="<?php echo $vads_cust_first_name; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_last_name">Nom du donateur</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_last_name" name="vads_cust_last_name" value="<?php echo $vads_cust_last_name; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_address">Adresse du donateur</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_address" name="vads_cust_address" value="<?php echo $vads_cust_address; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_zip">Code postal</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_zip" name="vads_cust_zip" value="<?php echo $vads_cust_zip; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_city">Ville</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_city" name="vads_cust_city" value="<?php echo $vads_cust_city; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_email">Email du donateur</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_email" name="vads_cust_email" value="<?php echo $vads_cust_email; ?>">
                </div>

                <div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="vads_cust_cell_phone">N° du mobile du donateur</label>
                    <input style="width:250px" type="text" class="form-control" id="vads_cust_cell_phone" name="vads_cust_cell_phone" value="<?php echo $vads_cust_cell_phone; ?>">
                </div>

                <div class="col-lg-12">
                    <section class="jumbotron text-center">
                        <div class="mb-4">
                            <button type="submit" name="submit3" class="btn btn-lg btn-block btn-success text-uppercase">Modifier le don</button>
                        </div>
                    </section>
                </div>

            </form>


Et voici ce que ça donne sur le formulaire en ligne :
upload/1643107039-84072-capturedancran2022-01-2511355.png

Je rajoute que lorsque je modifie un champ, par exemple le montant du don et que je clique sur modifier (voir image)
upload/1643109142-84072-modifprix.png

Le nouveau prix est bien noté dans la print_r de post comme suit :
upload/1643109290-84072-printr.png

Mais lorsque je reviens vers la liste des dons, mon prix n'a pas changé et ni dans la bdd !!
Modifié par Loutschi (25 Jan 2022 - 12:14)
Modérateur
Bonjour,

Il y a plusieurs petits détails à vérifier, mais je ne sais pas si c'est bien la cause des problèmes (car on n'a qu'une vue partielle de la situation).

1) $liste n'est pas initialisée avant la ligne foreach ($liste as $a). Ça n'aide pas le code à fonctionner. Il manque quelque chose du genre :
$liste = $r->fetchAll();


2) L'élément nomclient semble vide. Ça vaudrait peut-être la peine de s'assurer de ce qu'il y a dans $nomclient, via une ligne du genre :
if(!$nomclient) $nomclient = "";

D'une manière générale, ça vaut le coup de vérifier chaque donnée du formulaire. Au minimum, il faut faire :
if(isset($_POST['xxx'])) $xxx = $_POST['xxx']; else $xxx = "";

On peut aussi faire des contrôles de longueur des chaines de caractères entrées par l'utilisateur, et éventuellement tout un tas d'autres contrôles selon la nature des champs qu'on vérifie.

3) Il y a pas mal de valeurs numériques. Comment sont définis les types des champs correspondant dans la base de données ? Sont-ils des varchar ? des int ? Car ce n'est pas pareil si on a une chaine de caractères qui vaut "120" ou un nombre qui vaut 120.

4) As-tu penser à regarder la log php ? (l'endroit où elle se trouve dépend de ce que tu utilises pour tester).

Amicalement,
Modifié par parsimonhi (25 Jan 2022 - 12:38)
Bonjour parsimonhi et merci de ta réponse.

$liste n'est pas initialisée avant la ligne foreach ($liste as $a). Ça n'aide pas le code à fonctionner. Il manque quelque chose du genre :
J'ai fait un mauvais copié/collé, $liste est bien initialisé,voici la copie correcte du script :

<div class="mb-4 form-group">
                    <label class="d-inline pl-4" for="nomclient">Modifier le bénéficiaire</label>
                    <?php
                    $codeagence = $_POST['codeagence'];
                    $r = $bdd->prepare('SELECT * FROM client WHERE codeagence = ?');
                    $r->execute(array($codeagence));
                    $liste = $r->fetchAll();
                    echo '<select style="width:225px; height:42; border:none; text-align:center" name="nomclient">';
                    echo '<option value="" selected>-- Modifier le bénéficiaire --</option>';
                    foreach ($liste as $a)
                        echo '<option value="' . $a["nomclient"] . '">' . $a["prenomclient"] . " " . $a["nomclient"] . " et " . $a["prenomconjoint"] . " " . $a["nomconjoint"] . '</option>';
                    echo '</select>';
                    ?>
                </div>


Par contre, effectivement il y a un souci avec nomclient car avant la modif, print-r affiche bien le nomclient, par contre après modif du prix par exemple, print-r n'affiche plus nomclient, alors que je l'ai bien dans mon formulaire en input hidden (que j'ai mis en text pour vérifier qu'il y soit bien) :
Voici les copies d'écrans ;

print-r et formulaire avant modif :
upload/1643114253-84072-printravantmodif.png
upload/1643114266-84072-formavantmodif.png

prin-_r et formulaire après modif du prix et après avoir cliqué sur "modifier le don"
upload/1643114349-84072-printrapresmodif.png
upload/1643114659-84072-formapresmodif.png

Ne serait-ce pas là qu'il y aurait un problème ?

P.S. : Tous les champ de la BDD sont en varchar, 100 pour certains et 50 pour d'autres. Je n'ai mis aucun en int.
Modifié par Loutschi (25 Jan 2022 - 13:44)
OOPS J'ai touvé !!

Tu m'as mis sur la voie en me disant que nomclient te semblait vide, c'était bien le cas.

Du coup, lorsque je modifie quoi que ce soit, prix, nom du donateur ou autres, il suffit de choisir le bon nom du client dans la liste déroulante "modifier le bénéficaiaire" pour que tout se mette à jour dans la BDD et lorsque j'affiche la lste, les modifs ont bien été prises en compte.

Encore une fois merci de ton aide si précieuse.
C'est vrai qu'en travaillant tout seul, il n'est pas évident de voir les erreurs à force d'y avoir les yeux dessus. Et comme je te le disais ultérieurement après un certain âge,la concentration n'est plus ce qu'elle était.
Heureusement que ton forum exist et qu'il soit animé par des gens aussi pro que toi, toujours efficace et tellement disponible.
Smiley merci

Excellente journée, bien amicalement +++
Meilleure solution