8721 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis nouveau sur le forum et débutant PHP.
Je fais appel à votre aide car je ne comprend pas pourquoi les données de mon formulaire ne s'enregistrent pas dans ma BDD.
Mon formulaire insert ne fonctionne pas et pourtant j'ai vérifié, les données sont bien dans le $_POST lorsque je fais un var_dump.
J'espère avoir été clair dans mes explications et je vous remercie d'ores et déjà de l'intérêt que vous voudrez bien apporter à mon problème.
voici mon code :

<?php require_once('ajout.php'); ?>

<?php

if (!empty($_POST['codeagence'])) {
    extract($_POST);
    $codeagence = ($_POST['codeagence']);
    $statement = $bdd->prepare("SELECT * FROM agent WHERE codeagence = ?");
    $statement->execute(array($codeagence));
    $item = $statement->fetch();
    $codeagence     = $item['codeagence'];
    $nomagence      = $item['nomagence'];
    $prenomagent    = $item['prenomagent'];
    $nomagent       = $item['nomagent'];
    $telagent       = $item['telagent'];
    $mailagent      = $item['mailagent'];
    $pwdagent       = $item['pwdagent'];
    
    $statement = $bdd->prepare("INSERT INTO agent (codeagence, nomagence, prenomagent, nomagent, telagent, mailagent, pwdagent) VALUE (?, ?, ?, ?, ?, ?, ?)");
    $statement->execute(array($codeagence, $nomagent, $prenomagent, $nomagence, $telagent, $mailagent, $pwdagent));
    
    echo '<pre>';
    var_dump($_POST);
    echo '</pre>';
}

?>
<div class="container">
    <div class="row">
        <div class="col-lg-12">
            <div class="pb-2 rounded btn-primary text-center">
                <div class="pb-2 mt-4 btn-primary text-center">
                    <h1>Ajouter un nouvel agent pour l'agence <strong><?php echo $nomagence; ?></strong></h1>
                    <table class="table table-borderless w-50 center">
                        <tr>
                            <td>
                                <?php
                                echo '<form method="post" action="liste_agent.php" role="form">';
                                echo '<input id="codeagence" type="hidden" name="codeagence" value=' . $codeagence . '> ';
                                echo '<input type="submit" name="submit1" class="btn btn-warning" value="Retour gestion des agents">';
                                echo '</form>';
                                ?>
                            </td>
                            <td>
                                <?php
                                echo '<form method="post" action="espace_agence.php" role="form">';
                                echo '<input id="codeagence" type="hidden" name="codeagence" value=' . $codeagence . '> ';
                                echo '<input type="submit" name="submit2" class="btn btn-warning" value="Retour vers l\'espace agence">';
                                echo '</form>';
                                ?>
                            </td>
                            <td class="text-left">
                                <?php
                                echo '<a href="logout.php" class="btn btn-danger">Déconnexion</a>';
                                ?>
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>

        <form class="form-inline mt-4" action="liste_agent.php" role="form" method="post" enctype="multipart/form-data">

            <input type="text" class="form-control" id="codeagence" name="codeagence" value="<?php echo $codeagence; ?>">
            <input type="text" class="form-control" id="nomagence" name="nomagence" value="<?php echo $nomagence; ?>">

            <div class="col-lg-6 mb-4 form-group">
                <label class="d-inline pl-4" for="prenomagent">Prénom de l'agent</label>
                <input type="text" class="form-control" id="prenomagent" name="prenomagent">
            </div>

            <div class="col-lg-6 mb-4 form-group">
                <label class="d-inline pl-4" for="nomagent">Nom de l'agent</label>
                <input type="text" class="form-control" id="nomagent" name="nomagent">
            </div>

            <div class="col-lg-6 mb-4 form-group">
                <label class="d-inline pl-4" for="telagent">N° de téléphone</label>
                <input type="text" class="form-control" id="telagent" name="telagent">
            </div>

            <div class="col-lg-6 mb-4 form-group">
                <label class="d-inline pl-4" for="mailagent">Adresse email</label>
                <input type="text" class="form-control" id="mailagent" name="mailagent">
            </div>

            <div class="col-lg-6 mb-4 form-group">
                <label class="d-inline pl-4" for="pwdagent">Mot de passe</label>
                <input type="text" class="form-control" id="pwdagent" name="pwdagent">
            </div>

            <div class="col-lg-12">
                <section class="jumbotron text-center">
                    <div>
                        <button type="submit" class="btn btn-lg btn-block btn-success text-uppercase">Ajouter l'agent</button>
                    </div>
                </section>
            </div>

        </form>
    </div>
