PHP Login Script mit Registrierung

01/30/2014 17:54 Speed93#1
Hallo
ich wollte für mein kleines Projekt ein Login Script machen. Habe mir das Video angeschaut
. Nur leider, wenn ich ein Account Registriere. Meint er es wäre erfolgreich, nur der erstellte Account ist in MySQL nicht zu finden.
Die PHP Skripts + SQL Datei sind im Anhang.
01/30/2014 19:18 adistoe#2
PHP Code:
function register($username$password)
{
    
$hashedPassword buildHash($password);
    
    
$sql "INSERT INTO 'users'
            ('username','password')
            VALUES("
.mysql_real_escape_string($username).",".$hashedPassword.");";
        
    
mysql_query($sql);
    
    return 
tryLogin($username$password);

Hast du das Insert mal von Hand ausgeführt, zum Test?
Bist du sicher, dass es ausgeführt wird?

Hinweis zum Test:
PHP Code:
    mysql_query($sql) or die(mysql_error()); 
01/30/2014 20:20 lnqlorlouz#3
Wenn ich das Script ausführe, gibt er mir die Fehlermeldung:
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 ''users' ('username','password') VALUES(Benny,$$$$$OurConstantSaltRules' at line 1
Das $$$$ ist nur das weggemachte Passwort. ;)
01/30/2014 21:01 Speed93#4
ja da kommt eine Meldung "Unknown column '$$$' in 'field list'"
$$$ Stand der Username drin.
Aber die Spalte gibt es doch in der Datenbank.
01/30/2014 21:49 lnqlorlouz#5
Quote:
Originally Posted by Speed93 View Post
ja da kommt eine Meldung "Unknown column '$$$' in 'field list'"
$$$ Stand der Username drin.
Aber die Spalte gibt es doch in der Datenbank.
Kann mit der Fehlermeldung selber nicht viel anfangen. Würde aber auch gerne das Problem wissen. Hier gibt es doch genug Experten.:awesome:
01/31/2014 06:30 paddelx3#6
Quote:
Originally Posted by adistoe View Post
PHP Code:
function register($username$password)
{
    
$hashedPassword buildHash($password);
    
    
$sql "INSERT INTO 'users'
            ('username','password')
            VALUES("
.mysql_real_escape_string($username).",".$hashedPassword.");";
        
    
mysql_query($sql);
    
    return 
tryLogin($username$password);

Hast du das Insert mal von Hand ausgeführt, zum Test?
Bist du sicher, dass es ausgeführt wird?

Hinweis zum Test:
PHP Code:
    mysql_query($sql) or die(mysql_error()); 

Ich bin leider derzeit Unterwegs und kann es deshalb nicht genau Überprüfen.
Aber in der Datei config.php die function
PHP Code:
function buildHash($password)
{
    return 
crypt($password'$2a$10$OurConstantSaltRules12$');

Wenn ich mich recht entsinne setzt er einfach vor den verschlüsselten $password den Salt.

Somit würde wir dann sowas hier rauskriegen:
PHP Code:
$2a$10$OurConstantSaltRules##################### 
Wenn wir das ganze nun in unseren Quere Aufrufen erwatet dieser bei $2,$10,$OurConstantSaltRules einen Wert der nicht vorhanden ist, kann es aber wie gesagt leider nicht überprüfen.

Aber probier mal folgendes, ersetz deine Funktion Crypt mit:
PHP Code:
function buildHash($password)
{
    return 
md5('$2a$10$OurConstantSaltRules12$'.$password);

Zudem find ich die Stelle persönlich auch nicht wirklich schön.
PHP Code:
$sql "INSERT INTO 'users'
            ('username','password')
            VALUES("
.mysql_real_escape_string($username).",".$hashedPassword.");"
~ Wozu die ' Zeichen bei user ? Wenn schon `.
~ Wozu die ' Zeichen bei den Feldern?
~ Wozu der Verkettungsoperator bei "" ?

PHP Code:
$sql "INSERT INTO `users`
            (username,password)
            VALUES("
{mysql_real_escape_string($username)}","{$hashedPassword}")"
lg.
Entschuldige falls ich Fehler drinnen haben sollte es ist immerhin früh morgens und hab das ganze via Handy geschrieben :p
01/31/2014 11:42 Speed93#7
Wenn ich in der Zeile VALUES("{mysql_real_escape_string($username)}","{$ hashedPassword}");";
die {} einsetzte bekomme ich ein Error:
Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\Projekt\config.php on line 49
und wenn ich Punkte da mache
VALUES(".mysql_real_escape_string($username).",".$ hashedPassword.");";
bekomme ich die Meldung:
Unknown column 'TestUser' in 'field list'

@paddelx3
Kein ding. Ich finde es schon super das ich hilfe bekomme :)

/edit
hab den Fehler gefunden
ich hab in der Zeile VALUES("$username'",".$hashedPassword.");";
hab ich die " durch ein ' ersetzt.
VALUES('$username','.$hashedPassword.');";
jetzt gehts
Vielen dank an alle! :)

/edit 2
tja zu früh gefreut.
Nach der registrierung habe ich noch ein Problem.
Jetzt wenn ich mich mit dem erstellte Account anmelden will.Komme ich auf die secured.php und da oben steht, dann
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Projekt\config.php on line 35
Aktuelle Config.php
PHP Code:
<?php
session_start
();
$mysql['user'] = "root";
$mysql['password'] = "";
$mysql['host'] = "127.0.0.1";
$mysql['db'] = "login";

//Nichts ändern!
//Verbindung zum MySQL Server.
mysql_connect($mysql['host'], $mysql['user'], $mysql['password']) OR die ('Database connection failed');
mysql_select_db($mysql['db']) OR die ('Database not found');

//Wird geschaut, ob ein User eingeloggt ist.
function isLoggedin()
{
    return isset(
$_SESSION['username']);
}

function 
buildHash($password)
{
    return 
md5('$2a$10$OurConstantSaltRules12$'.$password); 
}

function 
tryLogin($username$password)
{
    
$password buildHash($password);
    
    
$sql "SELECT username
            FROM users
            WHERE username = "
.$username."
            AND password = "
.$password."
            LIMIT 1;"
;
    
$result mysql_query($sql);
    
    if(
mysql_num_rows($result) > 0);
    {
        
$_SESSION['username'] = $username;
        return 
true;
    }
    return 
false;
}

function 
register($username$password)
{
    
$hashedPassword buildHash($password);
    
    
$sql "INSERT INTO `users`
            (username,password)
            VALUES('
$username','.$hashedPassword.');";
        
    
mysql_query($sql) or die(mysql_error()); 
    
    return 
tryLogin($username$password);
}

function 
logout()
{
    
session_destroy();
    
session_start();
}

?>

So hab alle Fehler gefunden
das ist richtig
WHERE username = '.$username.'
AND password = '.$password.'

und nicht
WHERE username = ".$username."
AND password = ".$password."
01/31/2014 13:30 .Marcel'#8
mysql_* ist veraltet...
01/31/2014 17:09 lnqlorlouz#9
Mir sind bei deinem Script viele Fehler/Verbesserungen vorgekommen.
Dein Script testet nicht ob ein User schon einmal angelegt wurde.
Man kann sich sogar registrieren, indem man gar nichts eingibt.
Bei mir kann man auch auf die secured.php obwohl ich nicht einmal eingeloggt bin.

Und das Passwort würde ich nochmal überprüfen, sprich so:
Passwort:
Passwort wiederholen:

Ist sicherer für die User. Wollte ich einfach mal so noch anmerken, falls du das Script für etwas "sicheres" verwendest. Weil Sicherheit ist im Internet wirklich wichtig. :)

Hier ein kleiner Codeschnippsel aus meinem alten Login-Script, das ganz schlicht war.
Du könntest eine if-Abfrage machen, ob das Passwort mit dem ersten Passwort übereinstimmt.

PHP Code:
$username $_POST["username"]; 
$passwort $_POST["passwort"]; 
$passwort2 $_POST["passwort2"]; 

if(
$passwort != $passwort2 OR $username == "" OR $passwort == ""
    { 
    echo 
"Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"register.php\">Zurück</a>"
    exit; 
    } 
Kann sein das du das noch abändern musst. Bzw. musst du. Da wir ja "passwort2" haben.

Im register.php:
PHP Code:
<p>Passwort wiederholen: <input type="password" name="passwort2"></p
01/31/2014 21:34 Speed93#10
Danke für dein Tipp. Dieses Script ist nur für ein kleines Schulprojekt. Werde es nicht im Internet benutzten. :)
02/01/2014 14:16 #SoNiice#11
Quote:
Originally Posted by .Marcel' View Post
mysql_* ist veraltet...
Für kleinere Projekte reicht dies trotzdem noch, auch wenn es im nächsten Major Update entfernt wird.
02/01/2014 22:19 .Marcel'#12
Quote:
Originally Posted by SoNiice View Post
Für kleinere Projekte reicht dies trotzdem noch, auch wenn es im nächsten Major Update entfernt wird.
Ist mir bewusst, jedoch wollte ich nur darauf hinweisen.
02/03/2014 05:46 clad3815#13
PHP Code:
<?php
session_start
();
$mysql['user'] = "root";
$mysql['password'] = "";
$mysql['host'] = "localhost";
$mysql['db'] = "login";

//Nichts ändern!
//Verbindung zum MySQL Server.
$CONNECT_DATABASE = new PDO("mysql:host=".$mysql['host'].";dbname=".$mysql['db'],$mysql['user'],$mysql['password']);

/*
mysql_connect($mysql['host'], $mysql['user'], $mysql['password']) OR die ('Database connection failed');
mysql_select_db($mysql['db']) OR die ('Database not found');
*/
//Wird geschaut, ob ein User eingeloggt ist.
function isLoggedin()
{
    return isset(
$_SESSION['username']);
}

function 
buildHash($password)
{
    
$HASH_KEY "TestTestTestCrypt";
    return 
md5($password."-".$HASH_KEY);
}

function 
tryLogin($username$password)
{
    
$password buildHash($password);
    
    
$sql "SELECT 'username'
            FROM 'users'
            WHERE 'username' = "
.$CONNECT_DATABASE->quote($usernamePDO::PARAM_STR)."
            AND 'password' = '"
.$password."'
            LIMIT 1;"
;
    
//$result = mysql_query($sql);
    
$query_sql $CONNECT_DATABASE->query($sql);
    
$result $query_sql->fetch(PDO::FETCH_OBJ);
    if(
$result->username)
    {
        
$_SESSION['username'] = $username;
        return 
true;
    }else{
        return 
false;
    }
}

function 
register($username$password)
{
    
$hashedPassword buildHash($password);
    
    
$sql "INSERT INTO 'users'
            ('username','password')
            VALUES("
.$CONNECT_DATABASE->quote($usernamePDO::PARAM_STR).",'".$hashedPassword."');";
        
    
//mysql_query($sql);
    
$query_sql $CONNECT_DATABASE->exec($sql);
        if(
$query_sql && tryLogin($username$password)){
            return 
true;
        }else{
            return 
false;
        }
}

function 
logout()
{
    
session_unset($_SESSION['username']);
}

?>
I think it's better if you use PDO :) mysql_* function are obsolete
02/03/2014 07:09 #SoNiice#14
Quote:
Originally Posted by clad3815 View Post
PHP Code:
<?php
session_start
();
$mysql['user'] = "root";
$mysql['password'] = "";
$mysql['host'] = "localhost";
$mysql['db'] = "login";

//Nichts ändern!
//Verbindung zum MySQL Server.
$CONNECT_DATABASE = new PDO("mysql:host=".$mysql['host'].";dbname=".$mysql['db'],$mysql['user'],$mysql['password']);

/*
mysql_connect($mysql['host'], $mysql['user'], $mysql['password']) OR die ('Database connection failed');
mysql_select_db($mysql['db']) OR die ('Database not found');
*/
//Wird geschaut, ob ein User eingeloggt ist.
function isLoggedin()
{
return isset(
$_SESSION['username']);
}

function 
buildHash($password)
{
$HASH_KEY "TestTestTestCrypt";
return 
md5($password."-".$HASH_KEY);
}

function 
tryLogin($username$password)
{
$password buildHash($password);

$sql "SELECT 'username'
FROM 'users'
WHERE 'username' = "
.$CONNECT_DATABASE->quote($usernamePDO::PARAM_STR)."
AND 'password' = '"
.$password."'
LIMIT 1;"
;
//$result = mysql_query($sql);
$query_sql $CONNECT_DATABASE->query($sql);
$result $query_sql->fetch(PDO::FETCH_OBJ);
if(
$result->username)
{
$_SESSION['username'] = $username;
return 
true;
}else{
return 
false;
}
}

function 
register($username$password)
{
$hashedPassword buildHash($password);

$sql "INSERT INTO 'users'
('username','password')
VALUES("
.$CONNECT_DATABASE->quote($usernamePDO::PARAM_STR).",'".$hashedPassword."');";

//mysql_query($sql);
$query_sql $CONNECT_DATABASE->exec($sql);
if(
$query_sql && tryLogin($username$password)){
return 
true;
}else{
return 
false;
}
}

function 
logout()
{
session_unset($_SESSION['username']);
}

?>
I think it's better if you use PDO :) mysql_* function are obsolete
I think he should learn MySQLi instead of PDO
02/03/2014 07:51 3lue#15
Was ist eigentlich der Unterschied zwischen MySQL_* und MySQLi_*?