Affichage selon sélection liste déroulante sans recharger la page

Eléphant du PHP | 226 Messages

06 janv. 2019, 11:50

Bonjour à tous,

j'ai une liste déroulante qui contient les départements, je voudrais que dans le formulaire dans un input, je puisse rentrer une ville (en autocomplete que j'ai déjà fait) mais en fonction du choix de la liste déroulante même lorsque l'utilisateur change de département.
Il faut appeler je crois ce changement en Javascript ou Ajax ?

Le hearder.php contient la liste déroulante département comme ceci :

<select name="id_departement" class="form-control mb-2" id="region" onChange="getVilles(this.value);">
		     <option value="">- - - Choisissez un d&eacute;partement - - -</option>
		   <?php
  			  foreach($departements as $nr => $nom)
    {
		       ?>
					 <option value="<?= $nr;?>"<?php
				  } 
		
		?>><?= utf8_encode($nom); ?></option><?php }  
				echo'</select>';
				 }
//ici je voudrais afficher le input en fonction du choix du département même si l'utilisateur change
?>
<div class="input_container">
                    <input type="text" id="country_id" onkeyup="autocomplet()">
                    <ul id="country_list_id"></ul>
                </div> 

le fichier d'autocomplete :

$keyword = '%'.$_POST['keyword'].'%';
$sql = "SELECT id_ville, ville, cp FROM ville WHERE ville LIKE (:keyword) and id_departement = ". $idd ." LIMIT 0, 8";
$query = $pdo->prepare($sql);
$query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
$query->execute();
$list = $query->fetchAll();
foreach ($list as $rs) {
	// put in bold the written text
	$ville = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['ville']);
	// add new option
    echo '<li onclick="set_item(\''.str_replace("'", "\'", $rs['ville']).'\')">'.$ville.'</li>';
	}

Eléphant du PHP | 301 Messages

07 janv. 2019, 03:46

Salut,

Un exemple ici https://github.com/boktoso/AjaxExample je pense le mieux c'est de renvoyer du json plus léger et en javascript insérer l'élément. Tu peux utiliser jquery https://stackoverflow.com/questions/229 ... ax-and-php

Eléphant du PHP | 226 Messages

08 janv. 2019, 20:02

Bonsoir,
comment peut-on remplacer switch dans le résultat de la requête sql dans le premier exemple ?

Eléphant du PHP | 226 Messages

09 janv. 2019, 19:27

Bonsoir,

j'ai fait ceci mais évidement cela m'affiche dans la deuxième liste uniquement que la première ville.
Comment faire une répétition pour afficher toutes les villes correspondantes :?:
<?php
	$choice = $_GET["first"];
	
	$ville = $bdd->query('SELECT * FROM ville WHERE id_departement ="'.$_GET['first'].'"');
			$don = $ville->fetch();
			
			
	switch($choice){
		case  "".$don['id_departement']."":
	
		echo '["'.$don['ville'].'"]'; 
			break;
		
		default:
			echo "[]";
			break;
	}
	?>
Merci

Eléphant du PHP | 301 Messages

11 janv. 2019, 08:50

Salut,

C'était juste un exemple, fait ta requête selon la ville tu retourne le résultat enjson_encode, puis tu fais un consol.log pour voir à quoi sa ressemble. Enfin en jquery javascript ou ce que tu veux tu sélectionnes ton élément et utilise append (en jquery) pour mettre à jour ta liste.

Eléphant du PHP | 226 Messages

11 janv. 2019, 21:43

Je maîtrise un peu le PHP mais pas le java, Ajax et javascript
Une petite explication avec un bout de code pour m'aider à comprendre

Eléphant du PHP | 226 Messages

18 janv. 2019, 20:32

Bonsoir à tous,
J'ai résolut mon problème en faisant le code ci-dessous, par contre je voudrais ajouter un selected de la valeur de l'option pour garder la sélection de la ville après la validation du formulaire mais avec une variable de SESSION['id_ville'].

if(val1 != "") {
			$ville.empty(); 
		
			$.ajax({
				url: 'SearchAJAXresult.php',
				data: 'departement=' + val1, 
				dataType: 'json',
				//error: function(){document.write("lol")},
				success: function(json) {
					$.each(json, function(index, value) {
					
						$ville.append('<option value="'+ index +'">'+ value +'</option>'); 
						
					});
				
				}
				
			});
		}
Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7875 Messages

Hier, 01:55

Si ton formulaire est envoyé en Ajax alors la valeur sélectionnée dans le menu déroulant va rester sur celle que l'utilisateur a choisi tant que la page n'est pas réactualisée.

Si tu veux que ce choix soit conservé après le rechargement de ta page qui contient le formulaire, alors il faut lors du chargement de la page soit en PHP ou en javascript ajouter un "selected" sur la bonne option.
Voici une piste en JS :
http://www.finalclap.com/faq/247-jquery-select-option
Quand tout le reste a échoué, lisez le mode d'emploi...