8768 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai un message d'erreur Notice: Undefined index: avec des données (de mon champ paymode) que je récupère dans une liste déroulante et que je souhaite enregistrer dans une BDD.
J'ai d'autres données que je récupère et pour lesquels je n'ai pas cette erreur, mais il s'agit de champsinput et pas de liste déroulante.
J'ai bien rechercher sur les forums de "mon ami", mais je n'y trouve pas ma réponse
Pourtant j'ai bien ajouté le name dans le select, que je récupère dans mon $_POST, et c'est le même nom de mon champ dans ma BDD.
Voici mon code, si vous pouvez m'aider pour me dire où j'ai fait une erreur, ce serait parfait. Je vous remercie d'avance de votre retour.

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

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

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_amount']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_first_name']; ?> ">
                </div>

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

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_address']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_zip']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_city']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_email']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_cell_phone']; ?> ">
                </div>

                <div class="col-lg-6 mb-4 form-group">
                    <label class="d-inline pl-4" for="paymode">Mode de paiement</label>
                    <select style="width:230px" class=form-control id="paymode" name="paymode">
                        <option value=Oneline>Oneline</option>
                        <option value=Chèque>Chèque</option>
                        <option value=cb>CB</option>
                        <option value=Espèces>Espèces</option>
                    </select>
                </div>

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

            </form>


Et voici le résltat de mon print_r, La igne 53 étant le POST de $paymode.
Array
(
    [vads_date] => 27/04/2022 03:04:50
    [DonID] =>  395 
    [codeagence] =>  VIN51100 
    [nomagence] =>  Vinotilus   
    [vads_order_info] =>  3524 
    [vads_order_info2] =>  DEVISE 
    [vads_amount] =>  1 
    [vads_cust_first_name] =>  François 
    [vads_cust_last_name] =>  HOLLANDE 
    [vads_cust_address] =>  29 avenue de Colmar 
    [vads_cust_zip] =>  68200 
    [vads_cust_city] =>  MULHOUSE 
    [vads_cust_email] =>  bouaouina.a@gmail.com 
    [vads_cust_cell_phone] =>  0651824402 
    [modifier] => 
)
Notice: Undefined index: paymode in Z:\Documents\www\projets\vinotilus.onelist.tech_test\update_don.php on line 53

Modifié par Loutschi (27 Apr 2022 - 06:13)
Bonjour,

Mets des guillemets là ou il n'y en a pas et réessaie:
class=form-control
<option value=Oneline> ...
Et si tu n'a pas d'input de type fichier, enlève l'attribut enctype="multipart/form-data" de la balise form.
Bonsoir,

Et mille mercis de ton retour.
Désolé de ne pas avoir pu répondre avant, j'étais en déplacement toute la journée.

Alors j'ai bien ajouté les guillemets dans les values. J'ai vraiment honte de ne pas avoir vu cette grossière erreur, mais à force d'avoir le nez dessus, on n'y voit plus rien.
J'ai également supprimé l'attribut entype, il est vrai que j'avais un input de type fichier à un moment, c'était une image, mais finalement je l'ai viré.
De plus j'ai vu que j'avais des mots avec des accents dans les values (chèque au lieu de cheque) et (espèces au lieu de especes). J'ai corrigé cela aussi.
J'ai un peu amélioré le code pour un meilleure affichage.
Malheureusement ça ne fonctionne toujours pas. Enfin à moitié car si je fais une modif, elle est bien dans le print-r, mais n'est pas enregistrée dans la base de données mais je n'ai plus de message d'erreur.
C'est bizarre !
J'ai vérifié que tous les champs soient bien les mêmes que dans la BDD, c'est le cas. Je deviens dingue là !!
Voici mon code modifié :

<form class="form-inline" action="" role="form" method="post">

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

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_amount']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_first_name']; ?> ">
                </div>

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

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_address']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_zip']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_city']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_email']; ?> ">
                </div>

                <div class="mb-4 form-group">
                    <label style="width:250px" 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 $item['vads_cust_cell_phone']; ?> ">
                </div>

                <div class="col-lg-6 mb-4 form-group">
                    <label style="width:250px" class="d-inline pl-4" for="paymode">Mode de paiement</label>
                    <select style="width:250px" class="form-control" id="paymode" name="paymode">
                        <option value="oneline">Oneline</option>
                        <option value="cheque">Chèque</option>
                        <option value="cb">CB</option>
                        <option value="especes">Espèces</option>
                    </select>
                </div>

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

            </form>
          

