[RESOLU] utiliser résultat d'un premier formulaire dans un second formulaire

Eléphant du PHP | 89 Messages

08 avr. 2023, 16:41

Bonjour, je voudrais faire un site servant de carte de fidélité pour les clients d'un magasin. J'ai donc pour cela créé une première page servant à ajouter les clients avec leurs coordonnées dans une bdd. Sur cette page aucun soucis le problème vient après.
Sur la seconde page j'ai choisi de placer une zone de texte afin d'écrire le nom du client dedans (cela étant plus simple d'utilisation qu'un menu déroulant lorsqu'il y a de nombreux clients). Donc lorsque l'on tape le nom du client dans la zone de texte et qu'on le valide cela à pour effet de faire ressortir les coordonnées du client afin de vérifier qu'il s'agit bien de lui.
En dessous j'ai une zone pour mettre la date où le client est venu faire un achat. Cependant pour enregistrer cette date je suis obliger de mettre une seconde zone de texte pour mettre le nom du client car les données du clients ne sont pas garder lors du passage du second formulaire (et donc je n'ai pas son id de garder et je dois remettre le nom du client une seconde fois).

Désolé cela n'est peut être pas clair, mais en gros si je dois résumer mon problème c'est comment garder les données obtenu lors de mon premier formulaire (l'id me suffit) pour les utiliser dans un second formulaire ?

(voilà le code de la page qui me pose problème)

Code : Tout sélectionner

<?php require_once 'menu.php'; $clients = ""; $errors = []; $success = []; if(isset($_POST['submit'])){ if($_POST['nom']!= ""){ $recherche = $_POST['nom']; $clients = $db->query(" SELECT c.id, c.nom, c.phone, c.mail FROM client c WHERE c.nom = '$recherche' ")->fetchAll(); if (!$clients) { $errors[$query->errorCode()] = $query->errorInfo(); } else if (empty($errors)) { $success[] = sprintf('Le client `%s` a été trouvé avec succès!', $_POST['nom']); } } } if ($clients != "") { foreach($clients as $client): $id_client = $client['id']; endforeach; } if(isset($_POST['envoyer'])){ if(empty($_POST['date'])){ $errors[] = sprintf("la date a été oubliée !"); } if (!empty($_POST['date'])) { $query = $db->prepare('INSERT INTO carte client (date, id_client) VALUES (:date, :client)'); $result = $query->execute([ 'date' => $_POST['date'], 'client' => $id_client, ]); if (!$result) { $errors[$query->errorCode()] = $query->errorInfo(); } else if (empty($errors)) { $success[] = sprintf('Un point a été ajouté à `%s` avec succès!', $_POST['nom']); } } } ?> <div class="container"> <!-- Gestion messages --> <div class="form-message"> <?php if (!empty($errors)): ?> <?php foreach ($errors as $error): ?> <div class="alert"> <span class="closebtn" onclick="this.parentElement.style.display='none';">&times;</span> <?= $error ?> </div> <?php endforeach; ?> <?php endif; ?> <?php if (!empty($success)): ?> <?php foreach ($success as $msg): ?> <div class="alert sucess"> <span class="closebtn" onclick="this.parentElement.style.display='none';">&times;</span> <?= $msg ?> </div> <?php endforeach; ?> <?php endif; ?> </div> <!-- Fin gestion messages --> <form method="post" name="trouverClient"> <label for="nom_client">Nom du client:</label> <input id="nom_client" type="text" name="nom" placeholder="Nom du client"><br> <input type="submit" value="Rechercher" name="submit"> </form> <div class="container"> <table class="styled-table"> <thead> <tr> <th>Nom</th> <th>téléphone</th> <th>mail</th> </tr> </thead> <tbody> <?php if($clients != ""): ?> <?php foreach ($clients as $client): ?> <tr> <td><?= $client['nom'] ?></td> <td><?= $client['phone'] ?></td> <td><?= $client['mail'] ?></td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> <form method="post" name="ajouter1point"> <label for="date">Date de l'achat du client:</label> <input id="date" type="date" name="date" placeholder="Date de l'achat du client"><br> <input type="submit" value="Ajouter" name="envoyer"> </form>

Mammouth du PHP | 2703 Messages

08 avr. 2023, 21:17

utiliser un champ caché https://developer.mozilla.org/fr/docs/W ... put/hidden pour conserver l'id.

Eléphant du PHP | 89 Messages

08 avr. 2023, 21:38

Je ne vois pas dans mon cas comment le champ caché peut m'aider car l'id que je veux garder n'est pas celui du bouton submit mais du client dont on a taper le nom dans la base de donné et dont les données ont été récupérer de la bdd juste avant

Mammouth du PHP | 2703 Messages

08 avr. 2023, 21:45

il peut y avoir plusieurs clients donc la boucle peut afficher plusieurs résultats.
or, le second formulaire est après la boucle, donc on ne sait pas quel client est sélectionné.
il faut donc pouvoir sélectionné le client en cliquant sur quelque chose, clic qui peut déclencher une mise à jour de ce champ caché en javascript. sans javascript, dans la boucle, mettre un lien vers une autre page en passant l'id. et c'est seulement dans cette autre page que le second formulaire est affiché.

Eléphant du PHP | 89 Messages

09 avr. 2023, 21:06

Ah oui d'accord merci pour ton explication maintenant que j'ai pris ça en compte j'ai rajouter un bouton au bout de chaque ligne de client générer contenant l'id de celui-ci.
Merci beaucoup