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

TRUNCKS Messages postés 1066 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
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. Alain_42 Messages postés 5413 Statut Membre 904
     
    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>'; 
    }
    ?>
    1
  2. TRUNCKS Messages postés 1066 Statut Membre 8
     
    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)
    0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    <?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>'; 
    }
    ?>
    0
  4. TRUNCKS Messages postés 1066 Statut Membre 8
     
    Merci à toi, effectivement, j'avais raté la ligne valider...

    Merci encore !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. TRUNCKS Messages postés 1066 Statut Membre 8
     
    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. :(
    0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    J'y arrive bien de manière "classique" que veux tu dire pr la ?

    donnes ta partie de code concernée
    0
  8. TRUNCKS Messages postés 1066 Statut Membre 8
     
    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)
    --
    0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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 ,
    0
  10. TRUNCKS Messages postés 1066 Statut Membre 8
     
    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
    0
  11. Alain_42 Messages postés 5413 Statut Membre 904
     
    donnes le code de ta pagination
    0
  12. TRUNCKS Messages postés 1066 Statut Membre 8
     
    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>
    
    
    0
  13. Alain_42 Messages postés 5413 Statut Membre 904
     
    ç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++;
    			}
    		}	
    }
    ?>
    0
  14. TRUNCKS Messages postés 1066 Statut Membre 8
     
    Je vais essayer cela,

    Merci encore pour le temps que tu as consacré :)
    0
  15. TRUNCKS Messages postés 1066 Statut Membre 8
     
    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.
    0
  16. Alain_42 Messages postés 5413 Statut Membre 904
     
    rajoutes cette ligne:

    //param modifiables
    	$nb_par_page=10;
    	$page_courante=0; //init par defaut
    	//
    
    0