在php中传递$ _SESSION

时间:2014-12-16 23:18:40

标签: php session

现在已经持续了几个小时,迫切需要一双新鲜的眼睛。当登录发生时,加载一个表单来测试数据库的加密密码和用户名,因为它在运行时没有错误显示在表单中,但只是在运行时它拒绝来自用户当前的数据传递的数据库。

我也接受了最后的声明给我“拒绝访问”任何帮助都会非常感激,只需要一双新鲜的眼睛,非常感谢。还要添加所有$ 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";
    }
?>

2 个答案:

答案 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或其他任何内容。