Mysql
 sql >> база данни >  >> RDS >> Mysql

Нуждаете се от помощ при създаването на персонализиран скрипт за регистрация/вход на потребител

За този пример ще пропусна подготвените изявления, но ще трябва да направите някои изследвания относно предотвратяването на SQL инжектиране.

Първо имате нужда от формуляр, който потребителят да използва за влизане. Ето един основен, който ще бъде на страница, наречена 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>

Разбира се, можете да добавите други полета, като имейл адрес и т.н., но аз го поддържам просто.

Сега да отидем на страницата 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>";
?>

Така че потребителят вече е създаден, паролата е хеширана със сол и вмъкната в DB... сериозно, не забравяйте SQL инжекцията.

Сега ще имате формуляр, който е много подобен на формуляра NewUser.html за влизане, но няма да изисква паролата да бъде въведена два пъти. Да кажем, че формулярът за вход изпраща потребителя на страница, наречена 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();
}
?>

Само съвет, ако искате да добавите нива на достъп, можете да съхраните място в базата данни с номер за достъп (напр.:1, 2, 3) и след това при успешно влизане ще зададете друг $_SESSION, който представлява тяхното ниво на достъп и им дава достъп до определени секции, които разрешавате.

Сега, когато се придвижат до други страници на вашия сайт, тяхната сесия ще бъде потвърдена по следния начин:

Примерна страница.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.";
}
?>

Просто придобийте навика да започвате сесия на всяка страница, където достъпът е разрешен само от тези, които са влезли. Сесиите се запомнят от страница на страница.

Не забравяйте да им дадете страница за излизане, която ще унищожи сесията:logout.php

<?php
session_start();

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да комбинирам две MySQL колони в една колона?

  2. PHP Mysql Json и арабски език

  3. Изберете предишния ред mysql?

  4. Какво представляват Resource#?

  5. синтактична грешка, неочаквано 'mysql_connect' (T_STRING)