Bonjour,
Le contexte :
J'ai créé une table campings dans ma bdd mysql par département.  Ce que j'aimerais c'est à travers une liste deroulante sélectionner le département et que cela m'affiche les campings liés à ce département
Pourriez-vous me filer un coup de pouce ?  Merci par avance.

Voila je rencontre un petit problème avec mon code

Ce que je fais

Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

32 réponses


Bonsoir.
Tu pourrais nous donner plus de précisions.
Comme par exemple, si tu veux que lorsque l'utilisateurs sélectionne un département dans la liste de choix (un select donc), qu'une seconde liste de choix s'affiche avec les données correspondantes à ce département, de la table campings.
Si par exemple c'est ce cas là que tu veux, tu peux regarder Tutoriel Vidéo jQuery » Lier plusieurs select.

Tout d'abord merci pour ton retour.
Effectivement,  la vidéo correspond parfaitement pour le système de liste deroulante que je recherche et je t'en remercie .  Néanmoins, une fois que l'utilisateur a sélectionné le département qu'il souhaite , j'aimerais
Qu'il puisse valider sa sélection via un bouton (Jusqu'à là ça va) mais surtout que cela lui affiche sur une page les campings correspondants au département sélectionné, sachant qu'ils sont enregistrés dans une bdd (table: campings).  Comment peut-on faire s'il te plaît ?  

Re,  petite précision supplémentaire :
J'ai créé une page de type main.function.php (fonction principale qui se charge de se connecter à la bdd en PDO). Donc pour reprendre mes propos de mon message précédent,  j'imagine qu'il faut créer une fonction puis sélectionner et appeler la bdd afin d'afficher les campings et c'est la que je bloque ?  Merci par avance.

Salut,

comment ça ?

tu récupères le departement selectionné via $_POST,
ensuite tu fais une requete SQL du genre :
SELECT camping FROM ta_table WHERE departement = $departement

Où est-ce que tu coinces ?

Je crois que tu as mal compris.
Le second select qui s'affichera listera les campings liés au département sélectionné dans le premier select, donc si tu veux une page qui liste les campings liés au département, tu n'as pas besoin d'un second select.
Tu as deux possibilité, soit faire avec deux select et une fois que l'utilisateur aura sélectionné un camping dans le second select le rediriger par exemple sur la page correspondante au camping ou alors ne faire qu'un select et une fois que l'utilisateur aura sélectionné un département, le rediriger vers une page qui listera les campings correspondants au département sélectionné.

Re bonjour,
Non, le deuxième select me sert uniquement à selectionner le departement afin d'afficher ensuite sur une page type camping.php (exemple) les différents campings du département selectionné .

J'ai tellement de mal à suivre,

si on prend la 2ème partie de la réponse de Lartak :

ou alors ne faire qu'un select et une fois que l'utilisateur aura sélectionné un département, le rediriger vers une page qui listera les campings >correspondants au département sélectionné.

avec un BOUT de la tienne :

[...] me sert uniquement à selectionner le departement afin d'afficher ensuite sur une page type camping.php (exemple) >les différents campings du département selectionné .

On se dit que c'est bon, vous parlez de la même chose,
MAIS,
tu as rajouté "Non, le deuxième select [...]" avant.
Ça m'embrouille,
qu'est-ce qui empêche la solution de Lartak de fonctionner ?
Pourquoi tu parles d'un 2ème select ?
Que fait ton 1er select ?

