Liste lié

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 oct. 2005, 14:57

déjà, édite ton post et met le code entre balise
. Dans l'interface de saisie du texte, elle se trouve au dessus de la zone de saisie
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, 15:00

voilà c fait

et j'ai ça si je fais un echo de ces deux variable:

le $chaine rend -> s:4:"NERV";

le $client rend -> Array

Eléphant du PHP | 119 Messages

19 oct. 2005, 16:03

J'ai modifier une partie du code comme ceci:
<?php 
$sql = "SELECT DISTINCT client 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[$temoin_r] = $ligne['client'];
    $temoin_r=$temoin_r+1;

    } 
    /* On sérialise le tableau obtenu pour traitement par JavaScript */ 
    $chaine = htmlspecialchars(serialize($clients), ENT_QUOTES); 
?> 
En faisant ça j'ai ma liste de client qui apparait mais que leur premier lettre.

et mes valeurs sont celle ci:

le $chaine -> a:2:{i:0;s:4:"client1";i:1;s:4:"client2";}

le $client -> Array

et si dans ma requete sql je remet

"SELECT DISTINCT client, designation FROM master ORDER BY client;";

il me fait la liste mais met plusieurs fois le meme client et la mes valeurs sont:

le $chaine -> a:5:{i:0;s:4:"client1";i:1;s:4:"client1";i:2;s:4:"client2";i:3;s:4:"client2";i:4;s:4:"client2";}

le $client -> Array

Mammouth du PHP | 19672 Messages

19 oct. 2005, 22:31

Essaye de voir un peu ce que te retourne la requête SQL avant d'afficher la chaine sérialisée, fait donc afficher le tableau obtenu :
<?php
$sql = "SELECT DISTINCT client FROM master ORDER BY client;";
$connexion = pg_connect("user=adminpg password=alice dbname=intranet");

if($connexion != false)
{
    $recherche = pg_query($connexion, $sql);
    $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);
?>
<pre>
<?php
    var_dump($clients);
?>
</pre>
<?php
}
?>
Reviens avec le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 119 Messages

20 oct. 2005, 08:52

le var_dump du $clients me rend ça:

array(2) {
[0]=>
string(4) "CGEA"
[1]=>
string(4) "NERV"
}

Mammouth du PHP | 19672 Messages

20 oct. 2005, 08:52

Est-ce que c'est ce que tu attendais ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 119 Messages

20 oct. 2005, 09:01

Ouais c'est bien mes deux résultats mais il n'affiche que la premiere lettre dans le menu.

De plus ma vrai requete sql au final doit etre celle ci :

SELECT DISTINCT client, designation FROM master ORDER BY client;

Et si je faos ça mon $clients devient:

array(5) {
[0]=>
string(4) "CGEA"
[1]=>
string(4) "CGEA"
[2]=>
string(4) "NERV"
[3]=>
string(4) "NERV"
[4]=>
string(4) "NERV"
}

du coup j'ai des doubles de clients :/

Mammouth du PHP | 19672 Messages

20 oct. 2005, 09:07

Un truc m'échappe: si tu rajoutes le champ désignation, on devrait le voir aussi dans l'affichage, or tu ne m'affiche que le nom du client dans le retour: Est-ce que les valeurs du champ "designation" peuvent varier pour un même client ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 119 Messages

20 oct. 2005, 09:09

Oui exactement.

En fait c'est un tableau qui repertorie mes masters et designation et le nom de chacun d'entre eux, et je rajoute le nom du client pour chaque master.

mon tableau laster est comme ceci:

CREATE TABLE master
(
client varchar(30),
designation varchar(80),
cd int4,
dvd int4,
ref varchar(20)
)

je peux du coup avoir plusieurs fois le meme client mais chaque designation est unique.

Mammouth du PHP | 19672 Messages

20 oct. 2005, 09:32

Alors c'est normal que tu aies plusieurs fois le même client : et donc à priori il va falloir procéder avec deux requêtes : llla première pour lister seulement les clients, et la suivante pour les différentes lignes en fonction d'un client bien précis.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 119 Messages

20 oct. 2005, 09:35

ok donc j'ai ça:
<?php 
$sql1 = "SELECT DISTINCT client FROM master ORDER BY client;"; 
$sql2 = "SELECT designation FROM master;"; 
$connexion = pg_connect("user=adminpg password=alice dbname=intranet"); 

if($connexion != false) 
{ 
    $recherche = pg_query($connexion, $sql1); 
    $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); 
?> 
} 

