mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 00:27 Benutzername: Passwort: Auto-Login

Thema: SQL AND OR vom 30.10.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> SQL AND OR
Seite: 1, 2  Weiter
Autor Nachricht
Bigpanther
Threadersteller

Dabei seit: 18.06.2007
Ort: Wildberg (Schweiz)
Alter: -
Geschlecht: Männlich
Verfasst Do 30.10.2008 07:29
Titel

SQL AND OR

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*
Marcel

[edit by Nimroy]
Bitte [code]-Tags verwenden.


Zuletzt bearbeitet von Nimroy am Do 30.10.2008 08:37, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Smooth-Graphics

Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Do 30.10.2008 07:43
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
pRiMUS

Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht: Männlich
Verfasst Do 30.10.2008 08:54
Titel

Re: SQL AND OR

Antworten mit Zitat Zum Seitenanfang

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')
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Bigpanther
Threadersteller

Dabei seit: 18.06.2007
Ort: Wildberg (Schweiz)
Alter: -
Geschlecht: Männlich
Verfasst Do 30.10.2008 12:34
Titel

SQL AND OR gelöst

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Bigpanther
Threadersteller

Dabei seit: 18.06.2007
Ort: Wildberg (Schweiz)
Alter: -
Geschlecht: Männlich
Verfasst Do 30.10.2008 12:44
Titel

SQL AND OR gelöst

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Smooth-Graphics

Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Do 30.10.2008 13:33
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
status4

Dabei seit: 01.10.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 30.10.2008 13:53
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Do 30.10.2008 14:04
Titel

Antworten mit Zitat Zum Seitenanfang

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.


*Huch*

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....
  View user's profile Private Nachricht senden
 
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.