Et voici la capture d'écran du fichier avec le print_r qui affiche bien la modif (vads_amont 500 €) alors que l'affichage du don est toujours à l'ancien prix 360 €, et donc pas de modif dans la BDD.
Alors si tu vois une autre erreur, je suis preneur.
upload/1651093622-84072-capturedancran2022-04-2723033.png
Bonjour,
Difficile de t'aider, car tu ne montres pas le script qui fait la mise à jour en base de données.
Il n'y a pas d'action indiqué dans ton formulaire :
action=""


Il faut y indiquer la page de traitement des valeurs du formulaire et éventuellement nous donner le code de cette page de traitement si ton UPDATE sql n'est pas bon Smiley ohwell
Bonjour,

loicbcn, effectivement j'aurais dû ajouter mon script de la mise à jour de la BDD, désolé. Le voici :
Mathieuu, merci pour ton retour.
Je n'ai rien mis dans action car je reste sur la même page. Mon POST ne renvoie pas sur une autre page. J'ai d'ailleurs essayé d'ajouter le nom de la page sur laquelle je suis, ça ne change rien, malheureusement.


<?php

if (!empty($_POST['DonID'])) {
    $DonID = ($_POST['DonID']);
    $statement = $bdd->prepare("SELECT * FROM don WHERE DonID = ?");
    $statement->execute(array($DonID));
    $item = $statement->fetch();
    $DonID                  = $item['DonID'];
    $vads_date              = $item['vads_date'];
    $codeagence             = $item['codeagence'];
    $nomagence              = $item['nomagence'];
    $vads_order_info2       = $item['vads_order_info2'];
    $vads_order_info        = $item['vads_order_info'];
    $paymode                = $item['paymode'];
    $vads_amount            = $item['vads_amount'];
    $vads_cust_first_name   = $item['vads_cust_first_name'];
    $vads_cust_last_name    = $item['vads_cust_last_name'];
    $vads_cust_address      = $item['vads_cust_address'];
    $vads_cust_zip          = $item['vads_cust_zip'];
    $vads_cust_city         = $item['vads_cust_city'];
    $vads_cust_email        = $item['vads_cust_email'];
    $vads_cust_cell_phone   = $item['vads_cust_cell_phone'];
}


if (isset($_POST['modifier'])) {
    $DonID                  = $_POST['DonID'];
    $vads_date              = $_POST['vads_date'];
    $codeagence             = $_POST['codeagence'];
    $nomagence              = $_POST['nomagence'];
    $vads_order_info2       = $_POST['vads_order_info2'];
    $vads_order_info        = $_POST['vads_order_info'];
    $paymode                = $_POST['paymode'];
    $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 = ?, 
    nomagence = ?, 
    vads_order_info2 = ?, 
    vads_order_info = ?, 
    paymode = ?, 
    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,
        $nomagence,
        $vads_order_info2,
        $vads_order_info,
        $paymode,
        $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
    ));
}

?>
Je sèche un peu ... Es-tu sûr que l'update a bien lieu ?
Peut-être une erreur dans les types de données,
du style le champ "paymode" est du type integer et tu lui passes une chaîne de caractères.

essaie, si tu ne l'as pas fait, d'activer les messages d'erreur:
pour la base de donnée:, après avoir déclaré $bdd:
$bdd->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 

pour le php, en début de script:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL); 


Pour finir, tous ces points d'interrogation, c'est pas super lisible ... pour ma part, je préfère quand même nommer les paramètres: voir exemple 1 ici: https://www.php.net/manual/fr/pdo.prepare.php
Modifié par loicbcn (28 Apr 2022 - 12:31)
Salut,

c'est ton if qui déconne je pense :
if (isset($_POST['modifier']))


Sur ton print_r on voit qu'il ne renvoit rien (il n'y a pas de => ) du coup il doit valoir null ce qui fait qu'il ne rentre pas dans le update.

Tu dois pouvoir rajouter une value à ton bouton pour qu'il ne soit pas null ensuite.

<button type="submit" name="modifier" value="NonNULL" class="btn btn-lg btn-block btn-success text-uppercase">Modifier le don</button> ';


Edit : Au lieu de modifier le code html tu dois aussi pouvoir remplacer le code du if :
if (array_key_exists('modifier', $_POST))

Modifié par Mathieuu (29 Apr 2022 - 10:20)
Bonjour,
Désolé de ne réponde que maintenant, je rente d'une hospitalisation.
Ente temps, ce problème a été résolu par une autre personne qui travaille sur ce projet.
Mille mercis de votre aide,
bien cordialement ++