Critères de selection dans une base de données
SHINTYMAN
Messages postés
114
Date d'inscription
Statut
Membre
Dernière intervention
-
SHINTYMAN Messages postés 114 Date d'inscription Statut Membre Dernière intervention -
SHINTYMAN Messages postés 114 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je suis en cours d'apprentissage du language MySQL, et j'ai appris à chercher des informations en utilisant des conditions (WHERE). Mettons que je fasse une page HTML avec un formulaire de recherche qui contient plusieurs champs, comme par exemple 'pseudo', 'prix', 'type'. Aucun n'est obligatoire; ainsi, j'avais pensé faire ceci:
J'avais pensé que l'astérisque marcherais en tant que 'toutes les entrées', mais il semble que ça ne marche pas. Y a-t-il un moyen d'accomplir ceci?
P.S: La table contient les champs suivants: nom, prix, pseudo, type et la page d'avant a un formulaire qui demande le pseudo de l'offrant ('pseudo'), le type ('type') et/ou le prix max ('prix_max').
//Pseudo
if(isset($_POST['pseudo']))
{
$pseudo= $_POST['pseudo'];
}
else
{
$pseudo = '*';
}
//Type de produit
if(isset($_POST['type']))
{
$type = $_POST['type'];
}
else
{
$type = '*';
}
//Prix Max
if(isset($_POST['prix_max']))
{
$prix= $_POST['prix_max'];
}
else
{
$prix = '*';
}
$req = $produits->prepare('SELECT nom, prix FROM vente WHERE pseudo = :pseudo AND prix <= :prix AND type= :type');
$req->execute(array('pseudo' => $pseudo, 'prix' => $prix, 'type' => $type));
J'avais pensé que l'astérisque marcherais en tant que 'toutes les entrées', mais il semble que ça ne marche pas. Y a-t-il un moyen d'accomplir ceci?
P.S: La table contient les champs suivants: nom, prix, pseudo, type et la page d'avant a un formulaire qui demande le pseudo de l'offrant ('pseudo'), le type ('type') et/ou le prix max ('prix_max').
A voir également:
- Critères de selection dans une base de données
- Fuite données maif - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
- Formules mathématiques de base - Télécharger - Études & Formations
- Tnt base de données vide - Forum TV & Vidéo
2 réponses
Bonjour
J'avais pensé que l'astérisque marcherais en tant que 'toutes les entrées'
C'est bien de "penser", mais il y a encore mieux : lire le manuel.
Le caractère générique, c'est % et non pas *, et il s'utilise avec LIKE et non pas =, qui recherche une 'vraie' égalité.
Pour ton prix, il vaut mieux transformer la condition en <= très grand nombre pour qu'elle soit toujours vraie.
Enfin, histoire d'alléger un peu l'écriture, il vaut mieux, dans les cas simples comme celui-ci, utiliser l'opérateur ternaire ? : plutôt que if... else :
J'avais pensé que l'astérisque marcherais en tant que 'toutes les entrées'
C'est bien de "penser", mais il y a encore mieux : lire le manuel.
Le caractère générique, c'est % et non pas *, et il s'utilise avec LIKE et non pas =, qui recherche une 'vraie' égalité.
Pour ton prix, il vaut mieux transformer la condition en <= très grand nombre pour qu'elle soit toujours vraie.
Enfin, histoire d'alléger un peu l'écriture, il vaut mieux, dans les cas simples comme celui-ci, utiliser l'opérateur ternaire ? : plutôt que if... else :
//Pseudo $pseudo= isset($_POST['pseudo']) ? $_POST['pseudo']:'%'; //Type de produit $type= isset($_POST['type']) ? $_POST['type']:'%'; //Prix Max $prix= isset($_POST['prix_max']) ? $_POST['prix_max']:1000000000; $req = $produits->prepare('SELECT nom, prix FROM vente WHERE pseudo LIKE :pseudo AND prix <= :prix AND type LIKE :type'); $req->execute(array('pseudo' => $pseudo, 'prix' => $prix, 'type' => $type));
Merci beaucoup! J'ai aussi rajouté des lignes pour les champs vides et du coup, maintenant, j'ai ceci :
qui marche!
//Pseudo $pseudo= isset($_POST['pseudo']) ? $_POST['pseudo'] : '%'; $pseudo= ($pseudo == null) ? '%' : $_POST['pseudo']; //Type de produit $type= isset($_POST['type']) ? $_POST['type'] : '%'; $type= ($type == null) ? '%' : $_POST['type']; //Prix Max $prix= isset($_POST['prix_max'])? $_POST['prix_max'] : 1000000000; $prix= ($prix == null) ? 1000000000 : $_POST['prix_max'];
qui marche!