Page 1 sur 1

Sélectionner tous les champs

Posté : 27 août 2014, 18:01
par accentcom
Bonjour à tous

Je suis en train de programmer un formulaire de recherche détaillée avec plusieurs critères sélectionnables

Exemple:
choisissez votre pays: Indifférent - France - Suisse - Belgique - etc...

si l'utilisateur choisi un pays c'est très simple je fais "select * from membres where pays='$idpays'"
Par contre si l'utilisateur choisi indifférent je souhaiterais faire quelque chose du genre "select * from membres where pays='ALL'"
Comment fait-on pour faire ça?

P-S: La solution de faire juste "select * from membres" n'est pas ce que je souhaiterais car ça m'obligerais à faire des conditions pour construire ma requête

Merci d'avance pour vos réponses

Re: Sélectionner tous les champs

Posté : 27 août 2014, 18:40
par aenarion33
Bonjour,

De un tu as une erreur de syntaxe dans ta requête SQL car c'est pas pays='$idpays' mais c'est pays=\''.$idpays.'\'
Le formulaire ça serai pour s'inscrire sur ton site ? Pour t'aider au maximum je vais juste te dire que "select * from membres where pays='ALL'" Veux dire que tu sélectionne tout les champs de ta table qui ont 'ALL' comme valeur pour le champs qui se nomme pays.
Pour qu'on puisse mieux t'aider il faudrait que tu nous décrire plus en détail ton problème et que tu nous donnes le contexte de ta requête SQL.
Et si tu as plusieurs liste déroulante alors te conseil d'insérer des AND ou des OR dans ta requête SQL.

Cordialement,
aenarion

Re: Sélectionner tous les champs

Posté : 27 août 2014, 18:57
par moogli
@aenarion33 : son exemple utilise des doubles quote (") comme délimiteur de chaine de caractère la requête est donc syntaxiquement correct (au niveau php comme au niveau sql).

@accentcom : en quoi utiliser un if est il gênant ?

exemple
<?php
$sql = "select * from membres";
if(!empty($_POST['idpays'])){
    $sql .= 'where pays=\''.$idpays.'\';
}
c'est simple et répond à ton problème ;)

@+

Re: Sélectionner tous les champs

Posté : 28 août 2014, 11:24
par accentcom
Merci à tous pour vos réponses

@aenarion33: Comme le confirme moogli ma syntaxe fonctionne


En fait je me suis peut-être mal exprimé.

Partons sur le fait que l'on fasse une recherche détaillée d'un appartement par exemple, le client peut sélectionner la localisation, surface, nombre de pieces, prix etc... de l'appartement
Pour chacun de ces critères il peut sélectionner une valeur ou "indifférent"

Ce que je cherche à savoir c'est est-ce qu'il existe un moyen d'éviter ça:
$condition="select * from appartements where ";
if($localisation="indifferent"){
$condition=$condition;
}else{
$condition=$condition." idlocalisation='$localisation'";
}
if($surface="indifferent"){
$condition=$condition;
}else{
$condition=$condition." surface='$surface'";
}
if($prix="indifferent"){
$condition=$condition;
}else{
$condition=$condition." prix='$prix'";
}
etc....
(la syntaxe n'est pas tout à fait juste mais c'est pour montrer l'esprit)

Est-il possible de simplifier les choses encore + que ça?

Re: Sélectionner tous les champs

Posté : 01 sept. 2014, 09:26
par moogli
simplifier oui en utilisant la négation.

if($condition != 'indifferent) {
$sql .= ' and la condition';
}

et pas de else

mais il faut bien faire ce test.

en compliquant le code tu peux réaliser un mapper entre post et ta requête sql et ainsi utiliser un code générique qui cherche dans le tableau $_POST des noms de champs que tu as mis dans un autre tableau.

@+