[PHP]Probleem zoeken met behulp van checkboxen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo!
Ik heb een probleem met een zoekfunctie waarbij ik gebruik wil maken van checkboxen.
Ik heb een invoerveldje (met de naam details).
Hieronder staan een aantal checkboxen (woonplaats, hobbies, specialismen, opleiding).
Wanneer ik iets invul in het veld details en daarna een checkbox aanvink,
wordt er gezocht in de database op dit aangevinkte veld.
De zoekresultaten komen onder in het scherm te staan.
Een voorbeeld:
In het invoerveld toets ik Den Haag in.
Ik vink hierbij de checkbox Woonplaats aan.
Er worden nu alleen mensen weergegeven die als woonplaats Den Haag hebben.
De code van deze zoekfunctie is:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//checkbox1 is woonplaats 

if($_POST["plaats"] != "") 
 { 
 $getNum = mysql_query("select user_id from profiel 
 where ".$myDatum." nickname like '%$zoek%'".
 (($telefoon_mobiel)?" and telefoon_mobiel<>''":"").
 (($telefoon)?" and telefoon<>''":"")." and actief=1 
 and plaats like '%$details%'") 
 or die (mysql_error());
 
 $getNewest = mysql_query("select *, from_unixtime(unix_timestamp(aanmeld_datum), 
 '%d %M %Y @ %H:%i') as datum, 
 geboorte_datum, ((YEAR(CURRENT_DATE)-YEAR(geboorte_datum)) - 
 (RIGHT(CURRENT_DATE,5)<RIGHT(geboorte_datum,5))) AS age from profiel 
 where ".$myDatum." nickname like '%$zoek%' ".
 (($telefoon_mobiel)?" and telefoon_mobiel<>''":"").
 (($telefoon)?"and telefoon<>''":"")." and actief=1 
 and plaats like '%$details%' order by $sort desc limit $offset, $limit") 
 or die(mysql_error());
 } 

//checkbox 2 is hobbies
elseif ($_POST["hobbies"] != "") 
 { 
 $getNum = mysql_query("select user_id from profiel where 
 ".$myDatum." nickname like '%$zoek%'".
 (($telefoon_mobiel)?" and telefoon_mobiel<>''":"").(($telefoon)?" 
 and  telefoon<>''":"")." and actief=1 and hobbies like '%$details%'") 
 or die (mysql_error());
 $getNewest = mysql_query("select *, from_unixtime(unix_timestamp(aanmeld_datum), 
 '%d %M %Y @ %H:%i') as datum, 
 geboorte_datum, ((YEAR(CURRENT_DATE) -YEAR(geboorte_datum)) - 
 (RIGHT(CURRENT_DATE,5)<RIGHT(geboorte_datum,5))) 
 AS age from profiel where ".$myDatum." nickname like '%$zoek%' ". 
 (($telefoon_mobiel)?" 
 and telefoon_mobiel<>''":"").(($telefoon)?"and telefoon<>''":"")." 
 and actief=1 and hobbies like '%$details%' 
 order by $sort desc limit $offset, $limit") 
 or die(mysql_error());
 }

De checkboxen los van elkaar werken gewoon, maar nu wil ik dat wanneer je in het invoerveld opnieuw Den Haag invult
en de checkboxen Woonplaats en Hobbies aanvink, de personen getoond moeten worden met als Woonplaats Den Haag en als Hobby bijvoorbeeld Ado Den Haag.
Ik neem aan dat ik iets in de query moet veranderen, maar ik weet niet zo goed waar ik moet beginnen.
Er kan dus 1 checkbox aangevinkt zijn, maar ook meerdere tegelijk en deze query's zouden dus eigenlijk gecombineerd moeten worden.
Hebben jullie heel misschien een idee hoe ik dit kan oplossen??
Alvast bedankt!

[ Voor 15% gewijzigd door Verwijderd op 30-11-2004 16:56 . Reden: Te lange regels... ]


Acties:
  • 0 Henk 'm!

Verwijderd

De ifjes combineren, dus kijken welke aangevinkt zijn, en als ze allebei aangevinkt zijn gewoon de query veranderen met een AND erbij

edit:
Welkom op GoT ;)

[ Voor 12% gewijzigd door Verwijderd op 29-11-2004 16:28 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Zoiets doe ik met iets als:

PHP:
1
2
$query = [begin van je query];
if(count($a) > 0) $query .= ' WHERE '.implode(' AND ', $a);


Zorg dan dus dat je je AND clausules in je array $a opslaat. Vb.: w[] = "Woonplaats = 'Den haag'";

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Hoi Tes :)

Welkom op GoT!

Ik zou je graag even willen wijzen op P&W FAQ - Het FAQ/Beleid topic
En dan met name de volgende twee punten:
- Groeten onder je post hoeft niet. Het leest namelijk erg vervelend als iedereen dat zou doen.
- De layout. Door je flinke lange regels tekst is je post en je code nauwelijks leesbaar. Zou je de regels wat af kunnen breken zodat je post geen 3 schermen breed is?

Alvast bedankt :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry Creepy, ik hoop dat het nu wel goed is! :)
En Sidney en X-Lars alvast bedankt voor de reacties,
ik ga het morgen gelijk proberen!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik snap het eigenlijk nog steeds niet echt met die IMPLODE functie van X-Lars...
Zou je heel misschien een voorbeeld willen en kunnen geven hoe ik dit in de praktijk kan toepassen?
Ik zie wel wat je wilt, maar ik weet niet goed hoe ik dit moet aanpakken.
Zou je me nog willen helpen?

Acties:
  • 0 Henk 'm!

Verwijderd

ik wil wel een voorbeeldje geven van de implode-oplossing van X-Lars (wat wel netter is), maar als je gewoon je bestaande code zo snel en makkelijk mogelijk wil aanpassen zou ik het gewoon even op mijn manier doen.. [quote]De ifjes combineren, dus kijken welke aangevinkt zijn, en als ze allebei aangevinkt zijn gewoon de query veranderen met een AND erbij[/quote]

Edit:
Ik geef toch wel wel even uitleg bij het imploden, toch niks te doen ;)

De code staat er al bij het voorbeeld van X-Lars:
PHP:
1
2
$query = [begin van je query]; 
if(count($a) > 0) $query .= ' WHERE '.implode(' AND ', $a);
Het probleem is denk ik dat je de implodefunctie niet kent, zoek dit de volgende keer gewoon even op, www.php.net/functienaam (klik). Implode plakt alle delen uit een array achter elkaar met een bepaalde string er tussen (eventueel). Dus als je
PHP:
1
$array = array("a","b","c","d");
hebt, en je doet
PHP:
1
implode("/",$array);
dan krijg je "a/b/c/d" terug. In jouw geval staan in de array dan dus alle stukjes waar je op wil zoeken, die dmv implode aan elkaar worden geplakt met een AND er tussen.

[ Voor 76% gewijzigd door Verwijderd op 06-12-2004 11:52 ]


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Je kunt de omschrijvingen van php functies terug vinden op php.net.

Bijvoorbeeld: http://nl2.php.net/manual/en/function.implode.php

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Verder is het aanteraden om functies te gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function searchInDB( $plaats, $hobbies, $etc )
{
    $sql = "SELECT user_id FROM profiel WHERE ";
    if ( $plaats != "" ) {
        $sql .= "extra";
    }
    if ( $hobbies != "" ) {
        $sql .= "extra querietroep";
    }
    mysql_query( $sql ) or die ( mysql_error() );
}
// voer de functie wel uit natuurlijk...
searchInDB($_POST["plaats"], $_POST["hobbies"], $_POST["hobbies"] );


Je doet immers telkens nagenoeg het enige wat een beetje varrieert is het WHERE statement. Maak daar gebruik van. :) B) :)

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
wow, hartstikke bedankt allemaal! Ik heb overigens wel gezocht naar die IMPLODE-functie en ik snapte het principe ook wel, ik kon het alleen niet omzetten naar de praktijk!
Door jullie voorbeelden kan ik dit nu wel!
Ik ga er gelijk weer mee aan de slag! :)
Pagina: 1