Alles selecteren of waarde
Hoe kan ik alles selecteren of een bepaalde waarde. Bijv: Selecteer producten: alles | groente | fruit
Welke waarde kan ik doorgeven om alles te selecteren?
Welke waarde kan ik doorgeven om alles te selecteren?
Code (php)
1
2
3
4
2
3
4
$cat_id = $_GET['cat_id'];
$sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";
$result = $conn->query($sql);
$sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";
$result = $conn->query($sql);
Gewijzigd op 09/01/2019 23:46:10 door Kees Mulder
Je wilt je query dus dynamisch maken omdat je een filter wilt toepassen?
Klopt dat?
PS: Let wel op SQL-injection. je query is nu onveilig doordat $_GET['cat_id'] onbeschermd is.
Klopt dat?
PS: Let wel op SQL-injection. je query is nu onveilig doordat $_GET['cat_id'] onbeschermd is.
Klopt inderdaad. Ik wil kunnen filteren alleen weet ik niet zo goed wat je alles kan selecteren als waarde.
Je kan in de URL aangeven hoe je wilt filteren.
Dus standaard toon je alles.
Is de url: zoeken.php?filter=fruit, dan zoek je op fruit (AND type = 'fruit')
Is de url: zoeken.php?filter=groente, dan zoek je op fruit (AND type = 'groente')
Dus standaard toon je alles.
Is de url: zoeken.php?filter=fruit, dan zoek je op fruit (AND type = 'fruit')
Is de url: zoeken.php?filter=groente, dan zoek je op fruit (AND type = 'groente')
Dat had ik inderdaad al. Maar als ik bijv eerst fruit heb gedaan maar wil daar toch alles weer laten zien hoe geef ik dat dan aan? Zoeken.php?filter=*
Het makkelijkste is om bij het begin te beginnen. Een ongefilderde query.
zoeken.php gewoon, maar je kan ook een voorwaarde maken zoals ?filter=no die de AND voorwaarde niet gebruikt.
zoeken.php gewoon, maar je kan ook een voorwaarde maken zoals ?filter=no die de AND voorwaarde niet gebruikt.
Je krijgt dan het volgende?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
In regel 7 zoek je alles waarbij cat_id leeg is.
Hoe groot is die kans?
Wellicht kan je beter zoeken naar cat_id <> leeg.
Dit kan je oefenen in bijvoorbeeld phpmyadmin.
Hoe groot is die kans?
Wellicht kan je beter zoeken naar cat_id <> leeg.
Dit kan je oefenen in bijvoorbeeld phpmyadmin.
Kees Mulder op 10/01/2019 08:58:59:
Je krijgt dan het volgende?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
In de IF en ELSE staat exact dezelfde code ...
Als dit, dan doe dit ... en zo niet ... doe dan precies hetzelfde!
Dat heeft niet zo veel zin hè ;-)
Ik zou sowieso een else gebruiken bij je isset-statement. Als $_GET['cat_id'] niet bestaat (dus enkel zoeken.php wordt aangeroepen) dan wil je (denk ik?) je normale ongefilterde query uitvoeren.
Ozzie PHP op 10/01/2019 10:25:58:
In de IF en ELSE staat exact dezelfde code ...
Als dit, dan doe dit ... en zo niet ... doe dan precies hetzelfde!
Dat heeft niet zo veel zin hè ;-)
Kees Mulder op 10/01/2019 08:58:59:
Je krijgt dan het volgende?
Code (php)
In de IF en ELSE staat exact dezelfde code ...
Als dit, dan doe dit ... en zo niet ... doe dan precies hetzelfde!
Dat heeft niet zo veel zin hè ;-)
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sql = 'SELECT * FROM producten';
if (isset($_GET['cat_id']) && ctype_digit($_GET['cat_id'])) {
$sql .= ' WHERE cat_id = ' . $_GET['cat_id'];
}
?>
$sql = 'SELECT * FROM producten';
if (isset($_GET['cat_id']) && ctype_digit($_GET['cat_id'])) {
$sql .= ' WHERE cat_id = ' . $_GET['cat_id'];
}
?>
Wat @Ward zegt, bouw gewoon één querystring op grond van de beschikbaar gestelde informatie.
In plaats van een brei van if-elseif-else statements die meerdere keren min of meer hetzelfde doen (Don't Repeat Yourself).
In plaats van een brei van if-elseif-else statements die meerdere keren min of meer hetzelfde doen (Don't Repeat Yourself).
Gewijzigd op 10/01/2019 15:33:40 door Thomas van den Heuvel




