Hallo,

Ik zit met een probleem, ik heb hier een zoekscriptje die voor mij het volgende doet:
Ik heb 3 checkboxes en 3 tekstvelden
Waar de bezoeker op wil zoeken vinkt hij aan.
bijvoorbeeld 1 en 2
Nu wil ik het script wat uitbreiden en is mijn simpele idee die ik eerst had gebruikt, namelijk voor elke mogelijkheid een IF gebruiken...niet heel erg simpel meer. kijk maar mee naar de mogelijkheden bij 3 boxen:


1    
12  
13 
123  
2
23
3

7 maal een if($die = checked AND.......
jullie snappen het wel :)
Nu de mogelijkheden als ik de getallen (boxen) 4 en 5 erbij doe :|

1   
12
13   
123  
2
23
3
14
15 
134
145
1245
1245
124
125
1234
12345

En daarmee zijn we er nog niet.....;)
Mijn vraag is:
Kan ik op een of andere manier eerst kijken welke zijn aangekruist:
<input name="1check" type="checkbox" value="checked" />
<input name="2check" type="checkbox" value="checked" />
En dan op (de voor mij nog onbekende wijze) met PHP kijken welke POST of GET (maakt niet uit voor mij, post is denk ik mooier voor de adresbalk)
de waarde checked heeft? :)
en dan daarna weet ik het....
dan op een of andere wijze op basis daarvan een query te bouwen:
als 1 en 2 zijn gevinkt:
SELECT * FROM tabel WHERE 1 = tekstvak1 AND 2 = tekstvak2
of alleen 1
SELECT * FROM tabel WHERE 1 = tekstvak1

Mijn formulier ziet er dus grofweg zo uit:
[code]
---------------------------------------------
O |tekstvak1| |
O |tekstvak2| |
O |tekstvak3| |
O |tekstvak4| |
O |tekstvak5| |
----------------------------------------------
Waarin O een checkbox is en tekstvak de waarde waarop word gezocht bevat
Kben ook nog maar een newbie maar kdenk dat het volgende mogelijk is:

<input type='checkbox' name='checked[]' value='checked'>

Dit schrijf je voor alle 5 je checkboxes. Dan worden de gecheckte opgeslagen in een array na het submitten.

en dan
if( isset($_POST['checked'])){
$checked = $_POST['checked']
foreach($checked as $c){
dan here je query de vakjes die aangevinkt zijn zullen als $c hierin komen
}

}
jo en hoe weet ik dan welke bij welk tekstvak hoort :)
sry

<input type='checkbox' name='checked[]' value='1' checked>

en bij 2 3 4 5 dan bij value deze waarden invullen

ok dit is inderdaad een goeie! Nu moet hij op een of andere manier de query automatisch opbouwen.
Ik dacht eraan voor elke mogelijkheid het zo te doen:
als er 2 zijn aangevinkt is de query
SELECT * FROM tabel WHERE veld1 = waarde1 AND veld2 = waarde2
Alleen ik moet op een of andere manier velden linken. (ook in arrays doen?)
als 2checked is moet hij zoeken in veld "adres" bijvoorbeeld
dus
Array
(
[1] => naam
[2] => adres
......
)
en gewoon:
<input type='checkbox' name='checked[]' value='1-checked'>
$checked = $_POST['checked'];

foreach($checked as $c){
$b = explode('-',$c);
echo $b[0]."<br>";
}

En dan de namen van de velden met de waarden instellen op 1 2 3 4 en 5

EDIT: Het is gelukt, ik dank u allen!
Als ik het goed begrijp wil je dus een formulier met verschillende input velden voor verschillende gegevens in je tabel. Verder wil je bij elk inputveld een checkbox waarmee je kunt aangeven of dat veld gebruikt moet worden in de query?
je hebt het goed begrepen en ik heb het opgelost...:)
hoe? :
<?php
$checked = $_POST['checked'];
$arr = array(1 => "naam", 2 => "adres", 3 => "woonplaats", 4 => "land", 5 => "leeftijd");
$aantal = count($checked);
if($aantal == 2){
$b0 = explode('-',$checked[0]);
$b1 = explode('-',$checked[1]);
mysql_query("SELECT * FROM tabel WHERE ".$arr[$b0[0]]." LIKE '%".$_POST[$b0[0]]."%' AND ".$arr[$b1[0]]." LIKE '%".$_POST[$b1[0]]."%' ORDER BY id DESC");
}
?>
Uiteraard nog niet veilig, dat komt allemaal wel, eerst ff beetje zo doen (lang typen is niet erg dat heb ik er voor over)

Hmm, niet echt een hele efficiente manier. Het grote nadeel is nu namelijk dat als je 1 dingetje aan je formulier verandert, je ook je hele php script moet veranderen. De array $arr zal namelijk niet meer kloppen...

Een voorbeeld dat veel schaalbaarder is zie je hier:

Zoekvelden met checkboxen

In de array $aSearch krijg je nu een aantal entries met als key de naam van het veld en als waarde de ingevulde waarde.

Reageren