Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/04/2006, 08h49   #1
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [SQL] recherche multicritère

Bonjour,

Je débute en php et cherche à réaliser un moteur de recherche à partir d'un formulaire à menu déroulant qui permette à la fois la recherche sur un seul critère ou sur plusieurs critères combinés si le checkbox
"obligatoirement tout les critères" est activé.
Pour ça j'ai adapté un script qui fonctionnait bien pour un formulaire par recherche en texte libre mais qui doit être adapté à un formulaire à menu déroulant
Quelqu'un pourrait-il m'aider à adapter le script ci-dessous à mon formulaire à menu déroulant: si quelqu'un voit où ça coinçe?? Merci par avance

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$choix1 = $_POST['communes']; 
$choix2 = $_POST['sites']; 
$choix3 = $_POST['themes']; 
$choix4 = $_POST['allcriteres']; 
 
if ( $choix4 == "oui") 
 
$operateur="AND"; 
else 
$operateur="OR"; 
if ($choix1 != "") 
$finrequete .= " Nom_commune LIKE '%$choix1%'"; 
if ($choix2 != "") 
if ($finrequete != "") 
$finrequete .= " $operateur (Site1 LIKE '%$choix2%' OR Site2 LIKE '%$choix2%')"; 
else 
$finrequete .= " (Site1 LIKE '%$choix2%' OR Site2 LIKE '%$choix2%')"; 
if ($choix3 != "") 
if ($finrequete != "") 
$finrequete .= " $operateur (Theme1 LIKE '%$choix3%' OR Theme2 LIKE '%$choix3%')"; 
else 
$finrequete .= " (Theme1 LIKE '%$choix3%' OR Theme2 LIKE '%$choix3')"; 
if ($finrequete != "") 
$sql="SELECT * FROM Cartes_postales WHERE $finrequete"; 
else 
$sql="SELECT * FROM Cartes_postales";
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 09h09   #2
Membre actif
 
Avatar de funckfot
 
Étudiant
Inscription : mars 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 221
Points : 180
Points : 180
salut j'ai pas tré bien saisie c quoi ton probleme?
funckfot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 09h30   #3
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [Débutant]recherche multicritère

J'avais d'abord fait un formulaire pour une recherche de cartes postales qui proposait 3 critères de recherche par commune, site et thème mais où les champs étaient en texte libre.
Le script ci-dessous fonctionnait mais maintentant je voudrais l'adapter à un formulaire dont les choix de chacun des 3 critères dans le formulaire se trouvent dans 3 menus déroulant, et où chacun des critères peut être choisi soit séparement soit combiné avec les autres, (avec le checkbox allcriteres)du coup le script ci-dessous ne marche plus et j'arrive pas l'adapter, peut-être pourrais-tu me dire où ça cloche?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$choix1 = $_POST['communes'];
$choix2 = $_POST['sites'];
$choix3 = $_POST['themes'];
$choix4 = $_POST['allcriteres']; 
 
if ( $choix4 == "oui")
 
$operateur="AND";
else
$operateur="OR";
if ($choix1 != "")
$finrequete .= " Nom_commune LIKE '%$choix1%'";
if ($choix2 != "")
if ($finrequete != "")
$finrequete .= " $operateur (Site1 LIKE '%$choix2%' OR Site2 LIKE '%$choix2%')";
else
$finrequete .= " (Site1 LIKE '%$choix2%' OR Site2 LIKE '%$choix2%')";
if ($choix3 != "")
if ($finrequete != "")
$finrequete .= " $operateur (Theme1 LIKE '%$choix3%' OR Theme2 LIKE '%$choix3%')";
else
$finrequete .= " (Theme1 LIKE '%$choix3%' OR Theme2 LIKE '%$choix3')";
if ($finrequete != "")
$sql="SELECT * FROM Cartes_postales WHERE $finrequete";
else
$sql="SELECT * FROM Cartes_postales";
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 09h43   #4
Membre actif
 
Avatar de funckfot
 
Étudiant
Inscription : mars 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 221
Points : 180
Points : 180
je suis désolé je vai etre chiant mais c koi l'erreur?
funckfot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 09h52   #5
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [débutant]recherche multicritères

ça me dit:
Notice: Undefined index: allcriteres in E:\Sites\gestion\archives\testbdd-archives\reponse_cartes_postales_multi.php on line 39

Notice: Undefined variable: finrequete in E:\Sites\gestion\archives\testbdd-archives\reponse_cartes_postales_multi.php on line 47
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 09h54   #6
Membre actif
 
Avatar de funckfot
 
Étudiant
Inscription : mars 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 221
Points : 180
Points : 180
tu di que ce script fonctionnait le probleme vien d'ailleur, mais ta requète et un peu bizzard je ne connai pas se formalisme (du moin a certain endroi)
funckfot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 09h55   #7
Membre actif
 
Avatar de funckfot
 
Étudiant
Inscription : mars 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 221
Points : 180
Points : 180
montre ton code de la page sur lesquelles il y a tes menu deroulant, a priori sa vien d'ailleur
funckfot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h00   #8
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
La ligne 47 correpond à
$finrequete .= " Nom_commune LIKE '%$choix1%'";
Pour ça en enlevant le point après $finrequete ça marche

