目前已经在这里工作了几个小时,迫切需要一双新眼睛。当登录发生时,将加载一个表单以根据数据库测试加密的密码和用户名,因为它在运行时没有错误显示在表单中,但只是在运行时它拒绝来自当前用户的数据正在传递的数据库。
我还收到了最后的 else 声明,给我“拒绝访问”任何帮助将不胜感激,只需要一双新的眼睛,非常感谢。还要添加所有 $data 实例是数据库中的字段
<?php
$serverName = "localhost";
$username = "root";
$password = "";
$databaseName = "filestackusers";
$connect = new PDO("mysql:host=$serverName;dbname=$databaseName",$username, $password);
//encrypt pass and user for search
if(isset($_POST["username"]) && isset($_POST["password"]))
{
$FolderEncryption = md5($_POST['username']);
$passwordEncryption = md5($_POST['password']);
}
else
{
echo "information not passed";
}
try
{
//search if found load info
$checkSqlStmt = $connect->prepare("SELECT * FROM users WHERE user_folder =
:FolderEncryption AND password = :passwordEncryption");
//bind
$checkSqlStmt->bindParam(':FolderEncryption', $FolderEncryption, PDO::PARAM_STR);
$checkSqlStmt->bindParam(':passwordEncryption', $passwordEncryption, PDO::PARAM_STR);
//execute
$checkSqlStmt->execute();
$data = $checkSqlStmt -> fetchAll();
}
catch (Exception $ex)
{
die("An error has occured! " . $ex->getMessage());
}
if ($data)
{
if($_POST["username"] == $data[0]["username"]) //recheck email security
{
echo 'Access Granted';
$_SESSION['userID'] = $data[0]['user_id'];
$_SESSION['Username'] = $data[0]['username']; //set sessions
$_SESSION['Password'] = $data[0]['password'];
$_SESSION['Email'] = $data[0]['email'];
$_SESSION['UserFolder'] = $data[0]['user_folder'];
//load user info
loadFileInformation();
}
}
else
{
echo "Access Denied";
}
?>
最佳答案
只有当 $data 的计算结果为 false 时,您才会回显 access denied
。当您根本不分配它时可能会出现这种情况,当您在执行查询时遇到异常时会发生这种情况。如果没有异常,fetchAll 在出错的情况下可能仍会返回 false。
而且,如果查询正确执行但未返回任何行,fetchAll()
将返回一个空数组,这在 PHP 中的计算结果也为 false。 (我没有编造这些东西!)
因此无论哪种情况,都是由于查询的执行。
关于php - 在 PHP 中传递 $_SESSION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27515727/