Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Benötigen Sie Hilfe beim Erstellen eines benutzerdefinierten Benutzerregistrierungs-/Anmeldeskripts

Für dieses Beispiel werde ich vorbereitete Anweisungen weglassen, aber Sie müssen etwas über die Verhinderung von SQL-Einschleusungen recherchieren.

Zuerst benötigen Sie ein Formular, mit dem sich der Benutzer anmelden kann. Hier ist ein einfaches Formular, das sich auf einer Seite namens NewUser.html befindet:

<form action="AddUser.php" method="POST">
<p>Enter A Username: </p>
<input type="text" name="User" maxlength="20" size="10">
<br />
<p>Enter A Password: </p>
<input type="password" name="Password" maxlength="40" size="10">
<br />
<p>Enter Password Again: </p>
<input type="password" name="PasswordX2" maxlength="40" size="10">
<br />
<input type="submit" value="Create Account">
</form>

Sie können natürlich weitere Felder wie E-Mail-Adresse usw. hinzufügen – aber ich halte es einfach.

Gehen wir nun zur Seite AddUser.php:

<?php

//Now let's grab our $_POST data from our form and assign them to variables...
$User = $_POST['User'];
$PW = $_POST['Password'];
$PW2 = $_POST['PasswordX2'];

//Check whether user put anything in the fields for user or passwords
if (!$User || !$PW || !$PW2) {
echo "You have not entered all the needed info. Please try again.";
exit();
}

//Check if passwords match
if ($PW <> $PW2) {
echo "Your passwords do not match. Please go back and try again.";
exit();
}

//Now we want to be good stewards of passwords and information so let's hash that password
$hash = password_hash($PW, PASSWORD_BCRYPT);

//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....

//Now let's insert the new user into the database - remember do not do this without SQL-injection prevention. I'm just giving you the basics.
$sql = "INSERT INTO UsersTable (UserName, Password)
VALUES ('".$User."', '".$hash."')";

//Verify Successful Entry
if (mysqli_query($dbconnect,$sql)) {
echo "User Added Successfully";
} else {
echo "Error Creating User: " . mysqli_error($dbconnect);
}

echo "<br /><p>Please go to the main page to login now.</p>";
?>

Der Benutzer ist also jetzt erstellt, das Passwort wurde mit einem Salt gehasht und in die DB eingefügt ... ernsthaft nicht die SQL-Injektion vergessen.

Jetzt haben Sie ein Formular, das dem NewUser.html-Formular zum Anmelden sehr ähnlich ist, aber es erfordert nicht, dass das Passwort zweimal eingegeben wird. Nehmen wir an, das Login-Formular schickt den Benutzer zu einer Seite namens login.php:

<?php
session_start(); //starts a session for tracking user on each page - this has to be on every page

//Let's get our variables from the POST data- will be identical to before most likely
$User = $_POST['User'];
$PW = $_POST['Password'];

//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....

//Let's see if the username and password matches what we have in the database
$sql = "SELECT UsersTable.UserName, UsersTable.Password
FROM UsersTable
WHERE UsersTable.UserName = '$User'";
$result = $dbconnect->query($sql);

//Let's get the hashed password that corresponds to that username
$row = $result->fetch_assoc();
$HashedPassword = $row['Password'];

//Let's verify the password is correct
if (password_verify($PW, $HashedPassword))
{

//if it is correct(true) this will now happen
$_SESSION['verified_user'] = $User; //registers user by storing it in a SESSION
}
else {
echo "Login failed. Try again.";
exit();
}
?>

Nur ein Tipp:Wenn Sie Zugriffsebenen hinzufügen möchten, können Sie einen Platz in der Datenbank mit einer Zugriffsnummer speichern (z. B.:1, 2, 3) und dann nach erfolgreicher Anmeldung eine weitere $_SESSION zuweisen, die ihre Zugriffsebene darstellt und gibt ihnen Zugriff auf bestimmte Abschnitte, die Sie zulassen.

Wenn sie nun zu anderen Seiten Ihrer Website navigieren, wird ihre Sitzung wie folgt überprüft:

Beispielseite.php

<?php
session_start();

if (isset($_SESSION['verified_user'])) {
//User is verified and whatever is here will be visible and happen- YAY!
}
else {
echo "You are not logged in and cannot see this page.";
}
?>

Gewöhnen Sie sich einfach an, auf jeder Seite, auf die nur eingeloggte Personen Zugriff haben, eine Sitzung zu starten. Sitzungen werden von Seite zu Seite gespeichert.

Vergessen Sie nicht, ihnen eine Abmeldeseite zu geben, die die Sitzung zerstört:logout.php

<?php
session_start();

unset($_SESSION['verified_user']);
session_destroy();
echo "You are logged out.";
?>