簡體   English   中英

需要有關PHP / SQL登錄功能的幫助

[英]Need help regarding a PHP/SQL login function

在您說出它之前:我知道應該對密碼進行加密/哈希處理,但是我想首先了解一下:我具有此登錄功能和SQL數據庫。 但是,登錄功能似乎不起作用,我也不知道為什么。 我可能錯過了一些愚蠢的東西,但已經為此苦苦掙扎了一段時間。 任何幫助,將不勝感激!

注意:文件db_connect.php實際上只是與數據庫的基本連接,沒有錯

FUNCTION.PHP:

<?
function login($username, $password, $con) 
{       
    $myQuery = "SELECT * FROM Members WHERE Username = '$username' and Password = '$password';";
    $result = mysqli_query($con, $myQuery);

    if (mysql_num_rows($result) == 0)
    {
        return false;
    } 
    else
    {
return true;
    }
}
?>

PROCESS-LOGIN.PHP:

<?php
include 'db_connect.php';
include 'functions.php';

if (isset($_POST['username'], $_POST['pword'])) {
    $username = $_POST['username'];
    $password = $_POST['pword']; // The hashed password.

    if (login($username, $password) == true) {
        // Login success 
        header('Location: welcome.html');
    } 
    else 
    {
        // Login failed 
        header('Location: index.html');
    }
} 
else {
    // The correct POST variables were not sent to this page. 
    echo 'Invalid Request';
}
?>

您正在將MySQL imysqli_query )與MySQL( mysql_num_rows )混合-選擇其中一個(最好是前者)。

如果使用MySQL,則mysql_query的參數順序錯誤。

除此之外,您還無法將連接作為參數傳遞給login (如WoLfulus所述 )。


您似乎正在學習的一些其他信息:

  • loginreturn語句可以簡化為return mysql_num_rows($result) == 1; 這將返回TRUE ,如果一條記錄被發現和FALSE否則-無需一個if/else語句在這里,你已經擁有你所需要的邏輯。
  • 現在,任何人都可以通過直接在瀏覽器中鍵入地址而無需登錄即可訪問welcome.html 這可以通過使用session來避免。
  • 由於您沒有正確地轉義用戶輸入(永遠不要相信!),因此您很容易受到SQL注入的攻擊。 mysql_real_escape_string是一個開始,但不是100%的解決方案 另一方面,如果您使用准備好的語句 ,則無需擔心。

您沒有為登錄功能提供$ con參數。

function login($username, $password, $con)

您稱其為

login($username, $password)

嘗試提供連接參數以查看其是否有效。

另請注意kingkero提出的答案。 您正在使用來自不同庫的函數。

我注意到的一些事情

  • 您在表單中使用method="POST"嗎?
  • 您的SQL查詢容易受到SQL注入的攻擊
  • 您將mysql_ *與mysqli_ *函數混合
  • 缺少登錄功能的$con參數

我正在回答,因為我沒有足夠的聲譽來評論您的問題。。但是您應該將變量保留在引號之外,並添加mysql_real_escape_string()以防止mysql注入。

$myQuery = "SELECT * FROM Members WHERE Username = '$username' and Password = '$password';";

應該:

$myQuery = "SELECT * FROM Members WHERE Username = '". mysql_real_escape_string($username) ."' and Password = '". mysql_real_escape_string($password) ."';";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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