Liste lié

Eléphant du PHP | 119 Messages

19 oct. 2005, 10:21

Bonjour,

j'ai vu votre poste http://www.phpfrance.com/forums/voir_sujet-4562.php sur le forum et j'adore votre solution javascript, mais je n'arrive pas à l'appliquer à ma situation :/

Voilà mon cas:

J'ai une table "master" construite comme ceci:

Code : Tout sélectionner

|______client______|________designation_______|____cd____|___dvd____|______ref________| | | | | | | |client varchar(30)| designation varchar (80) | cd int4 | dvd int4 | ref varchar (20)| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

dedans je rentre les differents master ce qui me donne ce genre de lignes:

Code : Tout sélectionner

| client1 | master1 | 4 | 0 | 15245 | client1 | master2 | 0 | 2 | 4578a | client2 | master3 | 1 | 0 | 45523 | client1 | master4 | 0 | 2 | 57896 | client3 | master5 | 0 | 1 | 35vb6 | client2 | master6 | 3 | 0 | 98632 . . . etc
Je voudrais en fait avoir une première liste qui ressort les clients par ordre alphabétique et sans doublon, et qu'un fois que j'ai selectionné le client j'ai 5 nouvelle liste avec dans chacune d'entre elle les designations qui correspondent au client selectionnés.

Avec un bouton valider qui m'enverrais dans une autre page en postant les 6 valeurs.

Voilà merci beaucoup si vous avez un bout de code à me filer car ça fait depuis lundi que je suis dessus et je suis au stade zéro encore :/

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

19 oct. 2005, 11:25

Je voudrais en fait avoir une première liste qui ressort les clients par ordre alphabétique et sans doublon
Donc une requête SQL à construire déjà.

Eléphant du PHP | 119 Messages

19 oct. 2005, 11:27

Oui pardon voici ma requete:

$SQL="select client, designation FROM master ORDER BY client;";

et je suis en postgresql

Eléphant du PHP | 119 Messages

19 oct. 2005, 11:54

A oui j'ai aussi une table client comme ceci:

client varchar(20), commercial varchar(80)

qui contient tout mes clients mais du coup en un seul exemplaire donc je pourrais utliser cette table pour eviter les doublons :)

Merci de me donner un coup de main je suis en vrai galère je sais même plus par ou commencer à force de lire des trucs à droite à gauche ^^

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 oct. 2005, 11:55

Si tu utilise la clause SQL DISTINCT, tu t'assure de ne remonter que 1 exemplaire de client identique

Code : Tout sélectionner

$SQL="select DISTINCT client, designation FROM master ORDER BY client;";
Modifié en dernier par zeus le 19 oct. 2005, 12:01, modifié 1 fois.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 119 Messages

19 oct. 2005, 11:59

Ok pour le distinct :) thx

mais mon vrai souci ce sont ces select :) à savoir que je ne sais pas du tout comment les faires.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 oct. 2005, 12:06

mais mon vrai souci ce sont ces select :) à savoir que je ne sais pas du tout comment les faires.
C'est à dire ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 119 Messages

19 oct. 2005, 12:12

Et bien mon post d'en haut pour un peu plus de détails si tu veux mais en gros:

j'ai une table de tout mes masters avec clients et les designations pour chaque master.

Et j'aimerais avoir une liste des clients et que quand je selectionne mon client 5 autres listes apparraissent avec comme contenu les designations qui correspondent au client selectionné dans la première liste.

J'avais vu qu'en javascript ça evite les refresh (voir le lien que j'ai mis en haut) mais je n'arrive pas à appliquer ceci à mon cas.

Voilà je sais que je demande beaucoup :/ mais j'en ai vraiment besoin

merci bocoup d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 oct. 2005, 12:16

Pour ta 2nd requete, il faut que tu sélectionne toutes les commandes où le client est le client sélectionné dans la 1ere liste :?

____
Parti manger ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 119 Messages

19 oct. 2005, 12:49

Ouais c'est ça, je vais le recapituler:


______________
|__choix_1___|V| -----> quand j'ai selectionner mon choix1 il faudrait


que j'ai 5 autres liste qui apparraissent avec les designations qui correspondent au choix 1

ma base MASTER contient deux colonnes seulement qui m'interessent
en fait une colonne "client" un varchar et une colonne "designation" varchar aussi

en fait je selectionne le tout comme ça:

SELECT DISTINCT client, designation FROM master ORDER BY client;

voilà c là que je sais pas du tout quoi faire après ^^

et je vais suivre tes conseils je vais manger aussi :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 oct. 2005, 13:45

Dans le code trouvé sur le tutorial, tu remarqueras qu'il y a une premièere requete pour afficher la liste des régions puis un seconed qui affiche la liste des départements pour la région sélectionnée.

la 1ere requete correspond à la sélection des région et les requetes suivantes doivent êtres calqués sur la 2nd requete.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 119 Messages

19 oct. 2005, 13:54

Oui mon problème c que dans l'exemple tout est fait a partir d'une liaison entre deux tables.

Moi je n'en ai qu'une et je me perd dans les variables, je n'arrive pas à voir comment l'appliquer pour mon cas.... en plus cela devrait meme etre plus simple mais je vois pas :/

Eléphant du PHP | 119 Messages

19 oct. 2005, 14:15

En fait je crois que tout mon problème se résume à reussir de recreer le $chaine qui se trouve dans l'exemple.

je ne saurais pas faire le code par rapport à ce que je veux pour avoir un $chaine propre car je ne sais meme pas quel forme il doit avoir :/

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 oct. 2005, 14:18

Donc il faut, dans la seconde requete, que tu sélectionnes toutes les désignations qui sont dans ta table et qui sont associées au client que tu as sélectionné.

Ce qu'il faut que tu commences à faire, c'est récupérer la valeur de la 1ere liste déroulante et de l'afficher.

Ensuite, quand tu auras réussi à faire ça, on se penchera sur la seconde requete
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 119 Messages

19 oct. 2005, 14:44

Voilà mon code:
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!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="./changeDept.js" charset="iso_8859-1"></script>
<?php
$sql = "SELECT DISTINCT client, designation FROM master ORDER BY client;";
$connexion = pg_connect("user=adminpg password=alice dbname=intranet");

if($connexion != false)
{
    $recherche = pg_query($connexion, $sql);

    $temoin_r = 0;

    $client= array();

    
	while($ligne = pg_fetch_assoc($recherche))
    {

	$clients = $ligne['client'];

    }
    /* On sérialise le tableau obtenu pour traitement par JavaScript */
    $chaine = htmlspecialchars(serialize($clients), 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>
<br>
<form action="test.php" method="post" id="chgdept">
  <fieldset style="border: 3px double #333399">
  <legend>Sélectionnez une client</legend>
    <select name="client" id="client" onchange="changeDept(tab,this.value);">
      <option value="vide">- - - Choisissez un client - - -</option>
    <?php
    /* Construction de la première liste : on se sert du tableau PHP */
    $nbr = count($clients);
    foreach($clients as $nr => $nom)
    {
        ?>
    <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option>
<?php
    }
    ?>
    </select>
  <span id="blocDepartements"></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
}
?>
<br>
le $chaine <? echo $chaine;?>
</body>
</html>
et l'affichage du $chaine me rend juste ça : s:4:"client2";

Ma page s'affiche bien j'ai la liste mais elle n'a aucune valeur...

alors que j'ai plusieurs client[/php]
Modifié en dernier par saebakun le 19 oct. 2005, 14:59, modifié 1 fois.