</div>

<?php require_once('../partials/_footer.php'); ?>
Modérateur
Bonjour,

Déjà, pour commencer le diagnostic :

1) Normalement, tu ne devrais pas utiliser extract().
2) Est-ce que la connexion avec la base est bien établie ? ($bdd est-il non null)
3) Si oui, est-ce que $item contient ce que tu attends ?

Amicalement,
Modifié par parsimonhi (13 Jan 2022 - 23:18)
Mille mercis parsimonhi de ta réponse rapide. Voici mes réponses :

1°) OK je supprime extract mais ça ne change rien. Je supposais qu'il fallait utiliser extract pour que le SELECT affiche les données de la table demandée ! Sinon, peux-tu me dire à quoi cela sert exactement ?

2°) Oui je suis bien connecté à la base, le script est dans la page ajout.php, le code habituel PDO suivant :

<?php

if (in_array($_SERVER['SERVER_ADDR'], array('localhost', '127.0.0.1'))) {
  function bdd()
  {
    try {
      $bdd = new PDO("mysql:dbname=onelist; host=localhost; charset=utf8", "root", "");
    } catch (PDOException $e) {
      echo 'Echec lors de la connexion : ' . $e->getMessage();
    }
    return $bdd;
  }

} else {
  
  try {
    $bdd = new PDO("mysql:dbname=onelist; host=localhost; charset=utf8", "root", "");
  } catch (PDOException $e) {
    echo 'Echec lors de la connexion : ' . $e->getMessage();
  }
  return $bdd;
}


?>


3°) Je suppose que oui, car lorsque je fais un var_dump de item, il m'affiche bien les données que j'ai saisies dans les champs du formulaire. Mais ceux-ci ne s'enregistrent pas dans la BDD.
Est-ce que c'est bien comme cela que l'on vérifie les enregistrements saisis ?

En attendant, encore merci de ton aide. Smiley smile
Modifié par Loutschi (13 Jan 2022 - 23:53)
Modérateur
Bonjour,

1) Concernant extract()

Je n'ai jamais utilisé extract() depuis plus de 20 ans que je fais du php. Ça ne doit pas servir à grand chose ! Smiley lol

Plus sérieusement, si tu passes un tableau avec plein d'éléments comme paramètre d'une fonction, ça peut éventuellement être employé dans la fonction pour affecter en une ligne les éléments de ce tableau à une série de variables.

EDIT: tu aurais pu aussi par exemple faire un extract($item) au lieu de toute la série d'affection que tu fais juste avant ta requête "Update".

Selon moi, ça donne un code illisible et c'est à éviter.

2) La suite du diagnostic.

As-tu essayé, en utilisant phpMyAdmin, de faire manuellement l'update que tu essaies de faire dans ton code php ?

En pratique, tu fais dans ton code php un echo des variables $codeagence, $nomagent, $prenomagent, $nomagence, $telagent, $mailagent, $pwdagent. Puis tu vas dans phpMyAdmin, tu cliques sur l'onglet "SQL" et tu fais la requête INSERT INTO agent (codeagence, nomagence, prenomagent, nomagent, telagent, mailagent, pwdagent) VALUE (?, ?, ?, ?, ?, ?, ?) en remplaçant les ? par le contenu des variables dont tu as fais l'echo précédemment.

Amicalement,
Modifié par parsimonhi (14 Jan 2022 - 10:54)
Bonjour parsimonhi,

Merci de ton retour.

Bien noté pour extract, je vais laisser tomber cette foction qui finazlement n'apporte pas grand chose.

Lorsque je fais un echo des variables comme suit :

