Page 1 sur 2

Liste déroulante option tout

Posté : 03 mars 2006, 12:41
par lafieau
Bonjour bonjour !

Je pense que ce problème a déjà était posé mais malgré mes recherches je n'ai pas trouvé. Donc si quelqu'un pouvait m'aider soit à retrouver un sujet similaire ou tout simplement voir mon problème.

J'explique :
J'ai une liste déroulante qui affiche toutes mes rubriques en fonction d'une table mais en plus de ces rubriques je voudrais afficher "toutes".

Merci d'avance !

Posté : 03 mars 2006, 12:44
par mario
montre nous un bout de code stp :wink:

Posté : 03 mars 2006, 12:48
par lafieau
Liste :

Code : Tout sélectionner

<select name="evenement2" id="evenement2"> <?php do { ?> <option value="<?php echo $row_rs2evenement['evenement']?>"><?php echo $row_rs2evenement['evenement']?></option> <?php } while ($row_rs2evenement = mysql_fetch_assoc($rs2evenement)); $rows = mysql_num_rows($rs2evenement); if($rows > 0) { mysql_data_seek($rs2evenement, 0); $row_rs2evenement = mysql_fetch_assoc($rs2evenement); } ?> </select>
Requête :

Code : Tout sélectionner

$query_rs2evenement = "SELECT distinct evenement FROM tb_evenements ORDER BY evenement ASC";

Posté : 03 mars 2006, 12:58
par Ryle
Tu dois déjà avoir une réponse dans tes messages privés ;)

Tu ajoutes une option "<option value="">Tout afficher</option>" juste après ton <select ...> et avant ton code php, et tu gères en php le fait de ne pas ajouter de WHERE dans ta requête lorsque la valeur de evenement2 est vide :)

Posté : 03 mars 2006, 13:07
par lafieau
Ryle !

Euh ! Oui j'avais la tête ailleurs, désolée ! :oops:

Ben je regarde tout ça de plus près et je vous tiens au courant de l'évolution !!!

Merci !

Posté : 03 mars 2006, 13:12
par Ryle
Y a pas de soucis.. moi même j'avais mis un moment avant de remarquer que j'avais un message ;)

Posté : 03 mars 2006, 13:41
par lafieau
The NULLE de retour !!!

Par rapport à ce que tu viens de m'expliquer, est-ce qu'il faut que je déclare à nouveau une variable, celle du nomselect car ça m'affiche ce message :

Notice: Undefined variable: evenement2 in c:\program files\easyphp1-8\www\site\evenementsdecouvertes.php on line 30

Notice: Undefined variable: evenement2 in c:\program files\easyphp1-8\www\site\evenementsdecouvertes.php on line 31
Erreur de syntaxe près de 'ASCWHERE evenement=' à la ligne 1

evenement2 étant le nom de ma liste.[/code]

Posté : 03 mars 2006, 14:25
par zeus
Vous est-il possible de détailler le contenu du MP sur ce thread ?

Immaginez un instant le développeur qui vient de passer 1h2h à chercher la solution à son pb, qui tombe sur ce message qui correspond à son erreur et qui ne trouve pas la solution parce que vous l'avez échangée par MP ...

Posté : 03 mars 2006, 15:18
par lafieau
Désolé le MP en question toujours en rapport avec le sujet :

Code : Tout sélectionner

<select name="monSelect"> <option value="">Afficher tout (Ne pas filtrer)</option> <option value="1">Filtrer sur élément 1</option> <option value="2">Filtrer sur élément 2</option> ... </select>
Comme ça, si la valeur de $monSelect est différente de vide, on ajoute des conditions de filtre (WHERE monChamp = $monSelect) et s'il est vide, on ne le précise pas, du coup tous les enregistrements sont ramenés :
$sql="SELECT * FROM maTable"; 
if($monSelect!="") 
  $sql.=" WHERE monChamp = $monSelect";  

Posté : 03 mars 2006, 15:47
par Ryle
Oops, sorry ! le mp avait été envoyé avant la création du topic :) Il est effectivement un peu plus détaillé que mon résumé ;)

Pour ton problème, en principe non, tu ne devrais pas avoir besoin de redéclarer ta variable... En principe tu fonctionnes sur un select evenement2 et une requête qui doit avoir une condition du type
"SELECT * FROM tb_evenements WHERE evenement = '$evenement2' (ou quelque chose du genre :))

Ton select devrait donc ressembler à ceci :
<select name="evenement2" id="evenement2"> 
  <option value="">Tous les événements</option>
  <?php 
    while ($row_rs2evenement = mysql_fetch_assoc($rs2evenement)) {  
  ?> 
      <option><?php echo $row_rs2evenement['evenement']?></option> 
      // le value n'est pas utile s'il a la meme valeur que le libellé
  <?php 
    } // j'ai inversé le do-while en un while simple (s'il n'y a pas d'élément il ne rentre pas dedans)
    ...
?> 
</select>
Et ta requête de recherche avec le filtre :
$sql = "SELECT * FROM taTable ";
if(!isEmpty($evenement2)) // si un evenement est sélectionné (non vide)
  $sql.= " WHERE evenement = $evenement2 "; // on ne ramene que sur l'événement
$sql.= " ORDER BY ... "; // l'order by vient toujours à la fin

Posté : 03 mars 2006, 16:11
par lafieau
Merci Ryle, mais maintenant j'ai ce message d'erreur :
Fatal error: Call to undefined function: isempty() in c:\program files\easyphp1-8\www\gitesnormandie\evenementsdecouvertes.php on line 30

Posté : 03 mars 2006, 16:17
par Ryle
oops, ma faute.. c'est empty(), pas isEmpty :)

Posté : 03 mars 2006, 16:43
par lafieau
Oui mais...

Du coup pour ma page résultat ça change tout, non ? :roll:

Posté : 03 mars 2006, 16:50
par Ryle
En principe non, ça ne devrait rien te changer dans tes résultats, la requête va simplement ramener les résultats pour tout événement confondu, au lieu des résultats pour un seul événement (celui sélectionné)

Donc en dehors de la quantité de résultats retournés, il ne devrait pas y avoir d'autres impacts.. on ne modifie que la requête de recherche :)

Posté : 03 mars 2006, 16:57
par lafieau
Ben ça fonctionne toujours par événement mais si j'opte pour tous il ne trouve aucun enregistrement et m'affiche en haut de la page l'erreur suivante :
Notice: Undefined index: datefin in c:\program files\easyphp1-8\www\site\evenementsdecouvertesresultat.php on line 53

Line 53 :
$row_Recordset2['datefin']= preg_replace('/^(.{4})-(.{2})-(.{2})$/','$3.$2.$1',  $row_Recordset2['datefin']);
Ca se complique !