"Zellen" aus Datenbank für LogIn rauslesen //PhP

Habe das ganze auch mal als PDO gemacht.
Stehen auch Kommentare drin.
Und danke @sheel Du hast vollkommen recht. Ich würde dies auch ganz anders aufbauen, aber wenn er erst mal so lernen kann, sollte dies ausreichen. Man weiß ja auch nicht wie das ganze drumherum aussieht. Aber ich denke er sollte nun genug Vorschläge haben.
PHP:
    $dsn = "mysql:host=localhost;dbname=test;charset=utf8";
    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );
    $db = new PDO($dsn,'root','root', $opt);


    if(isset($_GET['name']) && isset($_GET['pass'])){
      $nm = $_GET["name"];
      $pw = $_GET["pass"];
      $pw = password_hash($pw, PASSWORD_DEFAULT); //Das eingegebene Passwort wird verschlüßelt. Da dies auch verschlüßelt in der DB liegen sollte. Würde dies aber eher per $_POST machen.

      $pdo ="SELECT username, password FROM users WHERE password = :passwort AND username = :username";
      $statement = $db->prepare($pdo);
      $statement->execute(array(':passwort' => $pw, ':username' => $nm));

      $anzahl_user = $statement->rowCount();

      if($anzahl_user == 1){
        while($row = $statement->fetch()) {
           $dbpw = $row["password"];
           $dbnm = $row["username"];
        }
        if ($dbpw == $pw && $dbnm == $nm){
            echo "Username und Passwort stimmen überein!"; //Name und PW stimmen überein.
        }
      }else{
        echo "Username oder Passwort nicht vorhanden oder Falsch."; //Name oder PW nicht gefunden.
      }
    }else{
      echo "Bitte Name und Passwort eingeben!"; //Wenn kein GET vorhanden ist.
    }
 
Ok, vielen Dank für eure Antworten!
Aber.. Was ist eine PDO ? (Es ist wahrscheinlich offensichtlich, nur kenne ich nicht diesen Begriff)
Wegen dem Mysql und md5.. Ich musste mich in das Thema ganz neu hineinarbeiten.
 
PHP:
<!doctype html>

<html lang="de">



  <head>
 
    <link href="designlogin.css" rel="stylesheet">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Zentrale Terminvergabe und Telefonzentrale</title>
  </head>
  <body>

  <div id="starth1">
  <img id="startimg" width="5%" height="5%" align="right" src="bmw-logo1.png" alt="bmwlogo">
    <h1>Zentrale Terminvergabe und Telefonzentrale</h1>   
   
    </div>
    <center id="login">
    <h2> LogIn </h2>
    <form id="formular" action="loginpdo.php" method=get">
        <table>
            <tr>
                <td>Name:</td>
                <td><input type="text" name="name" /></td>
            </tr>
            <tr>
                <td>Passwort: </td>
                <td><input type="password"  name="pass" /></td>
            </tr>           
            <tr>
                <td></td>               
                <td>
                <input type="submit" value="anmelden" />
                </td>
            </tr>           
        </table>
    </form>
   
    </center>

  </body>

</html>

So würde btw mein HTML script aussehen..
 
@derkleene Dein Code ist doch in Ordnung...? Was nicht mehr verwendet werden sollte usw. war eher an Thoma gerichtet, alle anderen hier wissen es ja offensichtlich schon.

@Thoma
Ich weiß, etwas umsonst gelernt zu haben ist sehr ärgerlich. Aber in dem Fall ist es das eben. Funktionen zu verwenden, die es nicht mehr gibt, hilft niemandem.

PDO und Mysqli sind einfach gesagt zwei Funktionensammlungen, die beide die alten Mysql-Funktionen ersetzen. Man braucht nur eine davon.
 
@Thoma
Wenn du dich nicht in PDO einarbeiten möchtest, dann empfehle Ich dir MySQLi :)

Ansonsten gibt es sicherlich genug Tutorials bei YT, die Ich dir empfehlen kann :)
Bei mysqli sind manche Parameter vertauscht, beispielsweise beim mysqli_query(parameter, sql-state) da muss er st der RessourceID und erst dann kommt der Statement. :)
 
Hallo ich bins nochmal!
Ich habe mich jetzt ein wenig erkundigt und habe den Quelltext von @DerKleene1 übernommen!(Danke nochmal dafür).
Nur wird bei mir in allen Fällen Username oder Passwort nicht vorhanden oder Falsch. ausgegeben!
Könnt ihr mir dabei helfen?
Und heißt das, dass ich in der Datenbank das Passwort schon verschlüsselt eingeben muss?

MfG Thoma
 
Hallo @Thoma,

ich Zitiere mal aus meinen Post:
PHP:
  $pw = password_hash($pw, PASSWORD_DEFAULT); //Das eingegebene Passwort wird verschlüßelt. Da dies auch verschlüßelt in der DB liegen sollte. Würde dies aber eher per $_POST machen.

Ein Passwort sollte niemals unverschlüsselt in einer DB gespeichert werden.
Informationen zum password_hash findest Du hier: http://php.net/manual/de/function.password-hash.php

Zum testen ob das Script ohne Verschlüsselung funktioniert, kannst Du diese Zeile ja mal auskommentieren,
dann sollte es mit Klartext Passwort gehen.

Und wie gesagt überlege Dir ob du das FORM nicht lieber mit der Methode POST anstatt GET machen willst, damit keiner den Username und Passwort in der Adresszeile mitlesen kann.
Infos dazu findet man genug bei Google, hier mal ein Beispiel:
http://foobarblog.net/blog/get-und-post-unterschiede-und-anwendungen-11/
 
Mit Post wäre es folgendes:
HTML:
<form id="formular" action="loginpdo.php" method="POST">
und:
PHP:
$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO($dsn,'root','root', $opt);


if(isset($_POST['name']) && isset($_POST['pass'])){
  $nm = $_POST["name"];
  $pw = $_POST["pass"];
  $pw = password_hash($pw, PASSWORD_DEFAULT); //Das eingegebene Passwort wird verschlüßelt. Da dies auch verschlüßelt in der DB liegen sollte.

  $pdo ="SELECT username, password FROM users WHERE password = :passwort AND username = :username";
  $statement = $db->prepare($pdo);
  $statement->execute(array(':passwort' => $pw, ':username' => $nm));

  $anzahl_user = $statement->rowCount();

  if($anzahl_user == 1){
    while($row = $statement->fetch()) {
       $dbpw = $row["password"];
       $dbnm = $row["username"];
    }
    if ($dbpw == $pw && $dbnm == $nm){
        echo "Username und Passwort stimmen überein!"; //Name und PW stimmen überein.
    }
  }else{
    echo "Username oder Passwort nicht vorhanden oder Falsch."; //Name oder PW nicht gefunden.
  }
}else{
  echo "Bitte Name und Passwort eingeben!"; //Wenn kein POST vorhanden ist.
}

Sollte nichts vergessen haben
 
Dankeschön!
Ich habe das Ganze jetzt mit POST versucht und auch die Zeile auskommentiert, nur kommt immer noch das Gleiche...

Ich habe auch seit neuestem das Problem, dass mein LogIn Formular schon ausgefüllt ist (gelblicher Hintergrund).

Könnte das das Problem sein?
 
Zurück