(j'ai posé 3 questions différentes qui regrouppent grosso modo la même chose en fait)

Bonjour,  navré pour mes explications un peu tordus. Pour résumer j'ai deux select donc 2 listes de deroulantes.  La première me permet de sélection une région puis la seconde le département.  C'est à ce moment là où lorsque je vais choisir le département puis cliquez sur sur mon bouton valider qu'il m'emmera sur dit par exemple camping.php qu'il m'affichera l'ensemble des campings du département sélectionné. Si tu préfères c'est comme un moteur de recherche.

Ah bon mais heu...

ben alors quand Lartak te dit ça :

ou alors ne faire qu'un select et une fois que l'utilisateur aura sélectionné un département, le rediriger vers une page qui listera les campings >correspondants au département sélectionné

Tu ne peux pas répondre "non",
ce n'est pas possible, c'est bien ce que tu veux faire en fait, donc tu ne peux pas répondre "non".
Je me trompe ?
(alors bien sûr il a dit UN select, mais on ne savait pas qu'il y avait aussi la région, mais ça n'a pas d'importance, il y aurait pu y avoir 17 select avant aussi ça ne changeait rien à la proposition de Lartak)

On tourne tellement en rond xD

Bon alors...
Tu as un select pour la région, ET un select pour le département,
On soumet le formulaire,
ce qui nous redirige vers une page.php qui :

  • récupère la région, et le département sélectionnés (via $_POST)
  • affiche les campings correspondants

Ça, c'est la "situation",
et dans cette situation, qu'est-ce qui te pose problème ?
C'est à dire, qu'est-ce que tu n'arrives pas à faire ? (montre nous le code que tu as fais et qui ne fonctionne pas)

T'inquiètes pas hein, on va y arriver ^^

Je vous prie de m'excuser.  Je vous envoi cela dans la journée (boulot oblige) comme ça ce sera plus visible pour vous. Merci en tout cas

Re,
Pour tout vous dire j'ai opté pour la solution la plus adéquate proposé par GRAFIKART https://www.grafikart.fr/tutoriels/jquery/lier-select-313
Donc si vous avez deux minutes pour le consulter , j'aimerais une fois la selection de la region et du département afficher mes campings qui correspondent aux départements à la place des villes que propose grafikart. voici les codes et les pages suivantes :

main function qui se connecte à la bdd:

<?php

class DB{

private $host = 'localhost';
private $username = 'root';
private $password = 'root';
private $database = 'rueducamping';
private $db;

public function __construct($host = null, $username = null, $password = null, $database = null){
    if($host != null){
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
    }

    try{
        $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
            ));
    }catch(PDOException $e){
        die('<h1>Impossible de se connecter a la base de donnee</h1>');
    }

}

public function query($sql, $data = array()){
    $req =$this->db->prepare($sql);
    $req->execute($data);
    return $req->fetchAll(PDO::FETCH_OBJ);
}

}

pages index.php :

<body>
<?php
require "db.class.php";
$DB = new DB();
$regions = $DB->query('SELECT FROM regions');
$departements = $DB->query('SELECT
FROM departements');
$departementByRegion = array();
foreach( $departements as $departement) {
$departementByRegion[$departement->region_id][$departement->id] = $departement->name;
}
$region_id = 0;
if(isset($_POST['region_id'])){
$region_id = $_POST['region_id'];
}
?>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="#">
Select
</a>
</div>
</div>
</div>

    <form method="post" action="#">

    <div class="container" style="margin-top:60px">

        <div class="row">
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="region" name="region_id" size="25" data-target="departement" data-url="departement.php" class="ajaxList">
                            <?php foreach ( $regions as $region ): ?>
                                <option value="<?= $region->id; ?>"<?= $region_id == $region->id ? ' selected' : ''; ?>>
                                    <?= $region->name; ?>
                                </option>
                            <?php endforeach ?>
                        </select>
                    </div>
                </div>
            </div>
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="departement" name="region_id" size="25" class="ajaxList" data-url="city.php" data-target="city">
                            <option value="0">Vous devez sélectionner une région</option>
                        </select>
                    </div>
                </div>
            </div>
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre ville</label>
                    <div class="controls">
                        <select id="city" name="city_id" size="25">
                            <option value="0">Vous devez sélectionner un département</option>
                        </select>
                    </div>
                </div>
            </div>
        </div>

       <input type="submit" value="Envoyer">

       <?= var_dump($_POST); ?>

</div>

</form>

page departement.php :

<?php
require 'main-function.php';
if(isset($_GET['id'])){
$db = new DB();
$departements = $db->query('SELECT * FROM departements WHERE region_id=:region',array('region' => $_GET['id']));
if(empty($departements)){
$return = array('error' => "Il n'existe pas de départements pour la région sélectionné");
}else{
$return = array(
'error' => false,
'results' => $departements
);
}

}else{
$return = array('error' => "Vous n'avez pas sélectionné de région");
}

die(json_encode($return));

page city.php :

<?php
$return = array(
'error' => false,
'results' => array(
array(
'id' => 1,
'name' => 'Montpeliier'
),
array(
'id' => 2,
'name' => 'Toulon'
)
)
);
die(json_encode($return));

en faite j'aimerais remplacer les infos de cette page en les remplacent poiur afficher les campings lié au département sélectionné. voici un exemple de ma bdd qui en test évidemment :

--
-- Structure de la table campings

CREATE TABLE campings (
id int(11) NOT NULL,
departement_id int(11) NOT NULL,
departement varchar(100) NOT NULL,
image varchar(255) NOT NULL,
title varchar(100) NOT NULL,
mail varchar(255) NOT NULL,
ouverture varchar(100) NOT NULL,
map text NOT NULL,
town varchar(100) NOT NULL,
phone varchar(15) NOT NULL,
site varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Contenu de la table campings

INSERT INTO campings (id, departement_id, departement, image, title, mail, ouverture, map, town, phone, site) VALUES
(1, 2, 'Aisne', '', 'camping tueur', 'grosse@grosse.fr', 'du 15 AU 15', '', 'ALLIER', '0344545454', 'CAMPIX.FR'),
(2, 1, 'Ain', '', 'htyruee', 'dvsojvis@fhdzfhz.fr', 'du 15 15', '', 'HTRYL', '0344435454', 'campix.fr'),
(3, 3, 'Allier', '', 'hdziofhoizahfeozia', '', 'fdjz', 'fljizj', 'fdfdhfzhfzo', '034434543', 'campix.fr'),
(4, 2, 'Aisne', '', 'fraccamping', 'hty@htyr.Fr', 'du15 au 15', '', 'soissons', '0344545454', 'campix.fr'),
(5, 2, 'Aisne', '', 'campingcamping', 'ff@ff.fr', 'DU 30 au 15', '', 'Laon', '0344546565', 'campix.fr'),
(6, 3, 'Allier', '', 'salerscamping', 'dd@dd.fr', 'DU AU 22', '', 'TARN', '0344345454', 'campix.fr'),
(7, 1, 'Ain', '', 'campingbresse', 'cc@cc.fr', 'DU 20 au 20', '', 'Bourg en Bresse', '0434454545', 'campix.fr');

j'espère que ça vous paraît clair. Cependant le mieux c'est de voir la video https://www.grafikart.fr/tutoriels/jquery/lier-select-313.

CORRECTIF /

Tu as raison c'est LARKA qui a raison :
"Le second select qui s'affichera listera les campings liés au département sélectionné dans le premier select, donc si tu veux une page qui liste les campings liés au département, tu n'as pas besoin d'un second select.
Tu as deux possibilité, soit faire avec deux select et une fois que l'utilisateur aura sélectionné un camping dans le second select le rediriger par exemple sur la page correspondante au camping ou [alors ne faire qu'un select et une fois que l'utilisateur aura sélectionné un département, le rediriger vers une page qui listera les campings correspondants au département sélectionné."]
c'est là que je bloque...

bref tu as 3 selects :) :

  • région
  • département
  • camping

et le submit ou le change du 3eme (camping) doit t'envoyer sur la page du dit camping....
c ça ?

si oui, ça bloque à quel niveau ?

le degré d'avancement qui affichera les select ?

ou

la requete pour afficher tes campings ?

ou

la validation pour parvenir à ta page camping ?

Bonjour et merci de vous intéresser à mon cas désespéré . En faite je n'ai que deux selects : Un select pour les régions et un second select pour les départements. Ce que j'aimerais, c'est qu'une fois qu'il a sélectionné le departement du second select, qu'il puisse me rediriger vers une autre page qui affichera mes campings lié bien évidemment au département sélection. Et donc je bloque complètement.
Je vais te donner l'integralité du code avec la table qui est en phase test.
Pour tout te dire j'ai acheter la source d'un tuto sur grafikart pour répondre à mes attentes : Tutoriel Vidéo jQuery » Lier plusieurs select.
Sauf qu'il me manque comme je te l'ai indiqué ci dessus (me rediriger vers une autre page qui affichera mes campings lié bien évidemment au département sélection). voici tous les codes :

1) config.php (connexion à la base de données) :

