problème sur listes liées

Petit nouveau ! | 5 Messages

04 nov. 2011, 21:54

Bonjour

J'essaie de construire un formulaire avec 2 listes déroulantes liées.
J'ai bien sûr suivi le tuto du site, mais mon cas de figure est un peu différent :
en choisissant une valeur dans la liste "Propriétés", ça devrait appeler la liste "Valeurs" correspondante, sachant que :
propriété1 (p1) peut prendre les valeurs v1, v2, v3
propriété2 (p2) peut prendre les valeurs v1, v2, v4
propriété3 (p3) peut prendre les valeurs v1, v4, v5

IL y donc des valeurs de la 2ème liste qui peuvent se relier à plusieurs valeurs de la 1ère.

J'ai lu dans un autre forum qu'il fallait créer une 3ème table pour associer mes 2 tables.
J'ai donc fait les requêtes sql suivantes :
CREATE TABLE `propriete` (
  `id_propriete`   tinyint(4)   NOT NULL   auto_increment,
  `propriete`      varchar(50)   NOT NULL   default '',
  PRIMARY KEY  (`id_propriete`)
);


CREATE TABLE `valeur` (
  `id_valeur`   tinyint(4)   NOT NULL   auto_increment,
  `valeur`      varchar(50)   NOT NULL   default '',
  PRIMARY KEY  (`id_valeur`)
);

CREATE TABLE `asso` (
  `id_asso`   tinyint(4)   NOT NULL   auto_increment,
  `id_propriete`      tinyint(4)   NOT NULL   default '0',
  `id_valeur`      tinyint(4)   NOT NULL   default '0',
  PRIMARY KEY  (`id_asso`),
  KEY `id_propriete` (`id_propriete`),
  KEY `id_valeur` (`id_valeur`)
);


INSERT INTO `propriete` VALUES (1, 'p1');
INSERT INTO `propriete` VALUES (2, 'p2');
INSERT INTO `propriete` VALUES (3, 'p3');


INSERT INTO `valeur` VALUES (1, 'v1');
INSERT INTO `valeur` VALUES (2, 'v2');
INSERT INTO `valeur` VALUES (3, 'v3');
INSERT INTO `valeur` VALUES (4, 'v4');
INSERT INTO `valeur` VALUES (5, 'v5');


