Autor |
Nachricht |
Bigpanther
Threadersteller
Dabei seit: 18.06.2007
Ort: Wildberg (Schweiz)
Alter: -
Geschlecht:
|
Verfasst Do 30.10.2008 07:29
Titel SQL AND OR |
|
|
Morgähn - schon rausgeschaut? Wir haben 15cm Neuschnee in der Schweiz. Herrlich!! Nun zum Thema:
Habe eine Datenbank mit Kundendaten und Dateien die hochgeladen werden von Mitarbeiter/n. Eine Datei die hochgeladen wird, kann verschiedenen Kunden zugewiesen werden. Also; "Dateivorweihnachten.xls" gehört zu Kunde 'Schneekoppe' sowie 'Swissfides' und noch der 'Swisscom'.
Dann sort eine SQL Abfrage, dass der angemeldete Kunde 'Schneekoppe' NUR und AUSSCHLIESSLICH, seine zugewiesenen Dateien sieht. Schade nur, dass nun 'Schneekoppe' teilweise Dateien von 'Swisscom' sieht oder von 'Swissfides' und umgekehrt. Was mache ich falsch?
SQL:
Code: | SELECT * FROM Files
WHERE Archiv = False
AND (CustomerID1 OR CustomerID2 OR CustomerID3 OR CustomerID4 OR CustomerID5 OR CustomerID6 OR CustomerID7 OR CustomerID8 OR CustomerID9 OR CustomerID10 = ? )" |
Noch die vorherige Kundenabfrage. Damit ich weiss wer da was haben will (diese funktioniert):
Code: | SELECT * FROM clients WHERE Loginname = ?" |
Tja, ich weiss, dass ich nichts weiss und Du?
Bis dann und danke erstmal
Marcel
[edit by Nimroy]
Bitte [code]-Tags verwenden.
Zuletzt bearbeitet von Nimroy am Do 30.10.2008 08:37, insgesamt 1-mal bearbeitet
|
|
|
|
|
Smooth-Graphics
Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 30.10.2008 07:43
Titel
|
|
|
Du solltest generell nur auf Testumgebungen mit SELECT * arbeiten, im Realbetrieb solltest du heir immer die Spalten einzeln mit Kommata getrennt angeben. Der Sicherheit wegen und auch der Performance und Übersichtlichkeit wegen.
Code: |
SELECT filename
FROM files
WHERE Archiv = 0 AND CustomerID=$username |
wobei $username unbedingt mit mysql_real_escape_string() und anderen Schutzmaßnahemen wie htmlspecialchars() oder htmlentities() abgesichert werden sollte aus den SESSION / POST / GET daten.
Zuletzt bearbeitet von Smooth-Graphics am Do 30.10.2008 07:44, insgesamt 1-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Do 30.10.2008 08:54
Titel Re: SQL AND OR |
|
|
Bigpanther hat geschrieben: |
SQL:
Code: | SELECT * FROM Files
WHERE Archiv = False
AND (CustomerID1 OR CustomerID2 OR CustomerID3 OR CustomerID4 OR CustomerID5 OR CustomerID6 OR CustomerID7 OR CustomerID8 OR CustomerID9 OR CustomerID10 = ? )" |
|
deine where klausel ist falsch.
Code: | where foo = 'bar' and (bar ='foo' or foobar = 'barfoo') |
|
|
|
|
|
Bigpanther
Threadersteller
Dabei seit: 18.06.2007
Ort: Wildberg (Schweiz)
Alter: -
Geschlecht:
|
Verfasst Do 30.10.2008 12:34
Titel SQL AND OR gelöst |
|
|
Smooth-Graphics hat geschrieben: | Du solltest generell nur auf Testumgebungen mit SELECT * arbeiten, im Realbetrieb solltest du heir immer die Spalten einzeln mit Kommata getrennt angeben. Der Sicherheit wegen und auch der Performance und Übersichtlichkeit wegen. |
Danke zuerst mal für den Tip. Denke jedoch bei max. 10 Kunden dürfte die Datenbank (übrigens mit klassischem ASP nicht PHP) nicht zur Überlastung neigen, oder irre ich mich?
Zitat: |
Code: |
SELECT filename
FROM files
WHERE Archiv = 0 AND CustomerID=$username |
|
Die WHERE Klausel habe ich auf
WHERE Archiv = 0 geändert. Heisst der Kunde 'Swiss' werden die richtigen Files angezeigt. Leider heisst ein Kunde auch 'Swissport' und meldet sich dieser Kunde an, so werden auch die Dateien von 'Swiss' angezeigt.
Vielen herzlichen Dank für Eure Mitarbeit!! Was mache ich falsch?
Gruss, Marcel
Zuletzt bearbeitet von Bigpanther am Do 30.10.2008 12:38, insgesamt 1-mal bearbeitet
|
|
|
|
|
Bigpanther
Threadersteller
Dabei seit: 18.06.2007
Ort: Wildberg (Schweiz)
Alter: -
Geschlecht:
|
Verfasst Do 30.10.2008 12:44
Titel SQL AND OR gelöst |
|
|
Gelöst - uffhhhh - die Antwort lautet:
Code: | SELECT * FROM Files
WHERE Archiv = False
AND (CustomerID1 = ? OR CustomerID2 = ? OR CustomerID3 = ? OR CustomerID4 = ? OR
CustomerID5 = ? OR CustomerID6 = ? OR CustomerID7 = ? OR CustomerID8 = ? OR CustomerID9 OR CustomerID10 = ? ) |
Asta und bis dann, Marcel
|
|
|
|
|
Smooth-Graphics
Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 30.10.2008 13:33
Titel
|
|
|
Smooth-Graphics hat geschrieben: | Du solltest generell nur auf Testumgebungen mit SELECT * arbeiten, im Realbetrieb solltest du heir immer die Spalten einzeln mit Kommata getrennt angeben. Der Sicherheit wegen und auch der Performance und Übersichtlichkeit wegen. |
|
|
|
|
|
status4
Dabei seit: 01.10.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 30.10.2008 13:53
Titel
|
|
|
Smooth-Graphics hat geschrieben: | Sicherheit wegen |
Worum geht es? Wenn er alle Spalten benötigt kann er sie wenn er möchte
ohne Probleme alle abrufen, welche Sicherheitsrisiken sollten in dem Fall entstehen?
Zuletzt bearbeitet von status4 am Do 30.10.2008 13:54, insgesamt 1-mal bearbeitet
|
|
|
|
|
Pixelpole
Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht:
|
Verfasst Do 30.10.2008 14:04
Titel
|
|
|
Smooth-Graphics hat geschrieben: | Smooth-Graphics hat geschrieben: | Du solltest generell nur auf Testumgebungen mit SELECT * arbeiten, im Realbetrieb solltest du heir immer die Spalten einzeln mit Kommata getrennt angeben. Der Sicherheit wegen und auch der Performance und Übersichtlichkeit wegen. |
|
Setzen 6.
Mir fällt genau 1 Szenario ein in dem das ein Sicherheitsrisiko sein könnte, und das ist so absurd das derjenige der es programmiert wahrscheinlich ganz andere sorgen hat also das....
|
|
|
|
|
|
|
|