Beste,
Ik heb een verschillende select options op mijn pagina staan waarvan de gebruiker een keuze kan maken.
Aan de hand van de keuze van de gebruiker wordt uit een tabel gefilterd op de keuze(s).
Nu werkt dit prima, behalve als de gebruiker een of meerdere opties leeg laat.
Nu is mijn vraag, hoe kan je in een Where Clause een null-waarde negeren?
- NULL waarde in Where Clause
-
14-03-2011, 18:11 #1
- Berichten
- 45
- Lid sinds
- 15 Jaar
NULL waarde in Where Clause
-
In de schijnwerper
-
14-03-2011, 18:17 #2
- Berichten
- 494
- Lid sinds
- 16 Jaar
Re: NULL waarde in Where Clause
je kan een null waarde doorspelen, maar dan moet je wel de input filteren.
Laat ons zeggen dat het vel 'a' niet is ingevuld, dan moet je toch zorgen dat je zegt:
$a='';
Normaal als je het op deze manier doet moet het werken
-
14-03-2011, 18:19 #3
- Berichten
- 548
- Lid sinds
- 16 Jaar
Re: NULL waarde in Where Clause
Hallo Nick,
Ik denk niet dat dit gaat werken, je kunt beter iets in de zin van dit doen:
PHP Code:<?php
//Kijken of de gebruikers iets heeft ingevuld:
if (isset($_POST['where1']) && !empty(trim($_POST['where1'])))
{
$where['1'] = 'AND WHERE veld1 = "' . mysql_real_escape_string($_POST['where1'] . '"';
}else{
//Gebruiker heeft niets ingevuld, we laten de where leeg
$where['1'] = '';
}
//Query uitvoeren met mogelijk wheres
mysql_query("SELECT blabla FROM tabel " . $where['1'] . "") or die(mysql_error());
?>
-
14-03-2011, 18:25 #4
- Berichten
- 45
- Lid sinds
- 15 Jaar
Re: NULL waarde in Where Clause
Dat heb ik nu ook gedaan.
Code:<select name="merk"> <option value="">- Geen voorkeur -</option> <option value="test1">test1</option> </select>
Onderaan wordt de volgende query uitgevoerd
Code:$query = mysql_query("select * from `tabel` where Merk = '$merk' AND Type = '$type' AND Koeling = '$koeling'") or die("Kan record niet ophalen: ".mysql_error());
-
14-03-2011, 18:27 #5
- Berichten
- 548
- Lid sinds
- 16 Jaar
Re: NULL waarde in Where Clause
Dat heb ik nu ook gedaan.
Code:<select name="merk"> <option value="">- Geen voorkeur -</option> <option value="test1">test1</option> </select>
Onderaan wordt de volgende query uitgevoerd
Code:$query = mysql_query("select * from `tabel` where Merk = '$merk' AND Type = '$type' AND Koeling = '$koeling'") or die("Kan record niet ophalen: ".mysql_error());
-
14-03-2011, 18:37 #6
- Berichten
- 45
- Lid sinds
- 15 Jaar
-
14-03-2011, 18:47 #7
- Berichten
- 25
- Lid sinds
- 14 Jaar
Re: NULL waarde in Where Clause
Millan heeft het juist idee. Bouw een $where array op. Dus bijvoorbeeld:
PHP Code:if(isset($_POST['where1']))
$where[] = "veld1 = '".$_POST['where1']."'";
if(isset($_POST['where2']))
$where[] = "veld2 = '".$_POST['where2']."'";
PHP Code:............WHERE ".implode(" AND ", $where).".............
-
14-03-2011, 19:00 #8
- Berichten
- 45
- Lid sinds
- 15 Jaar
Re: NULL waarde in Where Clause
Millan heeft het juist idee. Bouw een $where array op. Dus bijvoorbeeld:
PHP Code:if(isset($_POST['where1']))
$where[] = "veld1 = '".$_POST['where1']."'";
if(isset($_POST['where2']))
$where[] = "veld2 = '".$_POST['where2']."'";
PHP Code:............WHERE ".implode(" AND ", $where).".............
PHP Code:<?php
if(isset($_GET['merk']))
$where[] = "merk = '".$_GET['merk']."'";
if(isset($_GET['type']))
$where[] = "type = '".$_GET['type']."'";
if(isset($_GET['koeling']))
$where[] = "koeling = '".$_GET['koeling']."'";
?>
<?php
$query = mysql_query("select * from `dirtbikes` WHERE Merk = ".implode(" AND ", $where)."") or die("Kan record niet ophalen: ".mysql_error());
echo '<table style="border: solid 1px black">';
while($record = mysql_fetch_array($query))
{
echo '<td style="border: solid 1px black">'.$record['Soort'].'</td><td style="border: solid 1px black">'.$record['Merk'].'</td><td style="border: solid 1px black">'.$record['Type'].'</td>
<td style="border: solid 1px black">'.$record['Koeling'].'</td><td style="border: solid 1px black">'.$record['Artikel'].'</td><td style="border: solid 1px black">'.$record['Prijs'].'</td></tr>';
}
?>
-
14-03-2011, 19:23 #9
- Berichten
- 25
- Lid sinds
- 14 Jaar
Re: NULL waarde in Where Clause
PHP Code:$query = mysql_query("select * from `dirtbikes` WHERE ".implode(' AND ', $where).";") or die("Kan record niet ophalen: ".mysql_error());
Ik heb nu het volgende, er volgens geen foutmeldingen o.i.d. maar er gebeurt verder ook niets.
PHP Code:<?php
if(isset($_GET['merk']))
$where[] = "merk = '".$_GET['merk']."'";
if(isset($_GET['type']))
$where[] = "type = '".$_GET['type']."'";
if(isset($_GET['koeling']))
$where[] = "koeling = '".$_GET['koeling']."'";
?>
<?php
$query = mysql_query("select * from `dirtbikes` WHERE Merk = ".implode(" AND ", $where)."") or die("Kan record niet ophalen: ".mysql_error());
echo '<table style="border: solid 1px black">';
while($record = mysql_fetch_array($query))
{
echo '<td style="border: solid 1px black">'.$record['Soort'].'</td><td style="border: solid 1px black">'.$record['Merk'].'</td><td style="border: solid 1px black">'.$record['Type'].'</td>
<td style="border: solid 1px black">'.$record['Koeling'].'</td><td style="border: solid 1px black">'.$record['Artikel'].'</td><td style="border: solid 1px black">'.$record['Prijs'].'</td></tr>';
}
?>
In je echo gaan ook nog wat dingetjes fout en de table wordt niet afgesloten. Query moet nu echter goed zijn.
Let er op dat je de post data niet zomaar in een query kan zetten, want dat is erg onveilig.Laatst aangepast door Ben Weiland : 14-03-2011 om 19:36 Reden: Automatisch samengevoegd.
-
14-03-2011, 19:57 #10
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: NULL waarde in Where Clause
De reguliere manier is om het gewoon in de select te stoppen a la:
select * from tabel where (Merk = '$merk' or '$merk' = '' ) and (Type = '$type' or '$type' = '' ) ...etc
De mysqloptimizer zal de or's optimaliseren voordat het statement uitgevoerd wordt. Spaart je niet alleen een paar regels php, maar je houdt de 'select' logica ook op 1 plaats.
-
14-03-2011, 20:59 #11
- Berichten
- 45
- Lid sinds
- 15 Jaar
Re: NULL waarde in Where Clause
De reguliere manier is om het gewoon in de select te stoppen a la:
select * from tabel where (Merk = '$merk' or '$merk' = '' ) and (Type = '$type' or '$type' = '' ) ...etc
De mysqloptimizer zal de or's optimaliseren voordat het statement uitgevoerd wordt. Spaart je niet alleen een paar regels php, maar je houdt de 'select' logica ook op 1 plaats.
Aan de rest, hartstikke bedankt voor de hulp en het meedenken!
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic