Page 1 sur 3

Liste lié

Posté : 19 oct. 2005, 10:21
par saebakun
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 :/

Posté : 19 oct. 2005, 11:25
par mere-teresa
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à.

Posté : 19 oct. 2005, 11:27
par saebakun
Oui pardon voici ma requete:

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

et je suis en postgresql

Posté : 19 oct. 2005, 11:54
par saebakun
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 ^^

Posté : 19 oct. 2005, 11:55
par zeus
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;";

Posté : 19 oct. 2005, 11:59
par saebakun
Ok pour le distinct :) thx

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

Posté : 19 oct. 2005, 12:06
par zeus
mais mon vrai souci ce sont ces select :) à savoir que je ne sais pas du tout comment les faires.
C'est à dire ?

Posté : 19 oct. 2005, 12:12
par saebakun
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

Posté : 19 oct. 2005, 12:16
par zeus
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 ;)

Posté : 19 oct. 2005, 12:49
par saebakun
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

Posté : 19 oct. 2005, 13:45
par zeus
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.

Posté : 19 oct. 2005, 13:54
par saebakun
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 :/

Posté : 19 oct. 2005, 14:15
par saebakun
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 :/

Posté : 19 oct. 2005, 14:18
par zeus
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

Posté : 19 oct. 2005, 14:44
par saebakun
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]