[RESOLU] Liste deroulante dynamique avec base MYSQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Liste deroulante dynamique avec base MYSQL

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 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

Re: Liste deroulante dynamique avec base MYSQL

par Cyrano » 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.

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 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 ^^

Re: Liste deroulante dynamique avec base MYSQL

par moogli » 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é).

@+

Re: Liste deroulante dynamique avec base MYSQL

par Cyrano » 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.

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 22 sept. 2011, 15:10

Ok ok.

Par contre je m'en sors pas du tout avec le code php pour la version Javascript, moi j'ai pas d'indices dans ma table du coup je suis totalement perdu dans le code :p

Re: Liste deroulante dynamique avec base MYSQL

par Cyrano » 22 sept. 2011, 14:56

Attention, Java n'est pas JavaScript, voir le post-it que j'avais publié il y a pas mal de temps dans ces forums.

Par ailleurs, à moins de tomber sur un fondu qui naviguerait encore avec Internet Explorer 3 ou encore pire, tous les navigateur actuels supportent le JavaScript. Là où le problème pourrait se poser, ce serait dans le cas de navigateurs alternatifs pour personnes souffrant de déficiences visuelles ou motrices. Dans ce cas, la version 100% PHP sera préconisée.

Donc la solution dans ce cas, c'est de monter la version 100% PHP et ensuite, une fois que c'est bien fonctionnel, implémenter le JavaScript qui ne fonctionnera que si le JavaScript est supporté mais sans empêcher le fonctionnement pour les autres. Ces dernier auront juste un moins moins de rapidité et de souplesse mais ils pourront utiliser l'application.

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 22 sept. 2011, 14:39

Il y a toujours le probleme a savoir si le visiteurs aura Java. Car je fais ca pour mon boulot, ca sera un site hebergé en interne, j'espere que les PC qui iront sur le site auront Java d'installé

Re: Liste deroulante dynamique avec base MYSQL

par Cyrano » 22 sept. 2011, 14:36

Ça va dépendre un peu de ton aisance avec le JavaScript et/ou avec le PHP.

Là, tu pars d'une seule table avec, à priori, un nombre de lignes de données relativement limité. Donc la version JavaScript sans Ajax serait mon choix personnel : plus rapide puisqu'aucun échange avec le serveur n'est plus nécessaire une fois la page chargée, et en construisant ta page avec la liste au format JSON, ce sera directement exploitable en JavaScript. Mais il faut pour cela que tu sois à l'aise avec la manipulation de listes en objets JavaScript. Ceci étant, rien ne t'empêche d'apprendre le cas échéant ;)

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 22 sept. 2011, 14:31

Le mieux a ton avis c'est en php pur ou avec du javascrpit (ou même AJAX), ou plutôt lequel serait a ma porter pour le transposer correctement ?

Re: Liste deroulante dynamique avec base MYSQL

par zeus » 22 sept. 2011, 13:00

Modération :
Pour avoir plus de réponses, le sujet est déplacé dans une forum plus adapté

Re: Liste deroulante dynamique avec base MYSQL

par Cyrano » 22 sept. 2011, 09:51

Pas de soucis : ce qui va changer, ce sera la requête pour établir la seconde liste.

Il est vrai que le tuto se base sur plusieurs tables, mais il pourrait aussi bien y en avoir une douzaine, ça n'a que peu d'importance. Ce qu'il faut comprendre, c'est dans le déroulement du code à quel moment tu dois récupérer le contenu de la seconde liste et comment tu dois donc formuler ta requête.

Essaye de distinguer les différents composants qui forment le tout : la gestion de l'évènement onchange et la collecte des données selon la valeur récupérée, cette dernière dépendant de la première.

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 22 sept. 2011, 09:03

Mais la ya plusieurs table dans la base, moi j'en ai qu'une, est ce quand même possible ?

Re: Liste deroulante dynamique avec base MYSQL

par Cyrano » 21 sept. 2011, 16:25

... ce que je voudrais c'est ne pas avoir a recharger une page avec un nouveau menu déroulant, je voudrais que toute les listes déroulantes soient sur la même page et que le contenu de la deuxième varie en fonction de ce que j'ai tapé dans la première.
Solution ici => faq-tutoriels/formulaires-listes-deroul ... t4562.html

Re: Liste deroulante dynamique avec base MYSQL

par Mirrix » 21 sept. 2011, 14:15

salut,

tu ne sais pas exploiter les donnée d'un formulaire => http://www.phpdebutant.org/article56.php ou http://www.lephpfacile.com/cours/8-recu ... ormulaires

lorsque tu aura corrigé cela ça ira :)

@+
Je vois pas ce que tu veux dire ou alors je vois pas ou sont les erreurs :p