echo '<pre>';
echo $codeagence;
echo '</pre>';
echo '<pre>';
echo $nomagence;
echo '</pre>';
echo '<pre>';
echo $prenomagent;
echo '</pre>';
echo '<pre>';
echo $nomagent;
echo '</pre>';
echo '<pre>';
echo $telagent;
echo '</pre>';
echo '<pre>';
echo $mailagent;
echo '</pre>';
echo '<pre>';
echo $pwdagent;
echo '</pre>';


cela donne :
GEO51100
Géovision
Georges
LEOTARD04
0655221122
philippe@gmail.com
0000

En fait, l'echo ne prend pas en compte ce que j'ai saisi, mais conserve les données du premier enregistrement de la BDD !

Mais lorsque je fais la requête SQL suivante :

INSERT INTO agent (codeagence, nomagence, prenomagent, nomagent, telagent, mailagent, pwdagent) VALUE ('GEO51100', 'Géovision', 'Georges', 'MARCHAIS', '0655221122', 'georges@marchais.com', '0000') 

Et que je l'execute, là effectivement l'enregistrement s'ajoute dans la BDD !
voir :
upload/1642161034-84072-capturedancran2022-01-1412435.png
Modérateur
Bonjour,

Bon, donc tout va bien ! Smiley lol

Maintenant, il va falloir que je comprenne la suite d'opération que tu fais pour ajouter un nouvel agent.

1) Tel que ton code est fait, $item ne contient que le 1e enregistrement de la requête "SELECT" que tu as fait juste avant. Si tu veux qu'il contienne tous les enregistrements, on peut par exemple faire (je rajoute un "s" à item volontairement) :
$items = $statement->fetchAll();
Mais je soupçonne que ce n'et pas ça ton problème et qu'il est plus étendu que ça.

2) C'est quoi l'enchainement des saisies que tu fais ? Tu as plusieurs formulaires dans ta page. Tu commences par utiliser lequel ? Puis ensuite tu utilises le ou lesquels ?

3) Le script "liste_agent.php", c'est celui de la page que tu nous montres ? Tout est dans ce script ?

Amicalement,
Re Bonjour,

Et encore merci de ton aide.

1°) Oui, effectivement avec ou sans s cela ne change rien.

2°)
a°) Je ne comprends pas ce que tu veux dire par C'est quoi l'enchainement des saisies que tu fais ?

b°) Oui j'ai plusieurs formulaires dans la page.

- Le 1er afin de retourner sur la page liste.agent.php. Là je n'ai pas utilisé le format <a href="" ....> car je dois récupérer la valeur $codeagence via $_POST (d'où le formulair) et non $_GET car cette donnée est sensible, donc il ne faut pas la voir dans l'url. Je l'ai nommé "submit1" pour le différencier du 2ème et du 3ème lorsque je clique sur le bouton. Celcui-ci fonction bien, j'arrive à la bonne page sans que les données soient dans l'url.

- Le 2ème afin de retourner sur la page espace_agence.php. J'ai utilisé un <form ...> plutôt qu'un <a href .....> pour les mêmes raisons que pour le 1er formulaire. Idem aussi pour son nommage.

- Le 3ème qui me pose donc ces soucis !

3°) Non, le script "liste_agent.php" est celui qui liste les agents enregistrés dans la BDD. Voici son code :

J'avoue que je suis bien perdu, là !!!


<?php require_once('ajout.php'); ?>


<?php

if (!empty($_POST['codeagence'])) {
  $codeagence = ($_POST['codeagence']);

  $statement = $bdd->prepare("SELECT * FROM agent WHERE codeagence = ?");
  $statement->execute(array($codeagence));
  $item = $statement->fetch();
  $codeagence     = $item['codeagence'];
  $nomagence      = $item['nomagence'];
  $prenomagent    = $item['prenomagent'];
  $nomagent       = $item['nomagent'];
  $telagent       = $item['telagent'];
  $mailagent      = $item['mailagent'];
  $pwdagent       = $item['pwdagent'];
}

?>

