petit pb avec un select

Raymon domenek
Invité n'ayant pas de compte PHPfrance

04 avr. 2007, 16:08

Bonjour la communauté,
je crée actuellement une page qui doit m'afficher un tableau de valeurs (11 colonnes) généré par une requête. La particularité de ce tableau c'est qu'il possède en en-tête de chaque colonne une liste déroulante permettant à l'utilisateur de filtrer les résultats affichés, comme il pourrait le faire sur Excel avec la fonction "filtre automatique". Tout se passe impeccable pour l'instant : mon tableau s'affiche trés bien, les <SELECT> sont bien positionnés correctement et sont remplis avec les bonnes valeurs permettant d'éxécuter le filtrage. J'en suis maintenant à la dernière étape : récuperer la(les) valeur(s) selectionnée(s) par l'utilisateur dans le (ou les) <SELECT> pour réafficher le tableau correctement filtré. Pour comprendre le principe je travaille pour l'instant uniquement sur le première colonne (colonne "annee") en me disant que si j'arrive à coder pour le 1er <SELECT>, il suffira juste de réappliquer le principe sur les 10 autres. Mon problème c'est que quelquesoit la valeur que je sélectionne dans ce <SELECT>, c'est toujours la même valeur qui m'est renvoyé, à savoir la valeur "*" (définie dans le <SELECT> comme la valeur "Tous"). Pourriez vous m'aider? Je pense que la solution ne doit pas être trés loin mais je ne la vois pas.
Voici mon code :

La page :
en début de page je récupère la valeur du >SELECT> annee :
if( !isset($_POST['annee'])) {
  $wherenom = "1=1 ";}
elseif ($_POST['annee'] = "*") {
  $wherenom = "1=1 ";
} else {
  $wherenom = "annee=".$_POST['annee']." ";
}
echo $_POST['annee'];  //pour tester
echo "<br>";          //pour tester
echo $wherenom;       //pour tester
La requête pour extraire les infos du tableau:
                   $requete = "SELECT annee,typ,numaffaire,av,responsable,descriptif,client,totalht,labo,
                    typcontrat,resp_scien FROM $IdUser";
                    $ReqDroita = mysql_query($requete,$db) or die('Erreur SQL !<br>'.mysql_error());
j'affiche le tableau (en-tête de colonnes):

Code : Tout sélectionner

<table border="0" cellpadding="0" cellspacing="0" width="980" align="center"> <tr><td class="h13"> <table border="1" width="980" align="center"> <tr> <td class="h6c">Année</td> <td class="h6c">Type</td> <td class="h6c">N° Affaire</td> <td class="h6c">Av.</td> <td class="h6c">Responsable</td> <td class="h6c">Descriptif</td> <td class="h6c">Client</td> <td class="h6c">Total HT</td> <td class="h6c">Labo</td> <td class="h6c">Type Contrat</td> <td class="h6c">Resp. Scientifique</td>
puis les <SELECT>
 //mise en place des select
 echo "<tr>";
 echo "<form name='chgfiltr' action='' method='post' id='chgfiltr'>";
             $latable = 0;
             $nom_colonne = null;
             $nom_colonne = array('annee','typ','numaffaire','av','responsable','descriptif','client','totalht','labo','typcontrat','resp_scien');
             for($i=0;$i<sizeof($nom_colonne);$i++)
             {
             echo "<td>";
             $nomduchamp = $nom_colonne[$i];
             $codehtml = arraytoselect(pour_select($nomduchamp,$IdUser,$wherecond,$Labo,$cond,$latable),$nomduchamp);
             echo $codehtml;
             echo "</td>";
             }
echo "</form>";
 echo "</tr>";
