8721 sujets

Développement web côté serveur, CMS

Bonjour, j'ai un select liée a un autre (Région, Département) ci je sélectionne en exemple Alsace et j'actualise la page le select reste sur Alsace
Mais pour le département ca ce complique un peu !!!
Les options pour les régions
<option value="<?php echo($nr); ?>" <?php if (!(strcmp($nr, htmlentities($_GET['r'], ENT_COMPAT, 'UTF-8')))) {echo "SELECTED";} ?>><?php echo($nom); ?></option>

Les options pour les départements
$liste .= '<option value="'. $code_dept[$d].'">'. htmlentities($nom_dept[$d]).'</option>'."\n";

il me faudrait une solution pour affiche le département selon l'url $_GET['d'] Exemple si $_GET['d'] = $code_dept[$d] on met SELECTED
Merci de votre aide !!
Hello,

J'aurais fait un truc dans ce genre la moi. Un peu verbeux, mais au moins, tu comprendras le principe Smiley cligne

// Pour éviter une erreur notice, on déclare la variable "vide"
$selected = "";

// Si la variable de l'url est éguale à ce que je récupère de ma base, je rempli selected
if($code_dept[$d] == $_GET['d']) $selected = ' selected="selected" ';

$liste .= '<option '.$selected.' value="'. $code_dept[$d].'">'. htmlentities($nom_dept[$d]).'</option>';

// Je pense à détruire ma variable, qui sera redéclarée à chaque itération.
unset($selected);

Bye,
Yokii
Modifié par Yokii (14 Aug 2014 - 12:11)
Par contre ci je change $_GET['d'] par une valeur exemple 67 le selected fonctionne bien et dans l'url j'ai bien les valeurs
$selected = "";
	   if("67" == $code_dept[$d]) $selected = ' selected="selected" ';
       $liste .= '<option value="'. $code_dept[$d] .'" '.$selected.'>'. htmlentities($nom_dept[$d]).'&nbsp;('.htmlentities($code_dept[$d]).')</option>'."\n";
       unset($selected);
Tu dois donc avoir un soucis au niveau de la récupération de ton get. Tu peux nous afficher la valeur du get ?
ci dans la page principale je fais <?php echo $_GET['d'];?> on m'afiche le bon département
Ci-joint le code complet
Page principle

<script type="text/javascript" src="js/dept_recherche.js" charset="iso_8859-1"></script>
<?php
$serveur = "**";
$admin   = "**";
$mdp     = "**";
$base    = "**";
?>
<?php
/* Requête SQL de récupération des données de la première liste */
$sql = "SELECT `id_region` AS idr, `region` ".
"FROM `region` ".
"ORDER BY `id_region`;";
/* Connexion et exécution de la requête */
$connexion = mysql_connect($serveur, $admin, $mdp);
if($connexion != false)
{
$choixbase = mysql_select_db($base, $connexion);
$recherche = mysql_query($sql, $connexion);
/* Création du tableau PHP des valeurs récupérées */
$regions = array();
/* Index du département par tableau régional */
$id = 0;
while($ligne = mysql_fetch_assoc($recherche))
{
$regions[$ligne['idr']] = $ligne['region'];
}
?>
<select name="r" class="input_recherche22" id="region" onchange="getDepartements(this.value);">
<option value="" >Toute la France</option>
<?php
/* Construction de la première liste : on se sert du tableau PHP */
foreach($regions as $nr => $nom)
{
?>
<option value="<?php echo($nr); ?>" <?php if (!(strcmp($nr, htmlentities($_GET['r'], ENT_COMPAT, 'UTF-8')))) {echo "selected=selected";} ?>><?php echo($nom); ?></option>
<?php
}
?>
</select>
<span id="blocDepartements"></span>
<?php
}
else
{
/*  Si vous arrivez ici, vous avez un gros problème avec la connexion au serveur de base de données */
?>
<?php
}
?>

Le JS

var requete = null;
function creerRequete()
{
    try
    {
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
    }
}
function actualiserDepartements()
{
    var listeDept = requete.responseText;
    var blocListe = document.getElementById('blocDepartements');
    blocListe.innerHTML = listeDept;
}

function getDepartements(idr)
{
    if(idr == '')
    {
        document.getElementById('blocDepartements').innerHTML = '';
    }
    else
    {
        var blocListe = document.getElementById('blocDepartements');
        blocListe.innerHTML = "";
        creerRequete();
        var url = 'js/departements_recherche22.php?idr='+ idr;
        requete.open('GET', url, true);
        requete.onreadystatechange = function()
        {
            if(requete.readyState == 4)
            {
                if(requete.status == 200)
                {
                    actualiserDepartements();
                }
            }
        };
        requete.send(null);
    }
}

