Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Butuh bantuan untuk membuat skrip pendaftaran/login pengguna khusus

Untuk contoh ini, saya akan mengabaikan pernyataan yang sudah disiapkan, tetapi Anda perlu melakukan riset tentang pencegahan injeksi SQL.

Pertama, Anda memerlukan formulir untuk digunakan pengguna untuk masuk. Berikut adalah formulir dasar yang akan ada di halaman bernama 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>

Anda tentu saja dapat menambahkan bidang lain seperti alamat email, dll- tetapi saya membuatnya tetap sederhana.

Sekarang mari kita pergi ke halaman 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>";
?>

Jadi pengguna sekarang telah dibuat, kata sandi telah di-hash dengan garam dan dimasukkan ke dalam DB... serius jangan lupa injeksi SQL.

Sekarang Anda akan memiliki formulir yang sangat mirip dengan formulir NewUser.html untuk masuk, tetapi tidak perlu memasukkan kata sandi dua kali. Katakanlah formulir login mengirim pengguna ke halaman yang disebut 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();
}
?>

Sekedar tip, jika Anda ingin menambahkan tingkat akses, Anda dapat menyimpan tempat di database dengan nomor akses (mis:1, 2, 3) dan kemudian setelah berhasil masuk, Anda akan menetapkan $_SESSION lain yang mewakili tingkat akses mereka dan memberi mereka akses ke bagian tertentu yang Anda izinkan.

Sekarang ketika mereka menavigasi ke halaman lain di situs Anda, sesi mereka akan diverifikasi seperti ini:

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

Biasakan memulai sesi di setiap halaman di mana akses hanya diizinkan oleh mereka yang masuk. Sesi diingat dari halaman ke halaman.

Jangan lupa untuk memberi mereka halaman logout yang akan menghancurkan sesi: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. Perubahan pengkodean karakter MySQL. Apakah integritas data dipertahankan?

  2. MySQL - Pemisah ribuan

  3. SET variabel yang ditentukan pengguna di mysql mengembalikan nol?

  4. JSON Masukkan ke dalam tabel MySQL atau perbarui jika ada

  5. Hasil aneh menggunakan pesanan berdasarkan dan batas