//fin mise en place des selects
Enfin j'affiche les données du tableau (mais ca je vous en fais grâce).
Par contre, voiçi les fonctions que j'utilise dans un fichier externe pour construire les <SELECT>
 function pour_select($nomduchamp,$IdUser,$wherecond,$Labo,$cond,$latable)
 {
 //-------------------------------
//Connexion à la base
//----------------------
require('conf.php');
$db = mysql_connect($host,$user,$password);
mysql_select_db($database,$db);
 //déclaration du tableau
 $tablo = null;
 $tablo = array();
 if($cond ==0){
 $req = "SELECT DISTINCT $nomduchamp FROM $IdUser WHERE $wherecond ORDER BY $nomduchamp";}
 if($cond ==1){
 $req = "SELECT DISTINCT $nomduchamp FROM $IdUser,$latable WHERE $wherecond ORDER BY $nomduchamp";}
 
 $res = mysql_query($req) or die (mysql_error());
 while($row = mysql_fetch_array($res))
 {
  $tablo[] = $row[$nomduchamp];
  }
//print_r($tablo);
return $tablo;
 }

 function arraytoselect ($tablo,$nomduchamp)
 {
//-------------------------------
//Connexion à la base
//----------------------
require('conf.php');
$db = mysql_connect($host,$user,$password);
mysql_select_db($database,$db);


$select = "<select name=\"$nomduchamp\" id=\"$nomduchamp\" onchange=\"document.chgfiltr.submit()\">\n";
$select .="<option value=\"*\">Tous</option>";
for ($i=0; $i<count($tablo); $i++)
    {
    $select .= "<option value=\"$tablo[$i]\">$tablo[$i]</option>\n";
    }
 $select .= "</select>";
return $select;
}
Voilà, je pense avoir été à peu prés complet...
Merci d'avance pour vos réponses :)

Mammouth du PHP | 1353 Messages

04 avr. 2007, 17:58

Bonjour,

désolé je n'ai pas tout lu mais je me suis arreté au premier détail "bizarre" de ton code :
elseif ($_POST['annee'] = "*") { 
A mon avis tu veux savoir si $_POST['annee'] à la valeur *, auquel cas je conseillerai plutot un == plutot qu'une affectation...
elseif ($_POST['annee'] == "*") { 
je ne sais pas si ca suffira mais ca doit pouvoir aider ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

raymond domenech
Invité n'ayant pas de compte PHPfrance

04 avr. 2007, 18:13

Merci de ton aide !!
c'est en effet le pb!! je m'en suis rendu compte il y a qq minutes.
J'ai un aure soucis maintenant. Comment se fait-il que dans mes lises déroulantes, la première valeur ("Tous") ne soit pas selectionnable? Je veux dire par là que pour n'importe quelle valeur selectionnée dans la liste déroulante, la page est rechargée et la variable $_POST correctement récupérée. Sauf avec la première valeur (Tous). Lorsque je la choisi, il ne se passe rien...

Mammouth du PHP | 1353 Messages

05 avr. 2007, 14:35

Lorsque je la choisi, il ne se passe rien...
C'est à dire ? Si tu fais un echo de la valeur transmise tu obtiens bien * et la requete marche pas ? Ou alors le formulaire ne se valide meme pas ? Si tu remplaces par 0 et que tu fais un cas si $variable = 0 ca fonctionne ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Raymond domenech
Invité n'ayant pas de compte PHPfrance

05 avr. 2007, 18:45

Lorsque je la choisi, il ne se passe rien...
C'est à dire ? Si tu fais un echo de la valeur transmise tu obtiens bien * et la requete marche pas ? Ou alors le formulaire ne se valide meme pas ? Si tu remplaces par 0 et que tu fais un cas si $variable = 0 ca fonctionne ?
Pour répondre à ta question, la valeur renvoyé par echo était toujours *.
Mais j'ai reglé le pb suite à une remarque qui m'a été faîte un peu plus haut.
comme quoi : petite cause...grands effets !!
Merci de ton aide en tout cas.
Modérateur, mon sujet est résolu :)

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

05 avr. 2007, 19:40

Modérateur, mon sujet est résolu :)
Résolu ajouté :)

(ceci dit, tu peux spécifier le résolu toi même, suffit juste de t'inscrire
pour avoir accès à notre merveilleux bouton : Image ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...