<div class="container">
  <div class="row pt-2">
    <div class="col-lg-12">
      <div class="pb-2 btn-primary text-center">
        <h1>Gestion des agents accrédités <br>
      pour l'agence <strong><?php echo $nomagence ; ?></strong></h1>
        <table class="table table-borderless w-50 center">
          <tr>
            <td>
              <?php
              echo '<form method="post" action="ajout_agent.php" role="form">';
              echo '<input id="codeagence" type="hidden" name="codeagence" value="' . $codeagence . '"> ';
              echo '<input type="submit" name="submit1" class="btn btn-warning" value="Ajouter un agent">';
              echo '</form>';
              ?>
            </td>
            <td>
              <?php
              echo '<form method="post" action="espace_agence.php" role="form">';
              echo '<input id="codeagence" type="hidden" name="codeagence" value="' . $codeagence . '"> ';
              echo '<input type="submit" name="submit2" class="btn btn-warning" value="Retour vers l\'espace agence">';
              echo '</form>';
              ?>
            </td>
            <td class="text-left">
              <?php
              echo '<a href="logout.php" class="btn btn-danger">Déconnexion</a>';
              ?>
            </td>
          </tr>
        </table>
      </div>
    </div>

    <div class="col-lg-12 mb-4">
      <table class="table table-hover">
        <thead>
          <tr>
            <th class="text-center">Code agence</th>
            <th class="text-center">Prénom</th>
            <th class="text-center">Nom</th>
            <th class="text-center">N° de tél</th>
            <th class="text-center">Adresse email</th>
            <th class="text-center">Mot de passe</th>
            <th class="text-center">Action</th>
          </tr>
        </thead>
        <tbody>
          <?php
          $statement = $bdd->prepare('SELECT * FROM agent WHERE codeagence="' . $codeagence . '"');
          $statement->execute();
          while ($item = $statement->fetch()) {
            echo '<tr>';
            echo '<td>' . $item['codeagence']   . '</td>';
            echo '<td>' . $item['prenomagent']  . '</td>';
            echo '<td>' . $item['nomagent']     . '</td>';
            echo '<td>' . $item['telagent']     . '</td>';
            echo '<td>' . $item['mailagent']    . '</td>';
            echo '<td>' . $item['pwdagent']     . '</td>';

            echo '<td class="text-center">';

            echo '<form method="post" action="update_agent.php" role="form">';

            echo '<input id="AgentID" type="hidden" name="AgentID" value=' . $item['AgentID'] . '> ';

            echo '<input id="codeagence" type="hidden" name="codeagence" value=' . $item['codeagence'] . '> ';

            echo '<input id="nomagence" type="hidden" name="nomagence" value=' . $item['nomagence'] . '> ';

            echo '<input id="prenomagent" type="hidden" name="prenomagent" value=' . $item['prenomagent'] . '> ';

            echo '<input id="nomagent" type="hidden" name="nomagent" value=' . $item['nomagent'] . '> ';

            echo '<input id="telagent" type="hidden" name="telagent" value=' . $item['telagent'] . '> ';

            echo '<input id="mailagent" type="hidden" name="mailagent" value=' . $item['mailagent'] . '> ';

            echo '<input id="pwdagent" type="hidden" name="pwdagent" value=' . $item['pwdagent'] . '> ';

            echo '<input type="submit" name="submit1" class="btn btn-danger" value="Afficher ou modifier">';
            echo '</form>';

            echo '</td>';
            echo ' ';
            echo '<td class="text-left">';

            echo '<form method="post" action="suppr_agent.php" role="form">';
            echo '<input id="AgentID" type="hidden" name="AgentID" value=' . $item['AgentID'] . '> ';
            echo '<input type="submit" name="submit2" class="btn btn-danger" value="Supprimer">';
            echo '</form>';

            echo '<td>';
          }
          ?>
        </tbody>
      </table>
    </div>

  </div>
</div>

<?php require_once('../partials/_footer.php'); ?>
Modérateur
Bonjour,

Loutschi a écrit :
J'avoue que je suis bien perdu, là !!!


C'est plutôt moi qui suis perdu. Smiley cligne

1) Comment s'appelle le script qui contient le code de ton tout premier post ? Est-ce que tout ce code est dans ce script ?

