Requete speciale

  • Auteur de la discussion Auteur de la discussion ferkcap
  • Date de début Date de début
WRInaute occasionnel
Bonjour à tous,
Dans le cadre d'un intranet, je suis confronté à un probleme d'interrogation de base de donnée, alors je m'en remet à votre expérience :lol:

Via des champs html <select> j'interroge la BDD
Exemple

<form method="POST" action="reponse-formulaire.php">
<select name="situation_famille">
<option value="m" selected>Marié</option>
<option value="c">Célibataire</option>
<option value="d">Divorcé</option>
<option value="v">Veuf</option>
</select>

<select name="enfant">
<option value="0" selected>0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>

<select name="annee_naissance">
<option value="1950" selected>1950</option>
<option value="1951">1951</option>
<option value="1952">1952</option>
<option value="1953">1953</option>
<option value="1954">1954</option>
<option value="1955">1955</option>
<option value="1956">1956</option>
</select>

</form>

Jusque là aucun probleme :D
Dans reponse-formulaire.php, j'ai mis ce code

Code:
$sql = 'SELECT * FROM caif WHERE  situation_famille ="'.$situation_famille.'" AND enfant="'.$enfant.'" AND annee_naissance="'.$annee_naissance.'" ORDER BY annee_naissance DESC';

Jusque là, tout va encore :)
Mais un probleme se pose tout de meme, imaginons que je veuille interroger mais que je me fiche de l'année de naissance ?
La j'ai un souci car je ne sais pas comment procéder ?

En fait dans mon select, il faudrait que je puisse mettre "on s'en fou" :roll:
Mais comment retranscrire on s'en fou en PHP/SQL ?

Il me faudrait certainement un joker pour dire tous *
Ou une variable ?

Bref, je suis bloqué alors si quelqu'un voit une soluce, je lui serais trés reconnaissant de me la faire partager ?

Merci à vous d'avoir pris la peine de lire ce post !
 
WRInaute discret
Code:
$sql = 'SELECT * FROM caif WHERE  situation_famille ="'.$situation_famille.'" AND enfant="'.$enfant.'" ORDER BY annee_naissance DESC';
Non?

Sinon tu te fais un formulaire pour ta recherche, par défaut l'année est vide ou à -

Et dans ton code tu fais :

Code:
$str_annee="";
if($annee_naissance != "-" && $annee_naissance != "")
     $str_annee=" AND `annee_naissance`='$annee_naissance' ";

$sql = "SELECT * FROM caif WHERE  situation_famille ='$situation_famille' AND enfant='$enfant' $str_annee ORDER BY annee_naissance DESC";

Comme ca, si dans ton form tu n'as pas rempli l'année que tu cherches, il n'y a pas de restriction sur l'année dans ta requete, et si tu as spécifié une année elle se retrouve dans la requete.

Bolbo
 
WRInaute occasionnel
Merci de ces réponses rapide, je testerais ton bout de code demain de retour au boulot.
En tous cas c'est vraiment sympa et rapide.

Si il y a d'autres suggestions profitez en :)
 
WRInaute occasionnel
J'ai testé et ça fonctionne à merveille mais comme je suis pontilleux loll j'ai encore besoin de vous

En fait je souhaite remplacer toute la serie de AND par des variables :)

J'ai donc fait ceci

Code:
$str_situation_famille="";
if($situation_famille != "-" && $situation_famille != "")
     $str_situation_famille=" AND `situation_famille`='$situation_famille' ";

$str_enfant="";
if($enfant != "-" && $enfant != "")
     $enfant=" AND `enfant`='$enfant' ";

$str_annee_naissance="";
if($annee_naissance != "-" && $annee_naissance != "")
     $str_annee=" AND `annee_naissance`='$annee_naissance' ";
$str_annee="";


$sql = "SELECT * FROM caif WHERE  str_situation_famille str_enfant $str_annee";

Donc c'est plutôt sympa mais il y a un problème dans les requetes entre le WHERE et le premier AND de str_situation_famille si je laisse ce champs vide :(

Vous en pensez quoi ?

Merci
 
WRInaute impliqué
Code:
$where = array();

if($situation_famille != "-" && $situation_famille != "")
     $where[] ="`situation_famille`='$situation_famille' ";

if($enfant != "-" && $enfant != "")
     $where[] ="`enfant`='$enfant' ";

if($annee_naissance != "-" && $annee_naissance != "")
     $where[] ="`annee_naissance`='$annee_naissance' ";



$sql = "SELECT * FROM caif WHERE  ".join( ' AND ', $where );

Au passage, j'espère que $annee_naissance, $enfant et $situation_famille ne sont pas les variables directement extraites du formulaire mais que tu penses bien à les filtrer avant.
 
WRInaute occasionnel
Au passage, j'espère que $annee_naissance, $enfant et $situation_famille ne sont pas les variables directement extraites du formulaire mais que tu penses bien à les filtrer avant.

Je vais tester tout cela de retour au bureau.

Par contre ai je besoin de filtrer puisqu'il s'agit d'une application qui ne tourne pas sur le net mais via easyphp sur des ordis sans connexion internet ?

Enfin pour ma culture d'homme du monde je veux bien en savoir plus :)

Merci à vous !
 
WRInaute impliqué
zimounet a dit:
shrom a dit:
Au passage, j'espère que $annee_naissance, $enfant et $situation_famille ne sont pas les variables directement extraites du formulaire mais que tu penses bien à les filtrer avant.

il s'agit d'un backoffice shrom

Et alors, il peut y avoir des utilisateurs malveillants à l'intérieur même de l'entreprise ( c'est même souvent le cas ).
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut