sql >> Databasteknik >  >> RDS >> Mysql

Behöver hjälp med att skapa anpassade användarregistrerings-/inloggningsskript

För det här exemplet kommer jag att utelämna förberedda uttalanden, men du måste göra lite forskning om att förebygga SQL-injektion.

Först behöver du ett formulär som användaren kan använda för att logga in. Här är ett grundläggande formulär som kommer att finnas på en sida som heter 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>

Du kan naturligtvis lägga till andra fält som e-postadress, etc. men jag håller det enkelt.

Låt oss nu gå till sidan 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>";
?>

Så användaren har nu skapats, lösenordet har hashas med salt och infogats i DB... Glöm seriöst inte SQL-injektion.

Nu kommer du att ha ett formulär som är väldigt likt NewUser.html-formuläret för inloggning, men det kräver inte att lösenordet anges två gånger. Låt oss säga att inloggningsformuläret skickar användaren till en sida som heter 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();
}
?>

Bara ett tips, om du vill lägga till åtkomstnivåer kan du lagra en plats i databasen med ett åtkomstnummer (ex:1, 2, 3) och när du lyckats logga in skulle du tilldela ytterligare en $_SESSION som representerar deras åtkomstnivå och ger dem tillgång till vissa avsnitt som du tillåter.

Nu när de navigerar till andra sidor på din webbplats kommer deras session att verifieras så här:

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

Ta bara för vana att starta en session på varje sida där åtkomst endast tillåts av de som är inloggade. Sessioner kommer ihåg från sida till sida.

Glöm inte att ge dem en utloggningssida som kommer att förstöra sessionen:logout.php

<?php
session_start();

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


  1. Hur man gör en mysql-fulltextsökning med flera kolumner där partiella ord matchas

  2. Hur man gör en Full Outer Join i MySQL

  3. Undantag i trådens huvud org.hibernate.HibernateException:Fel vid åtkomst till staxström

  4. Hur dåligt är det att använda SELECT MAX(id) i MYSQL istället för mysql_insert_id() i PHP?