IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Trier par une listbox dont le 1er select serait la totalité [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Trier par une listbox dont le 1er select serait la totalité
    Bonjour à tous, je vous exprime mon soucis, cela fait pas mal de temps que je m'y penche sans jamais arriver trouver vraiment la solution.

    Je vous explique un peu, sur mon site apparaît des petites annonces, et comme j'en ai de plus en plus, je voulais faire un tri par département.

    Seulement voila, en utilisant une listbox, je suis arriver au résultat suivant, soit j'arrive sur la page et je dois choisir un département pour afficher quelque chose, soit j'arrive sur la page et tout s'affiche mais je ne peux pas trier par département

    J'apprends le php au fur et à mesure donc soyez clément sur ma façon de coder.
    Je vous poste mon code actuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    <table width="500" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000">
      <tr>
        <td><table width="500" border="0" cellpadding="0" cellspacing="1" bgcolor="#FFE9B5">
          <tr>
            <td width="100">Choix par dept </td>
            <td><form name="indicateur" action="test.php" method="post">
              <div align="center">
                <select name="lieu">
                  <option value="%" selected="selected">Tout</option>
                  <option value="01">01</option>
                  <option value="02">02</option>
                  <option value="03">03</option>
                  <option value="04">04</option>
                  <option value="05">05</option>
                  <option value="06">06</option>
                  <option value="07">07</option>
                  <option value="08">08</option>
                  <option value="09">09</option>
                  <option value="10">10</option>
                  <option value="11">11</option>
                  <option value="12">12</option>
                  <option value="13">13</option>
                  <option value="14">14</option>
                  <option value="15">15</option>
                  <option value="16">16</option>
                  </select>
                <input name="submit" type="submit" value="soumettre">
              </div>
            </form></td>
          </tr>
        </table></td>
      </tr>
    </table>
    <br>
    <br>
     
     
    <table cellspacing=0 cellpadding=0 width=500 border=0>
      <tbody>
        <tr>
          <td colspan=3 height=17><p class=bold><img src="../title/t_petites-annonces.gif" width="511" height="17"></p></td>
        </tr>
        <tr>
          <td colspan=3><img src="../cadre/bloc-haut.gif" width="511" height="34"></td>
        </tr>
        <tr>
          <td background=../commun/pix-noir.gif 
                height="100%"><img height="100%" 
                src="../commun/pix-noir.gif" width=1></td>
          <td width=492 bgcolor=#ffe9b5 class="bold"><a href="index-annonce.php"><br>
                <img src="../menu-agenda/photo/puce-o.gif" width="9" height="9" border="0"> Poster une annonce</a><br>
                <br>
                <table border=0 cellspacing="0" cellpadding="3" width="100%">
                  <tr>
                    <td><div class=bold> Date</div></td>
                    <td><div class=bold>Titre</div></td>
                    <td><div class=bold>Dept.</div></td>
                  </tr>
                  <?php
    // connexion a la base
    require_once("admin/connexion.php");
     
    $BD_link = mysql_connect("${'BD_host'}${'BD_port'}", $BD_login, $BD_pass) or die("Connexion de la base impossible : ". mysql_error());
     
    //selection de la table
     
     
    mysql_select_db($BD_base, $BD_link) or die("S&eacute;lection de la base impossible : ". mysql_error());
    $Requete_SQL2 = "SELECT * FROM test WHERE valid = '1' AND lieu LIKE '$lieu' ORDER BY date DESC ";
     
    $result = mysql_query($Requete_SQL2) or die("Erreur de S&eacute;lection dans la base : ". $Requete_SQL2 .'<br />'. mysql_error());
     
    // creation et affichage dans la table
    error_reporting(55); 
     
     
    while($val=mysql_fetch_array($result))
    if($val["valid"] == 1)
    {
    $id=$val[ID];
    $num=$val[date];
    $nom=$val[titre];
    $pre=$val[lieu];
     
     
    echo"<tr>";
    echo"<td width=84 align=left>";
    echo"<DIV class=bold>";
    echo"$num";
    echo"</DIV>";
    echo"</td>";
    echo"<td align=left>";
    echo"<SPAN class=normal>";
    echo"<a href=\"test.php?id=",$id,"\">",$nom,"</a>";
    echo"</SPAN>";
    echo"</td>";
    echo"<td width=20 align=left>";
    echo"<DIV class=bold>";
    echo"$pre";
    echo"</DIV>";
    echo"</td>";
    echo"</tr>";
    }
     
    mysql_close();
    ?>
                </table>

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Si je mets un % pour la valeur de tout, il m'affiche l'intégralité mais il faut que je clique pour l'afficher, ce n'est pas quand on arrive sur la page.

    Et quand je choisis un département, il ne m'en affiche qu'un, alors que ma base en contient au mini 2 par département...

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Personnellement je ne comprends rien à ce que tu décris ni ce que tu veux comme resultat.

    Est-ce que tu arrives a faire ta liste de departement ?
    Qu'est ce que l'utilisateur doit voir avant d'avoir choisi un departement ?
    Est-ce que l'utilisateur peut choisir plusieurs departements ?

    Cependant ta variable $lieu doit etre specifiquement définie comme venant du formulaire.
    Si tu travailles avec les variables globales activées, arrete de le faire car c'est source de problèmes et cette option doit disparaitre avec PHP6.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Alors pour le moment, j'ai ce code qui marche très bien et affiche une liste d'annonce en vrac trier par date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
                  <?php
    // connexion a la base
    require_once("admin/connexion.php");
     
    $BD_link = mysql_connect("${'BD_host'}${'BD_port'}", $BD_login, $BD_pass) or die("Connexion de la base impossible : ". mysql_error());
     
    //selection de la table
     
    mysql_select_db($BD_base, $BD_link) or die("S&eacute;lection de la base impossible : ". mysql_error());
    $Requete_SQL2 = "SELECT * FROM matable WHERE valid = '1' ORDER BY date DESC ";
     
    $result = mysql_query($Requete_SQL2) or die("Erreur de S&eacute;lection dans la base : ". $Requete_SQL2 .'<br />'. mysql_error());
     
    // creation et affichage dans la table
    error_reporting(55); 
     
     
    while($val=mysql_fetch_array($result))
    if($val["valid"] == 1)
    {
    $id=$val['ID'];
    $num=$val['date'];
    $nom=$val['titre'];
    $pre=$val['lieu'];
    $aFile=$val['aFile'];
     
    echo"<tr>";
    echo"<td width=84 align=left>";
    echo"<DIV class=bold>";
    echo"$num";
    echo"</DIV>";
    echo"</td>";
    // image APN
    echo"<td align=left>";
     if ($aFile) echo '<img src="stockage/apn.gif" />'; 
        else echo '<img src="stockage/pix-trans.gif">' ; 
    echo"</td>";
    //
    echo"<td align=left>";
    echo"<SPAN class=normal>";
    echo"<a href=\"mapage.php?id=",$id,"\">",$nom,"</a>";
    echo"</SPAN>";
    echo"</td>";
    echo"<td width=20 align=left>";
    echo"<DIV class=bold>";
    echo"$pre";
    echo"</DIV>";
    echo"</td>";
    echo"</tr>";
    }
     
    mysql_close();
    ?>
    Je souhaiterais rajouter une listbox pour que les internautes puisse afficher QUE le département qui les intéressent.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Grosse maille je verrais un truc comme ca, en prenant le partie de ne proposer que des departements pour lesquels il y a un choix dans la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    // connexion a la base
    require_once("admin/connexion.php");
     
    $BD_link = mysql_connect("${'BD_host'}${'BD_port'}", $BD_login, $BD_pass) or die("Connexion de la base impossible : ". mysql_error());
     
    // formulaire de choix de departement 
    $sql_dpt = "SELECT lieu FROM matable ORDER BY lieu";
    $db_dpt = mysql_query($sql_dpt) or die("Erreur de S&eacute;lection dans la base : ". $sql_dpt .'<br />'. mysql_error());
    echo '
    <form action="'.$_SERVER['PHP_SELF'].'" method="post">
    <select name="dpt">';
    while ($row = mysql_fetch_array($db_dpt)) {
    	echo '<option value="' . $row['lieu'] . '">' . $row['lieu'] . '</option>';
    }
    echo '
    </select>
    <input type="submit" value="Choisir" />
    </form>';
     
    //selection de la table
     
    mysql_select_db($BD_base, $BD_link) or die("S&eacute;lection de la base impossible : ". mysql_error());
     
    if ($_POST["dpt"]) {
    	$critere = 'AND lieu like "' . $_POST["dpt"] . '"';
    }
     
    $Requete_SQL2 = "SELECT * FROM matable WHERE valid = '1' " . $critere . " ORDER BY date DESC ";
     
    $result = mysql_query($Requete_SQL2) or die("Erreur de S&eacute;lection dans la base : ". $Requete_SQL2 .'<br />'. mysql_error());

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Ca marche nickel, c'est exactement ce que je voulais, à une chose pres, comme j'ai une boucle, il m'affiche dans la liste box crée si j'ai deux annonces dans le 30, il m'affiche 2 fois 30. Mais franchement, depuis le temps que je cherchais c'est génial même avec ce petit defaut.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Pour palier à la répetition dans la listbox, j'utilise un DISTINCT, je fais bien ou pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_dpt = "SELECT DISTINCT lieu FROM annimmovente ORDER BY lieu";
    Et encore merci à vous tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] trier par une valeur alphabétique convertie en numérique
    Par djelloharmel dans le forum VB.NET
    Réponses: 6
    Dernier message: 25/01/2012, 15h12
  2. [MySQL] Trier par une partie du champ
    Par vivi21 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2011, 20h48
  3. Changer un input text par une listbox (dynamiquement)
    Par SPACHFR dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/05/2009, 18h16
  4. [Tableaux] trier par une vari
    Par madame dans le forum Langage
    Réponses: 5
    Dernier message: 28/02/2006, 11h38
  5. [debutant][servlet]erreur causée par une listBox
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2004, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo