<?
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$query = mysql_query("SELECT * FROM voorraad WHERE artikelvpr LIKE '%".$_POST['q']."%'")or die (mysql_error());
if(mysql_num_rows($query) == '') {
echo "Er is niks gevonden dat vergelijkbaar is met u zoekopdracht.<br/>Probeer wat preciezer te zijn.";
}
Mijn zoekmachine zoekt nu alleen op artikelnamen (artikelvpr), hoe kan ik er voor zorgen.. dmv. een dropdown selectiebox dat hij ook op andere aspecten kan zoeken?
uhhmm... heeft iemand een idee wat mijn error kan betekenen ?
Welke error? Er is inmiddels zo veel gezegd en geschreven, dat het handig is om even aan te geven wat je huidige foutmelding is. Tvens ben ik benieuwd hoe de query er nu uit ziet.
$minimaal = "SELECT * FROM voorraad";
$kweerie = mysql_query($minimaal);
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$query = mysql_query("SELECT * FROM voorraad WHERE '".$_POST['zoek']."' LIKE '%".$_POST['q']."%'")or die (mysql_error());
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\mervoorraad\artzoeken.php on line 56
Er is niks gevonden dat vergelijkbaar is met u zoekopdracht.
Probeer wat preciezer te zijn.
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\mervoorraad\artzoeken.php on line 60
en dit is de querie
SELECT * FROM voorraad WHERE 'artikelvpr' LIKE '%ergline%'
$query = mysql_query("SELECT * FROM voorraad WHERE artikelvpr LIKE '%".$_POST['q']."%'")or die (mysql_error());
is vragen om mysql-injection..
kwaadwillenden kunnen bijvoorbeeld hele tabellen verwijderen of laten zien omdat de post variabele niet gecontroleerd word.
een simpel voorbeeld, we hebben een query als
SELECT * FROM users WHERE id=$_POST['id']
stel dat iemand dit opstuurd; $_POST['id'] = "1 ; DROP TABLE users";
3 maal raden wat er gebeurt. eerst worden alle gegevens over de user met id 1 opgevraagd, vervolgens wordt met een puntkomma die query afgesloten en een nieuwe gestart, een die de hele tabel users leegt!
hoe is dit op te lossen? simpel, controleer altijd of post variabelen geen dingen bevatten als puntkomma's en teksten als "DELETE", "DROP" en "SELECT".
ook selects moet je dus blokkeren, stel je voor dat iemand op het idee komt om dit als post in te voeren: 1 ; SELECT * FROM users
Inderdaad, hij krijg alle gegevens over alle leden te zien, helemaal een ramp als je zo stom bent om de wachtwoorden niet te versleutelen.
Abidou heeft volkomen gelijk, $_POST e.d. hoort nooit zo in een query te staan.
Maar dan het probleem:
SELECT * FROM voorraad WHERE 'artikelvpr' LIKE '%ergline%'
Deze query is fout. Je probeert nu de string 'artikelvpr' te vergelijken met '%ergline%'. Wat je echter wilt, is kijken in een bepaalde kolom of daar '%ergline%' voorkomt. Als 'artikelvpr' een kolomnaam is, mag deze nooit tussen quotes staan. Quotes geven aan dat het gaat om een string.