PHP liste deroulante et requete sql select [Résolu/Fermé]

Signaler
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
-
sonar974
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
-
Bonjour,

etant debutant en PHP/MYSQL,
je suis actuellement entrin de codé un ecommerce,
le design html est en place !!!
la partie du code php que j'ai mis en place fonctionne bien mais pour aller plus loin,
j'ai une list deroulante pour le trie et je souhaiterais utiliser cette liste deroulante pour filtrer ma requete voici mon code :

<div class="content-center">
<div id="products-list">
<header>
<p class="counter"><strong>01-08</strong> sur 40 créations</p>
<select name="trie">
<option>Date</option>
<option>Prix croissant</option>
<option>Prix décroissant</option>
<option>Nom de A-Z</option>
<option>Nom de Z-A</option>
</select>
</header>
<div class="products">
<?php

try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=catatest', 'root', '', $pdo_options);

// On récupère tout le contenu de la table
$reponse = $bdd->query('SELECT * FROM produits LIMIT 0, 12');

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<p>
<article>
<figure><a href="produit.php?ID=<?php echo $donnees['ID']; ?>" title="Informations produits"><img src="<?php echo $donnees['photo']; ?>" alt="" /></figure>
<figcaption>
<h2>
<span class="title"><?php echo $donnees['prix']; ?>€</span>
<span class="marque"><?php echo $donnees['marques']; ?> <?php echo $donnees['ref']; ?></span>
<br />
</h2>
<br />
</figcaption>
</article>
</em>
</p>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}


?>

si vous m'avais compris ce qui me pose probleme c'est sa :

<select name="trie">
<option>Date</option>
<option>Prix croissant</option>
<option>Prix décroissant</option>
<option>Nom de A-Z</option>
<option>Nom de Z-A</option>
</select>
utiliser un choix pour l'injecter dans ma requete ici :
$reponse = $bdd->query('SELECT * FROM produits LIMIT 0, 12');

merci d'avance
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
si sa peu aider quelqu'un

<!-- CONTENT -->
<div class="content-center">
<div id="products-list">
<header>
<p class="counter"><strong>01-08</strong> sur 40 créations</p>
<!--- <select name="trie">
<option>Date</option>
<option>Prix croissant</option>
<option>Prix décroissant</option>
<option>Nom de A-Z</option>
<option>Nom de Z-A</option>
</select> --->

<form method="GET" action=""><select name="trie" action="">
<option value="dateAsc">Date croissante</option>
<option value="dateDesc">Date décroissante</option>
<option value="prixAsc">Prix croissant</option>
<option value="prixDesc">Prix décroissant</option>
<option value="nomAsc">Nom A-Z</option>
<option value="nomDesc">Nom Z-A</option>
</select>
</form>

</header>
<div class="products">

<?php
if(isset($_GET['trie'])) {
switch($_GET['trie']) {
case 'dateAsc':
$tri = 'date ASC';
break;

case 'dateDesc':
$tri = 'date DESC';
break;

case 'prixAsc':
$tri = 'prix ASC';
break;

case 'prixDesc':
$tri = 'prix DESC';
break;

default:
$tri = 'prix ASC';
break;
}
} else {
$tri = 'prix ASC';
}

try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=catatest', 'root', '', $pdo_options);

// On récupère tout le contenu de la table

$reponse = $bdd->query('SELECT * FROM produits ORDER BY ".$tri." ASC LIMIT 0, 12');
//$reponse = $bdd->query('SELECT * FROM produits LIMIT 0, 12');

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<p>
<article>
<figure><a href="produit.php?ID=<?php echo $donnees['ID']; ?>" title="Informations produits"><img src="<?php echo $donnees['photo']; ?>" alt="" /></figure>
<figcaption>
<h2>
<span class="title"><?php echo $donnees['prix']; ?>€</span>
<span class="marque"><?php echo $donnees['marques']; ?> <?php echo $donnees['ref']; ?></span>
<br />
</h2>
<br />
</figcaption>
</article>
</em>
</p>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

?>

cette methode n'affiche aucune erreur,
cepandant je pense qui faudrais un bouton pour activer le filtrage
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63078 internautes nous ont dit merci ce mois-ci

Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
UP
Bonsoir,
Tout dépend des noms de champs (date, prix, nom...?) dans la table produits. Ensuite il faut préciser le tri par la date dans la liste déroulante, curieusement tu ne stipules pas si on peut faire par date croissante ou date décroissante alors que pour les autres critères tu le précises bien...?
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
Bonsoir,
je comprend ta remarque sa sera corriger :)

ma table est faite ainsi :
ID marques ref prix photo miniature fiche type date

mon souci c'est que je ne trouve pas le moyen pour
que l'utilisateur choisisse par exemple par prix decroissant
et que la requette affiche les prix decroissant.
sonar974
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
plus precisément comment injecter le choix de la liste dans ma requette qui est en place
>> plus precisément comment injecter le choix de la liste dans ma requette qui est en place

Oui j'avais bien compris ton problème mais j'avais besoin du nom des champs de la table pour te donner un exemple de script :
<select name="sortlist">
	<option value="dateAsc">Date croissante</option>
	<option value="dateDesc">Date décroissante</option>
	<option value="prixAsc">Prix croissant</option>
	<option value="prixDesc">Prix décroissant</option>
	<option value="nomAsc">Nom A-Z</option>
	<option value="nomDesc">Nom Z-A</option>
</select>

