Récupérer données menu déroulant php

Bonjour à vous,

J'ai un menu déroulant sur page en php:


 //requête SQL: 
$sql = "SELECT * 
        FROM categories"; 
  
//exécution de la requête: 
$requete = mysql_query($sql) or die( mysql_error());?> 

<p><b>Ajouter un produit dans:</b></p>   
<form action="produits.php" method="post">   
<select name="categories">   
<?php 
while ($result = mysql_fetch_array($requete)) { 
echo '<option value="'.$result['ID_categorie'].'">',$result['nom_categorie'],'</option>'; 
} 
?> 
</select>   
<input type="submit" value="Valider">   

</form> 



J'aimerais, que selon la catégorie sélectionnée dans ce menu déroulant, cela récupère sur une autre page, les produits se trouvant dans la table, en fonction de la catégorie sélectionnée. ( J'ai déjà lié les tables dans ma base SQL )

Voilà où j'en suis sur la page qui récupère le choix du menu déroulant:


$categorie = $_POST['categories']; 

$sql = "SELECT * FROM produits WHERE ID_categorie = '$categorie'";  

$requete = mysql_query($sql) or die( mysql_error()); 



Seulement après, je ne sais pas comment faire l'affichage :(

15 réponses

  1. rajoutes cette ligne:

    //param modifiables
    	$nb_par_page=10;
    	$page_courante=0; //init par defaut
    	//
    
    1. Bonjour à toi :)

      Je viens de tester et adapter, cela marche nickel mais il reste un tout petit soucis.

      La pagination marche bien, mais lors du tout premier affichage, j'ai tous les enregistrements qui s'affichent.

      Si je clique sur 1,2 etc cela fonctionne, mais lors du premier affichage, j'ai tous par contre.
      1. Je vais essayer cela,

        Merci encore pour le temps que tu as consacré :)
        1. ça m'a paru plus simple de te faire ce bout de code que d'adapter celui de dream
          par contre je n'ai pas testé, bien sur il peut subsister des erreurs

          <?php
          	//param modifiables
          	$nb_par_page=10;
          	
          	//
          if(isset($_POST['valider']) || isset($_GET['page')){ //le bouton valider a été cliqué ou appel par pagination
          	//nom du script
          	$currentScript = $_SERVER["PHP_SELF"];
          	//recup id_produit sélectionné ou passé par l'url
          	if(isset($_POST['categories']){
          		$categorie = $_POST['categories'];
          	}else{
          		$categorie = $_GET['categ'];
          	}
          	//recup page demandée passée par l'URL
          	if(isset($_GET['page']){
          		$page_courante=$_GET['page'];
          	}else{
          		$page_courante=0;
          	}
          	//calcul nombre de pages
          	$sql = "SELECT * FROM produits WHERE id_categorie = '".$categorie."'"; 
          	$requete = mysql_query($sql) or die( mysql_error());
          	$nb_enr=mysql_num_rows($requete);
          	$nb_pages=ceil($nb_enr/$nb_par_page);
          	
          	//calcul limites d'affichage 
          	$debut=$page_courante*$nb_par_page;
          	
          	//requette avec les limites
          	$sql = "SELECT * FROM produits WHERE id_categorie = '".$categorie."' LIMIT ".$debut.",".$nb_par_page." "; 
          	$requete = mysql_query($sql) or die( mysql_error()); 
          
          	//affichage
          	echo '<table border="1">'; //tableau
          	echo '<tr><th>ID produit</th><th>Nom produit</th></tr>'; 
          	while ($result = mysql_fetch_array($requete)) {
          		echo '<tr>'; //ligne
          		echo '<td>'.$result['ID_produit'].'</td>'; //colonne
          		echo '<td>'.$result['nom_produit'].'</td>';
          		echo '</tr>'; //fin ligne
          	}
          	echo '</table>';
          
          		//pagination:
          	// gestion numeros de page + page courante
          		$i=0;
          		$j=1;
          		
          		if($nb_enr>$nb_par_page){
          			while($i<$nb_page){
          				if($i!=$page_courante){
          					echo "<a href=\"".$currentScript."?page=".$i."&categ=".$categorie."\">&nbsp; ".$j." &nbsp;</a>"; 
          					//on passe par l'URL le numero de page demandée (commence à 0) et l'id_produit selectionné
          				} else {
          					echo  "<a href=\"".$currentScript."?page=".$i".&categ=".$categorie".\" >&nbsp;<b> ".$j." </b>&nbsp;</a>"; 
          				   }
          			$i++;
          			$j++;
          			}
          		}	
          }
          ?>
          1. C'est le code par défaut de dream:

            
            $currentPage = $_SERVER["PHP_SELF"];
            
            $maxRows_produits = 10;
            $pageNum_produits = 0;
            if (isset($_GET['pageNum_produits'])) {
              $pageNum_produits = $_GET['pageNum_produits'];
            }
            $startRow_produits = $pageNum_produits * $maxRows_produits;
            
            mysql_select_db($database_localhost, $localhost);
            mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error());
            $query_produits = "SELECT produits.ID_produit, produits.nom_produit FROM produits";
            $query_limit_produits = sprintf("%s LIMIT %d, %d", $query_produits, $startRow_produits, $maxRows_produits);
            $produits = mysql_query($query_limit_produits, $localhost) or die(mysql_error());
            $row_produits = mysql_fetch_assoc($produits);
            
            if (isset($_GET['totalRows_produits'])) {
              $totalRows_produits = $_GET['totalRows_produits'];
            } else {
              $all_produits = mysql_query($query_produits);
              $totalRows_produits = mysql_num_rows($all_produits);
            }
            $totalPages_produits = ceil($totalRows_produits/$maxRows_produits)-1;
            
            $queryString_produits = "";
            if (!empty($_SERVER['QUERY_STRING'])) {
              $params = explode("&", $_SERVER['QUERY_STRING']);
              $newParams = array();
              foreach ($params as $param) {
                if (stristr($param, "pageNum_produits") == false && 
                    stristr($param, "totalRows_produits") == false) {
                  array_push($newParams, $param);
                }
              }
              if (count($newParams) != 0) {
                $queryString_produits = "&" . htmlentities(implode("&", $newParams));
              }
            }
            $queryString_produits = sprintf("&totalRows_produits=%d%s", $totalRows_produits, $queryString_produits);
            
            


            Puis:

            
            <table border="0">
              <tr>
                <td><?php if ($pageNum_produits > 0) { // Show if not first page ?>
                    <a href="<?php printf("%s?pageNum_produits=%d%s", $currentPage, 0, $queryString_produits); ?>">Premier</a>
                    <?php } // Show if not first page ?></td>
                <td><?php if ($pageNum_produits > 0) { // Show if not first page ?>
                    <a href="<?php printf("%s?pageNum_produits=%d%s", $currentPage, max(0, $pageNum_produits - 1), $queryString_produits); ?>">Précédent</a>
                    <?php } // Show if not first page ?></td>
                <td><?php if ($pageNum_produits < $totalPages_produits) { // Show if not last page ?>
                    <a href="<?php printf("%s?pageNum_produits=%d%s", $currentPage, min($totalPages_produits, $pageNum_produits + 1), $queryString_produits); ?>">Suivant</a>
                    <?php } // Show if not last page ?></td>
                <td><?php if ($pageNum_produits < $totalPages_produits) { // Show if not last page ?>
                    <a href="<?php printf("%s?pageNum_produits=%d%s", $currentPage, $totalPages_produits, $queryString_produits); ?>">Dernier</a>
                    <?php } // Show if not last page ?></td>
              </tr>
            </table>
            
            
            1. Oulala, je me suis trompé de post, sérieux je suis grave...

              En fait je voulais dire que j'arrive bien à faire pagination sur un jeu d'enregistrement, mais pas sur un affichage en fonction d'un choix.

              Par exemple, j'ai sélectionne le choix1 dans ma liste déroulante, cela va afficher tous les produits qui se trouvent dans le choix1.

              Seulement là la pagination ne fonctionne pas
              1. je ne vois pas le rapport entre ce message d'erreur ( au moment de l'enregistrement) et la pagination

                Ce que tu entends par pagination, c'est bien le fait de limiter le nombre d'affichage des produits par page (5 par exemple) et en cliquant sur page suivante on a les produits suivants ,
                1. Peut être, pour faire plus clair, j'ai cette erreur lors de l'enregistrement:

                  erreur sq: Cannot add or update a child row: a foreign key constraint fails ('site_dynamique'.'produits', CONSTRAINT 'produits_ibfk_1' FOREIGN KEY ('id_categorie') REFERENCES 'categories' ('ID_categorie') ON DELETE NO ACTION ON UPDATE CASCADE)
                  --
                  1. J'y arrive bien de manière "classique" que veux tu dire pr la ?

                    donnes ta partie de code concernée
                    1. Désolé de relancer un sujet déjà résolu, mais je me demandais comment je pourrais faire une pagination à partir de ça du coup.

                      J'y arrive bien de manière "classique", mais là du coup, vu que les produits ne sont jamais les mêmes, ma pagination merde. :(
                      1. Merci à toi, effectivement, j'avais raté la ligne valider...

                        Merci encore !
                        1. <?php
                           //requête SQL: 
                          $sql = "SELECT * FROM categories"; 
                            
                          //exécution de la requête: 
                          $requete = mysql_query($sql) or die( mysql_error());
                          
                          ?> 
                          
                          <p><b>Ajouter un produit dans:</b></p>   
                          <form action="produits.php" method="post">   
                          <select name="categories">   
                          <?php 
                          while ($result = mysql_fetch_array($requete)) { 
                          echo '<option value="'.$result['ID_categorie'].'">'.$result['nom_categorie'].'</option>';  //la tu avait mis des virgules au lieu des points pour concatener
                          } 
                          ?> 
                          </select>   
                          <input name="valider" type="submit" value="Valider"> <!-- ATTENTION as tu bien modifé cette ligne-->   
                          
                          </form> 
                          
                          <?php
                          if(isset($_POST['valider'])){ //le bouton valider a été cliqué
                          $categorie = $_POST['categories']; 
                          
                          $sql = "SELECT * FROM produits WHERE id_categorie = '".$categorie."'";  //attention le nom du champ id_produit doit avoir la même casse
                          
                          $requete = mysql_query($sql) or die( mysql_error()); 
                          
                          //affichage
                          echo '<table border="1">'; //tableau
                          echo '<tr><th>ID produit</th><th>Nom produit</th></tr>'; //ligne des titres ATTENTION même nbr de colonnes que ci dessous
                          while ($result = mysql_fetch_array($requete)) {
                          	echo '<tr>'; //ligne
                          	echo '<td>'.$result['ID_produit'].'</td>'; //colonne
                          	echo '<td>'.$result['nom_produit'].'</td>';
                          	//bien sur tu peux ne mettre qu'une seule colonne
                          	echo '</tr>'; //fin ligne
                          }
                          echo '</table>'; 
                          }
                          ?>
                          1. Bonjour et merci pour la réponse,

                            Malheureusement, certainement dû à une compréhension de ma part, rien ne s'affiche dans la page produit quand je valide, c'est toujours vide.

                            Mes tables se présentent comme cela:

                            catégorie(ID_catégorie, nom_catégorie)
                            produits (ID_produit, nom_produit, #id_categorie)
                            1. salut, voilà une solution possible:
                              <?php
                               //requête SQL: 
                              $sql = "SELECT * FROM categories"; 
                                
                              //exécution de la requête: 
                              $requete = mysql_query($sql) or die( mysql_error());
                              
                              ?> 
                              
                              <p><b>Ajouter un produit dans:</b></p>   
                              <form action="produits.php" method="post">   
                              <select name="categories">   
                              <?php 
                              while ($result = mysql_fetch_array($requete)) { 
                              echo '<option value="'.$result['ID_categorie'].'">'.$result['nom_categorie'].'</option>';  //la tu avait mis des virgules au lieu des points pour concatener
                              } 
                              ?> 
                              </select>   
                              <input name="valider" type="submit" value="Valider">   
                              
                              </form> 
                              
                              
                              page produits.php
                              
                              <?php
                              if(isset($_POST['valider'])){ //le bouton valider a été cliqué
                              $categorie = $_POST['categories']; 
                              
                              $sql = "SELECT * FROM produits WHERE ID_categorie = '$categorie'";  
                              
                              $requete = mysql_query($sql) or die( mysql_error()); 
                              
                              //affichage
                              echo '<table border="1">'; //tableau
                              echo '<tr><th>Nom catégorie</th><th>autre valeur</th><th>une_autre_valeur</th></tr>'; //ligne des titres ATTENTION même nbr de colonnes que ci dessous
                              while ($result = mysql_fetch_array($requete)) {
                              	echo '<tr>'; //ligne
                              	echo '<td>'.$result['nom_categorie'].'</td>'; //colonne
                              	echo '<td>'.$result['autre valeur'].'</td>';
                              	echo '<td>'.$result['une_autre_valeur'].'</td>';
                              	//bien sur tu peux ne mettre qu'une seulle colonne
                              	echo '</tr>'; //fin ligne
                              }
                              echo '</table>'; 
                              }
                              ?>