2) Quand tu remplies ta 3e <form> et que tu la valides, l'action qui va s'exécuter (ce que tu as mis dans ton code pour la 3e <form>) est semble-t-il le script list_agent.php. Je ne vois donc pas comment tu pourrais modifier la base quand tu valides cette 3e <form>, puisque list_agent.php ne fait que lister des trucs. Il faut que tu mettes comme action de cette 3e <form> le nom d'un script qui modifie la base (voir les explications ci-dessous, à lire très attentivement).

3) J'ai l'impression que tu n'as pas bien compris comment marche les aller-retours avec le serveur.
- tu affiches la page initiale via le script pour l'instant "sans nom" qui contient les formulaires,
- tu remplies le 3e formulaire et tu le valides,
- les données de ce 3e formulaire sont envoyées au serveur dans le tableau $_POST, accompagnées du nom du script à exécuter qui est celui spécifié comme valeur de l'attribut action de la balise <form>.
- dans ce script (qu'il te faut écrire), tu récupères ce qu'il y a dans $_POST, et tu fais ton "INSERT" en utilisant les informations de $_POST.
- dans ce script également, tu fais également afficher quelque chose qui indique que tout va bien (ou que tout ne va pas bien) avec une série d'echo.
- le contenu ainsi fabriqué avec cette série d'echo est ensuite renvoyé à l'ordinateur de l'utilisateur et s'affiche dans son navigateur, à la place du script "sans nom" précédent.

4) Dans les exemples qu'on trouve sur internet, souvent le script du formulaire et le script qui fait l'insertion dans la base sont en fait un même script. Ça permet en cas d'erreur de représenter le formulaire initial. Dans ce type de script :
- au début du script, on vérifie si c'est un 1er affichage de la page ou pas (ce que tu as fait d'ailleurs dans le script pour l'instant "sans nom" en testant $_POST['codeagence']).
- si c'est un 1re affichage, on se contente d'afficher les formulaires (ce que tu fais à la fin de ton script).
- si ce n'est pas le 1er affichage, on tente de faire l'insertion dans la base (ce que tu fais au début de ton script, sauf qu'au lieu d'utiliser les données contenues dans $_POST, tu cherches des données dans ta base ce qui n'a pas trop de sens).
- si ça réussit, on fait afficher par ce script que tout va bien, sinon, on affiche le formulaire pré-rempli par les données entrées par l'utilisateur lors de l'affichage précédent (qui se trouve dans $_POST).

Et si on fait ça, l'action à mettre dans la <form> est le nom du script où se trouve le formulaire (en pratique, on se contente de ne pas mettre d'action, ce qui signifie que l'action à effectuer est le même script que celui qui affiche le formulaire).

Et si on fait ça, les opérations s'effectuent ainsi :
- on met dans la barre d'adresse du navigateur le nom du script "sans nom".
- le serveur reçoit cette information et exécute le script sans nom. Il renvoie la page html correspondante à l'ordinateur de l'utilisateur.
- la 1re fois, ce script dans ton cas affiche les 3 formulaires.
- on remplie le 3e formulaire (dont l'action est le script "sans nom") et on le valide.
- le serveur reçoit les données du formulaire et voit que l'action à exécuter est le script "sans nom". Il le re-exécute donc. S'il est bien fait, au début du script "sans nom", il y a du code pour mettre à jour la base. Le serveur continue d'exécuter le script. Dans le script "sans nom" il y a ensuite des echos, des if, des boucles, etc, et du html (dont les formulaire). Le serveur regarde tout ça en fonction des instructions qu'il y a dans le script et renvoie une nouvelle page sur l'ordinateur de l'utilisateur contenant ces informations.

Est-ce plus clair ?

Amicalement,
Modifié par parsimonhi (14 Jan 2022 - 17:39)
Bonjour,

J'ai lu et relu plusieurs fois ton post et ai testé différentes choses, mais bon, je n'y arrive pas.
Je crois qu'à mon âge il devient de plus en plus difficile d'assimiler correctement et je suis désolé de t'embêter, mais je pense ne plus être très loin alors si tu peux encore continuer d'essayer de m'éclairer ce serait super sympa !

Voici ce que j'ai fait et qui fonctionne plus ou moins.

1°) j'ai envoyé en méthode post depuis une page liste_agent.php vers la page ajout_agent.php les données de la table agent. Voici le morceau de code en question :

<div class="container">
  <div class="row pt-2">
    <div class="col-lg-12">
      <div class="pb-2 btn-primary text-center">
        <h1>Gestion des agents accrédités <br>
      pour l'agence <strong><?php echo $nomagence ; ?></strong></h1>
        <table class="table table-borderless w-50 center">
          <tr>
            <td>
              <?php
              echo '<form method="post" action="ajout_agent.php" role="form">';
              echo '<input id="codeagence" type="hidden" name="codeagence" value="' . $codeagence . '"> ';
              echo '<input id="nomagence" type="hidden" name="nomagence" value="' . $nomagence . '"> ';
              echo '<input id="prenomagent" type="hidden" name="prenomagent" value="' . $prenomagent . '"> ';
              echo '<input id="nomagent" type="hidden" name="nomagent" value="' . $nomagent . '"> ';
              echo '<input id="telagent" type="hidden" name="telagent" value="' . $telagent . '"> ';
              echo '<input id="mailagent" type="hidden" name="mailagent" value="' . $mailagent . '"> ';
              echo '<input id="pwdagent" type="hidden" name="pwdagent" value="' . $pwdagent . '"> ';
              echo '<input type="submit" name="submit1" class="btn btn-warning" value="Ajouter un agent">';
              echo '</form>';
              ?>
            </td>

2°) Sur la page ajout_agent.php j'ai récupéré ces données avec le script suivant :