Mais j'ai toujours le fait que dans ma liste je n'ai que la première lettre du nom du client qui apparait, je suis en train de fouiner dans le javascript mais je vois pas ou il le coupe comme ça

Eléphant du PHP | 119 Messages

20 oct. 2005, 09:46

un var_dump de $chaine me rend ceci:

string(56) "a:2:{i:0;s:4:"CGEA";i:1;s:4:"NERV";}"

Mammouth du PHP | 19672 Messages

20 oct. 2005, 09:46

Tu as donc les deux sociétés : c'est ce que tu voulais jusque là non ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 119 Messages

20 oct. 2005, 09:50

Oui je voulais juste préciser que les noms était pas complet c'est tout ^_^

on peut passer à la suite si c pas grave pour le moment.

Eléphant du PHP | 119 Messages

20 oct. 2005, 16:24

Bon je commence à bien comprendre la création de la $chaine

Voici mon code actuellement:
<?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
$sql1 = "SELECT client, designation from master ORDER BY client, designation;";
$sql2 = "SELECT designation FROM master;";
$connexion = pg_connect("user=adminpg password=alice dbname=intranet");

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

	$i = "";    
	$r = 1;
	$clients = array();

    
	while($ligne = pg_fetch_assoc($recherche))
    {
	
	$e= $ligne['client'];
	
	if($i != $e)
	{
		$clients[$r] = array();
		$clients[$r][0] = $ligne['client'];
		$clients[$r][1] = array();
		$i = $e;
		$id = 0;
	}

	$clients[$r][1][$id] = $ligne['designation'];
	$id++;
	$r++;
	
    }
    /* On sérialise le tableau obtenu pour traitement par JavaScript */
    $chaine = htmlspecialchars(serialize($clients), ENT_QUOTES);
?>
<pre>
<?php
	var_dump($clients);
	var_dump($chaine);
?>
</pre>
<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['departement']) && $_POST['departement'] != "")
{
    $region_selectionnee = $_POST['region'];
    $dept_selectionne = $_POST['departement'];
?>
<p>Vous avez sélectionné le département <?php echo($dept_selectionne); ?> dans la région <?php echo($region_stionnee); ?></p>
<?php
}
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
  <fieldset style="border: 3px double #333399">
  <legend>Sélectionnez une région</legend>
    <select name="region" id="region" onchange="changeDept(tab,this.value);">
      <option value="vide">- - - Choisissez une région - - -</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>
    <!-- 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="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
}
?>
<p><a href="./index.php" title="Aller vers la version 100% PHP">Aller vers la version 100% PHP</a></p>
</body>
</html>
Voilà ce que me renvoie un var_dump de $clients

Code : Tout sélectionner

array(5) { [1]=> array(2) { [0]=> string(4) "CGEA" [1]=> array(1) { [0]=> string(16) "MASTER 1 de CGEA" } } [2]=> array(1) { [1]=> array(1) { [1]=> string(16) "MASTER 2 de CGEA" } } [3]=> array(2) { [0]=> string(4) "NERV" [1]=> array(1) { [0]=> string(16) "MASTER 1 de NERV" } } [4]=> array(1) { [1]=> array(1) { [1]=> string(16) "MASTER 2 de NERV" } } [5]=> array(1) { [1]=> array(1) { [2]=> string(16) "MASTER 3 de NERV" } } }
et un var_dump de $chaine:

string(346) "a:5:{i:1;a:2:{i:0;s:4:"CGEA";i:1;a:1:{i:0;s:16:"MASTER 1 de CGEA";}}i:2;a:1:{i:1;a:1:{i:1;s:16:"MASTER 2 de CGEA";}}i:3;a:2:{i:0;s:4:"NERV";i:1;a:1:{i:0;s:16:"MASTER 1 de NERV";}}i:4;a:1:{i:1;a:1:{i:1;s:16:"MASTER 2 de NERV";}}i:5;a:1:{i:1;a:1:{i:2;s:16:"MASTER 3 de NERV";}}}"

Ma page s'affiche bien j'ai la premiere liste mais elle bug un peu ça donne
en premier choix "CGEA"
en deuxieme choix "" (un champ vide)
en troisieme choix "NERV"
en quatrieme "" (un champ vide)
en cinquieme "" (un champ vide)

alors que je devrait avoir que la ligne 1 et 3

et le deuxieme ne s'affiche pas du tout quand je selectionne dans le premier.

Voilà si y'a des idées je suis preneur là je séche un peu :/