Login-Script. Ich komm nich weiter. Irgendwo is der Wurm drin, ich habs schon in anderen Foren probiert, jetzt rag ich mal hier.
config.php
So, und jetz noch die Datei
login.php
So. also, wenn ich versuche mich einzuloggen, vergleicht er die mit POST gesendeten Daten irgendwie falsch. Jedenfalls gibt check_user() (um die es hier geht) 'false' zurück und die("Falscher Benutzername oder Passwort"); wird ausgeführt. Jemand eine ahnung warum?
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
config.php
| Code: |
|
error_reporting(E_ALL); define('MYSQL_HOST', '*****'); define('MYSQL_USER', '*****'); define('MYSQL_PASS', '*****'); define('MYSQL_DATABASE', '*****'); function connect() { $con= mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) or die(mysql_error()); mysql_select_db(MYSQL_DATABASE,$con) or die(mysql_error()); } function check_user($usrname, $pwd) { $pwd=md5($pwd); $sql="SELECT ID FROM users WHERE username='$usrname' AND password='$pwd' LIMIT 1;"; $result= mysql_query($sql) or die(mysql_error()); if ( mysql_num_rows($result)==1) { $user=mysql_fetch_assoc($result); return $user['ID']; } else return false; } function login($ID) { $sql="UPDATE users SET UserSession='".session_id()."' WHERE ID=".$ID; mysql_query($sql); } function logged_in() { $sql="SELECT UserId FROM users WHERE UserSession='".session_id()."' LIMIT 1"; $result= mysql_query($sql); return ( mysql_num_rows($result)==1); } function logout() { $sql="UPDATE users SET UserSession=NULL WHERE UserSession='".session_id()."'"; mysql_query($sql); } connect(); ?> |
So, und jetz noch die Datei
login.php
| Code: |
|
######################################### include 'config.php'; ######################################### if(isset($_POST['usrname']) && isset($_POST['pwd'])) { $usrname=$_POST['usrname']; $pwd=$_POST['pwd']; } else { echo "Bitte Benutzernamen und Passwort angeben! "; echo "Zurück zum Login"; die(); } ######################################### echo $usrname.", ".$pwd." "; $try=check_user($usrname, $pwd); if($try==0 OR $try==false) die("Falscher Benutzername oder Passwort"); login($try); ?> |
So. also, wenn ich versuche mich einzuloggen, vergleicht er die mit POST gesendeten Daten irgendwie falsch. Jedenfalls gibt check_user() (um die es hier geht) 'false' zurück und die("Falscher Benutzername oder Passwort"); wird ausgeführt. Jemand eine ahnung warum?
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
Was zahlst?
EDIT: Ach, ich bin mal nicht so .... wie wärs, wenn du vorher zur DB connectest.
EDIT 2: Hoppla, das tust du ja ganz unten. Nicht gesehen. Deine ganzen Funktionen sind sinnlos verwirrend
EDIT 3: Und du bist sicher, dass die zurückgegebene User-ID nicht "0" ist? Laut deiner If-Anweisung fragst du das ja auch gleichbedeutend mit FALSE ab.
_________________
agitatio.org - sports community
Das Ich von morgen, ... ist das Idol von heute.
EDIT: Ach, ich bin mal nicht so .... wie wärs, wenn du vorher zur DB connectest.
EDIT 2: Hoppla, das tust du ja ganz unten. Nicht gesehen. Deine ganzen Funktionen sind sinnlos verwirrend
EDIT 3: Und du bist sicher, dass die zurückgegebene User-ID nicht "0" ist? Laut deiner If-Anweisung fragst du das ja auch gleichbedeutend mit FALSE ab.
_________________
agitatio.org - sports community
Das Ich von morgen, ... ist das Idol von heute.
ID kann nich 0 sein, weil ich das in der Tabelle schon ausgeschlossen habe. Und selbst wenn, ich hab schon mehrmals nachgeschaut, ID=1...
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
Okay, probiers mal hbiermit:
config.php
login.php
Müsste eigentlich funktionieren.
Gepostet von IcedEarth am Rechner von Stormrid3r
config.php
| Code: |
|
error_reporting(E_ALL); define('MYSQL_HOST', '*****'); define('MYSQL_USER', '*****'); define('MYSQL_PASS', '*****'); define('MYSQL_DATABASE', '*****'); function connect() { $con= mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) or die(mysql_error()); mysql_select_db(MYSQL_DATABASE,$con) or die(mysql_error()); } function check_user($usrname, $pwd) { $pwd=md5($pwd); $sql=" SELECT id FROM users WHERE username='$usrname' AND password='$pwd' "; /* * Benenn das Feld in der Db von "ID" auf "id" um, * Feldnamen schreibt man aus schönheitstechnischen Gründen immer klein, * groß sind nur SQL Befehle * * Das LIMIT im Query kann man sich eigentlich sparen, weils den User in der DB hoffentlich nur 1x geben wird... */ $result= mysql_query($sql) or die(mysql_error()); if ( mysql_num_rows($result) > 0) { $user=mysql_fetch_row($result); return $user[0]; } else { return false; } } function login($ID) { $sql="UPDATE users SET UserSession='".session_id()."' WHERE id='".$ID."'; //id klein weil wirs ja jetzt in der db umbenannt haben ;> if(mysql_query($sql)) { return true; } else { return false; } } function logged_in() { $sql="SELECT UserId FROM users WHERE UserSession='".session_id()."' LIMIT 1"; $result= mysql_query($sql); return ( mysql_num_rows($result)==1); } function logout() { $sql="UPDATE users SET UserSession=NULL WHERE UserSession='".session_id()."'"; mysql_query($sql); } ?> |
login.php
| Code: |
|
######################################### include('config.php'); connect(); //den db connect machen wir erst dann wenn wir ihn benötigen ... ######################################### if(isset($_POST['usrname']) && isset($_POST['pwd'])) { $usrname=$_POST['usrname']; $pwd=$_POST['pwd']; } else { echo "Bitte Benutzernamen und Passwort angeben! "; echo "Zurück zum Login"; die(); } ######################################### echo $usrname.", ".$pwd." "; $id = check_user($usrname, $pwd); if($id == false) { die("Falscher Benutzername oder Passwort"); } else { echo "passt"; } login($id); ?> |
Müsste eigentlich funktionieren.
Gepostet von IcedEarth am Rechner von Stormrid3r
hätte mich schon gewundert, sowas aus doms fingern zu lesen 
_________________
I have come here to chew bubblegum and kick ass...and I'm all out of bubblegum
_________________
I have come here to chew bubblegum and kick ass...and I'm all out of bubblegum
Nee, geht nich. Kommt immernoch false zurück...hätte mich auch gewundert, weil ob ich jetz einen mysql_fetch_assoc oder einen mysql_fetch_row mache, bleibt im endefekt egal, oder?
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
Lass dir den Query-String mal ausgeben, dann siehst eh wo der Fehler liegt.
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"
Visit: http://www.adick.at
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"
Visit: http://www.adick.at
Der String is richtig, aber wenn ich $user[0] und $user[1] ausgeben lasse (als $user[1] hab ich jetz password mit aus der Tabelle holen lassen und dafür aus dem WHERE-Zweig die AND-Bedingung rausgelassen) sind die "id" und "password"...also werden keine werte aus der Tabelle eingetragen...
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
Ich versteh jetzt zwar nicht was du da gerade geschrieben hast, aber ich hab die Funktion noch etwas überarbeitet:
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"
Visit: http://www.adick.at
| Code: |
| function check_user($usrname, $pwd) {
$pwd=md5($pwd); $sql="SELECT id FROM users WHERE username='". $usrname ."' AND password='". $pwd ."'"; /** * Benenn das Feld in der Db von "ID" auf "id" um, * Feldnamen schreibt man aus schönheitstechnischen Gründen immer klein, * groß sind nur SQL Befehle * * Das LIMIT im Query kann man sich eigentlich sparen, weils den User in der DB hoffentlich nur 1x geben wird... */ $result = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($result) > 0) { $user = mysql_fetch_array($result); return $user["id"]; print_r($user); //nur mal um zu sehn was in diesem array überhaupt drinnen steht } else { return false; } } |
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"
Visit: http://www.adick.at
Da steckt sicher nur irgendwo ein logischer Fehler dahinter, an dem man gerade nicht denkt. Vom Source her ist so schnell nichts falsches zu erkennen ....
_________________
agitatio.org - sports community
Das Ich von morgen, ... ist das Idol von heute.
_________________
agitatio.org - sports community
Das Ich von morgen, ... ist das Idol von heute.
| ap0calypse hat Folgendes geschrieben: |
| Da steckt sicher nur irgendwo ein logischer Fehler dahinter, an dem man gerade nicht denkt. Vom Source her ist so schnell nichts falsches zu erkennen .... |
Bin ganz deiner Meinung.
Ich würde mit === anstatt == abfragen, damit wird noch sichergestellt ob sie vom Typ her auch identisch sind.
Wenns dir nur um den Login geht kannst du gerne meine (sehr einfach aufgebaute) Klasse verwenden.
ne, geht nich nur um login...soll eine community werden...ich hab das vorinstalleirte zeug satt und will selber was basteln...und da muss ich mit den daten dann weiter basteln...ich hab jetz so lang an dem script gearbeitet udn will es nich einfrach aufgeben - irgendwas muss da zu retten sein
..danke trotzdem!
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...
KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
Also ich hab jetzt eigentlich wenig Ahnung von PHP - ok eigentlich gar keine.
Aber von sicherheitskritischen Anwendungen in Verbindung mit SQL und wünsch dir mal, dass du nicht mal im Traum daran denkst solche Funktionen wie da oben für eine Party-Community (wie es halt angekündigt wird) online zu stellen, dann bist du nämlich keine 6 Stunden online und das ist schon optimistisch geschätzt wenn du es schaffst die Seite um 3 Uhr morgens online zu bringen. *gg* Sorry nix für ungut...
PS:
SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne...
PS:
| Code: |
| //id klein weil wirs ja jetzt in der db umbenannt haben |
SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne...
| Martin hat Folgendes geschrieben: | ||
PS:
SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne... |
Ob SQL Abfragen Case sensitive sind oder nicht, hängt von der Kollation ab. Zudem wird bei Feldern mit dem Attribut BINARY sehr wohl auf Groß- und Kleinschreibung geachtet.
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"
Visit: http://www.adick.at
Na gut das sei mal dahingestellt, wie gesagt ich weiß es nicht ob MySQL case sensitiv ist, ich schreib die Anwendungen immer nur von C++, C# und VB auf MS-SQL Server und da gibts halt keine Groß Kleinschreibung in den SQL Statements. Bei den Felder isses klar, dass es die gibt, aber es ist eh egal, war ja nur eine Randbemerkung, würd mir da eher Gedanken über die Sicherheit des obigen PHP Skripts machen. 
| Zitat: |
| würd mir da eher Gedanken über die Sicherheit des obigen PHP Skripts machen |
Naja das muss man sicher auf die größe des Projektes anpassen, ich auch Stunden/Tage an einem sehr sicheren Login arbeiten, steht halt wahrscheinlich in keiner Relation zur Projektgröße. Umso bekannter und größer ein Projekt ist desto sicherer muss es sein, keine Frage auch kleine Projekte sollten sicher sein, aber muss ich bei kleinen Sachen bei weitem nicht mit so großen Besucherzahlen und dementsprechend auch wahrscheinlich hohen Angriffszahlen rechnen.
| Zitat: |
| SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne... |
SQL ist eigentlich nicht Case-Sensitiv, aber hat es sich einfach aus Lesbarkeitsgründen ein quasi Standard entwickelt dass man seine Tabellenbezeichnungen klein schreibt.
