Selectionner dans un select l'option choisie précédement par l'utilisateur

Résolu
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   -  
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Existe t-il un moyen quand on revient sur un formulaire de ré-afficher ce qui avait
été sélectionné par l'utilisateur dans des select avant l'envoi ?
J'ai essayé avec des variables de session, au retour sur la page formulaire un echo
me donne les bonnes valeurs, donc cette partie fonctionne mais je ne sais pas comment interagir sur les select avec l'option 'selected' !
J'ai essayé avec un truc du genre : ($choix=='infos'?'selected':NULL); mais ça ne va pas !
J'ai essayé aussi avec un if au beau milieu de mon foreach mais du coup le select restait vide !
Et comme un peu de code vaut mieux qu'un long discours :


contrat-ajout1.php
Clients avec un S pour alimenter le select des clients récupérés dans la bdd
Client sans s pour la variable de session et le select


<?php
    // Requêtes pour formulaire :
    // CLIENTS    
    $requete1 = $bdd->query('SELECT * FROM clients ORDER by nom, prenom');
    // on stocke le résultat de la requête dans un Array
    $clients = $requete1->fetchAll();
    // Si la variable client n'existe pas on créé les variables de session :
    if (empty($_SESSION['client'])){ 
        $client = '';  
    }
    // Sinon récupération des variables de session :
    else{    
        $client = $_SESSION['client']; 
        echo $client;  // RENVOI BIEN L'ID DU CLIENT PRÉCÉDEMMENT SÉLECTIONNÉ 
    }

?>

<select name="client" id="client" required="">
    <option value="" selected disabled hidden>Sélectionnez un client</option>
     <?php
        foreach($clients as $valeur) {
            echo '<option value="' . $valeur['id_client'] . '">' . $valeur['nom'] . ' ' . $valeur['prenom'] . '</option>';
        }
    ?>
</select>



contrat-ajout2.php
if (isset($_POST["chaine_contrat"]) && $_POST["chaine_contrat"]!="") {
        // Connexion à la base de données :
        require("connexion.php");       
        // Récupération des données formulaire :
        $client = $_POST['client'];        
        //Requête préparée pour l'ajout :
        $requete = $bdd->prepare('INSERT INTO contrats(id_client) 
   VALUES(:id_client)');
        // Exécution de la requête :
        $requete->execute(array(                
                'id_client' => $client
        ));
    } else { //Le contrat est renseigné SANS prestations !  
  //récupération PROPRE des variables AVANT de les utiliser
  $client = !empty($_POST['client']) ? $_POST['client']: NULL;

  //récupération des saisies formulaire :
  $_SESSION['client'] = htmlspecialchars($client);  

  // Message d'alerte et retour au formulaire
        echo "Vous avez oublié les prestations du contrat";
        header('Refresh: 3; URL= contrat-ajout1.php');
    }




Configuration: Linux / Firefox 94.0
A voir également:

5 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Bonjour,

Une solution possible avec l'opérateur ternaire :
foreach($clients as $valeur) {
    echo '<option value="' . $valeur['id_client'] . '"' . ($client == $valeur['id_client'] ? ' selected' : '')  . '>' . $valeur['nom'] . ' ' . $valeur['prenom'] . '</option>';
}

1
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Tu devrais pouvoir utiliser le même principe pour l'input date :
<input type="date" id="date_debut" name="date_debut" required value="<?php echo !empty($date_debut) ? $date_debut : ''; ?>">


Attention néanmoins au format de la date, l'input html de type date attend une date au format "Y-m-d". Si la variable $date_debut est une chaine de caractères et que la date n'est pas dans le bon format, tu peux utiliser strtotime pour l'afficher avec le bon format :
<input type="date" id="date_debut" name="date_debut" required value="<?php echo !empty($date_debut) ? date("Y-m-d", strtotime($date_debut)) : ''; ?>">
1
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 
C'est exactement ce que je voulais, MERCI Pitet !!!

Pour les autres champs de mon formulaire qui ne sont pas des select, je ne trouve pas comment faire non plus, j'ai essayé ça :

<input type="date" id="date_debut" name="date_debut" required="" <?php echo $date_debut; ?> >

<input type="number" id="adultes" name="adultes" required="" value ="<?php ($adultes<>'' ? echo $adultes :0); ?>"><br>
0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 
Ça, ça fonctionne ! ;-)

<input type="number" id="adultes" name="adultes" required="" value ="<?php echo($adultes <>'' ? $adultes :0); ?>"><br>


Mais pas trouvé pour la date !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 
Et bien voila, tu viens de régler mon problème, je t'en remercie...
En ce qui concerne la date, je n'ai pas de problème particulier (en production locale
en tous cas), ta première solution fonctionne donc bien :
- L'input avant saisie affiche bien jj/mm/aaaa
- Le clic sur le champ ouvre bien le sélecteur de date (sous Firefox),
- La requête s'effectue avec un $date_debut = $_POST['date_debut'];
- Le type de data dans la bdd est bien date
- Et la récupération dans une variable de session au cas ou le formulaire ne serait pas
renseigné complètement :
$date_debut = !empty($_POST['date_debut']) ? $_POST['date_debut']: NULL;
$_SESSION['date_debut'] = htmlspecialchars($date_debut);
.../...
$date_debut = $_SESSION['date_debut'];

C'est parfait !
0