Récupérer données menu déroulant php
TRUNCKS
Messages postés
1066
Statut
Membre
-
Alain_42 Messages postés 5413 Statut Membre -
Alain_42 Messages postés 5413 Statut Membre -
Bonjour à vous,
J'ai un menu déroulant sur page en php:
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:
Seulement après, je ne sais pas comment faire l'affichage :(
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:
- Récupérer données menu déroulant php
- Fuite données maif - Guide
- Menu déroulant excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Excel menu déroulant en cascade - Guide
- Menu déroulant google sheet - Accueil - Guide bureautique
15 réponses
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>';
}
?>
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)
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)
<?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>';
}
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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. :(
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. :(
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)
--
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)
--
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 ,
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 ,
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
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
C'est le code par défaut de dream:
Puis:
$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>
ç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
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."\"> ".$j." </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".\" > <b> ".$j." </b> </a>";
}
$i++;
$j++;
}
}
}
?>
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.
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.