现在已经持续了几个小时,迫切需要一双新鲜的眼睛。当登录发生时,加载一个表单来测试数据库的加密密码和用户名,因为它在运行时没有错误显示在表单中,但只是在运行时它拒绝来自用户当前的数据传递的数据库。
我也接受了最后的声明给我“拒绝访问”任何帮助都会非常感激,只需要一双新鲜的眼睛,非常感谢。还要添加所有$ 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";
}
?>
答案 0 :(得分:4)
当$ data的计算结果为false时,您只回显access denied
。当您根本不分配它时就会出现这种情况,这在执行查询时遇到异常时会发生。如果没有异常,fetchAll可能仍会在发生错误时返回false。
但是,如果查询正确执行但没有返回任何行,fetchAll()
将返回一个空数组,在PHP中也会计算为false。 (我不会把这些东西搞定!)
所以无论哪种情况,都是由于执行了查询。
答案 1 :(得分:1)
有可能您的$data
变量为false,因此您的代码会回显"Access Denied"
。您应该设置条件以检查$ data是否等于您想要的数据,然后继续。
例如:
if ($data == "Blah"){
if($_POST["username"] == $data[0]["username"]) //recheck email security
{
//Blah Blah
}
}else{echo "Access Denied";}
相反:
if ($data)
{
if($_POST["username"] == $data[0]["username"]) //recheck email security
{
//Blah Blah
}
}else{echo "Access Denied";} // etc
关键是你的病情应该更准确。是否使用fetchAll
或其他任何内容。