Garder la sélection sur une option après validation formulaire

Eléphant du PHP | 233 Messages

30 déc. 2018, 16:26

Bonjour à tous,

je voudrais garder la sélection de mon choix après validation du formulaire. J'ai du mal car le code que j'utilise est en php et je n'arrive pas faire cette sélection :

$liste .= '  <option value="'. $code_ville[$d] .'">'. utf8_encode($nom_ville[$d]) .' ('. $cp_ville[$d] .')</option>'."\n";
voici ce que je veut insérer :
 if (isset($_GET['ville'])) {
            if ($code_ville[$d] == $_GET['ville']) {
                echo 'selected="selected"';
            }
        }

Merci de votre aide :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 janv. 2019, 22:53

Bonjour,

Repars du HTML, que dois-tu obtenir au final ?

Une fois que tu sais ce que tu veux obtenir, il te suffit d'avoir une variable PHP au niveau de la construction de ta balise <option> dans laquelle tu mets 'selected="selected"' si c'est l'option que tu veux sélectionner ou dans lequel tu ne mets rien si tu ne veux pas la sélectionner
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 233 Messages

05 janv. 2019, 17:57

Malheureusement malgré mais recherches, je ne vois pas comment faire et d'ailleurs je ne suis certain que ce soit possible.
Je sais que ça plait pas trop mais je met le code en entier. L'affichage se fait via javascript, quand on sélectionne le département le bloc villes s'affiche.
Moi je voudrais que le bloc ville reste affiché avec la ville sélectionnée après validation du formulaire. C'est pour ça que je comptais ajouter "selected"

$idd = isset($_GET['idd']) ? $_GET['idd'] : false;

			if(false !== $idd)
{

		
		   $rech_ville = $bdd->query("SELECT id_ville, ville, cp FROM ville WHERE id_departement = ". $idd ." ORDER BY id_ville");
		    $nd = 0;

		    $code_ville = array();

		    $nom_ville = array();
		    while(false != ($ligne_ville = $rech_ville->fetch()))
    {
  
		      $code_ville[] = $ligne_ville['id_ville'];

       			 $nom_ville[]  = $ligne_ville['ville'];
				 $cp_ville[]  = $ligne_ville['cp'];
  
			      $nd++;
    }
				  $liste = "";
				 
				   $liste .= '<select name="id_ville" class="form-control" id="ville">'."\n";
   					$liste.='<option value="">--- S&eacute;l&eacute;ctionnez la ville ---</option>';
					 for($d = 0; $d < $nd; $d++)
    {
  
					      $liste .= '  <option value="'. $code_ville[$d] .'">'. utf8_encode($nom_ville[$d]) .' ('. $cp_ville[$d] .')</option>'."\n";
    }

					 $liste .= '</select>'."\n";
					   $rech_ville->closeCursor();
  
				  echo($liste);

							}

Existe-t-il une solution ?

Mammouth du PHP | 2703 Messages

05 janv. 2019, 18:36

$liste .= "<option .....";
if (isset($_GET['ville'])) {
if ($code_ville[$d] == $_GET['ville']) {
$liste .= 'selected="selected"';
}
}
$liste .= ".....</option>";

à noter que faire une boucle pour mettre les données dans un tableau puis parcourir ce tableau pour mettre les données dans $liste puis afficher $liste, est mille fois plus compliqué que d'afficher les données dans le premier while de parcours des résultats de la requete.

Eléphant du PHP | 233 Messages

05 janv. 2019, 20:55

Oui effectivement c'est mieux en faisant une boucle.
le formulaire disparaît quand je valide la recherche. Le champ ville est affiché avec javascript quand on sélectionne le département.
Y a-t-il un moyen de le laissé affiché ?

$idd = isset($_GET['idd']) ? $_GET['idd'] : false;

			if(false !== $idd)
{		
		   $rech_ville = $bdd->query("SELECT id_ville, ville, cp FROM ville WHERE id_departement = ". $idd ." ORDER BY id_ville"); ?>   
		   <select name="id_ville" class="form-control">
   					<option value="">--- S&eacute;l&eacute;ctionnez la ville ---</option>
		   <?php
		   
		    while($ligne = $rech_ville->fetch())
			{ ?>
			<option value="<?= $ligne['id_ville'];?>" <?php
			if (isset($_GET['id_ville'])) { 
            if ($ligne['id_ville'] == $_GET['id_ville']) {
                echo 'selected="selected"';
				
           } 
        } 
		?>><?= utf8_encode($ligne['ville']);?> (<?= $ligne['cp'];?>)</option>
			
			<?php
			}
			}
			?>
			</select>