[RESOLU] Liste deroulante dynamique avec base MYSQL

Mammouth du PHP | 19672 Messages

22 sept. 2011, 15:16

Comme je ne vois pas ton code au stade actuel, je n'ai pour ma part même pas le privilège de pouvoir m'y perdre.

En d'autres termes, je ne suis pas madame soleil et je ne devine pas les choses qui se passent sur ta machine : fais voir où tu en es et indique ce qui coince, on devrait pouvoir te guider vers la solution.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

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

22 sept. 2011, 15:17

attention javascript c'est pas JAVA c'est totalement différent !!!!

après si tu part sur de l’espoir il est préférable de tout faire en php, mais tu perd les possibilités offertes pas JS / ajax sur l'ergonomie du système.

en général dans une entreprise le parc est "figé" donc ça ne doit pas poser de problème d'imposer l'activation du JS ;) (après ça dépend de la politique des sysadmin mais généralement JS est activé).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 27 Messages

22 sept. 2011, 15:58

En gardant la meme structure que dans le tutos et en essayant de faire la correspondance voila ce que j'ai pu faire :
<?php

echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");

/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */

$serveur = "127.0.0.1";

$admin   = "Benoit";

$mdp     = "xxxx";

$base    = "config_reseaux";

?>

<!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>Liste déroulantes dynamiques liées</title>

<meta name="description" content="Listes dynamiques liées: la seconde liste est modifiée instantanément lors d'une sélection sur la première." />

<meta name="keywords" content="menu,déroulant,select,liées,JavaScript" />

<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" />

<script type="text/javascript" src="./arrayPHP2JS.js" charset="iso_8859-1"></script>

<script type="text/javascript" src="./changeLieu.js" charset="iso_8859-1"></script>

<?php

/* Requête SQL de récupération des données */

$sql = "SELECT * ".

"FROM bdd ".

"ORDER BY type_materiel;";

/* Connexion et exécution de la requête */

$connexion = mysql_pconnect($serveur, $admin, $mdp);

if($connexion != false)

{

    $choixbase = mysql_select_db($base, $connexion);

    $recherche = mysql_query($sql, $connexion);

    /* Pour ne pas écraser mes tableaux, je crée un témoin */

    $temoin_r = 0;

    /* Création du tableau PHP des valeurs récupérées */

    $materiel = array();

    /* Index du département par tableau régional */

    $id = 0;

    while($ligne = mysql_fetch_assoc($recherche))

    {

        $r = $ligne['idr'];

        $d = $ligne['idd'];

        /* Je vérifie si je suis toujours dans la même région, sinon je crée les tableaux nécessaires */

        if($temoin_r != $r)

        {

            $materiel[$r] = array();

            /* J'ajoute laa région */

            $materiel[$r][0] = $ligne['type_materiel'];

            $materiel[$r][1] = array();

            $materiel[$r][2] = array();

            $temoin_r = $r;

            $id = 0;

        }

        /* J'ajoute les départements */

        $materiel[$r][1][$id] = $d;

        $materiel[$r][2][$id] = $ligne['location'];

        $id++;

    }

    /* On sérialise le tableau obtenu pour traitement par JavaScript */

    $chaine = htmlspecialchars(serialize($materiel), ENT_QUOTES);

?>

<script type="text/javascript">

/* <![CDATA[ */

<!--

/*

* Ici, on transmets la chaîne sérialisée à JavaScript

* pour la transformer en tableau indexé JavaScript

*/

var tableau = new PhpArray2Js('<?php echo $chaine; ?>');

var tab = tableau.retour();

// -->

/* ]]> */

</script>

</head>

<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">

<h3>Version Utilisant JavaScript</h3>

<p>Vous constaterez que le délai de latence entre la sélection et la mise à jour est quasiment inexistant.</p>

<?php

if(isset($_POST['ok']) && isset($_POST['lieu']) && $_POST['lieu'] != "")

{

    $materiel_selectionnee = $_POST['type_materiel'];

    $lieu_selectionne = $_POST['lieu'];

?>

<p>Vous avez sélectionné le lieu <?php echo($lieu_selectionne); ?> pour le materiel <?php echo($materiel_selectionnee); ?></p>

<?php

}

?>

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chglieu">

  <fieldset style="border: 3px double #333399">

  <legend>Sélectionnez une Materiel</legend>

    <select name="type_materiel" id="type_materiel" onchange="changeLieu(tab,this.value);">

      <option value="vide">- - - Choisissez un Materiel - - -</option>

    <?php

    /* Construction de la première liste : on se sert du tableau PHP */

    $nbr = count($materiel);

    foreach($materiel as $nr => $nom)

    {

        ?>

    <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option>

<?php

    }

    ?>

    </select>

    <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de

         la seconde liste déroulande -->

  <span id="blocLieu"></span><br />

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

  </fieldset>

</form>

<?php

   

}

else

{

    /*  Si vous arrivez ici, vous avez un gros problème avec la connexion au serveur de base de données */

?>

</head>

<body>

<p>La connexion au serveur de base de données a échoué. Aucun élément ne peut être affiché.</p>

<?php

}

?>

<p><a href="./index.php" title="Aller vers la version 100% PHP">Aller vers la version 100% PHP</a></p>

</body>

</html>

Ma base de donnée est une table composée de 5 champs : type_materiel / systeme_OS / lieu / ope_sec / nom_fichier

PS : a mon avis ya de quoi m'engueuler ^^
Modifié en dernier par Mirrix le 23 sept. 2011, 09:06, modifié 1 fois.

Mammouth du PHP | 19672 Messages

22 sept. 2011, 20:38

PS : a mon avis ya de quoi m'engueuler ^^
Pourquoi donc ?

Le seul point fatigant, c'est qu'au lieu du bouton [code], il serait de loin préférable d'utiliser le bouton [php] lorsque tu postes du code.

Ceci étant : où se situe ton problème ? Note bien qu'essayer d'adapter directement le code du tuto pour ton usage n'est pas forcément une bonne idée : le but du tuto, c'est de te permettre de comprendre justement le déroulement, qu'est-ce qui se passe à quel moment et à quel endroit du code. Il n'a jamais été écrit dans le but d'être directement utilisable dans une application. J'y ai en outre ajouté pas mal de commentaires : il faut tous les lire, ils ont leur importance.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 27 Messages

23 sept. 2011, 09:21

Merci pour ton aide. Par contre je me suis rendu compte que c'était pas la bonne solution pour mon application.

Ce qu'il faut que je fasse c'est plusieurs liste déroulante avec les différents choix, l'utilisateur sélectionne ce qu'il veut, il peut en laisser vide. Ca sera une sélection de critère de recherche. Le formulaire est ensuite envoyé et tout les champs renseignés doivent être trié et la base de donnée devra retourné un tableau en fonction de ces critères (que ce soit a base de OR ou AND).

Je vais créer un autre post pour montrer ce que j'ai déjà fais (et qui marche pas tout a fait, j'expliquerais pk)

Voila le nouveau post avec mon nouveau problème (toujours des problèmes haha) : php-debutant/formulaire-recherche-multi ... 60533.html