Je suis en ce moment en train de travailler sur un site qui permet de répertorier un très grand nombre de transactions immobilières. L'utilisateur peut accéder à ces transactions en les recherchant par mot clé (nom de l'offreur, surface, type etc...). J'ai donc un système de recherche avec plusieurs filtres (voir image).
Le problème est que tout les champs sont obligatoires (sans passer par un required dans le formulaire)
Or je voudrais que seul un champ soit requis et que s'il n y a rien dans les autres champs, on recherche quand meme en fonction du champ obligatoire.
J'ai essayé en mettant de simple if avec des is_null, ça marche mais il en faut beaucoup. Je voudrais donc savoir s'il existe une méthode plus "propre"
Merci pour votre aide
Voici la partie du code que j'ai en attendant (je précise avoir suivi un tuto sur youtube de primfx)
Hello, j'imagine qu'il y en à d'autres vu que tu dis 'beaucoup' ?Parce que mon idée est peut-etre un peu lourde si tu n'as que ça comme champs.
Tu pourrais stocker tous tes input sous forme d'array dans une variable $_POST, après tu n'auras qu'à faire une boucle qui construit ta requete en fonction des inputs présents.
Hello, j'imagine qu'il y en à d'autres vu que tu dis 'beaucoup' ?Parce que mon idée est peut-etre un peu lourde si tu n'as que ça comme champs.
Tu pourrais stocker tous tes input sous forme d'array dans une variable $_POST, après tu n'auras qu'à faire une boucle qui construit ta requete en fonction des inputs présents.
Coucou, je précise que mon tuteur de stage m'a seulement demander les filtres que tu vois sur l'image (malgré un très grand nombre de transactions. Environ 50 000)
Je comprends bien ce que tu me dis, mais je ne sais pas vraiment comment procéder...
<form action="" method="post">
<input type="text" name="fields[type]" />
<input type="text" name="fields[preneur]" />
<input type="submit" name="submit" value="ok">
</form>
<?php
$sql = "SELECT * FROM table WHERE ";
$a = array();
foreach ($_POST['fields'] as $key => $value) {
$a[] = $key." LIKE %".$value."%";
}
$sql .= implode(' OR ', $a);
var_dump($sql);
Maintenant, je suis partie de ton code de base. Sache que mon maître de stage m'avait dit "Plusieurs LIKE %% dans une requête, c'est le mal absolu" (performances, ressources etc)
EDIT faut ajouter une vérif pour ne pas prendre les champs vide en compte bien sur mais ça n'est à faire qu'une fois dans le foreach (je lai zappé sorry)
- Edité par Caroline B. 21 juillet 2018 à 16:55:55
<form action="" method="post">
<input type="text" name="fields[type]" />
<input type="text" name="fields[preneur]" />
<input type="submit" name="submit" value="ok">
</form>
<?php
$sql = "SELECT * FROM table WHERE ";
$a = array();
foreach ($_POST['fields'] as $key => $value) {
$a[] = $key." LIKE %".$value."%";
}
$sql .= implode(' OR ', $a);
var_dump($sql);
Maintenant, je suis partie de ton code de base. Sache que mon maître de stage m'avait dit "Plusieurs LIKE %% dans une requête, c'est le mal absolu" (performances, ressources etc)
EDIT faut ajouter une vérif pour ne pas prendre les champs vide en compte bien sur mais ça n'est à faire qu'une fois dans le foreach (je lai zappé sorry)
Salut, tout d'abord, merci de vos aides, la requête marche impec, le seul soucis est que rien ne s'affiche. Je voudrais savoir si vous avez une petite idée d'où placer mon $bdd -> query
En effet quand je fais un echo de cette requête:
$reponse = 'select *
from transaction,type,preneur,offreur,agentpreneur,agentoffreur
where offreur.numOffreur = transaction.numOffreur
and agentpreneur.numAgentP = transaction.numAgentP
and type.numType = transaction.numType
and preneur.numPreneur = transaction.numPreneur
and agentoffreur.numAgentO = transaction.numAgentO and' . implode(' OR ', $conds ?: ['1=1']);
Ca marche mais comme je l'ai dit rien ne s'affiche sur le site, alors que ce que je voudrais, ce serait quelque chose dans le genre:
$reponse = $bdd->query ('select *
from transaction,type,preneur,offreur,agentpreneur,agentoffreur
where offreur.numOffreur = transaction.numOffreur
and agentpreneur.numAgentP = transaction.numAgentP
and type.numType = transaction.numType
and preneur.numPreneur = transaction.numPreneur
and agentoffreur.numAgentO = transaction.numAgentO and' . implode(' OR ', $conds ?: ['1=1']));
Ma question peut paraître idiote car mes connaissances en SQL/PHP sont encore assez limitées.
EDIT : Ne serait-ce pas un AND à la dernière ligne à la place du OR?
- Edité par PierreBarrere1 22 juillet 2018 à 16:40:45
Formulaire de recherche PHP champs pas obligatoire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli