Fehler beim PHP Login-Script

12/03/2011 00:05 lulustyle#1
N'Abend zusammen :D.
Ich hab heute ein Login-Script geschrieben mit einem Chat Bereich.
Auf meinem XAMPP Server läuft alles wunderbar, doch wenn ich die Files hochlade, komm ich beim einloggen immer in die 1. else Schleife(die unterste..die if(!) Vergleiche sind aus verzweiflung entstanden xD)
Die if($username && $password) Schleife wird also schon agrnicht ausgeführt..
Die Logindaten hab ich bereits auf meinen Free Hoster angepasst.
Weiss vielleicht jemand worin der Fehler besteht ?

Script:
PHP Code:
<html>
<head><title>Login</title></head>
<body align="center">
<link rel="stylesheet" href="css/css.css" type="text/css">
<?php
session_start
();
$username mysql_real_escape_string($_POST['username']);
$password mysql_real_escape_string($_POST['password']);
$password md5($password);


if(
$username && $password)
{
include 
'config.php';
$select_db mysql_select_db('X');


$query mysql_query("SELECT * FROM users WHERE username='$username'");

$numrows mysql_num_rows($query);

if (
$numrows !=)
{
    while (
$row mysql_fetch_assoc($query))
    {
        
$dbusername $row['username'];
        
$dbpassword $row['passwort'];    
    }
    
    
//logindaten korrekt?
    
if ($username == $dbusername && $password == $dbpassword)
    {
        
$_SESSION['username']=$dbusername;
        
header ('Location: member.php');
    }
    
    else
    {
        echo 
"Falsches Passwort";    
    }
    
}

else
{
    die (
"Benutzername existiert nicht");
}
    
}
else
{
if(!
$query)
{
    echo 
"Fail QUERY<br>";
}    
if(!
$select_db)
{
    echo 
"FAIL SELECT DB<br>";
}

if(!
$numrows)
{
    echo 
"FAIL NUM ROWS<br>";
}
if(!
$db)
{

    echo 
"FAIL DB<br>";
}
}

?>
</body>
</html>
12/03/2011 10:09 Devil589#2
Zu erst einmal gibt es keine "If-Schleifen", es ist eine Bedingung. ;)
Des Weiteren, wo ist denn deine Verbindung zur Datenbank?
Denn du wählst nur die Datenbank aus (mysql_select_db), hast aber kein mysql_connect.
Denn das könnte schon das Problem sein, so dass er in den letzten Else Zweig geht.
12/03/2011 10:45 NotEnoughForYou#3
könnte in der config drin sein. Lass dir mal den
PHP Code:
mysql_error(); 
ausgeben. Und die Sessions startet man eigentlich über dem HtmlPpart. & Das mit der "If-Schleife" hat dir ja devil schon gesagt.
12/03/2011 11:06 Snake124#4
probiers mal so:

PHP Code:
<?php
session_start
();

mysql_connect("localhost","USER","PASSWORT");
mysql_select_db("X");

$username mysql_real_escape_string($_POST['username']);
$pass mysql_real_escape_string($_POST['password']);
$password md5($pass);


if(
$username != "" && $password != md5("")){
    
$query mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."'");
    
$erg mysql_fetch_assoc($query);
    if(
mysql_num_rows($query) == 1){
        
$dbusername $erg[0]["username"];
        
$dbpassword $erg[0]["password"];
        
        
//logindaten korrekt?
        
if ($username == $dbusername && $password == $dbpassword){
            
$_SESSION['username']=$dbusername;
            
header ('Location: member.php');
        } else {
            echo 
"Falsches Passwort";    
        }
    } else {
        die (
"Benutzername existiert nicht");
    }
} else {    
    if(
$username == ""){
        echo 
"Username muss ausgefüllt sein!<br>";
    }

    if(
$pass == ""){
        echo 
"Ohne Passwort kommste hier ned rein<br>";
    }
}

?>
du musst außerdem aufpassen bei deinem header location, sobald du davor eine ausgabe machst, zählt der header als bereits gesendet. das gilt für htmlausgaben, sowie für php
12/03/2011 15:52 lulustyle#5
Quote:
probiers mal so:

PHP-Code:
PHP Code:
<?php 
session_start
(); 

mysql_connect("localhost","USER","PASSWORT"); 
mysql_select_db("X"); 

$username mysql_real_escape_string($_POST['username']); 
$pass mysql_real_escape_string($_POST['password']); 
$password md5($pass); 


if(
$username != "" && $password != md5("")){ 
    
$query mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."'"); 
    