<?php
class DB{

private $host = 'localhost';
private $username = 'root';
private $password = 'root';
private $database = 'rueducamping';
private $db;

public function __construct($host = null, $username = null, $password = null, $database = null){
    if($host != null){
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
    }

    try{
        $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
            ));
    }catch(PDOException $e){
        die('<h1>Impossible de se connecter a la base de donnee</h1>');
    }

}

public function query($sql, $data = array()){
    $req =$this->db->prepare($sql);
    $req->execute($data);
    return $req->fetchAll(PDO::FETCH_OBJ);
}

}

2) index.php :

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php
require "config.php";
$DB = new DB();
$regions = $DB->query('SELECT FROM regions');
$departements = $DB->query('SELECT
FROM departements');
$departementByRegion = array();
foreach( $departements as $departement) {
$departementByRegion[$departement->region_id][$departement->id] = $departement->name;
}
$region_id = 0;
if(isset($_POST['region_id'])){
$region_id = $_POST['region_id'];
}
?>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="#">
Select
</a>
</div>
</div>
</div>

    <form method="post" action="#">

    <div class="container" style="margin-top:60px">

        <div class="row">
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="region" name="region_id" size="25" data-target="departement" data-url="departement.php" class="ajaxList">
                            <?php foreach ( $regions as $region ): ?>
                                <option value="<?= $region->id; ?>"<?= $region_id == $region->id ? ' selected' : ''; ?>>
                                    <?= $region->name; ?>
                                </option>
                            <?php endforeach ?>
                        </select>
                    </div>
                </div>
            </div>
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="departement" name="region_id" size="25" class="ajaxList" data-url="city.php" data-target="city">
                            <option value="0">Vous devez sélectionner une région</option>
                        </select>
                    </div>
                </div>
            </div>
         -- Début 3 ème select  // je n'en ai pas besoin--
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre ville</label>
                    <div class="controls">
                        <select id="city" name="city_id" size="25">
                            <option value="0">Vous devez sélectionner un département</option>
                        </select>
                    </div>
                </div>
            </div>
        </div>

       <input type="submit" value="Envoyer">

       <?= var_dump($_POST); ?>

</div>

</form>

</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="js/app.js"></script>

</html>

3) departement.php :

<?php
require 'config.php';
if(isset($_GET['id'])){
$db = new DB();
$departements = $db->query('SELECT * FROM departements WHERE region_id=:region',array('region' => $_GET['id']));
if(empty($departements)){
$return = array('error' => "Il n'existe pas de départements pour la région sélectionné");
}else{
$return = array(
'error' => false,
'results' => $departements
);
}

}else{
$return = array('error' => "Vous n'avez pas sélectionné de région");
}

die(json_encode($return));

4) app.js : (fichier ajax)

(function($){

/*
var departements = {};

$('.step2').hide();

$('.step2 select').each(function(){
    var select = $(this);
    departements[select.attr('id')] = select;
    select.remove();
})

$('#region').change(function(event){
    var region_id = $(this).val();

    if(region_id == 0){
        $('.step2').hide();
    }else{
        $('.step2').show();
        $('#departement').empty().append(departements['region-'+region_id]);
    }
}).trigger('change');

*/

$('.ajaxList').change(function(event){
    var select = $(this);
    var id = '#'+select.data('target');
    $.get(select.data('url'), {id:select.val()}, function(data){
        if(data.error){
            alert(data.error);
        }else{
            $(id).parents('.control-group').show();
            var target = $(id).get(0);
            target.options.length = 0;
            for(var i in data.results){
                var result = data.results[i];
                target.options[i] = new Option(result.name, result.id, false, false);
            }
        }
    },'json');
}).each(function(){
    var select = $(this);
    var target = $('#'+select.data('target'));
    target.parents('.control-group').hide();
});

})(jQuery);

Maintenant voici les 3 bases de données :

