3 listes déroulantes php sql envoi resultat vers lien html

Résolu/Fermé
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 - Modifié par Chris 94 le 26/08/2013 à 20:00
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 - 3 sept. 2015 à 22:10
Bonjour,


Je rencontre un problème avec des listes déroulantes dépendantes l'une de l'autre, j'ai cherché un peu partout à résoudre le problème mais toujours pas de solution. en fait je voudrais intégrer 3 listes déroulantes liées entre elles pour faciliter la recherche sur mon site. j'ai réussi à trouver un script que j'ai pu modifier par rapport à mes besoins.

voici le code de la base sql avec deux tables region et departement

--
-- Base de données: 'regions'
--

-- --------------------------------------------------------

--
-- Structure de la table 'region'
--

CREATE TABLE 'region' (
'id_region' tinyint(4) NOT NULL auto_increment,
'region' varchar(50) NOT NULL default '',
PRIMARY KEY ('id_region')
);

-- --------------------------------------------------------

--
-- Structure de la table 'departement'
--

CREATE TABLE 'departement' (
'id_departement' char(2) NOT NULL default '',
'departement' varchar(50) NOT NULL default '',
'id_region' tinyint(4) NOT NULL default '0',
PRIMARY KEY ('id_departement'),
KEY 'id_region' ('id_region')
);

-- --------------------------------------------------------

--
-- Contenu de la table 'region'
--

INSERT INTO 'region' VALUES (1, 'Alsace');
INSERT INTO 'region' VALUES (2, 'Aquitaine');
INSERT INTO 'region' VALUES (3, 'Auvergne');
INSERT INTO 'region' VALUES (4, 'Basse-Normandie');
INSERT INTO 'region' VALUES (5, 'Bourgogne');
INSERT INTO 'region' VALUES (6, 'Bretagne');
INSERT INTO 'region' VALUES (7, 'Centre');
INSERT INTO 'region' VALUES (8, 'Champagne');
INSERT INTO 'region' VALUES (9, 'Corse');
INSERT INTO 'region' VALUES (10, 'Franche-Comté');
INSERT INTO 'region' VALUES (11, 'Haute-Normandie');
INSERT INTO 'region' VALUES (12, 'Île-de-France');
INSERT INTO 'region' VALUES (13, 'Languedoc-Roussillon');
INSERT INTO 'region' VALUES (14, 'Limousin');
INSERT INTO 'region' VALUES (15, 'Lorraine');
INSERT INTO 'region' VALUES (16, 'Midi-Pyrénées');
INSERT INTO 'region' VALUES (17, 'Nord-pas-de-Calais');
INSERT INTO 'region' VALUES (18, 'Pays de la Loire');
INSERT INTO 'region' VALUES (19, 'Picardie');
INSERT INTO 'region' VALUES (20, 'Poitou-Charentes');
INSERT INTO 'region' VALUES (21, 'Provence-Alpes-Côte-d\'Azur');
INSERT INTO 'region' VALUES (22, 'Rhône-Alpes');

--
-- Contenu de la table 'departement'
--

