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 :

2 listes deroulantes et mysql [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Par défaut 2 listes deroulantes et mysql
    Bonjour et bonne année a tous et toutes

    Je suis en train de perdre les quelques cheveux qui me restent sur la tête sur un projet.
    Je plante rapidement le décor...
    Il s'agit d'un annuaire pour les commercants du departement.
    Pour que ca soit plus lisible pour le visiteur, il y aura 2 listes deroulantes
    La premiere pour selectionner la ville ou toutes.
    La deuxieme pour selectionner l'activité ou toutes...
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select name="activite" id="activite">
    <option selected="selected" value="toutes">-----------------</option>
    <option value="voyage">Voyages</option>
    <option value="informatique">Informatique</option>
    <option value="charcuterie">Charcuterie</option>
    </select>
    et meme chose pour la ville
    par la fonction POST, je recupere bien les variables, mais là ou je coince serieusement c'est l'affichage en fonction des choix du visiteur.
    Lorsqu'il selectionne une ville et une activité, ca fonctionne bien avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql="SELECT * FROM articom WHERE ville='$ville' AND categorie='$categorie' ";
    $req=mysql_query($sql)or exit ('Erreur SQL !'.$sql.'<br>'.mysql_error());
    while( $data=mysql_fetch_array($req) ){
    $id=$data['id'];
    $ville=$data['ville'];//ville de reference
    $categorie=$data['categorie'];//activite de l'entreprise
    $nom=$data['nom'];//nom de l'entreprise
    $adresse=$data['adresse'];//adresse de la page sur laquelle est affichée l'entreprise
     
    echo "<table><tr><td>$ville</td><td> $categorie</td><td> $nom</td><td><a href=$page>Voir</a></td></tr></table>";
     
    }
    Mais c'est avec la selection 'toutes' que j'ai un problème...
    en fait c'est les choix en dehors de selection precise d'une ville et d'une activité.

    Merci à vous

  2. #2
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Par défaut
    Il faut que tu changes ta requête ci-dessous pour tenir compte de ce cas de figure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM articom WHERE ville='$ville' AND categorie='$categorie' ";
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (isset($_POST['ville'] && isset($_POST['activite']) ) {
    $ville= htmlspecialchars($_POST['ville']) ;
    $categorie= htmlspecialchars($_POST['activite']) ;
    $condition = ($ville == "toutes" && $categorie == "toutes")? "": "WHERE ville='$ville' AND categorie='$categorie'"  ;
    $sql = "SELECT * FROM articom " . $condition ;
    ... recup des datas 
    ... affichage de ton tableau
    }
    à adapter selon tes variables récupérées de POST.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Tout d'abord, quelques remarques :
    • ton modèle de données n'est pas correct, tu devrais avoir 3 tables :
      • table 'ville'
        id_ville
        cp
        ville
      • table 'categorie'
        id_categorie
        categorie
      • table 'articom'
        id_articom
        ville_id
        categorie_id
        nom
        adresse
    • il vaut mieux éviter "SELECT * ..." et utiliser "SELECT id, nom, etc...".
    • il vaut mieux privilégier les apostrophes que les guillemets pour encadrer les chaînes de caractères.

    Compte tenu de ce qui précède, voici un bout de code d'essai :
    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
    <?php
      require ('SetPath.php');
     
      $connexion = connexion();
     
      //----------------------------------------------------------------------------
      //-- ajouter les paramètres de connexion -------------------------------------
      //----------------------------------------------------------------------------
     
      if(isset($_POST['btn']))
      {
        $where = '';
        if ($_POST['ville'] > 0)
        {
          $where .= ' WHERE id_ville = ' . $_POST['ville'];
        }
        if ($_POST['categorie'] > 0)
        {
          if ($where == '')
            $where .= ' WHERE id_categorie = ' . $_POST['categorie'];
          else
            $where .= ' AND id_categorie = ' . $_POST['categorie'];
        }
     
        $sql = 'SELECT id_articom, nom, cp, ville, categorie
                FROM articom
                JOIN ville ON id_ville = ville_id
                JOIN categorie ON id_categorie = categorie_id'
                . $where;
        $result = mysql_query($sql)
          or die(mysql_error());
        while( $data = mysql_fetch_array($result) )
        {
          $id = $data['id_articom'];
          $cp = $data['cp'];//ville de reference
          $ville = $data['ville'];//ville de reference
          $categorie = $data['categorie'];//activite de l'entreprise
          $nom = $data['nom'];//nom de l'entreprise
          $page = '';//adresse de la page sur laquelle est affichée l'entreprise
     
          echo '<table>
                  <tr>
                    <td>' . $cp . '</td>
                    <td>' . $ville . '</td>
                    <td>' . $categorie . '</td>
                    <td>' . $nom . '</td>
                    <td><a href="' . $page . '">Voir</a></td>
                  </tr>
                </table>';
        }
      }
    ?>
    <!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">
      <head>
        <title>test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
        <script type="text/javascript">
        </script>
      </head>
      <body>
        <form name="choix" method="post" action="">
          <select name="categorie" id="categorie">
            <option value="0" selected="selected" value="toutes">-----------------</option>
            <option value="1">Voyages</option>
            <option value="2">Informatique</option>
            <option value="3">Charcuterie</option>
          </select>
          <br />
          <select name="ville" id="ville">
            <option value="0" selected="selected" value="toutes">-----------------</option>
            <option value="1">Valence</option>
            <option value="2">Romans-sur-Isère</option>
            <option value="3">Nyons</option>
          </select>
          <br />
          <input type="submit" name="btn" value="valider"
        </form>
      </body>
    </html>
    et les tables utilisées pour celui-ci :
    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
    -- phpMyAdmin SQL Dump
    -- version 2.9.1.1
    -- http://www.phpmyadmin.net
    -- 
    -- Serveur: localhost
    -- Généré le : Dimanche 10 Janvier 2010 à 10:46
    -- Version du serveur: 5.0.27
    -- Version de PHP: 5.2.0
    -- 
    -- Base de données: `essai`
    -- 
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `articom`
    -- 
     
    CREATE TABLE `articom` (
      `id_articom` int(10) unsigned NOT NULL auto_increment,
      `nom` char(30) NOT NULL,
      `ville_id` mediumint(9) NOT NULL,
      `categorie_id` tinyint(4) NOT NULL,
      PRIMARY KEY  (`id_articom`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
     
    -- 
    -- Contenu de la table `articom`
    -- 
     
    INSERT INTO `articom` (`id_articom`, `nom`, `ville_id`, `categorie_id`) VALUES 
    (1, 'Dupont', 1, 1),
    (2, 'Durand', 1, 2),
    (3, 'Charles', 2, 3),
    (4, 'Toto', 3, 1);
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `categorie`
    -- 
     
    CREATE TABLE `categorie` (
      `id_categorie` tinyint(3) unsigned NOT NULL auto_increment,
      `categorie` char(30) NOT NULL,
      PRIMARY KEY  (`id_categorie`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
     
    -- 
    -- Contenu de la table `categorie`
    -- 
     
    INSERT INTO `categorie` (`id_categorie`, `categorie`) VALUES 
    (1, 'Voyages'),
    (2, 'Informatique'),
    (3, 'charcuierie');
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `ville`
    -- 
     
    CREATE TABLE `ville` (
      `id_ville` mediumint(8) unsigned NOT NULL auto_increment,
      `cp` char(5) NOT NULL,
      `ville` char(50) NOT NULL,
      PRIMARY KEY  (`id_ville`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
     
    -- 
    -- Contenu de la table `ville`
    -- 
     
    INSERT INTO `ville` (`id_ville`, `cp`, `ville`) VALUES 
    (1, '26000', 'Valence'),
    (2, '26100', 'Romans-sur-Isère'),
    (3, '26110', 'Nyons');

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Par défaut
    Merci à toi hornetbzz et à toi Jeca

    Jeca, je crois que tu m'as évité des heures et des heures de boulot, j'étais quand même loin du compte, j'avais pensé a faire plusieurs tables, mais rien qu'a l'idée de faire des jointures, j'ai eu une montée de temperature
    Mais j'aurai mis un sacré moment a trouver la solution....
    et de plus un code aussi bien fait... un plaisir pour comprendre comment ca fonctionne

    Encore mille mercis a vous deux

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

Discussions similaires

  1. [MySQL] PB avec une liste deroulante + mysql
    Par foxdream94 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/06/2007, 10h47
  2. Réponses: 4
    Dernier message: 07/08/2006, 16h19
  3. [MySQL] liste deroulante pays > departement > ville
    Par Funraill.net dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 16/02/2006, 00h17
  4. [MySQL] Problème avec une liste déroulante
    Par leloup84 dans le forum SQL Procédural
    Réponses: 19
    Dernier message: 24/01/2006, 12h57

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