[英]Verify only Login credentials from DB
<?php
session_start();
include("connection.php");
if (mysqli_connect_error()) {
die("Could not connect to database");
if ($_POST['submit'] == "Login") {
$query = "SELECT * FROM EmployeeTable WHERE name='"
. mysqli_real_escape_string($link, $_POST['name'])
. "'AND password='"
. md5(md5($_POST['name']) . $_POST['password'])
. "'LIMIT 1";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result);
if ($row) {
$_SESSION['id'] = $row['id'];
header("Location: http://www.ccm.net/forum/");
} else {
$error = "We could not find a user with that email and password. Please try again.";
}
}
?>
我有上面的代碼只是為了登錄用戶。我已經有一個包含用戶名和密碼的表。我不想創建一個注冊按鈕,只是一個登錄按鈕,因為密碼將是他們的“id”本身。我能夠連接到數據庫。
請幫助我,因為登錄后我被帶到一個空白頁面。
首先:使用此代碼,您很容易受到 sql 注入的影響。 請使用參數化查詢,這樣您就不會忘記轉義您在查詢中使用的值。
$mysqli = new Mysqli($host, $username, $password, $database);
$mysqli->prepare('SELECT * FROM EmployeeTable WHERE name = ? AND password = ? LIMIT 1');
$mysqli->bind_param('ss', $name, $password);
$mysqli->execute();
$result = $mysqli->fetch_array();
您也不應該使用md5
進行密碼散列。 使用內置的password_*
函數。
password_hash
可用於散列密碼,如下所示:
$hash = password_hash($password, PASSWORD_DEFAULT);
這也適用於所謂的鹽,以加強對字典攻擊的哈希。
當您想驗證密碼時,可以使用password_verify
來根據存儲的哈希驗證密碼,如下所示:
$is_correct = password_verify($password, $hash);
使用這些方法你不太可能搞砸任何事情。
您的問題的直接答案可能是: if ($_POST['submit'] == "Login")
或if($row)
。 我會使用count()
來檢查找到的結果數量,如下所示: if(count($row) > 0)
。
在沒有看到其余 HTML 的情況下猜測,它可能不滿足 if $_POST["submit"] 語句:
if ($_POST['submit'] == "Login") {
並且只是結束腳本,因為沒有其他選項。 也許檢查您的表單是否為 POST,按鈕名稱實際上是“提交”,其值為“登錄”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.