if (!empty($_POST)) {
    $codeagence     = ($_POST['codeagence']);
    $nomagence      = ($_POST['nomagence']);
    $prenomagent    = ($_POST['prenomagent']);
    $nomagent       = ($_POST['nomagent']);
    $telagent       = ($_POST['telagent']);
    $mailagent      = ($_POST['mailagent']);
    $pwdagent       = ($_POST['pwdagent']);


Par contre, est-ce normal que le var_dump affiche les donnés du premier enregistrement de la BDD ?
Puis, avec la requête SQL suivante,

 $statement = $bdd->prepare("INSERT INTO agent (codeagence, nomagence, nomagent, prenomagent, telagent, mailagent, pwdagent) VALUE (?, ?, ?, ?, ?, ?, ?)");
    $statement->execute(array($codeagence, $nomagence, $nomagent, $prenomagent, $telagent, $mailagent, $pwdagent));


j'ai enregistré les données saisies dans le formulaire du bas suivant :

                <form class="form-inline" action="" role="form" method="post" enctype="multipart/form-data">
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="codeagence">Code agence</label>
                        <input type="text" class="form-control" name="codeagence" value="<?php echo $codeagence ;?>">
                    </div>
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="prenomagent">Nom de l'agence</label>
                        <input type="text" class="form-control" name="nomagence" value="<?php echo $nomagence ; ?>">
                    </div>
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="prenomagent">Prénom de l'agent</label>
                        <input type="text" class="form-control" name="prenomagent">
                    </div>
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="nomagent">Nom de l'agent</label>
                        <input type="text" class="form-control" name="nomagent">
                    </div>
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="telagent">N° de téléphone de l'agent</label>
                        <input type="text" class="form-control" name="telagent">
                    </div>
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="mailagent">Email de l'agent</label>
                        <input type="text" class="form-control" name="mailagent">
                    </div>
                    <div class="col-lg-6 mb-4 form-group">
                        <label class="d-inline pl-4" for="pwdagent">Mot de passe l'agent</label>
                        <input type="text" class="form-control" name="pwdagent">
                    </div>
                    <div class="col-lg-12">
                        <section class="jumbotron text-center">
                            <div>
                                <button type="submit" name="submit3" class="btn btn-lg btn-block btn-primary text-uppercase">Ajouter l'agent</button>
                            </div>
                        </section>
                    </div>
                </form>

dans la BDD.

4°) Cela fontionne donc, comme je le disais, plus ou moins, car le script créé bien un nouvel enregistrement dans la BDD avec les nouvelles données, mais malheureuseent il entregistre d'abord un nouvel enregistrement avec les données du premier enregistrement de la BDD. J'ai donc à chaque fois 2 enregistrements, une fois le bon et une fois avec les données de la première ligne.

