Mysql
 sql >> Base de données >  >> RDS >> Mysql

Besoin d'aide pour créer un script d'enregistrement/de connexion personnalisé

Pour cet exemple, je vais omettre les instructions préparées, mais vous devrez faire des recherches sur la prévention des injections SQL.

Vous avez d'abord besoin d'un formulaire que l'utilisateur doit utiliser pour se connecter. Voici un formulaire de base qui se trouvera sur une page appelée NewUser.html :

<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>

Vous pouvez bien sûr ajouter d'autres champs tels que l'adresse e-mail, etc., mais je reste simple.

Passons maintenant à la page 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>";
?>

Ainsi, l'utilisateur a maintenant été créé, le mot de passe a été haché avec un sel et inséré dans la base de données... sérieusement, n'oubliez pas l'injection SQL.

Vous aurez maintenant un formulaire très similaire au formulaire NewUser.html pour vous connecter, mais il ne nécessitera pas la saisie du mot de passe deux fois. Supposons que le formulaire de connexion envoie l'utilisateur vers une page appelée 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();
}
?>

Juste un conseil, si vous souhaitez ajouter des niveaux d'accès, vous pouvez stocker un emplacement dans la base de données avec un numéro d'accès (ex :1, 2, 3) puis, une fois connecté, vous attribuerez une autre $_SESSION qui représente leur niveau d'accès et leur donne accès à certaines sections que vous autorisez.

Désormais, lorsqu'ils accèdent à d'autres pages de votre site, leur session est vérifiée comme suit :

ExamplePage.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.";
}
?>

Prenez simplement l'habitude de démarrer une session sur chaque page où l'accès n'est autorisé qu'aux personnes connectées. Les sessions sont mémorisées de page en page.

N'oubliez pas de leur donner une page de déconnexion qui détruira la session :logout.php

<?php
session_start();

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