mais le problème semble venir de la variable allcritères du checkbox

Au cas où voilà mon formulaire de recherche:
<html>
<p>Recherche par commune </font>: <form action="reponse_cartes_postales_multi.php" method="POST" name="" id="">
<select name="communes" id="communes"> <option value="Albere">Albere (L')</option>
<option value="Alenya">Alenya</option> <option value="Amélie les Bains">Am&eacute;lie-les-Bains</option> <option value="Prats-de-Mollo">Prats de Mollo</option> </select> </p>

<p>Recherche par sites naturels et édifices</font>:
<select name="sites" id="sites">
<option value="Eglise (Albère)">Eglise (Albère)</option>
<option value="Fontaine (Albère)">Fontaine (Albère)</option>
</select></p>

<p>Recherche par thème </font>: <select name="themes" id="themes">
<option value="Bois">Bois</option> <option value="Calvaire">Calvaire</option>
<option value="Cheval">Cheval</option>
<option value="Côte">C&ocirc;te</option> </select> </p>

<p><input name="valider" type="submit" value="valider"> <input name="effacer" type="reset" value="effacer">
</p>
<p><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</p>


</p>
</form>

</html>
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h03   #9
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [débutant]recherche multicritères

Ce scrit fonctionnait quand le formulaire ne proposait pas les choix dans 3 menus déroulant mais en texte libre.
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h04   #10
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Pour le $finrequete commence par l'initialiser à "" avant de construire la chaîne.
Et pour le allcriteres je pense qu'il faut tester son existence avec un isset car je ne sais pas si sa valeur est transmise si la case est décochée.
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h06   #11
Membre actif
 
Avatar de funckfot
 
Étudiant
Inscription : mars 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 221
Points : 180
Points : 180
quan tu ne coche pas
Code :
1
2
 
<input type="checkbox" name="allcriteres" value="oui">
sa marche pas et sa te met se message d'erreur tu a 2 solution :
soit tu met boutton radio, oui, non

soi dans ta page qui recoi les information tu fait
Code :
1
2
if (issest($_POST['allcriteres']))
            //tu peut faire le traitement
j'avai le meme probleme c a toi de choissir!!!
mais je me trompe peu etre, je suis un debutant moi aussi
__________________
Rod
funckfot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h14   #12
Membre actif
 
Avatar de funckfot
 
Étudiant
Inscription : mars 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 221
Points : 180
Points : 180
mais comme je suis debutant aussi je voudrai savoir a quoi sert le point avnt le = dans un ligne de code comme sa
merci
__________________
Rod
funckfot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h23   #13
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Merci, je vais essayer
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h26   #14
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Pour le point j'avoue ne pas trop savoir à quoi ça peut servir j'expérimente un peu sur le tas : parfois ça marche si je l'enlève....
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h28   #15
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 10
Points : 10
Citation:
Envoyé par funckfot
mais comme je suis debutant aussi je voudrai savoir a quoi sert le point avnt le = dans un ligne de code comme sa
merci
<=>
Schuss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h58   #16
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [débtant]recherche multicritères

Pour le isset ça me dit
Fatal error: Call to undefined function: issest() in E:\Sites\gestion\archives\testbdd-archives\scriptrecherche.php on line 41

mon code de reponse est le suivant:

$choix1 = $_POST['communes'];

$choix2 = $_POST['sites'];
$choix3 = $_POST['themes'];


if (issest($_POST['allcriteres']))


$operateur="AND";
else
$operateur="OR";
if ($choix1 !=[""])
$finrequete = " Nom_commune LIKE '%$choix1%'";
if ($choix2 !=[""])
if ($finrequete != "")
$finrequete .= " $operateur (Site1 LIKE '%$choix2%' OR Site2 LIKE '%$choix2%')";
else
$finrequete .= " (Site1 LIKE '%$choix2%' OR Site2 LIKE '%$choix2%')";
if ($choix3 != "")
if ($finrequete != "")
$finrequete .= " $operateur (Theme1 LIKE '%$choix3%' OR Theme2 LIKE '%$choix3%')";
else
$finrequete .= " (Theme1 LIKE '%$choix3%' OR Theme2 LIKE '%$choix3')";
if ($finrequete != "")
$sql="SELECT * FROM Cartes_postales WHERE $finrequete";
else
$sql="SELECT * FROM Cartes_postales";
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 11h00   #17
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 10
Points : 10
isset et pas issest
Schuss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 11h11   #18
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [débutant]recherche multicritères

oui merci ça marche
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 11h20   #19
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
Par défaut [débutant] recherche multicriteres

Par contre du coup il me vient un autre problème c'est que dans le formulaire à 3 critères et à menu déroulant dans les choix des menu déroulant y jamais le choix aucun(e) (pour la cherche sur 3 critères par commune, par site, par thème)
Donc si on veut isoler les critères un à un , peut-être faut-il mettre un checkbox devant chaque critère?
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 11h23   #20
nal
Membre à l'essai
 
Inscription : avril 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 102
Points : 20
Points : 20
En fait j'ai juste mis dans le formulaire des option vide du genre <option>Aucune</option> et ça a l'air de marcher
nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h05.


 
 
 
 
Partenaires

Hébergement Web