Login mit Benutzergruppenabfrage

philishake

javascript enthusiast
Cheers Leute,

ich bastel derzeit an einem CMS-System. Sozusagen als Training und als Tool für zukünftige Projekte. Dafür habe ich bereits eine Basis Website mit diversen Klassen und eigenem SQL-Framework programmiert. Mittlweile habe ich glaube ich schon zu lange meinen eigenen Code gesehen, sodass ich nicht in der Lage bin den folgenden Fehler zu finden. Es handelt sich um folgende Zeile Code:

PHP:
$blubFramework->getSQLManager()->sqlSelect (
    "password", "account",
    "username='".$_POST['username']."' AND group='admin' OR group='cmsAdmin'"
    )

Kurz zur Erklärung:
- $blubFramework ist ein Object der Klasse blubFramework
- getSQLManager() gibt ein SQL Object zurück, welches Zugriff auf verschiede SQL-Funktionen bietet
- sqlSelect ist eine simple SQL-Select-Abfrage in einer speraten Funktion mit speziellem Error-Handling
- die Werte in der Klammer muss man sich wie folgt vorstellen: ( WHAT, FROM, WHERE )

Die sqlSelect funktion wird bis zum aufkommen dieser Coder-Zeile schon mehrere Male verwendet. Ich habe auch extra einige Beispielabfragen in den Code eingebaut:

PHP:
print "username = ".$blubFramework->getSQLManager()->sqlSelect("username","account","id='4' AND username='blub' OR username='test'")."<br>";
			print "password = ".$blubFramework->getSQLManager()->sqlSelect("password","account","id='4' AND username='blub' OR username='test'")."<br>";
			print "e-mail   = ".$blubFramework->getSQLManager()->sqlSelect("email","account","id='4' AND username='blub' OR username='test'")."<br>";
			print "group    = ".$blubFramework->getSQLManager()->sqlSelect("group","account","id='4' AND username='blub' OR username='test'")."<br>";

Alle diese Zeilen funktionieren tadellos. Ich habe mittlerweile auch herausbekommen, dass es immer Probleme gibt, wenn man bei Select-Abfragen nach dem Wert 'group' fragt. 'group' ist allerdings genau wie 'username' und 'password' ein normaler varchar(255).

Das ist der SQL-Fehler der auftritt, wenn ich nach der group frage:
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group='admin' OR group='cmsAdmin'' at line 1

Was einwandfrei funktioniert ist, wenn ich 'group' selbst als Rückfragewert haben will. Lediglich beim benutzen von 'group' als Bedingung für eine Werte-Abfrage bockt SQL rum.

Ich hoffe ich konnte alles ausführlich erklären und danke euch bereits für eure Hilfe.
 
Cheers Leute,
......
Das ist der SQL-Fehler der auftritt, wenn ich nach der group frage:
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group='admin' OR group='cmsAdmin'' at line 1
......

...tax to use near 'group='admin' OR group='cmsAdmin'' at line 1

was ist denn 'group='admin' ? Ich denke es sollte group='admin' heißen oder? :)
Da ist dir wahrscheinlich ein einfaches Anführungszeichen reingerutscht.. ;)

paD
 
Leider nein, wenn du dir den String als ganzen betrachtest, sieht er folgendermaßen aus:

PHP:
" username='".$_POST['username']."' AND group='admin' OR group='cmsAdmin' "
 
Der gesamte Query wird innerhalb der Funktion zusammen gebastelt. Die Funktion an sich läuft ja einwandfrei. Nur bei dieser speziellen Abfrage zickt er rum.
 
Gut, dann wirds zwar was schwerer dir zu helfen, aber ok.

Wie sieht denn der Username aus, den du da mit POST übergibts? Vllt. liegt es an dem?
 
Tjoa, dann wird dir kaum einer helfen können, wenn man weder das Framework (oder zumindest die genutzte Funktion) noch das gesamte Query sehen kann.
Da steht ja eindeutig, dass dein Query nicht korrekt ist und somit die Parameter falsch sind oder die Funktion nicht korrekt arbeitet.

Hier übergibts du ja anscheinend 3 Parameter:
$blubFramework->getSQLManager()->sqlSelect ("pw", "account", "query");
...aber was weiter passiert sieht man nicht.
 
So sieht die Zeile aus, in der der Query-String zusammengesetzt wird:

PHP:
$query = @mysql_query("SELECT `$what` as value FROM `$from` WHERE ".$where);
 
group ist ein Schlüsselwort (die gute alte GROUP Klausel) und hat daher nichts da zu suchen. Du könntest das Problem umgehen, indem du deinen Spaltennamen in Backticks setzt oder die Spalte anders benennst.
 
Zurück