2 selectboxen
Ik wil voor het kiezen van data uit een tabel 2 selectboxen gebruiken,
ff simpel voorbeeldje men kan dus selecteren op naam of land
<select name="naam">
<option value="jan">Jan</option>
<option value="piet">Piet</option>
</select>
<select name="land">
<option value="nl">NL</option>
<option value="be">NL</option>
</select>
Dus select from table WHERE naam = jan
of indien de 2e selectbox wordt gebruikt:
select from table WHERE land = nl
Iemand een idee of voorbeeldje.
Die wordt dan wel ontvangen via $_POST (in PHP), maar als $_POST['naam'] == 'niet_gekozen', dan zal $_POST['land'] dus wel iets moeten bevatten.
Als beide leeg zijn (dus 2x 'niet_gekozen'), dan is er niet gekozen.
Zijn beide gevuld, dan kan je dus beter zoeken ;)
HTML wordt dan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<select name="naam">
<option value="niet_gekozen">Maak een keuze...</option>
<option value="jan">Jan</option>
<option value="piet">Piet</option>
</select>
<select name="land">
<option value="niet_gekozen">Maak een keuze...</option>
<option value="nl">NL</option>
<option value="be">NL</option>
</select>
<option value="niet_gekozen">Maak een keuze...</option>
<option value="jan">Jan</option>
<option value="piet">Piet</option>
</select>
<select name="land">
<option value="niet_gekozen">Maak een keuze...</option>
<option value="nl">NL</option>
<option value="be">NL</option>
</select>
Dat begrijp ik maar het gaat me meer om de afwikkeling ..
Indien uit bijv. de select met naam ,Jan wordt gekozen: selecteer dan alles uit de table met de naam Jan
Indien uit bijv. de select met naam , land NL wordt gekozen: selecteer dan alles uit de table met de naam NL
De select met naam heb ik, maar wil ook kunnen selecteren op land.
ff ruw een idee
If isset select naam , ga naar $testnaam anders naar $testland
Gewijzigd op 13/09/2015 20:30:54 door Pierre Web
De geselecteerde waardes vind je in $_POST['naam'] en $_POST['land'], waarbij de value de rode raad is.
" waarbij de value de rode raad is"
Overigens kan de value variëren, indien het al een rol zou spelen.
Gewijzigd op 13/09/2015 20:52:48 door - Ariën -
Bedankt maar snap het niet helemaal , de $_POST naam en land zal er altijd zijn?, dus ga je op de value te werk
$_POST['name'] = 'Value';
Dus als je bijv. $_POST['name'] echo'ed krijg je bijv. Jantje te zien.
Gewijzigd op 13/09/2015 21:12:31 door - Ariën -
naar $testnaam OF $testland en dan de value voor de ..where naam = $...
Gewijzigd op 13/09/2015 21:28:09 door Pierre Web
Denk wel aan SQL-injection uiteraard, want iedereen kan een selectbox manipuleren.
selecteer op land OF naam.
SELECT name, land FROM dingen WHERE name= '$_POST['name']' OR land= '$_POST['land']'
Code (php)
1
2
2
$query_test = $mysqli->query("
SELECT name, land FROM dingen WHERE name= '$_POST['name']' OR land= '$_POST['land']");
SELECT name, land FROM dingen WHERE name= '$_POST['name']' OR land= '$_POST['land']");
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in............
Gewijzigd op 13/09/2015 21:57:09 door Pierre Web
Je moet zelf even de boel netjes opmaken en SQL-injection-preventie toevoegen.
Variabelen moeten ook in het echt buiten quotes.
Eddy E op 13/09/2015 19:47:16:
Een lege <option> bovenaan zetten bij beide.
Die wordt dan wel ontvangen via $_POST (in PHP), maar als $_POST['naam'] == 'niet_gekozen', dan zal $_POST['land'] dus wel iets moeten bevatten.
Die wordt dan wel ontvangen via $_POST (in PHP), maar als $_POST['naam'] == 'niet_gekozen', dan zal $_POST['land'] dus wel iets moeten bevatten.
Dus zoiets in PHP:
Code (php)
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
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
<?php
// als beide zijn ingevuld, dan kijken we dus 2x
if(
( isset($_POST['naam']) AND $_POST['naam'] != 'niet_gekozen') )
AND
( isset($_POST['land']) AND $_POST['land'] != 'niet_gekozen') )
)
{
// beide zijn gekozen, dus dan wordt de IF-in de query zo:
$if = "WHERE land = '".$_POST['land']."' AND naam = '".$_POST['naam']."' ";
}
// niet beide ingevuld? Welke dan wel? Begin maar bij de naam
elseif ( isset($_POST['naam']) AND $_POST['naam'] != 'niet_gekozen') )
{
// enkel naam
$if = "WHERE naam = '".$_POST['naam']."' ";
}
// het was niet de naam, wel het land?
elseif ( isset($_POST['land']) AND $_POST['land'] != 'niet_gekozen') )
{
// enkel naam
$if = "WHERE land = '".$_POST['land']."' ";
}
// geen enkel geval, dus fout
else
{
$if = 'WHERE 1 = 0';
echo 'Fout gevonden. U heeft niets ingevuld.';
}
// meer van jouw script
?>
// als beide zijn ingevuld, dan kijken we dus 2x
if(
( isset($_POST['naam']) AND $_POST['naam'] != 'niet_gekozen') )
AND
( isset($_POST['land']) AND $_POST['land'] != 'niet_gekozen') )
)
{
// beide zijn gekozen, dus dan wordt de IF-in de query zo:
$if = "WHERE land = '".$_POST['land']."' AND naam = '".$_POST['naam']."' ";
}
// niet beide ingevuld? Welke dan wel? Begin maar bij de naam
elseif ( isset($_POST['naam']) AND $_POST['naam'] != 'niet_gekozen') )
{
// enkel naam
$if = "WHERE naam = '".$_POST['naam']."' ";
}
// het was niet de naam, wel het land?
elseif ( isset($_POST['land']) AND $_POST['land'] != 'niet_gekozen') )
{
// enkel naam
$if = "WHERE land = '".$_POST['land']."' ";
}
// geen enkel geval, dus fout
else
{
$if = 'WHERE 1 = 0';
echo 'Fout gevonden. U heeft niets ingevuld.';
}
// meer van jouw script
?>
Maar het is nog niet beveiligd tegen SQL-injection. Dus voor publieke doeleinden zou ik dit nog niet gebruiken.
- Aar - op 13/09/2015 21:41:31:
dan moet je OR gebruiken:
SELECT name, land FROM dingen WHERE name= '$_POST['name']' OR land= '$_POST['land']'
SELECT name, land FROM dingen WHERE name= '$_POST['name']' OR land= '$_POST['land']'
Maar wat als iemand dan wel 2 vinkjes plaats, 1 bij name en 1 bij land?
TS wil, als ik het goed begrijp, dat slechts 1 selectbox kan worden aangevinkt/query daarop is gebaseerd.
Edit: ik zie dat Eddy E al een oplossing(srichting) biedt.
Gewijzigd op 13/09/2015 22:04:46 door Obelix Idefix
Bij 3 velden (3 <select>'s, bijvoorbeeld leeftijd oid) wordt dit veel langer. Dan zal je met arrays gaan werken en die aflopen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php $year = $_POST["year"];
$temp = $_POST["temp"];?>
<?php
$query_pag_data = "SET lc_time_names = 'nl_NL'";
$query_pag_data = $mysqli->query("
SELECT * ,DATE_FORMAT(datum,
'%d-%m-%Y') as formatdatum,
DATE_FORMAT(datum,
'%Y') as jaar,
DATE_FORMAT(datum,
'%W') as weekdag
FROM $db_resultaten,
WHERE year= $year OR temperatuur= $temp
");[/code]
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in .... on line 124
124: [code]while ($row = mysqli_fetch_array($query_pag_data, MYSQLI_ASSOC))[/code]
$temp = $_POST["temp"];?>
<?php
$query_pag_data = "SET lc_time_names = 'nl_NL'";
$query_pag_data = $mysqli->query("
SELECT * ,DATE_FORMAT(datum,
'%d-%m-%Y') as formatdatum,
DATE_FORMAT(datum,
'%Y') as jaar,
DATE_FORMAT(datum,
'%W') as weekdag
FROM $db_resultaten,
WHERE year= $year OR temperatuur= $temp
");[/code]
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in .... on line 124
124: [code]while ($row = mysqli_fetch_array($query_pag_data, MYSQLI_ASSOC))[/code]
Variabelen horen buiten quotes, en niet erin. Verder hoort die komma op lijn 12 er niet, het is geen opsomming.