Critères de selection dans une base de données

Fermé
SHINTYMAN Messages postés 114 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 - 10 mars 2014 à 13:42
SHINTYMAN Messages postés 114 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 - 10 mars 2014 à 18:40
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:

//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').



2 réponses

Utilisateur anonyme
10 mars 2014 à 17:47
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 :

//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));
0
SHINTYMAN Messages postés 114 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 153
10 mars 2014 à 18:40
Merci beaucoup! J'ai aussi rajouté des lignes pour les champs vides et du coup, maintenant, j'ai ceci :

//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!
0