簡體   English   中英

僅驗證來自數據庫的登錄憑據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM