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 :

Formulaire à 2 listes déroulantes avec intérogation d'une base de données


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    et en formation
    Inscrit en
    Juillet 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : et en formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Formulaire à 2 listes déroulantes avec intérogation d'une base de données
    Bonjour,
    Je suis enseignante débutante en NSI (réforme du lycée) et je fais ma première rentrée en sepatembre.
    Pour que je puisse faire cours en septembre, le rectorat nous a fait suivre une formation de 4 h sur la programmation Web (côté serveur) et nous demande de rendre un exercice.
    J'ai prévu de continuer ma formation en autonomie pendant l'été (avec les tutoriels et livres que j'ai trouvé) mais là j'ai besoin de votre aide.

    Voici l'énoncé de l'exercice:
    "Modifiez rechercheProduits.html de telle sorte que l'internaute puisse spéecifier :
    - soit une catégorie ;
    - soit un nom de marque ;
    - soit une catégorie et un nom de marque ;
    - soit ni l'une, ni l'autre."

    Voici les fichiers à notre disposition avec la création d'une base de données "superventes" avec une table "produits" comportant numProduit, catégorie, nom, marque, prix.

    - rechercheProduitsParCategorie.html
    Code html : 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
    <html>
      <head>
        <title> Recherche des produits par catégorie </title>
        <meta charset="UTF-8" />
      </head>
      <body>
        <center> Recherche des produits par catégorie
          <br/><br/>
          <form action="http://localhost/listeProduitsParCategorie.php">
            <select name="catégorie">
    	  <option> téléphone </option>
              <option> tablette </option>
              <option> écouteurs </option>
            </select>
            <br/><br/>
            <input type="submit" value="VALIDEZ" />
          </form>
        </center>
      </body>
    </html>

    - listeProduitsParCategorie.php
    Code html : 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
    <html>
      <head>
        <title> Liste des produits par catégorie </title>
          <meta charset="UTF-8" />
      </head>
      <body>
        <h3> Liste des produits par catégorie ! </h3>
        <?php
          $WHERE = "";
          if (isset($_GET['catégorie'])) {
            $WHERE = "WHERE catégorie='".$_GET['catégorie']."'";
          }
          $sql = "SELECT * FROM produits $WHERE;";      
          /* echo $sql; Pour le déboguage */
          
          $dsn = 'mysql:host=localhost;dbname=superventes;charset=UTF8';
          $username = 'root';
          $password = '';
          $dbh = new PDO($dsn, $username, $password) or die("Pb de connexion !");
     
          $sth = $dbh->prepare($sql);
          $sth->execute();
          $result = $sth->fetchAll();
     
          echo "<ul>";
          foreach ($result as $enr) {
             echo "<li>".$enr['nom']." de marque ".$enr['marque']." : ".$enr['prix']." euros</li>";
          }
          echo "</ul>";
        ?>
      </body>
    </html>

    Voici ce que j'ai fait pour l'instant, il me semble avoir répondu aux deux premières étapes de l'exercice (je ne suis pas sûr) mais je bloque pour le reste (manque de temps important pour faire des recherches plus poussées qui seront faites après):
    - la page html: (rechercheProduits.php)
    Code html : 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
    <html>
      <head>
        <title> Recherche des produits par catégorie ou marque </title>
        <meta charset="UTF-8" />
      </head>
      <body>
        <center> Recherche des produits par catégorie ou marque
          <br/><br/>
          <form action="http://localhost/listeProduitsParCategorieMarque.php">
            <select name="catégorie">
    	  <option> toutes les catégories </option>
              <option> téléphone </option>
              <option> tablette </option>
              <option> écouteurs </option>
            </select>
            <br/><br/>
          <form action="http://localhost/listeProduitsParCategorieMarque.php">
            <select name="marque">
    	  <option> toutes les marques </option>
              <option> Samsung </option>
              <option> Apple </option>
              <option> Archos </option>
            </select>
            <br/><br/>
            <input type="submit" value="VALIDEZ" />
          </form>
        </center>
      </body>
    </html>

    - le scrip l'appel de la base de données avec la sélection des critères (listeProduitsParCategorieMarque.php):
    Code html : 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
    <html>
      <head>
        <title> Liste des produits par catégorie et/ou marque </title>
          <meta charset="UTF-8" />
      </head>
      <body>
        <?php
          $WHERE = "";
          if (isset($_GET['catégorie'])) {
            $WHERE = "WHERE catégorie='".$_GET['catégorie']."'";
          }
          $sql = "SELECT * FROM produits $WHERE;";      
          /* echo $sql; Pour le déboguage */
          
          $dsn = 'mysql:host=localhost;dbname=superventes;charset=UTF8';
          $username = 'root';
          $password = '';
          $dbh = new PDO($dsn, $username, $password) or die("Pb de connexion !");
     
          $sth = $dbh->prepare($sql);
          $sth->execute();
          $result = $sth->fetchAll();
     
          echo "<ul>";
          foreach ($result as $enr) {
             echo "<li>".$enr['nom']." de marque ".$enr['marque']." : ".$enr['prix']." euros</li>";
          }
          echo "</ul>";
        ?>
        <?php
          $WHERE = "";
          if (isset($_GET['marque'])) {
            $WHERE = "WHERE marque='".$_GET['marque']."'";
          }
          $sql = "SELECT * FROM produits $WHERE;";      
          /* echo $sql; Pour le déboguage */
          
          $dsn = 'mysql:host=localhost;dbname=superventes;charset=UTF8';
          $username = 'root';
          $password = '';
          $dbh = new PDO($dsn, $username, $password) or die("Pb de connexion !");
     
          $sth = $dbh->prepare($sql);
          $sth->execute();
          $result = $sth->fetchAll();
     
          echo "<ul>";
          foreach ($result as $enr) {
             echo "<li>".$enr['nom']." catégorie".$enr['catégorie']." : ".$enr['prix']." euros</li>";
          }
          echo "</ul>";
        ?>
      </body>
    </html>

    Merci beaucoup pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    petite parenthèse, votre code est peut-être vulnérable à une injection sql donc pour ce que vous avez prévu d'étudier avant la rentrée, je vous conseille de lire cette page :
    https://www.php.net/manual/fr/pdo.pr...statements.php

    en ce qui concerne votre exercice, vous parlez de 4 points mais je vois plutôt ça comme un tout.
    la 1re étape est de faire un formulaire qui permet de faire les 4 possibilités. pour cela, vous aurez 1 seule balise "form" et 2 "select" à l'intérieur avec en plus des choix "tous les téléphones" et "toutes les catégories".

    ensuite la 2e étape est le code qui va gérer ce formulaire, je verrais les étapes suivantes :
    1. réception des choix des 2 menus et stockage dans des variables
    2. construction de la requête sql en fonction des choix
    3. connexion à la base de données et envoi de la requête sql
    4. affichage de la liste des réponses

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    et en formation
    Inscrit en
    Juillet 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : et en formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci pour vos conseils, il me semble que je suis sur la bonne voie pour répondre à cet exercice ?

    Voici mes codes:

    - scipt HTML:
    Code html : 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
    <html>
      <head>
        <title> Recherche des produits par catégorie et/ou marque </title>
        <meta charset="UTF-8" />
      </head>
      <body>
        <center> Recherche des produits par catégorie ou marque
          <br/><br/>
          <form action="http://localhost/listeProduitsParCategorieMarque1.php">
            <select name="catégorie">
    	  <option> toutes les catégories </option>
              <option> téléphone </option>
              <option> tablette </option>
              <option> écouteurs </option>
    		  <option> aucun </option>
            </select>
            <br/><br/>
            <select name="marque">
    	  <option> toutes les marques </option>
              <option> Samsung </option>
              <option> Apple </option>
              <option> Archos </option>
    		  <option> aucun </option>
            </select>
            <br/><br/>
            <input type="submit" value="VALIDEZ" />
          </form>
        </center>
      </body>
    </html>

    - script php avec intérogation de la base de données:
    Code html : 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
    <html>
      <head>
        <title> Liste des produits par catégorie et/ou marque </title>
          <meta charset="UTF-8" />
      </head>
      <body>
      <h3> Liste des produits par catégorie ! </h3>
        <?php
          $WHERE = "";
           if(isset($_GET['catégorie']) && $_GET['catégorie'] != "none") {
            $WHERE = "WHERE catégorie='".$_GET['catégorie']."'";
          }
          $sql = "SELECT * FROM produits $WHERE;";      
          /* echo $sql; Pour le déboguage */
          
          $dsn = 'mysql:host=localhost;dbname=superventes;charset=UTF8';
          $username = 'root';
          $password = '';
          $dbh = new PDO($dsn, $username, $password) or die("Pb de connexion !");
     
          $sth = $dbh->prepare($sql);
          $sth->execute();
          $result = $sth->fetchAll();
     
          echo "<ul>";
          foreach ($result as $enr) {
             echo "<li>".$enr['nom']." de marque ".$enr['marque']." : ".$enr['prix']." euros</li>";
          }
          echo "</ul>";
        ?>
    	<h3> Liste des produits par marque ! </h3>
        <?php
          $WHERE1 = "";
          if(isset($_GET['marque']) && $_GET['marque'] != 'none')  {
            $WHERE1 = "WHERE marque='".$_GET['marque']."'";
          }
          $sql = "SELECT * FROM produits $WHERE1;";      
          /* echo $sql; Pour le déboguage */
          
          $sth = $dbh->prepare($sql);
          $sth->execute();
          $result = $sth->fetchAll();
     
          echo "<ul>";
          foreach ($result as $enr) {
             echo "<li>".$enr['nom']." catégorie".$enr['catégorie']." : ".$enr['prix']." euros</li>";
          }
          echo "</ul>";
        ?>
      </body>
    </html>

    Encore Merci pour vos conseils.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    d'habitude quand on parle de la 3e ligne "soit une catégorie et un nom de marque", on s'attend à avoir filtre qui sélectionne les produits qui répondent aux 2 conditions en même temps.
    est ce que vous avez une idée de comment faire cette requête sql ?

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    et en formation
    Inscrit en
    Juillet 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : et en formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Il me semble que Oui (on a suivi un petit cours de 2h sur les bases de données et le language SQL), il faut écrire (je crois):

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT catégorie, marque FROM produits;

    Afin de sélectionner dans la table "produits" les colonnes "catégorie" et "marque" en même temps.
    Mais on n'a pa vu comment insérer cette commande dans un script php.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    quelque soit la requête sql, c'est une chaine de caractère php que vous envoyez à la méthode "prepare". donc ça ne change rien à la façon de l'utiliser en php par rapport à ce que vous avez déjà fait.

    quand je vous demandait comment sélectionner 2 critères au lieu de 1, je pensais à ce que vous avez fait pour le moment dans votre code qui donne par exemple une requête SELECT * FROM produits WHERE categorie = "tablette"
    à partir de ça, pour filtrer suivant la catégorie et la marque, vous devez obtenir la requête suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM produits 
    WHERE categorie = "tablette"
    AND marque = "samsung"

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2009, 10h19
  2. Réponses: 3
    Dernier message: 09/01/2009, 10h23
  3. Réponses: 2
    Dernier message: 28/06/2006, 20h34
  4. [Conception] formulaire et case à cocher et recherche dans une base de donnée
    Par olivier_1970 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/06/2006, 01h03

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