php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 16-02-2013, 13:06
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard Ich bitte um Hilfe: WHERE Abfrage

Da ich MYSQL-Anfänger bin, habe komme ich bei Fogendem nicht weiter:

Tabellen: user und user_groups

Tabelle user:
user_name|user_groups
Name_1|.11.13.15
Name_2|.10.13.16

Tabelle user_groups:
group_id|group_name
10|Bäcker
11|Maurer
12|Manager
usw...

Ich möchte nun z.B. wissen, welcher user_name in der group_id 13 ist.

Meine (erfolglose) Abfrage:
PHP-Code:
$query 'SELECT
          user_name, user_groups, group_id, group_name
          FROM
          users, user_groups
          WHERE
          user_groups = 13  
          ORDER BY
          user_name
          '

Da ja in user_groups ein mit "Punkt" getrennter String steht, schlägt die Abfrage fehl.

Wie kann ich diese Abfrage besser machen?

Vielen Dank schon einmal für eure Hilfe.

P.S. Bitte nicht schimpfen, ich bin halt noch am Lernen
Mit Zitat antworten
  #2 (permalink)  
Alt 16-02-2013, 13:31
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Wasser_Wanderer Beitrag anzeigen
Da ja in user_groups ein mit "Punkt" getrennter String steht, schlägt die Abfrage fehl.
Das ist ja auch so falsch. In einer Spalte sollte nicht mehr als ein Wert stehen. Informiere dich mal über Datenbanknormalisierung.
Mit Zitat antworten
  #3 (permalink)  
Alt 16-02-2013, 13:36
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Das ist ja auch so falsch. In einer Spalte sollte nicht mehr als ein Wert stehen. Informiere dich mal über Datenbanknormalisierung.
Das stimmt, aber in dem PHP-Fusion Board wird das nunmal so in die DB geschrieben. Deshalb kann ich ja nur mit diesen Vorgaben arbeiten.
Mit Zitat antworten
  #4 (permalink)  
Alt 16-02-2013, 13:45
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Dann bleibt wohl nur FIND_IN_SET() mit all seinen Nachteilen.
Mit Zitat antworten
  #5 (permalink)  
Alt 16-02-2013, 15:40
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Danke h3ll für deinen Hinweis mit FIND_IN_SET.

Leider bin ich zu dumm damit zu arbeiten. Habe das Manual natürlich dazu gelesen und diese Funktion in verschiedenen Kombinationen versucht einzubauen.

Aber:
durch googeln nach Beispielen zu dieser Funktion, bin ich auf die Funktion WHERE user_groups LIKE "%13%" AND group_id = 13 gestoßen.

Damit konnte ich meine Aufgabe lösen. Ob diese gut oder schlecht ist...... das weis ich nicht.
Mit Zitat antworten
  #6 (permalink)  
Alt 17-02-2013, 01:42
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Wasser_Wanderer Beitrag anzeigen
Damit konnte ich meine Aufgabe lösen. Ob diese gut oder schlecht ist...... das weis ich nicht.
Nee.... damit ging es nicht da, nicht nur 13 sondern auch 1 und 3 matchen.

Zufällig bin ich auf MySQL :: MySQL 5.1 Referenzhandbuch :: G Beschreibung der MySQL-Syntax für reguläre Ausdrücke
gestossen.

Damit kann man auch MYSQL mit einer REGEX füttern.

Ich habs dann so lösen können:
PHP-Code:
WHERE user_groups REGEXP('^\\\.{$_GET['group_id']}$|\\\.{$_GET['group_id']}\\\.|\\\.{$_GET['group_id']}$') AND group_id $gruppen_id 
Die GET-Parameter sind bei mir aus nem Formular zum testen
Mit Zitat antworten
  #7 (permalink)  
Alt 17-02-2013, 18:35
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Damit baust du eine schöne Sicherheitslücke. GET- und POST-Werte dürfen niemals direkt in SQL-Abfragen eingefügt werden. Im besten Fall schlägt die Abfrage einfach fehl. Im schlimmsten Fall bemerkt jemand die Lücke und übernimmt deinen Server.

Immer den Kontextwechsel beachten! Sowohl bei SQL als auch bei HTML, URL und JavaScript:

http://wiki.selfhtml.org/wiki/Artike..._und_behandeln

Geändert von h3ll (17-02-2013 um 18:39 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 18-02-2013, 23:26
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard Problem gelöst

Zitat:
Zitat von h3ll Beitrag anzeigen
Damit baust du eine schöne Sicherheitslücke. GET- und POST-Werte dürfen niemals direkt in SQL-Abfragen eingefügt werden. Im besten Fall schlägt die Abfrage einfach fehl. Im schlimmsten Fall bemerkt jemand die Lücke und übernimmt deinen Server.

Immer den Kontextwechsel beachten! Sowohl bei SQL als auch bei HTML, URL und JavaScript:

Artikel:Kontextwechsel/erkennen und behandeln ? SELFHTML-Wiki
Da hast du natürlich vollkommen Recht h3ll,
ich hab die GET/POST-Werte auch nur mal schnell zum testen genommen.

Kann geschlossen werden
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bitte um Hilfe if else Abfrage Angeschossen PHP Developer Forum 4 13-03-2006 22:44
Abfrage Problem mit JOIN bitte um Hilfe! rst SQL / Datenbanken 3 13-03-2006 18:20
where Abfrage bitte DENKANSTOSS netleader PHP Developer Forum 7 12-01-2006 11:20
Ich finde die zwei Fehler nicht. Bitte um Hilfe! BenBay PHP Developer Forum 8 17-02-2003 22:59
Einfaches Problem, aber ich find keine Lösung! Brauche dringend Hilfe, bitte!!! funnyjanni PHP Developer Forum 5 15-02-2002 10:31

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:03 Uhr.