Abfrage, ob es in der DB drinne ist

Injector

Lt. Junior Grade
Registriert
Mai 2016
Beiträge
297
Hi, ich arbeite gerade mit PHP und bräuchte mal ein Denkansatz, wie ich die Abfrage machen muss in PHP. Wenn der User seine E-Mail und Passwort eingibt, dann soll in der Datenbank überprüft werden, ob der Datensatz vorhanden ist und wenn ja, dann soll er weiterleiten zu einer anderen Seite. Bin bis jetzt so weit gekommen.
PS. Arbeite mit xampp
PHP:
<html>
<body>
<h1>Login</h1>

<form method="post" action="eingeloggt.php">
<p><b>Email:</b><input type="email" id="email"></input></p>
<p><b>Passwort:</b><input type="password" id="passwort"></input></p>
<p><input type="submit" value="Einloggen" id="submit"></p>
</form>
<?php
session_start();


$servername='localhost';
$username='root';
$password='';
$dbname='meindb';

$conn=new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error)
{
	die("Verbindung Fehlgeschlagen: " . $conn->connect_error);
}

?>
</body>
</html>
 
Zuletzt bearbeitet:
So würde ich es machen:

Nachtrag: Ich arbeite hauptsächlich mit PDO und nicht mysqli, deshalb sieht die query anders aus als du es vllt kennst.

Eine Loginseite (login.php)
Code:
<html>
<body>
<h1>Login</h1>
 
<form method="post" action="check.php">
<p><b>Email:</b><input type="email" id="email" name="email"></input></p>
<p><b>Passwort:</b><input type="password" id="passwort" name="password"></input></p>
<p><input type="submit" value="Einloggen" id="submit"></p>
</form>


</body>
</html>

Dann die Seite die checkt (check.php)
Code:
<?php
session_start();
$email = $_POST['email'];
$password = $_POST['password'];
​
//datenbankconfig woanders speichern und sie dann per include() einsetzen


$stmt = $conn->prepare("SELECT * FROM users WHERE email=:email"); 
$stmt->bindParam(":email", $email);
$stmt->execute();

$count = $stmt->rowCount();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

if($count != 0) {
    if( password_verify($password, $result[0]['password']) && $email == $result[0]['email'] ) { //ich hoffe du verschlüsselst die passwörter damit password_verify greift!
        echo '<meta http-equiv="refresh" content="0; url=eingeloggt.php" />';
    } else {
        //zurück zum login wenn password und email nicht passen
        echo '<meta http-equiv="refresh" content="0; url=login.php" />';
    };
} else {
    echo '<meta http-equiv="refresh" content="0; url=login.php" />';
}

?>

Und wie gesagt, passwörter verschlüsseln. Hier steht wie das geht:
http://php.net/manual/de/function.password-hash.php
 
Zuletzt bearbeitet:
Jokeboy schrieb:
Und wie gesagt, passwörter verschlüsseln.
Das nennt man Hashing! Im Gegensatz zum verschlüsseln kann man das nicht rückgängig machen.
 
Jokeboy schrieb:
So würde ich es machen:

Nachtrag: Ich arbeite hauptsächlich mit PDO und nicht mysqli, deshalb sieht die query anders aus als du es vllt kennst.

Eine Loginseite (login.php)
Code:
<html>
<body>
<h1>Login</h1>
 
<form method="post" action="check.php">
<p><b>Email:</b><input type="email" id="email" name="email"></input></p>
<p><b>Passwort:</b><input type="password" id="passwort" name="password"></input></p>
<p><input type="submit" value="Einloggen" id="submit"></p>
</form>


</body>
</html>

Dann die Seite die checkt (check.php)
Code:
<?php
session_start();
$email = $_POST['email'];
$password = $_POST['password'];
​
//datenbankconfig woanders speichern und sie dann per include() einsetzen


$stmt = $conn->prepare("SELECT * FROM users WHERE email=:email"); 
$stmt->bindParam(":email", $email);
$stmt->execute();

$count = $stmt->rowCount();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

if($count != 0) {
    if( password_verify($password, $result[0]['password']) && $email == $result[0]['email'] ) { //ich hoffe du verschlüsselst die passwörter damit password_verify greift!
        echo '<meta http-equiv="refresh" content="0; url=eingeloggt.php" />';
    } else {
        //zurück zum login wenn password und email nicht passen
        echo '<meta http-equiv="refresh" content="0; url=login.php" />';
    };
} else {
    echo '<meta http-equiv="refresh" content="0; url=login.php" />';
}

?>

Und wie gesagt, passwörter verschlüsseln. Hier steht wie das geht:
http://php.net/manual/de/function.password-hash.php

Bin leider auf dem Gebiet PHP/HTML ganz neu und das was du mir zeigst, verwirrt mich etwas
EDIT: Habs jetzt geschafft :), trotzdem danke für die Hilfe.
Ergänzung ()

Bekomme das hier
Notice: Trying to get property of non-object
PHP:
if($sql->num_rows == 0)
	{
		echo ("Erfolgreich eingeloggt");
		exit();
	}
	else
	{
		echo ("Email und Passwort haben keine Überseinstimmung");
		exit();
	}
 
Zuletzt bearbeitet:
Injector schrieb:
Bekomme das hier
Notice: Trying to get property of non-object
Zufällig in Zeile 1 von deinem Codefragment? Dann müsste man wissen, was $sql sein soll. Das kam bisher in keinem Code vor, also ist die Meldung nicht verwunderlich.
 
Darlis schrieb:
Zufällig in Zeile 1 von deinem Codefragment? Dann müsste man wissen, was $sql sein soll. Das kam bisher in keinem Code vor, also ist die Meldung nicht verwunderlich.

$sql= mysqli_query($conn, "SELECT * FROM 'kunden' WHERE 'email' = '$email' AND 'passwort' = '$passwort'");
 
Ich bin mir relativ sicher, daß an keiner Stelle num_rows === 0 sein wird, wenn das ein gültiges Login war.

Es sei denn natürlich, jeder darf rein, außer er steht auf eine Blacklist.
 
Zurück
Oben