Page departements_recherche22.php

<?php
/**
 * Code qui sera aeeplé par un objet XHR et qui
 * retournera la liste déroulante des départements
 * correspondant à la région sélectionnée.
 */
/* Paramètres de connexion */
$serveur = "**";
$admin   = "**";
$mdp     = "**";
$base    = "**";

/* On récupère l'identifiant de la région choisie. */
$idr = isset($_GET['idr']) ? $_GET['idr'] : false;
/* Si on a une région, on procède à la requête */

if(false !== $idr)
{
    /* Cération de la requête pour avoir les départements de cette région */
    $sql2 = "SELECT `id_departement`, `departement`".
            " FROM `departement`".
            " WHERE `id_region` = ". $idr ."".
            " ORDER BY `id_departement`;";
    $connexion = mysql_connect($serveur, $admin, $mdp);
    mysql_select_db($base, $connexion);
    $rech_dept = mysql_query($sql2, $connexion);
    /* Un petit compteur pour les départements */
    $nd = 0;
    /* On crée deux tableaux pour les numéros et les noms des départements */
    $code_dept = array();
    $nom_dept = array();
    /* On va mettre les numéros et noms des départements dans les deux tableaux */
    while(false != ($ligne_dept = mysql_fetch_assoc($rech_dept)))
    {
        $code_dept[] = $ligne_dept['id_departement'];
        $nom_dept[]  = $ligne_dept['departement'];
        $nd++;
    }
	
	/* Maintenant on peut construire la liste déroulante */
    
	$liste = "";
    $liste .= '<select name="d"  class="input_recherche22" id="departement"><option value="" >Tous les D&eacute;partements</option>'."\n";
    for($d = 0; $d < $nd; $d++)
    
	{
	   $selected = "";
	   if($_GET['d'] == $code_dept[$d]) $selected = ' selected="selected" ';
       $liste .= '<option value="'. $code_dept[$d] .'" '.$selected.'>'. htmlentities($nom_dept[$d]).'&nbsp;('.htmlentities($code_dept[$d]).')</option>'."\n";
       unset($selected);

    }
    $liste .= '</select>'."\n";
    /* Un petit coup de balai */
    mysql_free_result($rech_dept);
    /* Affichage de la liste déroulante */
    echo($liste);
}
/* Sinon on retourne un message d'erreur */
else
{
    echo("<p>Une erreur s'est produite.</p>\n");
}
?>
oui bien le id exemple.php?o=&r=1&d=67
Le formulaire marche bien c'est juste que j'aimerais que le département qui a été sélectionner ce mette en selected !
Modifié par bibi67 (14 Aug 2014 - 14:33)
bibi67 a écrit :

Le formulaire marche bien c'est juste que j'aimerais que le département qui a été sélectionner ce mette en selected !


Oui, j'ai compris. Si la comparaison ne se fait pas, c'est qu'il y a un soucis au niveau de la récupération de l'une des deux valeurs.
Apres deux jours de travaux j'ai trouvez merci pour tout vos post et idée !

Ci cela peu intéresé quelqu'un la solution et disponible en MP

Merci
Modifié par bibi67 (14 Aug 2014 - 20:39)
La solution tien dans le JS
var requete = null;
function creerRequete()
{
    try
    {
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Votre navigateur ne semble pas supporter.');
    }
}
function actualiserDepartements()
{
    var listeDept = requete.responseText;
    var blocListe = document.getElementById('blocDepartements');
    blocListe.innerHTML = listeDept;
}
function getParamValue(param,url)
{
	var u = url == undefined ? document.location.href : url;
	var reg = new RegExp('(\\?|&|^)'+param+'=(.*?)(&|$)');
	matches = u.match(reg);
	return (matches && matches[2] != undefined) ? decodeURIComponent(matches[2]).replace(/\+/g,' ') : '';
}
function getDepartements(idr)
{
    if(idr == '')
    {
        document.getElementById('blocDepartements').innerHTML = '';
    }
    else
    {
        var blocListe = document.getElementById('blocDepartements');
        blocListe.innerHTML = "";
        creerRequete();
		var url = 'js/departements_recherche22.php?idr='+ idr + '&d=' + (getParamValue('d'));;
		requete.open('GET', url, true);
        requete.onreadystatechange = function()
        {
            if(requete.readyState == 4)
            {
                if(requete.status == 200)
                {
                    actualiserDepartements();
                }
            }
        };
        requete.send(null);
    }
}
Je comprend pas. A quel moment tu précises que tu sélectionnes l'élément? C'est pas en PHP?
Bonjour @Yokil Désolé du retard ci joint le code complet qui fonctionne
Le code pour les régions
<?php
$serveur = "**";
$admin   = "**";
$mdp     = "**";
$base    = "**";

