[RESOLU] Sélection "tous" par liste déroulante

Petit nouveau ! | 4 Messages

15 déc. 2012, 13:10

Bonjour à tous,
Je débute en php et j'ai un problème avec le choix "tous" dans ma liste déroulante.
J'ai une bdd "fournisseur" contenant les champs idFourn et nomFourn et une bdd "produits" contenant les champs idProduit et idFourn.
Ma liste déroulante doit permettre de filtrer les produits par fournisseur.
Ma requête est donc la suivante : select idProduit, nomFourn from produit, fournisseur where produit.idFourn=fournisseur.idFourn and produit.idFourn=$_POST['fournisseur']
Comment faire pour que lorqu'on sélectionne "tous" on obtienne l'équivalent de a requête suivante select idProduit, nomFourn from produit, fournisseur where produit.idFourn=fournisseur.idFourn
J'avais pensé faire en sorte que la valeur du $_POST soit fournisseur.idFourn mais cela ne me paraît pas très propre.
Merci d'avance pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 déc. 2012, 14:36

Salut,


Il que tu utilise le prédicat (clause where suivant la valeur de ta liste).
Pour la suite je vais supposer que lorsque l'on sélectionne "tous" le champ de formulaire retourne "tous".
On commence par "normaliser" la requête
select idProduit, nomFourn from produit join fournisseur using(idFourn) where produit.idFourn=$_POST['fournisseur'];
Ensuite côté php
<?php
$sql = 'select idProduit, nomFourn from produit join fournisseur using(idFourn)';
if(!empty($_POST['fournisseur']) && $_POST['fournisseur'] != 'tous') {
$sql .= ' where produit.idFourn='.$_POST['fournisseur'];
}
// exécution de la requête SQL 
?>
Attention cette requête est sujette aux injections SQL a toi de la protéger ;)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

15 déc. 2012, 15:20

Salut moogli,
Merci pour ta réponse.
Mon problème est là : je ne sais pas quoi mettre dans la valeur du formulaire lorsqu'on sélectionne "tous" ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 déc. 2012, 15:34

Ben tous ;)
<option value="tous">Tous les fournisseurs</option>

Et dans ce cas tu n'utilise pas de condition where ;)

C'est ce que fait le code que j'ai mis plus haut.

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

15 déc. 2012, 15:48

OK ça y est, je crois avoir compris.
Par contre mon prof ne m'a pas enseigné cette méthode pour les jointures, je les fais avec un where.
Dans ces cas là, je pense qu'il me suffit de rajouter un AND et de faire $sql .= ' AND where produit.idFourn='.$_POST['fournisseur'];

Petit nouveau ! | 4 Messages

15 déc. 2012, 16:18

Merci moogli, ça fonctionne parfaitement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 déc. 2012, 18:16

de rien :)
Il en faut peu pour être heureux ......