J'imagine que je ne dois effectivement plus être très loin du bon résultart ?

Belle soirée et encore mille mercis ! Smiley smile

P.S. : Au fait, je parlais de mon âge, bientôt 70 ans ! Smiley decu
Modifié par Loutschi (15 Jan 2022 - 17:20)
Modérateur
Bonjour,
Loutschi a écrit :
J'ai envoyé en méthode post depuis une page liste_agent.php vers la page ajout_agent.php les données de la table agent.
Tu as l'air de maitriser cette partie.

Loutschi a écrit :
Sur la page ajout_agent.php j'ai récupéré ces données avec le script suivant :

if (!empty($_POST)) {
    $codeagence     = ($_POST['codeagence']);
    $nomagence      = ($_POST['nomagence']);
    $prenomagent    = ($_POST['prenomagent']);
    $nomagent       = ($_POST['nomagent']);
    $telagent       = ($_POST['telagent']);
    $mailagent      = ($_POST['mailagent']);
    $pwdagent       = ($_POST['pwdagent']);
}
Là aussi, ça a l'air d'aller. Les parenthèses sont cependant inutiles.

Loutschi a écrit :
Par contre, est-ce normal que le var_dump affiche les donnés du premier enregistrement de la BDD ?
Si ton var_dump (de quelle variable ? $item?) voit les données du premier enregistrement de la BDD, c'est que tu continues d'aller faire un "SELECT" dans ta base de données et que tu continues de mettre cette information dans ta variable $item.

Loutschi a écrit :
Puis, avec la requête SQL suivante,

 $statement = $bdd-&gt;prepare("INSERT INTO agent (codeagence, nomagence, nomagent, prenomagent, telagent, mailagent, pwdagent) VALUE (?, ?, ?, ?, ?, ?, ?)");
    $statement-&gt;execute(array($codeagence, $nomagence, $nomagent, $prenomagent, $telagent, $mailagent, $pwdagent));
Cette requête a l'air correcte, mais il faut que les valeurs qui sont dans $codeagence, $nomagence, $prenomagent, $nomagent etc. soient celles qui proviennent de $_POST et pas de $item.

Loutschi a écrit :
Mais malheureuseent il entregistre d'abord un nouvel enregistrement avec les données du premier enregistrement de la BDD. J'ai donc à chaque fois 2 enregistrements, une fois le bon et une fois avec les données de la première ligne.
Très probablement, il y a 2 requêtes "INSERT" dans ton script, un qui est fait avec les données issues d'un "SELECT" de la base dont tu as rangé le résultat dans $item et dont tu as ensuite recopié les valeurs dans $codeagence, $nomagence, $prenomagent, $nomagent etc., et l'autre qui est fait avec les données issues du tableau $_POST. Il ne faut faire qu'un seul "INSERT" avec uniquement les données issues de $_POST évidemment.

Loutschi a écrit :
Au fait, je parlais de mon âge, bientôt 70 ans ! Smiley decu
Quand on voit passer un exemple de nom d'agent qui est "Gorges Marchais", on se doute que l'interlocuteur n'est plus tout jeune ! Smiley lol Smiley lol Smiley lol

Amicalement,
Hey parsimonhi, j'ai trouvé !!!

Au lieu de faire un if (!empty($_POST)), il me suffit de faire un if (isset($_POST['submit3'])), ainsi $_POST récupère uniquement les données saisies dans le formulaire.

Et là tout fonctionne, un seul enregistrement et uniquement des données saisies dans le form.

FABULEUX !!!
Sans ton aide et tes commentaires je n'y serais jamais arrivé, cela m'a permis de mieux cerner le problème.

Encore merci à toi et ..... bien le bonjour de Georges Marchais et de LILIANE !!!
Mouhahahahaha .. Smiley lol

P.S. : Je passe en résolu j'imagine ?
Modérateur
Bonjour,

Loutschi a écrit :
Hey parsimonhi, j'ai trouvé !!!

Excellent !

Loutschi a écrit :
Je passe en résolu j'imagine ?

Oui (mais je vois que c'est déjà fait).

Bonne continuation !

Amicalement,
Modifié par parsimonhi (15 Jan 2022 - 21:02)
Meilleure solution