Recherche dans une table avec un ou plusieurs critères

Résolu
Signaler
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006
-
Messages postés
3
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
29 mars 2011
-
Bonjour,


J'essais de créer d'après un formulaire, une recherche sur un ou plusieurs critères :


Le champ 1 est une liste déroulante, le champ 2 c'est du texte, le champ 3 liste déroulante et le champ 4 liste déroulante également.
Je sais pas si ca peut vous être important de la savoir, mais bon je me suis dit que de le préciser serait pas mal.
Ensuite cette recherche s'effectue sur une table qui s'appel Client.
le champ 1 correspond à la région du client, le champ 2 au deux premières lettres du département, le champ 3 si il est professionnel ou particulier, le champ 4 le type d'envois (transporteur, la poste, etc...)
Donc voilà, alors théoriquement je vois à peu près comment faire, pour le champ 1 je fais dans la requête :
WHERE region=$_POST['champ1'] pour le champ 2 je fais un LIKE avec le % placé de façon à ne comparer que les deux première lettres du code postal et pour les deux autres champs je fais comme pour le champ1

Si je n'ais qu'un seul poste de passé, bon rien de bien compliqué, mais là où je n'arrive plus à gérer c'est quand 3 ou 4 champs sont passés. Je peux décomposé avec des if toutes les possibilités mais ca risque de faire quelque chose de pas très propre. J'ai regardé dans des codes sources, j'en ai trouvé un qui pourrait fonctionner mais comme je n'arrive pas à en comprendre le fonctionnement je préfère ne pas l'utiliser.
Quelqu'un aurait-il une solution assez simple à me proposer ?
Merci d'avance

16 réponses

Messages postés
147
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
28 janvier 2008

Je te passe un moteur de recherche qui pourrait correspondre a tes
attentes. Il doit surement exister un moteur meilleur mais je ne suis
que debutant alors il n'est pas trés complexe mais correspondra a ce
que tu recherche. Ici mon code traite de 3 critere de recherche:



<?



//On regarde s'il y a quelques choses de poster:

if(extract($_POST))