CREATE TABLE IF NOT EXISTS departements (
id int(11) NOT NULL AUTO_INCREMENT,
region_id int(11) NOT NULL DEFAULT '0',
name varchar(255) NOT NULL DEFAULT '',
numero varchar(5) NOT NULL DEFAULT '',
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=latin1;

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

CREATE TABLE IF NOT EXISTS regions (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=latin1;

-- Dumping data for table tuto.regions: 23 rows
/!40000 ALTER TABLE regions DISABLE KEYS /;
INSERT INTO regions (id, name) VALUES
(1, 'Alsace'),
(2, 'Aquitaine'),
(3, 'Auvergne'),
(4, 'Bourgogne'),
(5, 'Bretagne'),
(6, 'Centre'),
(7, 'Champagne-Ardenne'),
(8, 'Corse'),
(9, 'Franche-Comté'),
(10, 'Île-de-France'),
(11, 'Languedoc-Roussillon'),
(12, 'Limousin'),
(13, 'Lorraine'),
(14, 'Midi-Pyrénées'),
(15, 'Nord-Pas-de-Calais'),
(16, 'Basse-Normandie'),
(17, 'Haute-Normandie'),
(18, 'Pays de la Loire'),
(19, 'Picardie'),
(20, 'Poitou-Charentes'),
(21, 'Provence-Alpes-Côte d\'Azur'),
(22, 'Rhône-Alpes'),
(23, 'DOM');
/!40000 ALTER TABLE regions ENABLE KEYS /;
/!40014 SET FOREIGN_KEY_CHECKS=1 /;
/!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT /;

"TABLE CAMPING (elle est en test)
-- Structure de la table campings

CREATE TABLE campings (
id int(11) NOT NULL,
departement_id int(11) NOT NULL,
departement varchar(100) NOT NULL,
image varchar(255) NOT NULL,
title varchar(100) NOT NULL,
mail varchar(255) NOT NULL,
ouverture varchar(100) NOT NULL,
map text NOT NULL,
town varchar(100) NOT NULL,
phone varchar(15) NOT NULL,
site varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Contenu de la table campings

INSERT INTO campings (id, departement_id, departement, image, title, mail, ouverture, map, town, phone, site) VALUES
(1, 2, 'Aisne', '', 'camping tueur', 'grosse@grosse.fr', 'du 15 AU 15', '', 'ALLIER', '0344545454', 'CAMPIX.FR'),
(2, 1, 'Ain', '', 'htyruee', 'dvsojvis@fhdzfhz.fr', 'du 15 15', '', 'HTRYL', '0344435454', 'campix.fr'),
(3, 3, 'Allier', '', 'hdziofhoizahfeozia', '', 'fdjz', 'fljizj', 'fdfdhfzhfzo', '034434543', 'campix.fr'),
(4, 2, 'Aisne', '', 'fraccamping', 'hty@htyr.Fr', 'du15 au 15', '', 'soissons', '0344545454', 'campix.fr'),
(5, 2, 'Aisne', '', 'campingcamping', 'ff@ff.fr', 'DU 30 au 15', '', 'Laon', '0344546565', 'campix.fr'),
(6, 3, 'Allier', '', 'salerscamping', 'dd@dd.fr', 'DU AU 22', '', 'TARN', '0344345454', 'campix.fr'),
(7, 1, 'Ain', '', 'campingbresse', 'cc@cc.fr', 'DU 20 au 20', '', 'Bourg en Bresse', '0434454545', 'campix.fr');

--
-- Index pour les tables exportées --
-- Index pour la table campings

ALTER TABLE campings
ADD PRIMARY KEY (id);

--
-- AUTO_INCREMENT pour les tables exportées --
-- AUTO_INCREMENT pour la table campings

ALTER TABLE campings
MODIFY id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;

J'espère que tu as tous les élements . Dans l'attente de ton retour.

Pardons pour la faute ce n'est pas les 3bases de données mes les 3 tables pardons.

Bonsoir.
Tu as tes deux selects, il te suffit simplement par exemple, d'ajouter dans l'attribut action du formulaire l'url de la page qui s'occupe de récupérer les enregistrements de ta table campings qui correspondent à l'id du département qui a été sélectionné par l'utilisateur dans le second select, par exemple.

Bonsoir,
Tout d'abord bravo pour l'exemple. C'est parfait. Bon boulot! C'est exactement ce que je souhaite à la fois sur la présentation mais également dans le principe. Merci beaucoup.
Toutefois j'essaie de mettre cela en place demain et je te tiens au courant.
Bonne soirée.

hum, j'ai l'impression que le code que tu nous donnes est un "copier-coller", en relisant, je vois bien 3 sélects dont l'id du 3eme est city même si tu l'as commenté 'inutile'...
comprends-tu bien ce que tu es entrain de faire ?
ton système n'est pas très compliqué à mettre sur pied...
bref, tu ne nous donnes pas d'erreur, juste une logorrhée de code écrit par Jonathan (Grafikart)...
le but de ce forum est de t'accompagner dans le dev pas de le faire...
désolé, je peux me tromper, mais pourrais tu nous envoyer TON html et TON js et niveau php uniquement TON appel de la table camping (pas besoin du reste, la class DB et les tables ont les a déjà ;) ) ?
et éventuellement un retour d'erreur...

Bonjour saibe,
Ce qu'a proposé LARTAK dans son exemple est parfait pour moi. par contre impossible à reproduire ou en tout cas à m'en inspiré. honnêtement j'en ai ras le cul...
Effectivement et je l'ai d'ailleurs précisé dans un de mes mails que j'ai acheté la source pour le select pour manque de temps mais surtout de compétences. Merci d'oublier le 3 ème select stp. 2 suffiront largement.
voici ce que tu m'as demandé :

index.php :

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

    <![endif]-->
</head>
<body>
    <?php
    require "config.php";
    $DB = new DB();
    $regions = $DB->query('SELECT * FROM regions');
    $departements = $DB->query('SELECT * FROM departements');
    $departementByRegion = array();
    foreach( $departements as $departement) {
        $departementByRegion[$departement->region_id][$departement->id] = $departement->name;
    }
    $region_id = 0;
    if(isset($_POST['region_id'])){
        $region_id = $_POST['region_id'];
    }
    ?>
    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container">
            <a class="brand" href="#">
              Select
            </a>
        </div>
      </div>
    </div>

    <form method="post" action="camping.php">

    <div class="container" style="margin-top:60px">

        <div class="row">
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="region" name="region_id" size="25" data-target="departement" data-url="departement.php" class="ajaxList">
                            <?php foreach ( $regions as $region ): ?>
                                <option value="<?= $region->id; ?>"<?= $region_id == $region->id ? ' selected' : ''; ?>>
                                    <?= $region->name; ?>
                                </option>
                            <?php endforeach ?>
                        </select>
                    </div>
                </div>
            </div>
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="departement" name="region_id" size="25" class="ajaxList" data-url="city.php" data-target="city">
                            <option value="0">Vous devez sélectionner une région</option>
                        </select>
                    </div>
                </div>
            </div>
        </div>

       <input type="submit" value="Envoyer">

</div>

</form>

</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="js/app.js"></script>

</html>

le js :

(function($){

$('.ajaxList').change(function(event){
    var select = $(this);
    var id = '#'+select.data('target');
    $.get(select.data('url'), {id:select.val()}, function(data){
        if(data.error){
            alert(data.error);
        }else{
            $(id).parents('.control-group').show();
            var target = $(id).get(0);
            target.options.length = 0;
            for(var i in data.results){
                var result = data.results[i];
                target.options[i] = new Option(result.name, result.id, false, false);
            }
        }
    },'json');
}).each(function(){
    var select = $(this);
    var target = $('#'+select.data('target'));
    target.parents('.control-group').hide();
});

})(jQuery);

ET LA FAMEUSE PAGE OU JE SOUHAITE FAIRE APPARAITRE MES CAMPINGS UNE FOIS QUE L'UTILISATEUR A SELECTIONNE LE DEPARTEMENT.
Voici ce que j'ai fais, ça ne fonctionne pas.
Merci de m'aider pour que je puisse passer à autre chose.

Cordialement.

<?php

$campings = $db->query('SELECT title,mail,town FROM campings WHERE campings.departement=:departement.id');

if(empty($campings)){
$return = array('error' => "Il n'existe pas de campings pour le département sélectionné");
}else{
$return = array(
'error' => false,
'results' => $campings
);
echo $campings;
}

?>

Bonjour.
C'est normal que ça ne fonctionne pas, ta condition est fausse.
C'est comme-ci tu faisais : Aisne = 12, la condition sera toujours incorrecte.
Il te faut mettre dans ta condition, que tu veux que le champ departement_id ait la valeur que tu donnes.

En plus de ça, d'après le code que tu montres, tu ne transmets pas les paramêtres en deuxième argument de la fonction query.
Tu devrais donc avoir quelque chose comme :

$campings = $db->query('SELECT title, mail, town FROM campings WHERE departement_id = :id', ['id' => $_POST['departement_id']]);

Une dernière chose, le select qui liste tes départements, à la même valeur pour son attribut name que celui qui liste les régions, il y aura donc forcément un conflit entre les deux select et tu ne pourras pas récupérer l'id du département pour le transmettre à ta requête SQL.

Bonjour,
Merci pour ton retour.
Du coup je suis obligé de tout repenser depuis le début car étant donné qu'ils ont le même attribut "name" et en ayant tenté des changement et bien je suis condamné à tout refaire différemment.

Je ne vois pas pourquoi tu aurais de gros changements à faire, à part ceux que je t'ai cité.
Au niveau javascript, le change est détecté pour les éléments html qui ont la classe ajaxList et non par rapport à la valeur de l'attribut name.

Re,

du coup j'ai changer dans le second select l'attribut name par "numero" (correspond a un champ dans la table département avec le numero de département correspondant) au lieu de region_id.
J'ai également insérer ta modif comme ceci :
$campings = $db->query('SELECT title, mail, town FROM campings WHERE departement_id = :id', ['id' => $_POST['departement_id']]); et ma suite pour afficher les campings comme ceci à la suite du code :

if(empty($campings)){
$return = array('error' => "Il n'existe pas de campings pour le département sélectionné");
}else{
$return = array(
'error' => false,
'results' => $campings
);
}

Mais toujours rien qui s'affiche.

Si tu as donné comme valeur numero à l'attribut name du select correspondant aux départements, dans ta requête SQL, il te faut remplacer $_POST['departement_id'] par $_POST['numero'].
Sinon c'est normal que tu ne récupères pas d'enregistrement depuis ta base de données, vu que tu n'as pas d'index departement_id dans les données postées par ton formulaire du coup.

Désolé LARTAK, mais là tu es tombé sur du très lourd en tant que boulet....Vraiment désolé.
Je te redonne ma page index.php comme ceci :

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php
require "db.class.php";
$DB = new DB();
$regions = $DB->query('SELECT FROM regions');
$departements = $DB->query('SELECT
FROM departements');
$departementByRegion = array();
foreach( $departements as $departement) {
$departementByRegion[$departement->region_id][$departement->id] = $departement->name;
}
$region_id = 0;
if(isset($_POST['region_id'])){
$region_id = $_POST['region_id'];
}
?>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="#">
Select
</a>
</div>
</div>
</div>

    <form method="post" action="campings.php">

    <div class="container" style="margin-top:60px">

        <div class="row">
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre région</label>
                    <div class="controls">
                        <select id="region" name="region_id" size="25" data-target="departement" data-url="departement.php" class="ajaxList">
                            <?php foreach ( $regions as $region ): ?>
                                <option value="<?= $region->id; ?>"<?= $region_id == $region->id ? ' selected' : ''; ?>>
                                    <?= $region->name; ?>
                                </option>
                            <?php endforeach ?>
                        </select>
                    </div>
                </div>
            </div>
            <div class="span3">
                <div class="control-group">
                    <label class="control-label" for="select01">Votre département</label>
                    <div class="controls">
                        <select id="departement" name="numero" size="25" class="ajaxList">
                            <option value="0">Vous devez sélectionner un département</option>
                        </select>
                    </div>
                </div>
            </div>
        </div>

       <input type="submit" value="Envoyer">

</div>

</form>

</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="js/app.js"></script>

</html>

Puis ma page camping.php:

<?php

$campings = $db->query('SELECT * FROM campings WHERE departement_id = :id', ['id' => $_POST['numero']]);

if(empty($campings)){
$return = array('error' => "Il n'existe pas de campings pour le département sélectionné");
}else{
$return = array(
'error' => false,
'results' => $campings

);

}

?>
<h1>CAMPINGS</h1>
<div class="container">
<div class="row">
<div class="panel">
<img src="img/campings/campings-bouches-du-rhone/<?= $data['image'] ?>" class="activator" alt="<?= $data['title'] ?>"/>
</div>
<div class="card-content">
<p class="titre_camping"><?= $data['title'] ?> <span style="color:#26a69a"><?= $data['star'] ?></span></p>
</div>
<div class="card-reveal thumbnails grey-text">
<span class="card-title"><?= $data->title ?><i class="material-icons right">close</i></span>
<p><a href="<?= $data['map'] ?>" class="liens" target="_blank"><span class="fa fa-map-marker icon white-text"></span>  <?= $data['town'] ?></a></p>
<p><a href="#" class="liens"><span class="fa fa-clock-o icon"></span>  <?= $data['horaire'] ?></a></p>
<p><a href="tel:33<?= $data['phone'] ?>" class="liens" target="_blank"><span class="fa fa-phone icon"></span>  0<?= $data['phone'] ?></a></p>
<p><a href="mailto:<?= $data['mail'] ?>" class="liens" target="_blank"><span class="fa fa-envelope icon"></span>  <?= $data['mail'] ?></a></p>
<a class="btn waves-effect waves-light" href="<?= $data['site'] ?>" target="_blank"><small>Site web du camping</small></a>
</div>
</div>
</div>
<?php
}

// on ferme la connexion à mysql
mysql_close($db);
?>

</div>

Comme tu peux le constater sur cette fameuse page camping.php je n'arrive pas à afficher mes campings et pour le coup je craque.

et voici ma table départements et campings :

-- Structure de la table departements

CREATE TABLE departements (
id int(11) NOT NULL,
region_id int(11) NOT NULL DEFAULT '0',
name varchar(255) NOT NULL DEFAULT '',
numero varchar(5) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table departements

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

--
-- Index pour les tables exportées --
-- Index pour la table departements

ALTER TABLE departements
ADD PRIMARY KEY (id);

--
-- AUTO_INCREMENT pour les tables exportées --
-- AUTO_INCREMENT pour la table departements

ALTER TABLE departements
MODIFY id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=101;

et maintenant ma table campings qui sert de test pour le moment :

-- Structure de la table campings

CREATE TABLE campings (
id int(11) NOT NULL,
departement_id int(11) NOT NULL,
departement varchar(100) NOT NULL,
image varchar(255) NOT NULL,
title varchar(100) NOT NULL,
mail varchar(255) NOT NULL,
ouverture varchar(100) NOT NULL,
map text NOT NULL,
town varchar(100) NOT NULL,
phone varchar(15) NOT NULL,
site varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Contenu de la table campings

INSERT INTO campings (id, departement_id, departement, image, title, mail, ouverture, map, town, phone, site) VALUES
(1, 2, 'Aisne', '', 'camping tueur', 'grosse@grosse.fr', 'du 15 AU 15', '', 'ALLIER', '0344545454', 'CAMPIX.FR'),
(2, 1, 'Ain', '', 'htyruee', 'dvsojvis@fhdzfhz.fr', 'du 15 15', '', 'HTRYL', '0344435454', 'campix.fr'),
(3, 3, 'Allier', '', 'hdziofhoizahfeozia', '', 'fdjz', 'fljizj', 'fdfdhfzhfzo', '034434543', 'campix.fr'),
(4, 2, 'Aisne', '', 'fraccamping', 'hty@htyr.Fr', 'du15 au 15', '', 'soissons', '0344545454', 'campix.fr'),
(5, 2, 'Aisne', '', 'campingcamping', 'ff@ff.fr', 'DU 30 au 15', '', 'Laon', '0344546565', 'campix.fr'),
(6, 3, 'Allier', '', 'salerscamping', 'dd@dd.fr', 'DU AU 22', '', 'TARN', '0344345454', 'campix.fr'),
(7, 1, 'Ain', '', 'campingbresse', 'cc@cc.fr', 'DU 20 au 20', '', 'Bourg en Bresse', '0434454545', 'campix.fr');

--
-- Index pour les tables exportées --
-- Index pour la table campings

ALTER TABLE campings
ADD PRIMARY KEY (id);

--
-- AUTO_INCREMENT pour les tables exportées --
-- AUTO_INCREMENT pour la table campings

ALTER TABLE campings
MODIFY id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;

si mon truc pouvait marcher je pourrais enfin avancer. dans l'attente de ton retour.

Dans le code que tu montres, tu définis une variable return qui contient les données correspondants au résultat de la base de données dans l'index results, sauf que par la suite, tu n'utilises qu'une variable nommé data (qui sort de je ne sais où), je vois mal donc comment tu peux afficher tes résultats, surtout que si tu récupères plusieurs enregistrements, il te faut faire une boucle sur $return['results'] pour pouvoir tous les afficher.

Décidemment tous ça n'est pas fait pour moi.

voici le code :

<?php

      require "db.class.php";

      $campings = $db->query('SELECT * FROM campings WHERE departement_id = :id', ['id' => $_POST['numero']]);

      // envoie la requête 
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

      // La boucle qui va faire un tour pour chaque enregistrement 
      while ($return['results']);

      echo "results";

      ?>

      Si tu pouvais m'aider à le coder afin que je puisse l'afficher, ce serait vraiment gentil de ta part.

Pour commencer, d'où est-ce que tu sorts : $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); ?
La variable campings contient déjà le retour de la requête SQL, en plus de ça, tu cherches à utiliser une fonction qui actuellement est dépréciée et qui est obsolète à partir de la version 7 de PHP.
Sur ta page après avoir récupéré les résultat en base de données, il te suffit par exemple de faire :

<?php if (!$return['error']): foreach ($return['results'] as $camping): ?>
    <img src="<?= $camping->image ?>">
    <?= $camping->title ?>
    etc ...
<?php endforeach; else: ?>
<?= $return['error'] ?>
<?php endif; ?>

De cette manière tu affiches tous les enregistrements récupérés s'il y en a, sinon tu affiches l'erreur stockée dans $return['error'].

comme ceci mais ça ne fonctionne toujours pas :

<?php

      require "db.class.php";

      $campings = $db->query('SELECT * FROM campings WHERE departement_id = :id', ['id' => $_POST['numero']]);

      if (!$return['error']): foreach ($return['results'] as $camping): ?>
      <img src="<?= $camping->image ?>">
      <?= $camping->title ?>
          etc ...
      <?php endforeach; else: ?>
      <?= $return['error'] ?>
      <?php endif; ?>

Sinon t'embêtes pas LARTAK, je te propose de racheter ton exemple avec les deux select a l 'affichage des campings ?

Bonsoir.
Les codes tel que je te les montre, ne sont que des exemples, il ne te faut pas les copier à la lettre près, comme par exemple quand j'ai mis dans le code etc..., c'était pour que tu comprennes qu'à la place il te fallait ajouter les autres champs que tu souhaitais afficher et le code que je te montre, il te faut l'adapter par rapport à ton code initial.
Le fait que tu recopies tel quel que je te le montre, ne peut pas fonctionner, surtout si tu ne remets pas du code que tu as montré sur lequel je me basais.
Pour que le code fonctionne au minimum, il te faut au moins le code suivant :

require "db.class.php";
$campings = $db->query('SELECT * FROM campings WHERE departement_id = :id', ['id' => $_POST['numero']]);
if (!$campings):
    $return = ['error' => "Il n'existe pas de campings pour le département sélectionné"];
else:
    $return = ['results' => $campings];
endif;

Puis le code permettant d'afficher le résultat, par exemple :

<?php if (!$return['error']): foreach ($return['results'] as $camping): ?>
    <img src="<?= $camping->image ?>">
    <h2><?= $camping->title ?></h2>
<?php else: ?>
    <?= $return['error'] ?>
<?php endif; ?>

Je me répète une seconde fois, ne recopies pas le code tel que je te le montre, adaptes le.
Pour ton dernier message, ma réponse est non, si j'apporte mon aide sur le forum, ce n'est pas pour coder à la place des autres, mais uniquement pour permettre à la personne de pouvoir trouver la solution à son problème ou du moins pour lui donner des pistes, il est donc hors de question que je donnes à qui que ce soit du code que je fais, que ce soit avec une contrepartie financière ou non.
Tu ne sembles vraiment pas comprendre ce que tu fais, même si nous te l'expliquons, donc si tu veux faire du développement web, même si ce n'est qu'à titre personnel, je te recommande fortement de suivre des tutoriels et ne pas juste récupérer les codes-sources fournis avec.
De plus, qu'à chaque fois tu nous dit que ça marche pas, mais si des erreurs te sont retournées, il faut que tu nous les dises pour que nous ne perdions pas de temps dans l'aide que nous t'apportons, car jusqu'à présent tu ne nous en a dit aucune et dans le cas ou tu n'as vraiment rien qui s'affiche sur ta page, je te recommande spécifiquement de suivre la Formation PHP » Déboguer son code PHP.

Bonsoir,  tu as raison.
Mais parfois il arrive qu'on en puisse plus. C'est la raison pour laquelle je t'ais demandé cela.
Néanmoins merci. Bonne continuation