INSERT INTO `asso` VALUES (1, 1, 1);
INSERT INTO `asso` VALUES (2, 1, 2);
INSERT INTO `asso` VALUES (3, 1, 3);
INSERT INTO `asso` VALUES (4, 2, 1);
INSERT INTO `asso` VALUES (5, 2, 2);
INSERT INTO `asso` VALUES (6, 2, 4);
INSERT INTO `asso` VALUES (7, 3, 1);
INSERT INTO `asso` VALUES (8, 3, 4);
INSERT INTO `asso` VALUES (9, 3, 5);
Mon script php est le suivant (c'est celui du tuto de phpfrance adapté) :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "######";
$admin   = "######";
$mdp     = "######";
$base    = "######";
/* On récupère si elle existe la valeur de la propriété envoyée par le formulaire */
$idp = isset($_POST['propriete'])?$_POST['propriete']: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>Listes liées 2</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%">
<?php
if(isset($_POST['ok']) && isset($_POST['valeur']) && $_POST['valeur'] != "")
{
    $prop_selectionnee = $_POST['propriete'];
    $val_selectionnee = $_POST['valeur'];
?>
<p>Sélection de la valeur <?php echo($val_selectionnee); ?> pour la propriété <?php echo($prop_selectionnee); ?></p>
<?php
}
?>
<h3>Associer une liste de valeurs à une propriété choisie</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_propriete`, `propriete`".
    " FROM `propriete`".
    " ORDER BY `id_propriete`";
    $rech_props = mysql_query($sql1);
    $code_prop = array();
    $prop = array();
    /* On active un compteur pour les propriétés */
    $nb_props = 0;
    if($rech_props != false)
    {
        while($ligne = mysql_fetch_assoc($rech_props))
        {
            array_push($code_prop, $ligne['id_propriete']);
            array_push($prop, $ligne['propriete']);
            /* On incrémente le compteur */
            $nb_props++;
        }
    }
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgval">
<fieldset style="border: 3px double #333399">
<legend>Sélectionner une propriété</legend>
<select name="propriete" id="propriete" onchange="document.forms['chgval'].submit();">
  <option value="-1">- - - Choisir une propriété - - -</option>
    <?php
    for($i = 0; $i < $nb_props; $i++)
    {
?>
  <option value="<?php echo($code_prop[$i]); ?>"<?php echo((isset($idp) && $idp == $code_prop[$i])?" selected=\"selected\"":null); ?>><?php echo($prop[$i]); ?></option>
<?php
    }
    ?>
</select>
    <?php
    mysql_free_result($rech_props);
    /* On commence par vérifier si on a envoyé un numéro de propriété et le cas échéant s'il est différent de -1 */
    if(isset($idp) && $idp != -1)
    {
        /* Création de la requête pour avoir les valeurs correspondant à cette propriété */
        $sql2 = "SELECT `id_valeur`, `valeur`".
        " FROM `valeur`".
        " WHERE `id_propriete` = ". $idp ."".
        " ORDER BY `id_valeur`";
        if($connexion != false)
        {
            $rech_val = mysql_query($sql2, $connexion);
            /* Un petit compteur pour les valeurs */
            $nv = 0;
            /* On crée deux tableaux pour les numéros et les noms des valeurs */
            $code_val = array();
            $nom_val = array();
            /* On va mettre les numéros et noms des valeurs dans les deux tableaux */
            while($ligne_val = mysql_fetch_assoc($rech_val))
            {
                array_push($code_val, $ligne_val['id_valeur']);
                array_push($nom_val, $ligne_val['valeur']);
                $nv++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="valeur" id="valeur">
            <?php  
            for($v = 0; $v<$nv; $v++)
            {
                ?>
  <option value="<?php echo($code_val[$v]); ?>"<?php echo((isset($val_selectionnee) && $val_selectionnee == $code_val[$v])?" selected=\"selected\"":null); ?>><?php echo($nom_val[$v]." (". $code_val[$v] .")"); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_val);
    }
?>
<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, veuillez essayer à nouveau ultérieurement.</p>
<?php
}
?>

</body>
</html>
... mais ça ne fonctionne pas : ça me renvoie les erreurs :
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given... dans la ligne :
while($ligne_val = mysql_fetch_assoc($rech_val))
et
Warning: mysql_free_result() expects parameter 1 to be resource, boolean given... dans la ligne :
mysql_free_result($rech_val);
Je pense qu'il y a un problème dans "l'association" de mes tables... et je ne suis pas assez calé en mysql
Est-ce que quelqu'un pourrait m'aiguiller vers une solution ?
Merci d'avance !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 nov. 2011, 11:57

La structure de ton association est bonne, le problème vient simplement de ta requête SQL qui n'est pas correcte :
$sql2 = "SELECT `id_valeur`, `valeur`".
        " FROM `valeur`".
        " WHERE `id_propriete` = ". $idp ."".
        " ORDER BY `id_valeur`";
En cas d'erreur d'un mysql_query() tu peux faire appel à mysql_error() pour obtenir les messages d'erreurs rencontrés. En l'occurrence, celui-ci t'aurait dit que ta table "valeur" ne contient pas de champ id_propritété.

En fait pour obtenir toutes les valeurs associées à la propriété sélectionnée, il te faut effectuer une jointure pour interroger simultanément ta table associative (pour savoir qui est rattaché à ta propriété) et ta table de valeur (pour récupérer les résultats)

$sql2 = "SELECT v.id_valeur, v.valeur". // on récupère l'id valeur et la valeur de la table "v", alias de "valeur"
        " FROM valeur v". // on déclare l'alias
        " LEFT JOIN asso a ON a.id_valeur = v.id_valeur" . // jointure + critère de jointure : il faut que les id des deux tables correspondent
        " WHERE a.id_propriete = ". $idp . // on indique ici que l'on va chercher l'id propriété dans la table "a", qui est l'alias de "asso"
        " ORDER BY v.id_valeur"; // on précise à quel id_valeur on fait référence, celui de "asso" ou celui de "valeur".. ici ça revient au même, mais comme SQL ne le sait pas, faut le lui préciser
Ca devrait mieux fonctionner ainsi :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

05 nov. 2011, 21:48

Génial ! ça marche :D
Merci beaucoup Ryle... en faisant quelques recherches, j'avais crû comprendre qu'il s'agissait d'un problème de jointure... mais mon niveau en mysql est encore très faible. Quant à ma mauvaise requête, effectivement c'était tout bête.

Petit nouveau ! | 5 Messages

27 avr. 2012, 17:44

... rebonjour (après un certain laps de temps :) )

Tout marche très bien, ... mais je me pose maintenant la question suvante : comment récupérer le nom des propriétés et valeurs et non pas leur id ?
Je ne comprends pas donc que $_POST['propriete'] et $_POST['valeur'] ne renvoient que leurs ids et non pas leurs noms ?
Si quelqu'un a une idée...
D'avance merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 avr. 2012, 20:43

Hello !

Ben en fait, un select envoi la valeur qui est spécifiée dans l'attribut value de l'option qui a été sélectionnée. donc si tu construis ton select ainsi :
<select name="mon_select">
  <option value="mon_id">mon_texte</option>
</select>
$_POST['mon_select'] te retournera uniquement la valeur mon_id et pas le texte que tu lui as associé. Si tu veux une autre valeur, il te suffit de modifier la valeur de l'attribut value. Mais logiquement l'id te permettant de retrouver le texte associé, c'est en général la meilleure chose à envoyer :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

29 avr. 2012, 10:40

Encore merci pour tes éclaircissements Ryle.
Je reprends donc mon premier fichier php avec l'objectif de récupérer le nom de mes items de listes dans un autre fichier (pour traitement...).
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "XXXX";
$admin   = "XXXX";
$mdp     = "XXXX";
$base    = "XXXX";
/* On récupère les noms de propriété et de valeur envoyés par le formulaire */
$nom_prop = isset($_POST['propriete'])?$_POST['propriete']:null;
$nom_val = isset($_POST['valeur'])?$_POST['valeur']: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>Listes liées 2</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>Associer une liste de valeurs à une propriété choisie</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_propriete`, `propriete`".
    " FROM `propriete`".
    " ORDER BY `id_propriete`";
    $rech_props = mysql_query($sql1);
    $code_prop = array();
    $prop = array();
    /* On active un compteur pour les propriétés */
    $nb_props = 0;
    if($rech_props != false)
    {
        while($ligne = mysql_fetch_assoc($rech_props))
        {
            array_push($code_prop, $ligne['id_propriete']);
            array_push($prop, $ligne['propriete']);
            /* On incrémente le compteur */
            $nb_props++;
        }
    }
    ?>
<!-- Ici l'envoi du formulaire vers le fichier "test_action.php" -->
<form action="test_action.php" method="post" enctype="multipart/form-data">
<fieldset style="border: 3px double #333399">
<legend>Sélectionner une propriété</legend>
<select name="propriete" id="propriete">
  <option value="-1">- - - Choisir une propriété - - -</option>
    <?php
    for($i = 0; $i < $nb_props; $i++)
    {
?>
  <option value="<?php echo($prop[$i]) ?>"<?php echo((isset($nom_prop) && $nom_prop == $prop[$i])?" selected=\"selected\"":null); ?>><?php echo($prop[$i]); ?></option>
<!-- j'envoie bien le nom de la propriété par le champ value > $prop[$i] et non pas son indice qui serait $code_prop[$] -->
<?php
    }
?>
</select>
<?php
    mysql_free_result($rech_props);
    /* Ici commence mon problème : comment récupérer l'indice de propriété (que j'appelle provisoirement $variable) pour dire qu'il existe et qu'il est différent de -1 ? */
    if(isset($variable) && $variable != -1)
    {
        /* Création de la requête pour avoir les valeurs correspondant à cette propriété */

$sql2 = "SELECT v.id_valeur, v.valeur". // on récupère l'id valeur et la valeur de la table "v", alias de "valeur"
        " FROM valeur v". // on déclare l'alias
        " LEFT JOIN asso a ON a.id_valeur = v.id_valeur" . // jointure + critère de jointure : il faut que les id des deux tables correspondent
        " WHERE a.id_propriete = " . $variable .  // je voudrais indiquer ici l'équivalence entre mon id_propriete de la table "a" avec ma fameuse $variable ??
        " ORDER BY v.id_valeur"; // on précise à quel id_valeur on fait référence, celui de "asso" ou celui de "valeur".. ici ça revient au même, mais comme SQL ne le sait pas, il faut le lui préciser

        if($connexion != false)
        {
            $rech_val = mysql_query($sql2, $connexion);
            /* Un petit compteur pour les valeurs */
            $nv = 0;
            /* On crée deux tableaux pour les numéros et les noms des valeurs */
            $code_val = array();
            $nom_val = array();
            /* On va mettre les numéros et noms des valeurs dans les deux tableaux */
            while($ligne_val = mysql_fetch_assoc($rech_val))
            {
                array_push($code_val, $ligne_val['id_valeur']);
                array_push($nom_val, $ligne_val['valeur']);
                $nv++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="valeur" id="valeur">
            <?php  
            for($v = 0; $v<$nv; $v++)
            {
                ?>
  <option value="<?php echo($nom_val[$v]); ?>"<?php echo((isset($nom_val) && $nom_val == $nom_val[$v])?" selected=\"selected\"":null) ?>><?php echo($nom_val[$v]); ?></option> 
<!--  Comme pour la liste des propriétés, mon champ value indique bien le nom de valeur ($nom_val[$v]) et non pas son indice -->
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_val);
    }
?>
<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, veuillez essayer à nouveau ultérieurement.</p>
<?php
}
?>

</body>
</html>
... j'ai indiqué en commentaires les problèmes que je rencontre : pour résumer, je n'arrive pas à récupérer à la fois le nom de la propriété et son indice ; le nom pour son futur traitement dans un fichier externe, et l'indice "en interne" dans ce fichier pour ma requête sql qui va me permettre de lier les deux listes.

Petit nouveau ! | 5 Messages

01 mai 2012, 10:20

... après de multiples essais, je crois avoir trouvé :D
Pour résumer : pas possible de transmettre correctement les valeurs vers mon test_action.php et d'afficher mes deux listes liées.
Je suis donc revenu à ma déclaration de formulaire initiale (pensant que tout devait se traiter dans un seul fichier) :
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgval">
avec le onchange sur mon select
<select name="propriete" id="propriete" onchange="document.forms['chgval'].submit();">
J'ai réintroduit $idp qui récupère l'id_propriete (value de mon select sur les propriétés) et dont j'ai besoin pour ma jointure entre les 2 tables (propriete et valeur).
Au final mon fichier se présente comme ça :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "XXXX";
$admin   = "XXXX";
$mdp     = "XXXX";
$base    = "XXXX";
/* On récupère si ils existent l'id_propriete et le nom de la valeur envoyés par le formulaire */
$idp = isset($_POST['propriete'])?$_POST['propriete']:null;
$nom_val = isset($_POST['valeur'])?$_POST['valeur']: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>Listes liées 2</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>Associer une liste de valeurs à une propriété choisie</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_propriete`, `propriete`".
    " FROM `propriete`".
    " ORDER BY `id_propriete`";
    $rech_props = mysql_query($sql1);
    $code_prop = array();
    $prop = array();
    /* On active un compteur pour les propriétés */
    $nb_props = 0;
    if($rech_props != false)
    {
        while($ligne = mysql_fetch_assoc($rech_props))
        {
            array_push($code_prop, $ligne['id_propriete']);
            array_push($prop, $ligne['propriete']);
            /* On incrémente le compteur */
            $nb_props++;
        }
    }
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgval">
<fieldset style="border: 3px double #333399">
<legend>Sélectionner une propriété</legend>
<select name="propriete" id="propriete" onchange="document.forms['chgval'].submit();">
  <option value="-1">- - - Choisir une propriété - - -</option>
    <?php
    for($i = 0; $i < $nb_props; $i++)
    {
?>
  <option value="<?php echo($code_prop[$i]); ?>"<?php echo((isset($idp) && $idp == $code_prop[$i])?" selected=\"selected\"":null); ?>><?php echo($prop[$i]); ?></option>
<!-- $code_prop[$i] est l'id de la propriété sélectionnée -->
<?php
    }
?>
</select>

<?php
    mysql_free_result($rech_props);
    /* On commence par vérifier si on a envoyé un id_propriete et le cas échéant s'il est différent de -1 */
    if(isset($idp) && $idp != -1)
    {
        /* Création de la requête pour avoir les valeurs correspondant à cette propriété */

$sql2 = "SELECT v.id_valeur, v.valeur". // on récupère l'id valeur et la valeur de la table "v", alias de "valeur"
        " FROM valeur v". // on déclare l'alias
        " LEFT JOIN asso a ON a.id_valeur = v.id_valeur" . // jointure + critère de jointure : il faut que les id des deux tables correspondent
        " WHERE a.id_propriete = " . $idp . // l'id_propriete récupéré est associé à id_propriete de la table "asso"
        " ORDER BY v.id_valeur"; // on précise à quel id_valeur on fait référence, celui de "asso" ou celui de "valeur".. ici ça revient au même, mais comme SQL ne le sait pas, il faut le lui préciser

        if($connexion != false)
        {
            $rech_val = mysql_query($sql2, $connexion);
            /* Un petit compteur pour les valeurs */
            $nv = 0;
            /* On crée deux tableaux pour les numéros et les noms des valeurs */
            $code_val = array();
            $nom_val = array();
            /* On va mettre les numéros et noms des valeurs dans les deux tableaux */
            while($ligne_val = mysql_fetch_assoc($rech_val))
            {
                array_push($code_val, $ligne_val['id_valeur']);
                array_push($nom_val, $ligne_val['valeur']);
                $nv++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="valeur" id="valeur">
            <?php  
            for($v = 0; $v<$nv; $v++)
            {
                ?>
  <option value="<?php echo($nom_val[$v]); ?>"<?php echo((isset($nom_val) && $nom_val == $nom_val[$v])?" selected=\"selected\"":null) ?>><?php echo($nom_val[$v]); ?></option> 
<!--  On envoie bien en value le nom de la valeur -->
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_val);
    }
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form><br />
<?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, veuillez essayer à nouveau ultérieurement.</p>
<?php
}
// et là, ô suprême astuce, j'inclus mon fichier de traitement
include('test_action.php'); 
?>

</body>
</html>
et mon fichier test_action.php (qui pour l'instant ne fait qu'afficher le nom des propriétés et valeurs) :
<?php
if (isset($_POST['ok']) && isset($_POST['valeur']) && $_POST['valeur'] != "") {
	$res = $_POST['propriete'];	// On récupère en fait ici l'id_propriete

	try {
    // On se connecte à MySQL
		$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=mysql5-16.perso;dbname=bwizlousbwiz', 'bwizlousbwiz', 'bwiz1tit', $pdo_options);
  
    // On récupère les 2 champs de la table propriete
    $reponse = $bdd->query('SELECT id_propriete, propriete FROM propriete');
    
			while ($donnees = $reponse->fetch()) {
				if ($res == $donnees['id_propriete']) {	// condition pour associer id_propriete et propriete
					echo "Propri&eacute;t&eacute; : " . $donnees['propriete'] . "<br>";
				}
    	}
	    
		$reponse->closeCursor(); // Termine le traitement de la requête
	}

	catch(Exception $e) {
    // En cas d'erreur précédemment, on affiche un message et on arrête tout
  	die('Erreur : '.$e->getMessage());
	}
		// Si tout a bien fonctionné, on affiche aussi la valeur
 	echo "Valeur : " . $_POST['valeur']; 
}
?>
Bon je suis pratiquement certain qu'il y avait une solution plus simple pour afficher le nom des propriété et valeur (et pas leur id)... :lol:
et aussi, une autre "petite chose" à corriger : après avoir sélectionné une propriété dans ma 1ère liste déroulante, la liste des valeurs correspondantes apparaît > j'en choisis une, j'envois : mon include m'affiche le bon résultat... mais ma liste des valeurs s'est repositionné sur son 1er index (elle n'affiche plus le choix que j'avais fait)

Si une âme charitable passe par là et daigne m'indiquer d'autres pistes ou même la solution de ce dernier petit problème... je lui en serai très reconnaissant !