SELECT
friction
- datenbank
1 wahsaga0 Fabian St.
Hallo,
Ich habe ein Problem mit einem SELECT und zwar habe ich eine Tabelle art
, diese hat eine Kolonne show
vom typ INT, zum filtern(0=nicht zeigen , 1=zeigen)
In den andern Kolonnen sind Texte oder Bezeichungnen.
Ich habe jetzt ein Suchfeld gemacht indem man ein wort oder eine zahl angeben kann, und es dann per GET senden.
'searchkey' ist der name des input's vom typ text
Dann rufe ich folgendes query auf:
<?
$q="
SELECT * FROM art
WHERE show
='1'
AND bez1\_fr
LIKE '%$_GET[searchkey]%'
OR bez1\_en
LIKE '%$_GET[searchkey]%'
OR bez1\_de
LIKE '%$_GET[searchkey]%'
OR art\_nr
LIKE '%$_GET[searchkey]%'
";
?>
Wieso werden auch reihen angezeigt wo show=0 ist ?
Ich habe doch ein AND nach der ersten Bedingung angegeben!
danke
hi,
Wieso werden auch reihen angezeigt wo show=0 ist ?
Ich habe doch ein AND nach der ersten Bedingung angegeben!
ja, aber AND bindet stärker als OR.
du hast also alle sätze selektiert auf die
WHERE
show
='1'
ANDbez1\_fr
LIKE '%$_GET[searchkey]%'
oder
bez1\_en
LIKE '%$_GET[searchkey]%'
oder
bez1\_de
LIKE '%$_GET[searchkey]%'
oder
art\_nr
LIKE '%$_GET[searchkey]%'
zutrifft.
nutze klammerung, um die teilausdrücke in der "richtigen", von dir gewünschten reihenfolge zu binden.
gruß,
wahsaga
hallo,
nutze klammerung, um die teilausdrücke in der "richtigen", von dir gewünschten reihenfolge zu binden.
tut mir leid, hab noch nie mit klammerungen in querys gearbeitet,
kannst du mit bitte ein Beispiel geben?
danke
Klammerung:
$q="
SELECT * FROM art
WHERE show
='1'
AND
( bez1\_fr
LIKE '%$_GET[searchkey]%'
OR bez1\_en
LIKE '%$_GET[searchkey]%'
OR bez1\_de
LIKE '%$_GET[searchkey]%'
OR art\_nr
LIKE '%$_GET[searchkey]%')";
BEDEUTET
Wähle alles aus art aber nur wenn gilt
UND
bez1_fr LIKE blubber
ODER
bez2_fr LIKE blubber
ODER
...
CHEERS
hallo,
BEDEUTET
Wähle alles aus art aber nur wenn gilt
- show = 1
UND
bez1_fr LIKE blubber
ODER
bez2_fr LIKE blubber
ODER
...CHEERS
ja wunderbar, dankeschön :-)
Hi!
Dann rufe ich folgendes query auf:
<?
$q="
SELECT * FROMart
WHEREshow
='1'
ANDbez1\_fr
LIKE '%$_GET[searchkey]%'
ORbez1\_en
LIKE '%$_GET[searchkey]%'
ORbez1\_de
LIKE '%$_GET[searchkey]%'
ORart\_nr
LIKE '%$_GET[searchkey]%'
";
?>
Neben den bereits erwähnten Punkten solltest du es tunlichst _vermeiden_, einen Parameter ungeprüft in dein Skript zu übernehmen, weil du dich dadurch für SQL-Injections anfällig machst. Aus diesem Grund solltest du $_GET['searchkey'] mit mysql_real_escape_string behandeln. Ferner muss der Key «searchkey» in Anführungszeichen stehen, wenn es sich bei searchkey um keine Konstante handelt, was ich bei diesem Beispiel jetzt mal annehme.
Grüße,
Fabian St.