INSERT INTO 'departement' VALUES ('01', 'Ain', 22);
INSERT INTO 'departement' VALUES ('02', 'Aisne', 19);
INSERT INTO 'departement' VALUES ('03', 'Allier', 3);
INSERT INTO 'departement' VALUES ('04', 'Alpes-de-Haute-Provence', 21);
INSERT INTO 'departement' VALUES ('05', 'Hautes-Alpes', 21);
INSERT INTO 'departement' VALUES ('06', 'Alpes-Maritimes', 21);
INSERT INTO 'departement' VALUES ('07', 'Ardèche', 22);
INSERT INTO 'departement' VALUES ('08', 'Ardennes', 8);
INSERT INTO 'departement' VALUES ('09', 'Ariège', 16);
INSERT INTO 'departement' VALUES ('10', 'Aube', 8);
INSERT INTO 'departement' VALUES ('11', 'Aude', 13);
INSERT INTO 'departement' VALUES ('12', 'Aveyron', 16);
INSERT INTO 'departement' VALUES ('13', 'Bouches-du-Rhône', 21);
INSERT INTO 'departement' VALUES ('14', 'Calvados', 4);
INSERT INTO 'departement' VALUES ('15', 'Cantal', 3);
INSERT INTO 'departement' VALUES ('16', 'Charente', 20);
INSERT INTO 'departement' VALUES ('17', 'Charente-Maritime', 20);
INSERT INTO 'departement' VALUES ('18', 'Cher', 7);
INSERT INTO 'departement' VALUES ('19', 'Corrèze', 14);
INSERT INTO 'departement' VALUES ('2A', 'Corse-du-Sud', 9);
INSERT INTO 'departement' VALUES ('2B', 'Haute-Corse', 9);
INSERT INTO 'departement' VALUES ('21', 'Côte-d\'Or', 5);
INSERT INTO 'departement' VALUES ('22', 'Côtes-d\'Armor', 6);
INSERT INTO 'departement' VALUES ('23', 'Creuse', 14);
INSERT INTO 'departement' VALUES ('24', 'Dordogne', 2);
INSERT INTO 'departement' VALUES ('25', 'Doubs', 10);
INSERT INTO 'departement' VALUES ('26', 'Drôme', 22);
INSERT INTO 'departement' VALUES ('27', 'Eure', 11);
INSERT INTO 'departement' VALUES ('28', 'Eure-et-Loir', 7);
INSERT INTO 'departement' VALUES ('29', 'Finistère', 6);
INSERT INTO 'departement' VALUES ('30', 'Gard', 13);
INSERT INTO 'departement' VALUES ('31', 'Haute-Garonne', 16);
INSERT INTO 'departement' VALUES ('32', 'Gers', 16);
INSERT INTO 'departement' VALUES ('33', 'Gironde', 2);
INSERT INTO 'departement' VALUES ('34', 'Hérault', 13);
INSERT INTO 'departement' VALUES ('35', 'Ille-et-Vilaine', 6);
INSERT INTO 'departement' VALUES ('36', 'Indre', 7);
INSERT INTO 'departement' VALUES ('37', 'Indre-et-Loire', 7);
INSERT INTO 'departement' VALUES ('38', 'Isère', 22);
INSERT INTO 'departement' VALUES ('39', 'Jura', 10);
INSERT INTO 'departement' VALUES ('40', 'Landes', 2);
INSERT INTO 'departement' VALUES ('41', 'Loir-et-Cher', 7);
INSERT INTO 'departement' VALUES ('42', 'Loire', 22);
INSERT INTO 'departement' VALUES ('43', 'Haute-Loire', 3);
INSERT INTO 'departement' VALUES ('44', 'Loire-Atlantique', 18);
INSERT INTO 'departement' VALUES ('45', 'Loiret', 7);
INSERT INTO 'departement' VALUES ('46', 'Lot', 16);
INSERT INTO 'departement' VALUES ('47', 'Lot-et-Garonne', 2);
INSERT INTO 'departement' VALUES ('48', 'Lozère', 13);
INSERT INTO 'departement' VALUES ('49', 'Maine-et-Loire', 18);
INSERT INTO 'departement' VALUES ('50', 'Manche', 4);
INSERT INTO 'departement' VALUES ('51', 'Marne', 8);
INSERT INTO 'departement' VALUES ('52', 'Haute-Marne', 8);
INSERT INTO 'departement' VALUES ('53', 'Mayenne', 18);
INSERT INTO 'departement' VALUES ('54', 'Meurthe-et-Moselle', 15);
INSERT INTO 'departement' VALUES ('55', 'Meuse', 15);
INSERT INTO 'departement' VALUES ('56', 'Morbihan', 6);
INSERT INTO 'departement' VALUES ('57', 'Moselle', 15);
INSERT INTO 'departement' VALUES ('58', 'Nièvre', 5);
INSERT INTO 'departement' VALUES ('59', 'Nord', 17);
INSERT INTO 'departement' VALUES ('60', 'Oise', 19);
INSERT INTO 'departement' VALUES ('61', 'Orne', 4);
INSERT INTO 'departement' VALUES ('62', 'Pas-de-Calais', 17);
INSERT INTO 'departement' VALUES ('63', 'Puy-de-Dôme', 3);
INSERT INTO 'departement' VALUES ('64', 'Pyrénées-Atlantiques', 2);
INSERT INTO 'departement' VALUES ('65', 'Hautes-Pyrénées', 16);
INSERT INTO 'departement' VALUES ('66', 'Pyrénées-Orientales', 13);
INSERT INTO 'departement' VALUES ('67', 'Bas-Rhin', 1);
INSERT INTO 'departement' VALUES ('68', 'Haut-Rhin', 1);
INSERT INTO 'departement' VALUES ('69', 'Rhône', 22);
INSERT INTO 'departement' VALUES ('70', 'Haute-Saône', 10);
INSERT INTO 'departement' VALUES ('71', 'Saône-et-Loire', 5);
INSERT INTO 'departement' VALUES ('72', 'Sarthe', 18);
INSERT INTO 'departement' VALUES ('73', 'Savoie', 22);
INSERT INTO 'departement' VALUES ('74', 'Haute-Savoie', 22);
INSERT INTO 'departement' VALUES ('75', 'Paris', 12);
INSERT INTO 'departement' VALUES ('76', 'Seine-Maritime', 11);
INSERT INTO 'departement' VALUES ('77', 'Seine-et-Marne', 12);
INSERT INTO 'departement' VALUES ('78', 'Yvelines', 12);
INSERT INTO 'departement' VALUES ('79', 'Deux-Sèvres', 20);
INSERT INTO 'departement' VALUES ('80', 'Somme', 19);
INSERT INTO 'departement' VALUES ('81', 'Tarn', 16);
INSERT INTO 'departement' VALUES ('82', 'Tarn-et-Garonne', 16);
INSERT INTO 'departement' VALUES ('83', 'Var', 21);
INSERT INTO 'departement' VALUES ('84', 'Vaucluse', 21);
INSERT INTO 'departement' VALUES ('85', 'Vendée', 18);
INSERT INTO 'departement' VALUES ('86', 'Vienne', 20);
INSERT INTO 'departement' VALUES ('87', 'Haute-Vienne', 14);
INSERT INTO 'departement' VALUES ('88', 'Vosges', 15);
INSERT INTO 'departement' VALUES ('89', 'Yonne', 5);
INSERT INTO 'departement' VALUES ('90', 'Territoire de Belfort', 10);
INSERT INTO 'departement' VALUES ('91', 'Essonne', 12);
INSERT INTO 'departement' VALUES ('92', 'Hauts-de-Seine', 12);
INSERT INTO 'departement' VALUES ('93', 'Seine-Saint-Denis', 12);
INSERT INTO 'departement' VALUES ('94', 'Val-de-Marne', 12);
INSERT INTO 'departement' VALUES ('95', 'Val-d\'Oise', 12);

le fichier index.php qui traite les données de la BDD

<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxxxx";
$admin = "xxxxxxxxxx";
$mdp = "xxxxxxxxxxx";
$base = "xxxxxxxxxxxx";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "")
{
$region_selectionnee = $_POST['region'];
$dept_selectionne = $_POST['departement'];
?>
<p>Vous avez sélectionné le département <?php echo($dept_selectionne); ?> dans la région <?php echo($region_selectionnee); ?></p>
<?php
}
?>
<h3>Trouver un département</h3>
<?php
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
* car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
$choixbase = mysql_select_db($base, $connexion);
$sql1 = "SELECT 'id_region', 'region'".
" FROM 'region'".
" ORDER BY 'id_region'";
$rech_regions = mysql_query($sql1);
$code_region = array();
$region = array();
/* On active un compteur pour les régions */
$nb_regions = 0;
if($rech_regions != false)
{
while($ligne = mysql_fetch_assoc($rech_regions))
{
array_push($code_region, $ligne['id_region']);
array_push($region, $ligne['region']);
/* On incrémente de compteur */
$nb_regions++;
}
}
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399">
<legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="document.forms['chgdept'].submit();">
<option value="-1">- - - Choisissez une région - - -</option>
<?php
for($i = 0; $i < $nb_regions; $i++)
{
?>
<option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option>
<?php
}
?>
</select>
<?php
mysql_free_result($rech_regions);
/* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */
if(isset($idr) && $idr != -1)
{
/* 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';";
if($connexion != false)
{
$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($ligne_dept = mysql_fetch_assoc($rech_dept))
{
array_push($code_dept, $ligne_dept['id_departement']);
array_push($nom_dept, $ligne_dept['departement']);
$nd++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<select name="departement" id="departement">
<?php
for($d = 0; $d<$nd; $d++)
{
?>
<option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]." (". $code_dept[$d] .")"); ?></option>
<?php
}
?>
</select>
<?php
}
/* Un petit coup de balai */
mysql_free_result($rech_dept);
}
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
}
else
{
/* Si on arrive là, c'est pas bon signe, il faut vérifier les
* paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>

ma question est ce que je pourrais rajouter une 3eme table avec par exemple la liste des villes et accorder un lien (qui existe déja est voudrais le garder parce qu'il est bien referencer par GG) pour chaque ville.

un petit exemple pour mieux comprendre :

région : île-de-france -------> département : Val-de-Marne -------->ville : Vincennes quand on valide la page se redirige vers le lien de mon site qui a un rapport avec vincenne (www.monsite.fr/balbala.html).

J'espère que j'ai été clair ! Si quelqu'un a une solution à mon problème, je lui en serai infiniment reconnaissant.
A voir également:

15 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Chris 94 le 26/08/2013 à 20:01
Voila une solution a qqs erreur de frappe près:
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxxxx";
$admin = "xxxxxxxxxx";
$mdp = "xxxxxxxxxx";
$base = "xxxxxxxxxxxxx";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
//recupération des selections éventuelles sinon init à vide
$region=isset($_POST['region']) ? $_POST['region'] : "";
$departement=isset($_POST['departement']) ? $_POST['departement'] : "";
//
//connexion a mysql contarirement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die('Pb connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion)  or die('Pb sélection base '.mysql_error());

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
 <fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
  <select name="region" id="region" onchange="submit();">
   <option value="-1">- - - Choisissez une région - - -</option>

<?php
   $sql1 = "SELECT id_region, region FROM region ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !
   $rech_regions = mysql_query($sql1)   or die('Pb requette régions '.mysql_error());   
   while($ligne = mysql_fetch_assoc($rech_regions)){
    //pas besoin de passer par des array
    //generation de la ligne option
    $option= '<option value="'.$ligne['id_region'].'" ';
    if($region==$ligne['id_region']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
    $option.=' >'.$ligne['region'].'</option>';
    //affichage de la ligne option
    echo $option;
   }
   mysql_free_result($rech_regions);
?>
  </select>
<?php

     //liste departements
 if(isset($_POST['region'])){
  if($_POST['region']==-1){
   echo 'Vous devez chosir une région';
  }else{
?>
    <select name="departement" id="departement" onchange="submit();">
     <option value="-1">- - - Choisissez un département - - -</option>
<?php
     $sql2 = "SELECT id_departement, departement FROM departement ORDER BY departement"; //par orde alpa des noms c'est qd mêm mieux !
        $rech_departement = mysql_query($sql2)   or die('Pb requette departement '.mysql_error());   
        while($ligne = mysql_fetch_assoc($rech_departement)){
         
         //generation de la ligne option
         $option= '<option value="'.$ligne['id_departement'].'" ';
         if($departement==$ligne['id_departement']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
         $option.=' >'.$ligne['departement'].'</option>';
         //affichage de la ligne option
         echo $option;
        }
        mysql_free_result($rech_departement);

?>     
    </select>
<?php   
  }
 }
     //liste villes
 if(isset($_POST['departement'])){
  if($_POST['departement']==-1){
   echo 'Vous devez chosir un departement';
  }else{
?>
    <select name="ville" id="ville">
     <option value="-1">- - - Choisissez une ville - - -</option>
<?php
     $sql3 = "SELECT id_ville, ville FROM ville ORDER BY ville"; //par orde alpa des noms c'est qd mêm mieux !
        $rech_ville = mysql_query($sql3)   or die('Pb requette ville '.mysql_error());   
        while($ligne = mysql_fetch_assoc($rech_ville)){
         
         //generation de la ligne option
         $option= '<option value="'.$ligne['id_ville'].'" ';
         if($departement==$ligne['id_ville']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
         $option.=' >'.$ligne['ville'].'</option>';
         //affichage de la ligne option
         echo $option;
        }
        mysql_free_result($rech_ville);

?>     
    </select>
    <br /><input type="submit" name="ok" id="ok" value="Envoyer" />
<?php   
  }
 }

?>

  </fieldset>
  </form>
<?php
  /* Terminé, on ferme la connexion */
  mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
26 août 2013 à 23:45
super merci beaucoup alain tu m'a sauvé la mise plusieurs fois :)
cependant j'ai essayé ton code et ça à l'air de bien marcher le seul problème c'est que j'arrive pas à ajouter la 3eme table des villes sur ma bdd.

j'ai essayé ça mais ça marche pas :

--
-- Base de données: 'regions'
--

-- --------------------------------------------------------

--
-- Structure de la table 'region'
--

CREATE TABLE 'region' (
'id_region' tinyint(4) NOT NULL auto_increment,
'region' varchar(50) NOT NULL default '',
PRIMARY KEY ('id_region')
);

-- --------------------------------------------------------

--
-- Structure de la table 'departement'
--

CREATE TABLE 'departement' (
'id_departement' char(2) NOT NULL default '',
'departement' varchar(50) NOT NULL default '',
'id_region' tinyint(4) NOT NULL default '0',
PRIMARY KEY ('id_departement'),
KEY 'id_region' ('id_region')
);

-- --------------------------------------------------------

--
-- Structure de la table 'ville
--

CREATE TABLE 'ville' (
'id_ville' char(2) NOT NULL default '',
'ville' varchar(50) NOT NULL default '',
'id_departement' tinyint(4) NOT NULL default '0',
PRIMARY KEY ('id_ville),
KEY 'id_departement' ('id_departement')
);



étant nul en php sql j'arrive toujours pas à trouver la solution pour intégré les villes dans ma base et accorder un lien html pour chaque ville. en fait ce que je veux c'est qu'après avoir choisi la ville quand on valide ça envoi vers une page via un lien html (www.monsite.fr/blablabla.html) qui existe déja.

merci de m'éclairer j'arrive nul part à trouver une solution pour ça.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 août 2013 à 08:25
est ce que tu as essayé de la créer directement avec phpMyadmin ?
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
27 août 2013 à 08:46
encore merci pour ta reponse rapide Alain,
j'ai essayé de retaper le code à la main mais je n'arrive pas, il y a normalement un probleme ici

CREATE TABLE 'ville' (
'id_ville' char(2) NOT NULL default '',
'ville' varchar(50) NOT NULL default '',
'id_departement' tinyint(4) NOT NULL default '0',
PRIMARY KEY ('id_ville),
KEY 'id_departement' ('id_departement')
);
mais comme je connais rien en sql j'arrive pas a le résoudre.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 août 2013 à 09:37
tu fais tes essais en local avec wamp ou chez un hebergeur.

dans phpmyadmin il ne faut pas taper les codes à la main mais utiliser les outils
créer table
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
27 août 2013 à 10:16
Très bien j'essayerai ça ce soir, par contre t'aurais pas une piste pour mon problème des villes qui pointent vers des liens html? J'ai pas trouvé de réponse nul part :(

Est ce que c'est possible de configurer ça directement dans une table et d'accorder un lien a chaque ville?
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 août 2013 à 19:11
tout dépend comment est fait ton lien
si lyon pointe vers lyon.html c'est simple, pas besoin de table

si plus compliqué il faut passer par une table
et lorsque tu reçoit les données du formulaire complet tu fait une interro base avec le nom de la ville pour avoir le lien
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
29 août 2013 à 23:53
merci pour la réponse, je viens de réussir de lier les 3 tables, en effet c'était beaucoup plus facile en passant par phpmyadmin. maintenant je rencontre un nouveau problème, quand je choisi une région j'ai tous les départements qui s'affichent dans la 2eme liste.
pour les liens, malheureusement ils n'ont pas de structure basée sur le nom de la ville, exemple : pour lyon --->lyon-blala.html
paris---->machin-paris.html

aurais-tu un petit exemple à me montrer pour que je puisse intégrer un lien à ma base.

merci beaucoup pour ton aide.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 août 2013 à 14:03
salut un petit oubli de condition dans les deux requettes depart et ville

$sql2 = "SELECT id_departement, departement FROM departement WHERE id_region='".$regione."' ORDER BY departement"; 


$sql3 = "SELECT id_ville, ville FROM ville WHERE id_departement='".$departement."'ORDER BY ville";



pour ta table liens_villes

id_lien id_ville ville lien
1 10 lyon machin-lyon.html

et tu fais une requette

$ville=isset($_POST['ville']) ? $_POST['ville'] : "";


$sql3 = "SELECT lien, ville FROM liens_villes WHERE id_ville='".$ville."'";
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
30 août 2013 à 22:44
salut alain, j'ai essayé ce que tu ma donné et j'ai effectué plusieurs tests mes mais toujours rien je pense que j'ai mal placé le code de la requette qui envoi vers le lien,

voici tout le code :


<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxx";
$admin = "xxxxxxx";
$mdp = "xxxxxxxxx";
$base = "xxxxxxxxxxx";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "mysql51-75.perso";
$admin = "changerezbdstech";
$mdp = "6X8pu98w";
$base = "changerezbdstech";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
//recupération des selections éventuelles sinon init à vide

$region=isset($_POST['region']) ? $_POST['region'] : "";
$departement=isset($_POST['departement']) ? $_POST['departement'] : "";
//
//connexion a mysql contarirement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die('Pb connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion) or die('Pb sélection base '.mysql_error());

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="submit();">
<option value="-1">- - - Choisissez une région - - -</option>

<?php
$sql1 = "SELECT id_region, region FROM region ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !


$rech_regions = mysql_query($sql1) or die('Pb requette régions '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_regions)){
//pas besoin de passer par des array
//generation de la ligne option
$option= '<option value="'.$ligne['id_region'].'" ';
if($region==$ligne['id_region']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['region'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_regions);
?>
</select>
<?php

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
?>
<select name="departement" id="departement" onchange="submit();">
<option value="-1">- - - Choisissez un département - - -</option>
<?php

$sql2 = "SELECT id_departement, departement FROM departement WHERE id_region='".$region."' ORDER BY departement";


$sql3 = "SELECT id_ville, ville FROM ville WHERE id_departement='".$departement."'ORDER BY ville";

$rech_departement = mysql_query($sql2) or die('Pb requette departement '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_departement)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_departement'].'" ';
if($departement==$ligne['id_departement']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['departement'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_departement);

?>
</select>
<?php
}
}
//liste villes
if(isset($_POST['departement'])){
if($_POST['departement']==-1){
echo 'Vous devez chosir un departement';
}else{
?>
<select name="ville" id="ville">
<option value="-1">- - - Choisissez une ville - - -</option>
<?php

$sql3 = "SELECT id_ville, ville FROM ville ORDER BY ville";

$rech_ville = mysql_query($sql3) or die('Pb requette ville '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_ville)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_ville'].'" ';
if($departement==$ligne['id_ville']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['ville'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_ville);

?>

<?php
$ville=isset($_POST['ville']) ? $_POST['ville'] : "";


$sql3 = "SELECT lien, ville FROM liens_villes WHERE id_ville='".$ville."'";

?>

</select>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />

<?php
}
}

?>

</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>

merci pour ton aide
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 août 2013 à 22:58
<?php
	////attention cette partie doit être au début de la page
if(isset($_POST['ok'])){
	//le bouton ok du formulaire a été cliqué
	$ville=isset($_POST['ville']) ? $_POST['ville'] : "";
	$sql3 = "SELECT lien, ville FROM liens_villes WHERE id_ville='".$ville."'";
	$rech_lien= mysql_query($sql3) or die('Pb requette lien '.mysql_error());
	$ligne=mysql_fetch_assoc($rech_lien);
	$lien=$ligne['lien'];
	//on redirige directement vers la page du lien
	header('Location:'.$lien.'');
}
///
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxx";
$admin = "xxxxxxx";
$mdp = "xxxxxxxxx";
$base = "xxxxxxxxxxx";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "mysql51-75.perso";
$admin = "changerezbdstech";
$mdp = "6X8pu98w";
$base = "changerezbdstech";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
//recupération des selections éventuelles sinon init à vide

$region=isset($_POST['region']) ? $_POST['region'] : "";
$departement=isset($_POST['departement']) ? $_POST['departement'] : "";

//
//connexion a mysql contarirement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die('Pb connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion) or die('Pb sélection base '.mysql_error());

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="submit();">
<option value="-1">- - - Choisissez une région - - -</option>

<?php
$sql1 = "SELECT id_region, region FROM region ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !


$rech_regions = mysql_query($sql1) or die('Pb requette régions '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_regions)){
//pas besoin de passer par des array
//generation de la ligne option
$option= '<option value="'.$ligne['id_region'].'" ';
if($region==$ligne['id_region']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['region'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_regions);
?>
</select>
<?php

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
?>
<select name="departement" id="departement" onchange="submit();">
<option value="-1">- - - Choisissez un département - - -</option>
<?php

$sql2 = "SELECT id_departement, departement FROM departement WHERE id_region='".$region."' ORDER BY departement";
$rech_departement = mysql_query($sql2) or die('Pb requette departement '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_departement)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_departement'].'" ';
if($departement==$ligne['id_departement']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['departement'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_departement);

?>
</select>
<?php
}
}
//liste villes
if(isset($_POST['departement'])){
if($_POST['departement']==-1){
echo 'Vous devez chosir un departement';
}else{
?>
<select name="ville" id="ville">
<option value="-1">- - - Choisissez une ville - - -</option>
<?php

$sql3 = "SELECT id_ville, ville FROM ville WHERE id_departement='".$departement."'ORDER BY ville";

$rech_ville = mysql_query($sql3) or die('Pb requette ville '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_ville)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_ville'].'" ';
if($departement==$ligne['id_ville']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['ville'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_ville);

?>

</select>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />

<?php
}
}

?>

</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html> 
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
1 sept. 2013 à 14:42
merci alain pour l'aide que tu m'as apporté, j'ai intégré ton dernier script à ma page mais au moment de la validation ça me donne un message d'erreur

Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /homez.158/xxxxxxx/www/index1234.php on line 7

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /homez.158/changerezb/www/index1234.php on line 7
Pb requette lien Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

j'ai crée la dernière table comme tu m'as montré (voici deux screens de la table liens_villes https://www.cjoint.com/?CIboKTeJjIj https://www.cjoint.com/?CIboOYxRSbb )

sais-tu d'où ça vient cette erreur?? merci d'avance
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par baladur13 le 2/09/2013 à 22:40
Houps j'ai oublié de déplacer la partie connexion à la BDD au début

<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxx";
$admin = "xxxxxxxxx";
$mdp = "xxxxxxx";
$base = "xxxxxxxx";
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die('Pb connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion) or die('Pb sélection base '.mysql_error());

 
if(isset($_POST['ok'])){
 //le bouton ok du formulaire a été cliqué
 $ville=isset($_POST['ville']) ? $_POST['ville'] : "";
 $sql3 = "SELECT lien, ville FROM liens_villes WHERE id_ville='".$ville."'";
 $rech_lien= mysql_query($sql3) or die('Pb requette lien '.mysql_error());
 $ligne=mysql_fetch_assoc($rech_lien);
 $lien=$ligne['lien'];
 //on redirige directement vers la page du lien
 header('Location:'.$lien.'');
}
///
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
//recupération des selections éventuelles sinon init à vide

$region=isset($_POST['region']) ? $_POST['region'] : "";
$departement=isset($_POST['departement']) ? $_POST['departement'] : "";

//
//connexion a mysql contarirement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="submit();">
<option value="-1">- - - Choisissez une région - - -</option>

<?php
$sql1 = "SELECT id_region, region FROM region ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !


$rech_regions = mysql_query($sql1) or die('Pb requette régions '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_regions)){
//pas besoin de passer par des array
//generation de la ligne option
$option= '<option value="'.$ligne['id_region'].'" ';
if($region==$ligne['id_region']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['region'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_regions);
?>
</select>
<?php

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
?>
<select name="departement" id="departement" onchange="submit();">
<option value="-1">- - - Choisissez un département - - -</option>
<?php

$sql2 = "SELECT id_departement, departement FROM departement WHERE id_region='".$region."' ORDER BY departement";
$rech_departement = mysql_query($sql2) or die('Pb requette departement '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_departement)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_departement'].'" ';
if($departement==$ligne['id_departement']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['departement'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_departement);

?>
</select>
<?php
}
}
//liste villes
if(isset($_POST['departement'])){
if($_POST['departement']==-1){
echo 'Vous devez chosir un departement';
}else{
?>
<select name="ville" id="ville">
<option value="-1">- - - Choisissez une ville - - -</option>
<?php

$sql3 = "SELECT id_ville, ville FROM ville WHERE id_departement='".$departement."'ORDER BY ville";

$rech_ville = mysql_query($sql3) or die('Pb requette ville '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_ville)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_ville'].'" ';
if($departement==$ligne['id_ville']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['ville'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_ville);

?>

</select>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />

<?php
}
}

?>

</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html> 
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
2 sept. 2013 à 22:32
super un grand merci pour ton aide Alain, ça marche ! enfin on arrive encore à trouver des gens sympas ! Mille fois Merci
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
15 sept. 2013 à 23:34
Salut Alain,

Je reviens vers toi pour une autre question,
Tout d'abord je tiens à te remercier pour ce script qui m'a vraiment beaucoup aidé à avancer dans mon projet.
J'ai essayé d'appliquer le script sur une autre page de mon site pour classer des produits avec trois listes déroulantes. Le problème est que sur certain produit je n'ai pas besoin d'utiliser trois listes déroulantes mais que deux afin de valider la recherche.
Penses-tu que cela est faisable en rajoutant une condition if??
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 sept. 2013 à 09:57
l'appel à la liste suivante se fait pas le onsubmit() dans la balise <select

tu peux par exemple rajouter une colonne dans ta BDD si par exemple elle vaut 2

tu testes et tu fais une balise select sans le onsubmit()
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
16 sept. 2013 à 22:53
salut alain,

Merci de m'avoir répondu,
J'ai effectué des tests en reprenant notre ancien exemple avec la BDD region

j'ai rajouté cela :

<select name="test" id="test">
<option value="2">- - - TEST - - -</option>
<?php

$sql2 = "SELECT id_test, departement FROM test WHERE id_region='".$region."' ORDER BY test";
$rech_test = mysql_query($sql2) or die('Pb requette '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_test)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_test'].'" ';
if($departement==$ligne['id_test']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['test'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_test);

?>
</select>
<?php
}
}
//liste villes
if(isset($_POST['test'])){
if($_POST['test']==2){
echo 'Vous devez chosir un departement';
}else{
?>

et j'ai crée une nouvelle table "test" avec :

id_test test id_region
1 1 1
Je ne sais pas ou je mettrais les liens qui seront validés après la sélection de "test"?

J'ai ajouté la liste "test" et gardé les deux autres listes "departement" et "ville" pour

Pourrais-tu m'aider à trouver l'erreur. Je te remercie d'avance.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 sept. 2013 à 18:38
Salut, une solution en rajoutant un champ categorie dans la table region qui vaudra 2 ou 3 suivant si besoin de 2 ou 3 listes
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxx";
$admin = "xxxxxxxxx";
$mdp = "xxxxxxx";
$base = "xxxxxxxx";
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die('Pb connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion) or die('Pb sélection base '.mysql_error());


if(isset($_POST['ok'])){
//le bouton ok du formulaire a été cliqué
$ville=isset($_POST['ville']) ? $_POST['ville'] : "";
$sql3 = "SELECT lien, ville FROM liens_villes WHERE id_ville='".$ville."'";
$rech_lien= mysql_query($sql3) or die('Pb requette lien '.mysql_error());
$ligne=mysql_fetch_assoc($rech_lien);
$lien=$ligne['lien'];
//on redirige directement vers la page du lien
header('Location:'.$lien.'');
}
///
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
$recherche_2_listes=false;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
//recupération des selections éventuelles sinon init à vide

$region=isset($_POST['region']) ? $_POST['region'] : "";
$departement=isset($_POST['departement']) ? $_POST['departement'] : "";

//
//connexion a mysql contarirement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="submit();">
<option value="-1">- - - Choisissez une région - - -</option>

<?php

$sql1 = "SELECT id_region, region FROM region ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !

$rech_regions = mysql_query($sql1) or die('Pb requette régions '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_regions)){
//pas besoin de passer par des array
//generation de la ligne option
$option= '<option value="'.$ligne['id_region'].'" ';
if($region==$ligne['id_region']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['region'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_regions);
?>
</select>

<?php

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
$region=mysql_real_escape_string($_POST['region']);
//ci dessous j'ai rajouté une recherche de la categorie de la région chosie, il faut que tu rajoutes ce champ dans ta table regions et mettre a 2 celles ou tu as seulement besoin de 2 listes, tu mets les autres a 3
$sql2 = "SELECT id_region, categorie FROM region WHERE region='".."' ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !
$rech_regions2 = mysql_query($sql2) or die('Pb requette régions '.mysql_error());
$ligne2 = mysql_fetch_assoc($rech_regions2);
if($ligne2['categorie']==2){
$recherche_2_listes=true;
}

if($recherche_2_listes){
//si recherche sur 2 list eon fait une balise select sans onchnage=submit() donc au choix dans cette liste ça ne rpellerera pas la page pour la recherche ville
echo '<select name="departement" id="departement">';
}else{
//si 3 listes on laisse le onchenge=submit()
echo '<select name="departement" id="departement" onchange="submit();">';
}
?>
<option value="-1">- - - Choisissez un département - - -</option>
<?php

$sql2 = "SELECT id_departement, departement FROM departement WHERE id_region='".$region."' ORDER BY departement";
$rech_departement = mysql_query($sql2) or die('Pb requette departement '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_departement)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_departement'].'" ';
if($departement==$ligne['id_departement']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['departement'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_departement);

?>
</select>
<?php
//il faut ausssi mettre le bouton si deux listes
if($recherche_2_listes){
echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />';
}
}
}
//liste villes
if(isset($_POST['departement'])){
if($_POST['departement']==-1){
echo 'Vous devez chosir un departement';
}else{
?>
<select name="ville" id="ville">
<option value="-1">- - - Choisissez une ville - - -</option>
<?php

$sql3 = "SELECT id_ville, ville FROM ville WHERE id_departement='".$departement."'ORDER BY ville";

$rech_ville = mysql_query($sql3) or die('Pb requette ville '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_ville)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_ville'].'" ';
if($departement==$ligne['id_ville']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['ville'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_ville);

?>

</select>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />

<?php
}
}

?>

</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
17 sept. 2013 à 21:41
salut,

merci beaucoup d'avoir pris le temps à trouver une solution à mon problème,

j'ai rajouté un 3éme champ que j'ai nommé categorie dans ma table region

j'ai mis la valeur 2 sur mes deux premiers choix dans la liste region

et j'ai modifié

$sql2 = "SELECT id_region, categorie FROM region WHERE region='".$categorie."' ORDER BY region";



mais ça ne marche toujours pas, ça m'affiche toujours la troisième liste quand je slectionne la deuxième.

pour les liens j'ai rajouté id_depatement et departement a la table liens_villes

id_lien---id_ville---ville----id_depatement----departement----------------------lien
1----------vide-----vide----------1---------------departement_test-------------- www.test.fr

tu pense que je devrais rajouter un champs categorie à la table liens_villes???
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 sept. 2013 à 23:08
ta requette n'est pas bonne il ne faut pas mettre whre region=$ categorie

$region=mysql_real_escape_string($_POST['region']);
$sql2 = "SELECT id_region, categorie FROM region WHERE region='".$region."'";
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
17 sept. 2013 à 23:43
J'avais essayé avec cette requette ça me fait toujours la meme chose quand je selectionne un choix de la deuxieme liste de la categorie 2 la troisieme liste s'affiche :(

$sql2 = "SELECT id_region, categorie FROM region WHERE region='".$region."'";
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 sept. 2013 à 17:58
je n'ai pas fait attention, c'est id_region et pas region pour la condition WHERE

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
$id_region=mysql_real_escape_string($_POST['region']);
$sql2 = "SELECT id_region, categorie FROM region WHERE id_region='".$id_region."'";
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
19 sept. 2013 à 19:50
merci alain, désolé de te déranger encore une fois,

ça me fait toujours la même chose,

tu pense que le problème ne viendrait pas de ma table liens_villes??

id_lien---id_ville---ville----id_depatement----departement----------------------lien
1----------vide-----vide----------1---------------departement_test-------------- www.test.fr
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 sept. 2013 à 22:58
j'ai fait qqs modifs:
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin = "root";
$mdp = "";
$base = "mad92men";
$connexion = mysql_connect($serveur, $admin, $mdp) or die('Pb connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion) or die('Pb sélection base '.mysql_error());

if(isset($_POST['ok'])){
//le bouton ok du formulaire a été cliqué

$nb_listes=$_POST['nb_listes']; //on récupere le nb de listes de recherche de lien
if($nb_listes ==3){
$id_ville=$_POST['ville'];
$sql3 = "SELECT lien, ville FROM liens_villes WHERE id_ville='".$id_ville."'";

}elseif($nb_listes ==2){
$id_departement=$_POST['departement'];
$sql3 = "SELECT lien, departement FROM liens_villes WHERE id_departement='".$id_departement."'";
}
$rech_lien= mysql_query($sql3) or die('Pb requette lien '.mysql_error());
$ligne=mysql_fetch_assoc($rech_lien);
$lien=$ligne['lien'];
//on redirige directement vers la page du lien
header('Location:'.$lien.'');
}
///
//echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"


/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
$recherche_2_listes=false;
//recupération des selections éventuelles sinon init à vide

$region=isset($_POST['region']) ? $_POST['region'] : "";
$departement=isset($_POST['departement']) ? $_POST['departement'] : "";

//
//connexion a mysql contairement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="submit();">
<option value="-1">- - - Choisissez une région - - -</option>

<?php

$sql1 = "SELECT id_region, region FROM region ORDER BY region"; //par orde alpa des noms c'est qd mêm mieux !

$rech_regions = mysql_query($sql1) or die('Pb requette régions '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_regions)){
//generation de la ligne option
$option= '<option value="'.$ligne['id_region'].'" ';
if($region==$ligne['id_region']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['region'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_regions);
?>
</select>
<br /><br />
<?php

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
$id_region=mysql_real_escape_string($_POST['region']);
//ci dessous j'ai rajouté une recherche de la categorie de la région chosie, il faut que tu rajoutes ce champ dans ta table regions et mettre a 2 celles ou tu as seulement besoin de 2 listes, tu mets les autres a 3
$sql2 = "SELECT id_region, categorie FROM region WHERE id_region='".$id_region."'"; //par orde alpa des noms c'est qd mêm mieux !
$rech_regions2 = mysql_query($sql2) or die('Pb requette régions '.mysql_error());
$ligne2 = mysql_fetch_assoc($rech_regions2);
//echo 'catégorie region: '.$ligne2['categorie'];
if($ligne2['categorie']==2){
$recherche_2_listes=true;
}

if($recherche_2_listes){
//si recherche sur 2 listes on fait une balise select sans onchnage=submit() donc au choix dans cette liste ça ne rpellerera pas la page pour la recherche ville
echo '<select name="departement" id="departement">';
}else{
//si 3 listes on laisse le onchenge=submit()
echo '<select name="departement" id="departement" onchange="submit();">';
}
?>

<option value="-1">- - - Choisissez un département - - -</option>
<?php

$sql2 = "SELECT id_departement, departement FROM departement WHERE id_region='".$region."' ORDER BY departement";
$rech_departement = mysql_query($sql2) or die('Pb requette departement '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_departement)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_departement'].'" ';
if($departement==$ligne['id_departement']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['departement'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_departement);

?>
</select>
<br /><br />
<?php
//il faut ausssi mettre le bouton si deux listes apres le choix du departement
if($recherche_2_listes ){
echo '<input type="hidden" name="nb_listes" value="2" />'; //champ caché pour savoir sur combien de liste on cherche
echo '<br /><input type="submit" name="ok" id="ok1" value="Envoyer" />';
}
}
}


//liste villes
if(!$recherche_2_listes){
if(isset($_POST['departement'])){
if($_POST['departement']==-1){
echo 'Vous devez chosir un departement';
}else{
?>
<select name="ville" id="ville">
<option value="-1">- - - Choisissez une ville - - -</option>
<?php

$sql3 = "SELECT id_ville, ville FROM ville WHERE id_departement='".$departement."'ORDER BY ville";

$rech_ville = mysql_query($sql3) or die('Pb requette ville '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_ville)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_ville'].'" ';
if($departement==$ligne['id_ville']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['ville'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_ville);

?>

</select>

<!-- champ caché pour donner sur quel id on rech le lie (depart ou ville) -->
<input type="hidden" name="nb_listes" value="3" />
<br /><br />
<input type="submit" name="ok" id="ok2" value="Envoyer" />

<?php
}
}
}

?>

</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
19 sept. 2013 à 23:06
merci pour le retour, j'allais te répondre j'ai trouvé le problème en fait fallait modifier
WHERE id_region='".$id_region."'"; par WHERE id_region='".$region."'";

ce qui donne :

//liste departements
if(isset($_POST['region'])){
if($_POST['region']==-1){
echo 'Vous devez chosir une région';
}else{
$id_region=mysql_real_escape_string($_POST['region']);
$sql2 = "SELECT id_region, categorie FROM region WHERE id_region='".$id_region."'";
Je teste ta nouvel modif de suite et je te tiens au courant. encore merci
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
19 sept. 2013 à 23:19
Énorme ta dernière modification fonctionne à merveille Alain, je ne sais pas comment te remercier, j'espère que je pourrais te rendre service un jour. mille fois merci !
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
3 sept. 2015 à 22:10
Salut Alain,

Je voudrais éviter le rechargement de la page à chaque requête SQL. Je sais que ça existe une solution en javascript ou AJAX mais je sais pas par ou je dois commencer.

Merci d'avance ;)
0
vince240986 Messages postés 6 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 11 avril 2014
29 mars 2014 à 13:36
Bonjour,

J'essaye de réaliser quelque chose de similaire à ce que tu as fait avec les listes déroulantes.

Le problème c'est que je ne parviens pas à réaliser la table liens_ville (tu as mis quels champs exactement). Tu as bien 4 tables (région, département, ville, liens_ville) ?

D'autre part, j'ai remarqué que si tu changeais de région la liste des villes ne se modifiait pas. As-tu constater ce problème? Te sers tu de ce script sur un site en production?

Merci de bien vouloir me donner un coup de main car ça fait 2 jours que j'ai écumé tous les forums et ta solution est la plus proche de ce que je souhaite réaliser.

Vincent
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4
29 mars 2014 à 19:42
Bonjour,

Oui j'utilise le script qu'Alain m'a vraiment beaucoup aidé à le mettre en place et j'en profite encore une fois pour le remercier.

En fait je l'ai finalement adapté pour n'utiliser que 2 listes déroulantes. Dans ma BDD j'utilise 3 tables (région, département et liens_departement)

voici les tables que j'ai :

région : avec 2 colonnes "id_région" et "région"
département : avec 3 colonnes "id_département" "département" et "id_région"
liens_département : avec 4 colonnes "id_lien" "id_département" "département" et "lien"


voici le script php

<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "xxxxxxxxx";
$admin = "xxxxxxxxx";
$mdp = "xxxxxxxxxx";
$base = "xxxxxxxxxxx";
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die('Probèlme connexion au serveur '.mysql_error());
$choixbase = mysql_select_db($base, $connexion) or die('Probèlme sélection base '.mysql_error());


if(isset($_POST['ok'])){
//le bouton ok du formulaire a été cliqué
$département=isset($_POST['département']) ? $_POST['département'] : "";
$sql3 = "SELECT lien, département FROM liens_départements WHERE id_département='".$département."'";
$rech_lien= mysql_query($sql3) or die('Pb requette lien '.mysql_error());
$ligne=mysql_fetch_assoc($rech_lien);
$lien=$ligne['lien'];
//on redirige directement vers la page du lien
header('Location:'.$lien.'');
}
///
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['région'])?$_POST['région']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['région'])?$_POST['région']:null;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
//recupération des selections éventuelles sinon init à vide

$région=isset($_POST['région']) ? $_POST['région'] : "";
$département=isset($_POST['département']) ? $_POST['département'] : "";

//
//connexion a mysql contarirement à ce qui était dit mysql suffit pendant tout le scipt
//par contre c'est dépassé il faut utiliser PDO::
//pour le moment une solution avec mysql

?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399"><legend>Sélectionnez une région</legend>
<p>
<select name="région" id="région" onchange="submit();">
<option value="-1">- - - Choisissez une région - - -</option>

<?php
$sql1 = "SELECT id_région, région FROM région ORDER BY région"; //par orde alpa des noms c'est qd mêm mieux !


$rech_régions = mysql_query($sql1) or die('Pb requette régions '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_régions)){
//pas besoin de passer par des array
//generation de la ligne option
$option= '<option value="'.$ligne['id_région'].'" ';
if($région==$ligne['id_région']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['région'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_régions);
?>
</select>
<?php

//liste départements
if(isset($_POST['région'])){
if($_POST['région']==-1){
echo 'Vous devez chosir une région';
}else{
?>
<select name="département" id="département" onchange="submit();">
<option value="-1">- - - Choisissez un département - - -</option>
<?php

$sql2 = "SELECT id_département, département FROM département WHERE id_région='".$région."' ORDER BY département";
$rech_département = mysql_query($sql2) or die('Pb requette département '.mysql_error());
while($ligne = mysql_fetch_assoc($rech_département)){

//generation de la ligne option
$option= '<option value="'.$ligne['id_département'].'" ';
if($département==$ligne['id_département']){$option.= ' selected="selected"';} //ça c'est pour conserver la sélection au réafficage suivant
$option.=' >'.$ligne['département'].'</option>';
//affichage de la ligne option
echo $option;
}
mysql_free_result($rech_département);

?>
</select>
<?php
}
}

if(isset($_POST['département'])){
if($_POST['département']==-1){
echo 'Vous devez chosir un département';
}else{
?>
</p>
<p><br />
<input type="submit" name="ok" id="ok" value="Envoyer" />
</p>

<?php
}
}

?>

</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
mysql_close($connexion);
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>
0
vince240986 Messages postés 6 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 11 avril 2014
29 mars 2014 à 20:17
Merci beaucoup pour ta réponse tout fonctionne. Par contre c'est ce que je disais précédemment, il y a au départ une seule liste "Région". Ensuite la seconde apparait puis celle de la ville. Lorsque l'on a accès à la ville, le fait de changer de Région laisse les villes précédentes présentes. Je sais pas si je suis clair.

Par exemple j'ai Auvergne -> Puy-De-Dôme->Clermont-Ferrand. Si je passe sur Aquitaine, les départements sont bien automatiquement modifiés pour m'afficher ceux qui sont liés à Aquitaine, mais si je ne sélectionne pas de département, j'ai accès aux villes de la région Auvergne.

Et oui merci également à Alain qui t'as aidé et qui m'a aidé aussi du coup :)

Vincent
0
mad92men Messages postés 130 Date d'inscription dimanche 28 octobre 2012 Statut Membre Dernière intervention 10 novembre 2020 4 > vince240986 Messages postés 6 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 11 avril 2014
31 mars 2014 à 10:03
Salut,

Essaie le dernier script qu'Alain avait posté, enleve la partie catégorie normalement ça va marcher.

Cordialement.
0
vince240986 Messages postés 6 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 11 avril 2014
Modifié par vince240986 le 9/04/2014 à 09:49
Ok merci pour ta réponse. Par contre est-ce que tu as des compétences avec les iframes? En effet, dans un fichier index.html, je souhaite mettre cette liste déroulante sur la partie left du document de cette manière:

<h2>Test</h2>
<iframe name="filtre_demo" src="http://localhost:8888/filtre/index.php" scrolling="no" height="220" width="220" frameborder="no"></iframe>

Ca fonctionne, le soucis c'est que le résultat du submit reste dans ce cadre de 220x220. Or je voudrais qu'il redirige complètement vers l'URL sélectionnée.

Merci encore si tu peux m'aider.
0
vince240986 Messages postés 6 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 11 avril 2014
11 avril 2014 à 08:34
Si jamais ça peut être utile à quelqu'un voici une solution qui fonctionne:
On remplace cette ligne:
//on redirige directement vers la page du lien 
header('Location:'.$lien.'');
par:
	echo "<script>";
echo "window.top.location.href='$lien'";
echo "</script>";
0