$sql = "SELECT `id_region` AS idr, `region` ".
"FROM `region` ".
"ORDER BY `id_region`;";
$connexion = mysql_connect($serveur, $admin, $mdp);
if($connexion != false)
{
$choixbase = mysql_select_db($base, $connexion);
$recherche = mysql_query($sql, $connexion);
$regions = array();
$id = 0;
while($ligne = mysql_fetch_assoc($recherche))
{ $regions[$ligne['idr']] = $ligne['region']; } ?>
<select name="r" class="input_recherche22" id="region" onchange="getDepartements(this.value);">
<option value="" >Toute la France</option>
<?php
foreach($regions as $nr => $nom)
{
?>
<option value="<?php echo($nr); ?>" <?php if (!(strcmp($nr, htmlentities($_GET['r'], ENT_COMPAT, 'UTF-8')))) {echo "selected=selected";} ?>><?php echo($nom); ?></option>
<?php
}
?>
</select>
<span id="blocDepartements"></span> 
<script type="text/javascript">
d = document.getElementById("region").value;
document.getElementById('region').attachEvent('onchange', getDepartements(d));
</script>
<?php } else { ?>
<?php } ?>

Le js
var requete = null;
function creerRequete()
{
    try
    {
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Votre navigateur ne semble pas supporter.');
    }
}
function actualiserDepartements()
{
    var listeDept = requete.responseText;
    var blocListe = document.getElementById('blocDepartements');
    blocListe.innerHTML = listeDept;
}
function getParamValue(param,url)
{
	var u = url == undefined ? document.location.href : url;
	var reg = new RegExp('(\\?|&|^)'+param+'=(.*?)(&|$)');
	matches = u.match(reg);
	return (matches && matches[2] != undefined) ? decodeURIComponent(matches[2]).replace(/\+/g,' ') : '';
}
function getDepartements(idr)
{
    if(idr == '')
    {
        document.getElementById('blocDepartements').innerHTML = '';
    }
    else
    {
        var blocListe = document.getElementById('blocDepartements');
        blocListe.innerHTML = "";
        creerRequete();
		var url = 'js/departements_recherche22.php?idr='+ idr + '&d=' + (getParamValue('d'));;
		requete.open('GET', url, true);
        requete.onreadystatechange = function()
        {
            if(requete.readyState == 4)
            {
                if(requete.status == 200)
                {
                    actualiserDepartements();
                }
            }
        };
        requete.send(null);
    }
}

Le code pour afficher les départements
<?php
$serveur = "**";
$admin   = "**";
$mdp     = "**";
$base    = "**";

$idr = isset($_GET['idr']) ? $_GET['idr'] : false;
if(false !== $idr)
{
$sql2 = "SELECT `id_departement`, `departement`, `dep`".
" FROM `departement`".
" WHERE `id_region` = ". $idr ."".
" ORDER BY `id_departement`;";
$connexion = mysql_connect($serveur, $admin, $mdp);
mysql_select_db($base, $connexion);
$rech_dept = mysql_query($sql2, $connexion);
$nd = 0;
$code_dept = array();
$nom_dept = array();
while(false != ($ligne_dept = mysql_fetch_assoc($rech_dept)))
{
$code_dept[] = $ligne_dept['id_departement'];
$nom_dept[]  = $ligne_dept['departement'];
$codeid_dept[]  = $ligne_dept['dep'];
$nd++;
}    
$liste = "";
$liste .= '<select name="d"  class="input_recherche22" id="departement"><option value="" >Tous les D&eacute;partements</option>'."\n";
for($d = 0; $d < $nd; $d++)
{
$selected = "";
if($_GET['d'] == $code_dept[$d]) $selected = 'selected="selected"';
$liste .= '<option value="'. $code_dept[$d] .'" '.$selected.'>'. htmlentities($nom_dept[$d]).'&nbsp;('. htmlentities($codeid_dept[$d]).')</option>'."\n";
unset($selected);
}
$liste .= '</select>'."\n";
mysql_free_result($rech_dept);
echo($liste);
}
else
{
echo("<p>Une erreur s'est produite.</p>\n");
}
?>