switch($_POST['sortlist']) {
	case 'dateAsc':
		$tri = 'date ASC';
	break;

	case 'dateDesc':
		$tri = 'date DESC';
	break;

	case 'prixAsc':
		$tri = 'prix ASC';
	break;

	case 'prixDesc':
		$tri = 'prix DESC';
	break;

	case 'nomAsc':
		$tri = 'marques ASC';
	break;

	case 'nomDesc':
		$tri = 'marques DESC';
	break;

	default:
		$tri = 'date ASC';
	break;
}
$reponse = $bdd->query('SELECT * FROM produits ORDER BY $tri LIMIT 0, 12'); 

Remarque : bien entendu, si les données du formulaire sont passées en méthode GET, il faut remplacer POST par GET...
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
merci mais sa ne fonctionne pas

<!-- CONTENT -->
<div class="content-center">
<div id="products-list">
<header>
<p class="counter"><strong>01-08</strong> sur 40 créations</p>
<!--- <select name="trie">
<option>Date</option>
<option>Prix croissant</option>
<option>Prix décroissant</option>
<option>Nom de A-Z</option>
<option>Nom de Z-A</option>
</select> --->

<select name="sortlist">
<option value="dateAsc">Date croissante</option>
<option value="dateDesc">Date décroissante</option>
<option value="prixAsc">Prix croissant</option>
<option value="prixDesc">Prix décroissant</option>
<option value="nomAsc">Nom A-Z</option>
<option value="nomDesc">Nom Z-A</option>
</select>
</header>
<div class="products">

<?php

switch($_POST['sortlist']) {
case 'dateAsc':
$tri = 'date ASC';
break;

case 'dateDesc':
$tri = 'date DESC';
break;

case 'prixAsc':
$tri = 'prix ASC';
break;

case 'prixDesc':
$tri = 'prix DESC';
break;

case 'nomAsc':
$tri = 'marques ASC';
break;

case 'nomDesc':
$tri = 'marques DESC';
break;

default:
$tri = 'date ASC';
break;
}
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=catatest', 'root', '', $pdo_options);

// On récupère tout le contenu de la table
$reponse = $bdd->query('SELECT * FROM produits ORDER BY $tri LIMIT 0, 12');
//$reponse = $bdd->query('SELECT * FROM produits LIMIT 0, 12');

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<p>
<article>
<figure><a href="produit.php?ID=<?php echo $donnees['ID']; ?>" title="Informations produits"><img src="<?php echo $donnees['photo']; ?>" alt="" /></figure>
<figcaption>
<h2>
<span class="title"><?php echo $donnees['prix']; ?>€</span>
<span class="marque"><?php echo $donnees['marques']; ?> <?php echo $donnees['ref']; ?></span>
<br />
</h2>
<br />
</figcaption>
</article>
</em>
</p>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}


?>
ça ne fonctionne pas n'est pas très éclairant, développe un peu plus :
- ça n'exécute pas le tri?
- il y a un message d'erreur?
- rien ne s'affiche?
- etc...

Tu as testé en sélectionnant une valeur dans la liste déroulante? Le formulaire est régi par la méthode POST ou GET ?
sonar974
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
premier problem :
Notice: Undefined index: sortlist in C:\wamp\www\testfinal\catapc.php on line 85

second problem :
Erreur : SQLSTATE[42S22]: Column not found: 1054 Unknown column '$tri' in 'order clause'

j'ai tester et rien

Le formulaire n'est régie par aucune de ces methodes

je penche actuellement sur http://forum.phpfrance.com/php-debutant/recuperation-post-liste-deroulante-t253280.html
>> Le formulaire n'est régie par aucune de ces methodes
Lorsque l'on ne précise pas la méthode dans une balise <form>, par défaut c'est la méthode GET qui est utilisée.
>> Notice: Undefined index: sortlist in C:\wamp\www\testfinal\catapc.php on line 85
Au moment du script, la variable $_POST['sortlist'] n'existe pas encore, donc il suffit de soumettre le switch dans une condition qui vérifie que la variable est initialisée :
if(isset($_POST['sortlist'])) {
     switch($_POST['sortlist']) {
          // reste du code...     }
} else {
     $tri = 'date ASC';
}

Tes interrogations au sujet des méthodes POST ou GET me font craindre que tu as une pratique du PHP très faible, et que tu as construit ton code en "choppant" des bouts de code à droite et à gauche sur internet, notamment dans certains tutos "pillés" par des copier/coller, est-ce que je me trompes...?
P.S : renseigne CORRECTEMENT ta balise <form> :
<form method="POST" action=""> ou <form method="GET" action="">

Au moins ton code HTML n'en sera que plus lisible...
Messages postés
43
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
15 septembre 2017
4
Je te remercie de ton coup de main,
concernant ma situation je vais t'expliquer,
le PHP je commence tout juste,
j'ai deja coder mon site en html et il fonctionne parfaitement le soucis c'est que pour le mettre à jour!!!!

j'ai coder un connecteur php qui execute des requettes SQL par le biais d'un logiciel codé en VB6 pour un amis et cette amis utilise joomla,

hors dans mon cas j'aurais aimer develloper mon site qui est deja fonctionnel,
juste ameliorer et le passé en dynamique.

je vais poussé mes recherches et etudier le PHP de A a Z,
cela me prendra du temp.

merci pour ton coup de main tu ma mis sur la piste de la solution,
je te ferais pas perdre plus de temps.

a moi de develloper la solution.

:)