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 :(
A voir également:

15 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
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
TRUNCKS Messages postés 1066 Statut Membre 7
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
<?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
TRUNCKS Messages postés 1066 Statut Membre 7
 
Merci à toi, effectivement, j'avais raté la ligne valider...

Merci encore !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

donnes ta partie de code concernée
0
TRUNCKS Messages postés 1066 Statut Membre 7
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
TRUNCKS Messages postés 1066 Statut Membre 7
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
donnes le code de ta pagination
0
TRUNCKS Messages postés 1066 Statut Membre 7
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
ç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
TRUNCKS Messages postés 1066 Statut Membre 7
 
Je vais essayer cela,

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

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