Alles selecteren of waarde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

09/01/2019 23:45:27
Quote Anchor link
Hoe kan ik alles selecteren of een bepaalde waarde. Bijv: Selecteer producten: alles | groente | fruit

Welke waarde kan ik doorgeven om alles te selecteren?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$cat_id = $_GET['cat_id'];

$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
 
PHP hulp

PHP hulp

20/05/2019 13:50:52
Honeypot
 
- Ariën -
Beheerder

- Ariën -

09/01/2019 23:56:16
Quote Anchor link
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.
 
Kees Mulder

Kees Mulder

10/01/2019 00:07:33
Quote Anchor link
Klopt inderdaad. Ik wil kunnen filteren alleen weet ik niet zo goed wat je alles kan selecteren als waarde.
 
- Ariën -
Beheerder

- Ariën -

10/01/2019 00:13:36
Quote Anchor link
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')
 
Kees Mulder

Kees Mulder

10/01/2019 00:23:16
Quote Anchor link
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=*
 
- Ariën -
Beheerder

- Ariën -

10/01/2019 00:44:20
Quote Anchor link
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.
 
Kees Mulder

Kees Mulder

10/01/2019 08:58:59
Quote Anchor link
Je krijgt dan het volgende?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$cat_id
= $_GET['cat_id'];

if(isset($_GET['cat_id'])) {
    if($_GET['cat_id'] == '') {
        // query to get all records  
        $sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";  
    }
  
    else{
        // query to get all records  
        $sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";
    }
  
?>
 
Adoptive Solution

Adoptive Solution

10/01/2019 10:13:53
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

10/01/2019 10:25:58
Quote Anchor link
Kees Mulder op 10/01/2019 08:58:59:
Je krijgt dan het volgende?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$cat_id
= $_GET['cat_id'];

if(isset($_GET['cat_id'])) {
    if($_GET['cat_id'] == '') {
        // query to get all records  
        $sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";  
    }
  
    else{
        // query to get all records  
        $sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";
    }
  
?>



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è ;-)
 
- Ariën -
Beheerder

- Ariën -

10/01/2019 10:47:31
Quote Anchor link
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.
 
Kees Mulder

Kees Mulder

10/01/2019 12:09:09
Quote Anchor link
Ozzie PHP op 10/01/2019 10:25:58:
Kees Mulder op 10/01/2019 08:58:59:
Je krijgt dan het volgende?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$cat_id
= $_GET['cat_id'];

if(isset($_GET['cat_id'])) {
    if($_GET['cat_id'] == '') {
        // query to get all records  
        $sql = "SELECT * FROM producten";  
    }
  
    else{
        // query to get all records  
        $sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";
    }
  
?>



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è ;-)
 
Ozzie PHP

Ozzie PHP

10/01/2019 12:20:47
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

if(isset($_GET['cat_id']) && $_GET['cat_id'] !== '') {
  $sql = "SELECT * FROM producten WHERE producten.cat_id = '$cat_id'";
}
else {
  $sql = "SELECT * FROM producten";
}

  
?>
 
Ward van der Put
Moderator

Ward van der Put

10/01/2019 14:48:50
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];
}

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

10/01/2019 15:16:58
Quote Anchor link
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).
Gewijzigd op 10/01/2019 15:33:40 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.