$erg mysql_fetch_assoc($query); 
    if(
mysql_num_rows($query) == 1){ 
        
$dbusername $erg[0]["username"]; 
        
$dbpassword $erg[0]["password"]; 
         
        
//logindaten korrekt? 
        
if ($username == $dbusername && $password == $dbpassword){ 
            
$_SESSION['username']=$dbusername
            
header ('Location: member.php'); 
        } else { 
            echo 
"Falsches Passwort";     
        } 
    } else { 
        die (
"Benutzername existiert nicht"); 
    } 
} else {     
    if(
$username == ""){ 
        echo 
"Username muss ausgefüllt sein!<br>"
    } 

    if(
$pass == ""){ 
        echo 
"Ohne Passwort kommste hier ned rein<br>"
    } 


?>
du musst außerdem aufpassen bei deinem header location, sobald du davor eine ausgabe machst, zählt der header als bereits gesendet. das gilt für htmlausgaben, sowie für php
Hm, danke für eure rasche Antwort.

Hm auch mit deinem Script hab ich's versucht, aber ohne Erfolg >_>.
Auch nach langem verändern klappt's nicht =o

Quote:
könnte in der config drin sein. Lass dir mal den
PHP-Code:
PHP Code:
mysql_error(); 
ausgeben. Und die Sessions startet man eigentlich über dem HtmlPpart. & Das mit der "If-Schleife" hat dir ja devil schon gesagt.
Ja, hab das verwechselt :D.
PHP Code:
 mysql_error(); 
Hab ich schon versucht, doch er gibt mir garnichts aus. (leeres Fenster);

Hab auch separat eine Datei angelegt, wo ich die Connections austeste.
Alles klappt, auch wenn ich die gezählten Benutzernamen ausgeben lasse,
gibt er mir 1 aus, also keine Probleme...

Muss wohl irgendwo im Script ein Fehler versteckt sein >_o.

MfG:
Lulu :>
12/04/2011 23:29 .exTremez™#6
Wieso lässt du das passwort filtern? wenn du es eh in md5 encryptest(Es kann sein, dass dadurch ein anderer MD5-Hash raus kommt und somit das pw falsch ist)

2. bist du dir sicher, dass deine Datenbank "X" heisst?
12/05/2011 19:34 lulustyle#7
Quote:
Wieso lässt du das passwort filtern? wenn du es eh in md5 encryptest(Es kann sein, dass dadurch ein anderer MD5-Hash raus kommt und somit das pw falsch ist)

2. bist du dir sicher, dass deine Datenbank "X" heisst?
Hi^^, meinst du mit filtern
PHP Code:
 $password != md5(""
falls ja, hab bei mir das md5() weggelassen, wird ja nur ueberprueft ob was eingegeben wurde. nein die datenbank heisst nicht 'X' , hab das auch richtig angepasst. aber keine ahnung, was der fehler ist :/
programmier php erst seit knapp ner woche ^^
blutiger anfaenger :'D

Greets
lulu :>
12/05/2011 20:05 .exTremez™#8
Nein ich meine

PHP Code:
$password mysql_real_escape_string($_POST['password']); 
Dort filterst du es ja, was eigentlich total sinnlos ist...


EDIT://

Könntest du bitte auch das Script von der Form posten?



EDIT2://
Habe mir mal dein Script 1 zu 1 rauskopiert und es aufm localhost getestet
(Datenbank erstellt -> Table: users -> Collumns: username, passwort(mit md5-hash inhalt))

Das einzigste was ich veränder habe ist:
PHP Code:
$username mysql_real_escape_string($_POST['username']);
$password mysql_real_escape_string($_POST['password']); 
zu
PHP Code:
$username mysql_real_escape_string($_GET['username']);
$password mysql_real_escape_string($_GET['password']); 
Aber auch nur damit ichs schnell per GET prüfen kann und mir keine form bauen muss ^^

Resultat: Bei mir funktioniert dein Script einwandfrei
12/05/2011 20:06 NotEnoughForYou#9
doppelt hält besser ^^
12/05/2011 20:10 lulustyle#10
Quote:
Originally Posted by .exTremez™ View Post
Nein ich meine

PHP Code:
$password mysql_real_escape_string($_POST['password']); 
Dort filterst du es ja, was eigentlich total sinnlos ist...
^

Hm sinnlos ist es nicht. ^^
das passwort muss ja vom benutzer eingegeben werden.
er könnte auch php code ins passwort feld reinschreiben und ein ziemliches chaos anrichten :P

Quote:
doppelt hält besser ^^
Genau :D
Greets
lulu :>
12/05/2011 20:32 .exTremez™#11
Quote:
Originally Posted by lulustyle View Post
er könnte auch php code ins passwort feld reinschreiben und ein ziemliches chaos anrichten :P
1. Wenn schon dann SQL-Code aber ok...

2. Trotzdem ist das filtern in diesem Fall sinnlos...
Da gibt es auch kein "Doppelt hält besser" wie NotEnoughForYou meint...

Wenn du es eh zum md5-hash wandelst -.-
12/05/2011 20:43 lulustyle#12
Quote:
Originally Posted by .exTremez™ View Post
1. Wenn schon dann SQL-Code aber ok...

2. Trotzdem ist das filtern in diesem Fall sinnlos...
Da gibt es auch kein "Doppelt hält besser" wie NotEnoughForYou meint...

Wenn du es eh zum md5-hash wandelst -.-
Hm.. Ich sehe es so.
Mann muss die Benutzerdaten auf der Loginseite eingeben.
Auf der Seite werden die eingegebenen Daten weitergegeben an die Login php.
Wenn darin SQL Befehle enthalten sind, dann wie gesagt-Chaos.
Muss halt alles abfangen =P
12/05/2011 20:48 .exTremez™#13
Du liest das pw manuell aus(und suchst den user mithilfe des usernamen der vom user angegeben wird - diesen filterst du ja)


und dann VERGLEICHST du nur 2 werte(Pass-MD5 Wert mit dem ausgelesenen MD5)

Daher ist in der Login.php das filtern total sinnlos ^^

Da gibts kein Chaos oder sonstwas