MYSQL Fehler!
Simon
- php
0 der Flo(h)1 Cheatah-1 Simon1 Cheatah-1 Simon1 Cheatah1 der Flo(h)
1 Helmut Weber-1 Simon1 Helmut Weber0 Simon1 dedlfix1 Axel Richter
Hallo,
ich verzweifel gerade, finde den Fehler nicht:
Fehlermeldung: Unknown column 'adf' in 'where clause'
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in
Code: if(isset($username) && ($userpass)) {
$username = trim($username);
$userpass = trim($userpass);
$user_erg = mysql_query("SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.userpass, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.id WHERE user.status = 1 AND user.username = ".$username." AND user.userpass = ".$userpass."");
echo mysql_error();
if(mysql_num_rows($user_erg)>0) {
$user_row = mysql_fetch_array($user_erg);
$_SESSION[USER_ID] = $user_row['USER_ID'];
$_SESSION[USERNAME] = $user_row['USERNAME'];
$_SESSION[USERTASK] = $user_row['USERTASK_DESCRIPTION'];
echo 'OK.';
} else {
$user_error[] = $GLOBALS['user_false_userpass'];
}
}
Gruß .. Simon
Fehlermeldung: Unknown column 'adf' in 'where clause'
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in
steht doch alles da. Die Spalte 'adf' existiert nicht. Schau dir mal deine Datenbank an.
Gruß,
Flo
Hi,
Fehlermeldung: Unknown column 'adf' in 'where clause'
und wie lautet die Where-Clause?
Cheatah
Hi,
und wie lautet die Where-Clause?
Hä? - Steht doch da:
... WHERE user.status = 1 AND user.username = ".$username." AND user.userpass = ".$userpass." ...
Gruß .. Simon
Hi,
und wie lautet die Where-Clause?
Hä? - Steht doch da:
nein. Da steht irgend welcher PHP-Code, aber keine Where-Clause.
Cheatah
Hi,
nein. Da steht irgend welcher PHP-Code, aber keine Where-Clause.
Oh .. mmh ... dann hab ich das verwechselt. Dann gibt es keine Where-Clause, denn wenn ich nicht mal weiß as das ist, dann kann ich sie ja nicht nutzen!
Gruß .. Simon
Hi,
Oh .. mmh ... dann hab ich das verwechselt. Dann gibt es keine Where-Clause, denn wenn ich nicht mal weiß as das ist, dann kann ich sie ja nicht nutzen!
die Where-Clause ist das, was die Datenbank resultierend aus dem von Dir genannten Code erhält.
Cheatah
Schau dir mal an was
print ("SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.userpass, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.id WHERE user.status = 1 AND user.username = ".$username." AND user.userpass = ".$userpass."");
so ausgibt, und vergleich das mit deinen Spalten in der Datenbank, dann wirst du den Fehler schnell finden!
Hallo Simon,
Fehlermeldung: Unknown column 'adf' in 'where clause'
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
diese Fehlermeldung besagt ja schon einiges!
Jetzt musst Du nur noch herausfinden, warum MYSQL eine Spalte "adf" sucht, obwohl Du diese in deinem Quellcode gar nicht angegeben hast.
Da bleibt nur noch der Inhalt der Variablen $username und $userpass übrig.
Lass Dir diese Variablen mal ausgeben.
Wenn Du darin den Fehler gefunden hast, dann überlege Dir mal, was Du noch alles in diese SQL-Anweisung über diese Variablen einschleusen hättest können. Eventuell wird Dir ja eine Sicherheitslücke in deinem Skript deutlich!
Gruß
Helmut Weber
Hi,
Lass Dir diese Variablen mal ausgeben.
Ok habe ich gemacht und die Ausgabe stimmt auch!
Wenn Du darin den Fehler gefunden hast, dann überlege Dir mal, was Du noch alles in diese SQL-Anweisung über diese Variablen einschleusen hättest können. Eventuell wird Dir ja eine Sicherheitslücke in deinem Skript deutlich!
Nö wüsste nicht wo: Hier der gesamte Queltext:
function get_user_examination($username, $userpass) {
$user_error = array();
if(!$username) {
$user_error[] = $GLOBALS['user_error_username'];
}
if(!$userpass) {
$user_error[] = $GLOBALS['user_error_userpass'];
}
if(isset($username) && ($userpass)) {
$username = trim($username);
$userpass = trim($userpass);
$user_erg = mysql_query('SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.id WHERE user.status = 1 AND user.username = '.$username.' AND user.userpass = '.$userpass.'');
echo mysql_error();
if(mysql_num_rows($user_erg)>0) {
$user_row = mysql_fetch_array($user_erg);
$_SESSION[USER_ID] = $user_row['USER_ID'];
$_SESSION[USERNAME] = $user_row['USERNAME'];
$_SESSION[USERTASK] = $user_row['USERTASK_DESCRIPTION'];
echo 'OK.';
} else {
$user_error[] = $GLOBALS['user_false_userpass'];
}
}
return $user_error;
}
switch($HTTP_GET_VARS['action']) {
case 'user_login':
$username = $HTTP_POST_VARS['username'];
$userpass = $HTTP_POST_VARS['userpass'];
$user_error = get_user_examination($username, $userpass);
break;
default:
break;
}
Gruß .. Simon
Hallo Simon,
Lass Dir diese Variablen mal ausgeben.
Ok habe ich gemacht und die Ausgabe stimmt auch!
Nach welchem ermessen? Nach deinem?
Die Ausgabe zu posten wäre wichtiger gewesen als der gesamte Quelltext.
Damit Du auch Cheatahs einwände verstehst rate ich Dir alles was zwischen mysql_query( ... ) steht am Bildschirm ausgeben zu lassen. Genau dann hast Du den SQL-Query, der an die Datenbank übergeben wird.
Dein Quelltext ist nur PHP-Code, der erst noch verarbeitet werden muss. Die Suche nach einem Fehler ist deutlich leichter, wenn man weiß welche Daten zwischen den Prozessen hin und her wandern.
Gruß
Helmut Weber
Hallo,
Die Ausgabe zu posten wäre wichtiger gewesen als der gesamte Quelltext.
Hier mal die Ausgabe:
SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.id WHERE user.status = 1 AND user.username = root AND user.userpass = root
Also meiner Meinung nach stimmt die. Und wenn ich das in phpMyAdmin eingebe gibt er ja auch das richtig aus.
Gruß .. Simon
Hier mal die Ausgabe:
SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.id WHERE user.status = 1 AND user.username = root AND user.userpass = rootAlso meiner Meinung nach stimmt die. Und wenn ich das in phpMyAdmin eingebe gibt er ja auch das richtig aus.
Gibt es in den Tabellen cms_user oder cms_usertask eine Spalte namens root?
Oder hast du vielleicht nur vergessen den String root zu quotieren bzw. das was die Variablen $username und $userpass liefern. Beachte auch, dass jemand ' und " in seinem Usernamen oder Passwort verwenden könnte... mysql_real_escape_string()
Hallo,
Hier mal die Ausgabe:
SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.id WHERE user.status = 1 AND user.username = root AND user.userpass = root
Error: Unknown column 'root' in 'where clause' ;-))
Also meiner Meinung nach stimmt die. Und wenn ich das in phpMyAdmin eingebe gibt er ja auch das richtig aus.
Nein, es würde die oben angegebene fehlermeldung kommen, wenn phpMyAdmin nicht von selbst Anführungsstriche um die Values 'root' machen.
viele Grüße
Axel