PHP MySql Login / Passwort überprüfung?

Kann mir da jemand sagen wo der Fehler liegt ? Ich bin da am verzweifeln.

Login, Registrierung, Fehlermeldung, SQL Struktur habe ich alles in die Frage gepackt damit ihr einen besseren überblick habt.

login.php:

<?php
   $server = 'localhost';
   $user = 'root';
   $psw = null;
   $dbName = 'TestApp';
try {
   $conn = new PDO('mysql:host='.$server.';dbname='.$dbName.';charset=utf8', $user, $psw);
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $username = htmlspecialchars(stripslashes(trim($_POST['username'])));
    $password = htmlspecialchars(stripslashes(trim($_POST['password'])));

    $statement = $pdo->prepare("SELECT * FROM user WHERE username = :username");
    $result = $statement->execute(array('username' => $username
                                    ));
    $user = $statement->fetch();
    //Überprüfung des Passworts
    if ($user !== false && password_verify($username, $password['passwort'])) {
        $_SESSION['userid'] = $user['id'];
        die('Login erfolgreich. Weiter zu <a href="geheim.php">internen Bereich</a>');
    } else {
        $errorMessage = "Nutzername oder Passwort war ungültig<br>";
    }

}catch (PDOException $e) {
    print "Error!: " . $e->getMessage() ;
    exit;
  }

Konsole :

<br />
<b>Warning</b>: Undefined variable $pdo in <b>C:\xampp\htdocs\Test\assets\php\login.php</b> on line <b>14</b><br />
<br />
<b>Fatal error</b>: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\Test\assets\php\login.php:14
Stack trace:
#0 {main}
 thrown in <b>C:\xampp\htdocs\Test\assets\php\login.php</b> on line <b>14</b><br />

register.php

<?php
   $server = 'localhost';
   $user = 'root';
   $psw = null;
   $dbName = 'TestApp';
try {
   $conn = new PDO('mysql:host='.$server.';dbname='.$dbName.';charset=utf8', $user, $psw);
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// POST wird mit AJAX gesendet
   $username = htmlspecialchars(stripslashes((trim($_POST["username"])))) ;
   $password =  password_hash(htmlspecialchars(stripslashes((trim($_POST["password"])))) ,PASSWORD_DEFAULT) ;
   $cash =     100;

// Schreibt in die Datenbank

   $sql = "INSERT INTO user (username,password,cash) VALUES (:username,:password,:cash) ";
   $sqlvars = array("username"  => $username,
   "password" => $password,
   "cash" => $cash);
   $Abfrage = $conn->prepare($sql);
   $Abfrage->execute($sqlvars);


}catch (PDOException $e) {
  print "Error!: " . $e->getMessage() . "<br/>";
  exit;
}

SQL STRUKTUR :

Datenbankname : Test

Tabelle : user , 5 Spalten/Rows

  • id | int , (auto increment)
  • username | varchar , (unique)
  • password | varchar, (gehasht mit salt sha512)
  • cash | varchar
  • time | datetime, (mit current time stamp)

und ich mache alles mit AJAX.

-PDO statt mysqli

Computer, Webseite, Programmierer, programmieren, JavaScript, Datenbank, Informatik, MySQL, PHP, Webentwicklung, Backend, phpMyAdmin, PDO
Mehrere Webseiten über ein Login System organisieren?

Ich hab mehrere Webseiten die teils über verschiedene Server verstreut sind und es wäre ziemlich lästig für jede ein eigenes zu machen also hab ich beschlossen sowas ähnliches wie oAuth nur mit PHP zu bauen, am besten so zweckmäßig wie möglich um das ganze zu erleichtern. Kann man das Konzept als fertig bezeichnen oder muss man da noch was dran ändern?

Dass man sich anmelden kann wird man auf die anmeldeseite geleitet, man gibt seine Daten ein und man wird auf die eigentliche Seite zurückgeleitet

um einen Benutzer anzumelden greift der dienst als erstes auf einen langen string zurück nennen wir es mal API Token. dieser wird während der nutzer auf die anmeldeseite geleitet wird mit post übergeben um zum einen sicherzustellen dass die webseite autorisiert dazu ist daten anzufragen und zum anderen dass das login system weiß wohin es den token und den Nutzer nach der anmeldung leiten soll. Dann meldet sich der nutzer auf der loginseite n und der nutzername und das passwort wird validiert etc. danach stellt der authentifizierungsserver das access Token aus, was beim weiterleiten wieder zurückgepostet wird. Dieses access token wird dann beim nutzer als cookie gespeichert und der Dienst der dann die Zeichenkette erhalten hat fragt dann die benötigten daten(nutzername, geburtsdatum etc.) mit curl von autentifizierungsserver ab und somit ist der nutzer angemeldet.

Das heißt ich müsste das script was prüft welchen Benutzername man hat muss mit jedem einzelnen Seitenaufruf erneut mittels dem access token den nutzernamen anfragen, eventell kann man das aber auch über nen session cookie mit nutzername regeln

Also: kann man das umsetzen oder habe ich was vergessen?

Computer, Webseite, programmieren, JavaScript, Datenbank, MySQL, PHP, Webserver

Meistgelesene Beiträge zum Thema Webseite