[英]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 i ( mysqli_query
)與MySQL( mysql_num_rows
)混合-選擇其中一個(最好是前者)。
如果使用MySQL,則mysql_query
的參數順序錯誤。
除此之外,您還無法將連接作為參數傳遞給login
(如WoLfulus所述 )。
您似乎正在學習的一些其他信息:
login
的return
語句可以簡化為return mysql_num_rows($result) == 1;
。 這將返回TRUE
,如果一條記錄被發現和FALSE
否則-無需一個if/else
語句在這里,你已經擁有你所需要的邏輯。 welcome.html
。 這可以通過使用session來避免。 mysql_real_escape_string
是一個開始,但不是100%的解決方案 。 另一方面,如果您使用准備好的語句 ,則無需擔心。 您沒有為登錄功能提供$ con參數。
function login($username, $password, $con)
您稱其為
login($username, $password)
嘗試提供連接參數以查看其是否有效。
另請注意kingkero提出的答案。 您正在使用來自不同庫的函數。
我注意到的一些事情
method="POST"
嗎? $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.