{

//On assigne des variables aux post envoyé:

$num_fichier = $_POST['num'];

$nom_fichier = $_POST['nom'];

$jours = $_POST['jours'];

$mois = $_POST['mois'];

$annee = $_POST['annee'];

$date = $jours."-".$mois."-".$annee;



if(empty($num_fichier) AND empty($nom_fichier) AND ($jours 0 OR $mois 0 OR $annee == 0))

{

echo("Vous
n'avez pas entré de critére de recherche, vous allez être redirigé
automatiquement.");


?><script
language="JavaScript">setTimeout("window.location='recherche.php'",5000);</script><?

}

elseif(($jours 0 OR $mois 0 OR $annee == 0) AND !empty($num_fichier) AND !empty($nom_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE num_fichier = '$num_fichier' AND
nom_fichier LIKE '%$nom_fichier%' AND fichier.num_diffusion =
diffusion.num_diffusion";

$result = mysql_query($sql);



//affiche ton resultat

}

elseif(($jours 0 OR $mois 0 OR $annee == 0) AND empty($num_fichier) AND !empty($nom_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE nom_fichier LIKE '%$nom_fichier%' AND
fichier.num_diffusion = diffusion.num_diffusion";

$result = mysql_query($sql);

//affiche ton resultat

}

elseif(($jours 0 OR $mois 0 OR $annee == 0) AND empty($nom_fichier) AND !empty($num_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE nom_fichier = '$num_fichier' AND
fichier.num_diffusion = diffusion.num_diffusion";

$result = mysql_query($sql);



//affiche ton resultat

}

elseif($jours != 0 AND $mois != 0 AND $annee != 0 AND empty($nom_fichier) AND empty($num_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE date_fichier = '$date' AND
fichier.num_diffusion = diffusion.num_diffusion";

$result = mysql_query($sql);



//affiche ton resultat

}

elseif($jours != 0 AND $mois != 0 AND $annee != 0 AND empty($nom_fichier) AND !empty($num_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE date_fichier '$date' AND num_fichier
'$num_fichier' AND fichier.num_diffusion = diffusion.num_diffusion";

$result = mysql_query($sql);



//affiche ton resultat

}

elseif($jours != 0 AND $mois != 0 AND $annee != 0 AND empty($num_fichier) AND !empty($nom_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE date_fichier = '$date' AND nom_fichier
LIKE '%$nom_fichier%' AND fichier.num_diffusion =
diffusion.num_diffusion";

$result = mysql_query($sql);



//affiche ton resultat

}

elseif($jours != 0 AND $mois != 0 AND $annee != 0 AND !empty($nom_fichier) AND !empty($num_fichier))

{

$sql = "SELECT
* FROM fichier, diffusion WHERE date_fichier '$date' AND num_fichier
'$num_fichier' AND nom_fichier LIKE '%$nom_fichier%' AND
fichier.num_diffusion = diffusion.num_diffusion";

$result = mysql_query($sql);



//affiche ton resultat

}



}

//S'il y a rien d'envoyé on affiche le formulaire:

else

{?>

Vous pouvez effectuer une recherche de fichier, d'archive, de note par les critéres suivant:


- Numéro de fichier


- Nom de fichier


- Date du fichier




<form method='post' action='recherche.php'>

Entrer un numéro de fichier:,

,

----

Entrer un nom de fichier:,

,

----

Selectionner le
jour,

<select name='jours'
size='1'>

<option
value='0'></option>

<?php

$sql = "SELECT * FROM jours";

$result = mysql_query ($sql);

while ($result2 =
mysql_fetch_object ($result))

{

echo("<option
value='$result2->num_jour'>$result2->num_jour</option>");

}

?>

</select>,

----

Selectionner le
mois,

<select name='mois'
size='1'>

<option
value='0'></option>

<?php

$sql = "SELECT * FROM mois";

$result = mysql_query ($sql);

while ($result2 =
mysql_fetch_object ($result))

{

echo("<option
value='$result2->num_mois'>$result2->nom_mois</option>");

}

?>

</select>,

----

Selectionner
l'année,

<select name='annee'
size='1'>

<option
value='0'></option>

<?php

$sql = "SELECT * FROM annee";

$result = mysql_query ($sql);

while ($result2 =
mysql_fetch_object ($result))

{

echo("<option
value='$result2->num_annee'>$result2->num_annee</option>");

}

?>

</select>,

----
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
<?

//On regarde s'il y a quelques choses de poster:
if(extract($_POST))
{
//On assigne des variables aux post envoyé:
$num_fichier = $_POST['num'];
$nom_fichier = $_POST['nom'];
$jours = $_POST['jours'];
$mois = $_POST['mois'];
$annee = $_POST['annee'];
$date = $jours."-".$mois."-".$annee;

belles failles de sécurité :-) EXTR_SKIP dans les paramètres du extract, et puis aussi les isset sur les variables, le <?php au lieu de <?...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
147
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
28 janvier 2008

Voila essaye avec ca et di moi quoi si tu as un probleme ou situ ne
comprend pas une partie du code....voilivoilou...
++
*-*
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

Bonjour obcstaff !


Merci beaucoup de m'avoir répondu aussi vite c'est très sympa de ta part de me passer ton script qui m'a l'air compréhensible pour mon niveau !
Je vais le tester et essayer de l'adapter à mes besoins. Par conte si je peux me permettre je vais te faire une suggestion au niveau de ton extract, il faudrait que tu l'utilise comme ceci : extract($_POST,EXTR_SKIP)
J'avais posté une fois un bout de script sur le forum avec un extract($_POST) et quelqu'un m'avait dit qu'il ne fallait pas le faire, sinon cela créer un trou de sécurité a moin de l'écrire : extract($_POST,EXTR_SKIP)


Je vais tester ton code et reviens de suite pour raconter ce qu'il m'arrive
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

Désolée pour le texte écrit tout gros ...... C'était pas pour mettre mes trucs en évidence mais j'ai fait une mauvaise manip' avec la taille des caractères ...

Vraiment désolée !
Messages postés
147
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
28 janvier 2008

Je te retourne le remerciement car je suis moi meme débutant, alors toute suggestion est la bienvenue, ok pour le EXTRACT($_POST,EXTR_SKIP)
mais juste une question, qu'est ce que cela signifie le extr_skip? Peut tu me renseigner stp?



Merci et n'hésite pas a poser des questions sur mon code...et si tu
vois une autre suggestion, fais toi plaisir....lol ++
Messages postés
147
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
28 janvier 2008

Dsl également pour l'ecriture en gros mais je ne pense pas que ce soit
de notre faute car je n'ai fais aucune fausse manipulation.....ca ne
vient pas de nous en tout cas!!! looool



++
Messages postés
147
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
28 janvier 2008

c'est parcequ'il reste sur l'ecriture en gros aprés le: EXTR_SKIP mdr
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

EEeuu extract(extr_skip) ben ca veut dire, eeeeeeuuuu ...... Skip l'extraction et ne prends que le nom des variables

Honnetement je ne sais pas exactement ce que cela veut dire, par déduction j'ai supposé la définition plus haut, mais bon ce n'est pas parole d'évangile ! J'ai regardé dans ma bible ... J'avais rien à ce sujet !

Sinon pour les <? au lieu de <?php, oui c'est une erreur, d'ailleurs avec php5 si je ne me trompe pas si tu mets pas <?php aucune partie de ton code ne s'affiche ... .Mais là encore je peux me tromper. Pitetre qu'un spécialiste passera dans le coin et l'expliquera.
Bon je retourne me prendre la tête sur les elseif..... J'ai presque toutes mes différentes valeurs de recherche qui fonctionnent excéptés une seule ... C'est rageant !!

Je reviens plus tard !
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

Bon ... Désolée obcstaff mais là je suis en train de péter un cable, je vais pas retenir ta proposition.


Quelqu'un aurait une autre suggestion avant que je finisse dans un hôpital en train de baver partout et me taper la tête contre les murs ??
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
envoie le code du formulaire mais j'ai bien peur que tu soies obligée de concaténer ta requete sql !
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

Tu peux préciser un peu sidf ?? Je te remercie d'avance ! :)

obcstaff, finalement c'est bon j'ai pu me dépatouiller avec le code que tu m'as gentiment passé ! J'ai eu beaucoup de mal à gérer les elseif (que je n'utilise pour ainsi dire jamais ......)
Apparement maintenant cela fonctionne correctement (je dis apparement, parce qu'il y a une heure je pensais avoir réussi mais finalement j'avais un ensemble de $_POST qui n'étais pas traités !)

Merci beaucoup en tout cas, j'ai terminé de baver et je ne suis pas partie à l'hôpital psy du coin ! (devrais faire un pavillon exprès pour les developpeur et informaticiens dans les hôpitaux psychiatrique !! mdr)
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
bienvenue au club

:?)
Messages postés
147
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
28 janvier 2008

Bon bon bon, de rien pr le code et je tavé prévenu qu'il était mal fait....lol....++
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

T'inquiète c'est juste que j'avais du mal à bosser avec les Elseif ..... Au moins maintenant je vois comment ca fonctionne !
Messages postés
3
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
29 mars 2011

Bonjour,

J'essais de créer d'après un formulaire, une recherche sur un ou plusieurs critères :

Le champ 1 est un texte "nom", le champ 2 c'est du texte aussi "prenom", le champ 3 text "matricule"qui doit etre un entier et le champ 4 est un text "pseudo" et le champ 4 :"groupe" (le groupe qui lui appartien l'utulisateur)
Je sais pas si ca peut vous être important de la savoir, mais bon je me suis dit que de le préciser serait pas mal.
Ensuite cette recherche s'effectue sur une table qui s'appel "membre"
le champ 1 correspond au nom de l'untilisateur , le champ 2 au prenom, le champ 3 a son identifiant le champ 4 a son pseudo et le champt 5 a son groupe (liste de selection)


Si je n'ais qu'un seul poste de passé, bon rien de bien compliqué, mais là où je n'arrive plus à gérer c'est quand 3 ou 4 champs sont passés. Je peux décomposé avec des if toutes les possibilités mais ca risque de faire quelque chose de pas très propre.
Quelqu'un aurait-il une solution assez simple à me proposer ?
Merci d'avance