Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何评估将用户重定向到管理面板的PHP会话?_Php_Mysql_Syntax - Fatal编程技术网

如何评估将用户重定向到管理面板的PHP会话?

如何评估将用户重定向到管理面板的PHP会话?,php,mysql,syntax,Php,Mysql,Syntax,我想为我的check.php文件中的panel.php文件设置会话。我定义$\u SESSION['admin']=1,然后在panel.php文件中评估管理会话,但我不知道为什么我的面板页面重定向到index.php(登录表单) 我带来了以下所有代码: check.php: panel.php: 管理面板 欢迎来到管理小组 如何解决此重定向问题?尝试检查$result中是否存储了某些内容。您对重定向函数的调用是在设置$\u SESSION['admin']之前进行的。在编写新代码时,您

我想为我的
check.php
文件中的
panel.php
文件设置会话。我定义
$\u SESSION['admin']=1
,然后在
panel.php
文件中评估管理会话,但我不知道为什么我的面板页面重定向到
index.php
(登录表单)

我带来了以下所有代码:

check.php:


panel.php:


管理面板
欢迎来到管理小组

如何解决此重定向问题?

尝试检查$result中是否存储了某些内容。

您对重定向函数的调用是在设置$\u SESSION['admin']之前进行的。

在编写新代码时,您应该避免使用mysql函数,下面是您的代码修复并移植到PDO,这可能是您感兴趣的

<?php
session_start();
include_once ("function.php");

if($_SERVER['REQUEST_METHOD']=='POST'){
    if (isset($_POST['tfpass']) && isset($_POST['tfuser'])){
        // PDO CONNECT
        try {
            $db = new PDO("mysql:host=localhost;dbname=login", 'root', 'pass');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        }catch (Exception $e){
            die('mySQL server error: '.$e->getMessage());
        }

        $sql = "SELECT 1
                FROM administration
                WHERE username=:user AND password=:pass";

        //Prepare the above query
        $stmt = $db->prepare($sql);
        //bind the placeholders to the values
        $stmt->bindParam(':user', $_POST['tfuser']);
        $stmt->bindParam(':pass', $_POST['tfpass']);
        //Execute
        $stmt->execute();
        //Fetch Result
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if (!empty($result)){
            //login to panel
            $_SESSION['admin']= 1 ;
            redirect("panel.php");
        } else {
            //back to login page
            redirect("index.php?error");
        }
    } else {
        //back to login page
        redirect("index.php");
    }
}else{
    //back to login page, script not accessed via POST
    redirect("index.php");
}
?>


您的问题是什么?(如果你能更恰当地格式化你的代码,那会很有帮助)@hakre我可以问一下。。。在panel.php中包含任何类似op的文件后启动会话好吗?因为我认为这样会生成会话警告/error@NullPointer:是的,这可能是个问题。然而,我还不清楚实际的问题是什么。例如,是否有任何警告或错误消息?可能会放入
ini\u集('display\u errors',1);错误报告(~0)将显示有关此类和其他相关问题的更多信息。是的,我确信这件事,因为我的会话验证中出现了一些错误,因为当我删除时!根据我在这里的验证:如果(!isset($_SESSION['admin'])==1),我的脚本工作正常,还有一件事我注意到您没有在check.php文件中调用SESSION_start()。@Delphinium这是一个非常简洁的答案。也许作为对原始问题的评论会更好?@DuncanJones我同意,但我对stackoverflow有点陌生,不知道如何真正做到这一点!所以这里有一个小小的道歉。@Delphinium对不起,我怀疑你无法做到这一点,因为你目前的声誉很低。为呻吟道歉!:-)在设置变量之前从该页面重定向,这就是为什么$\u会话['admin']仍然为空。我猜您的重定向函数看起来是这样的:函数重定向($url){header($Location:$url”);exit;}调用此函数后,进一步执行将中断,客户端将重定向到url。只需反转这两行,我就可以看到下面的解决方案(ommiting PDO)
<?php
include_once ("function.php");
session_start();
if (!isset($_SESSION['admin'])==1){
  session_destroy();
  redirect("index.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>admin panel</title>
</head>

<body>
welcome to admin panel
</body>
</html>
<?php
session_start();
include_once ("function.php");

if($_SERVER['REQUEST_METHOD']=='POST'){
    if (isset($_POST['tfpass']) && isset($_POST['tfuser'])){
        // PDO CONNECT
        try {
            $db = new PDO("mysql:host=localhost;dbname=login", 'root', 'pass');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        }catch (Exception $e){
            die('mySQL server error: '.$e->getMessage());
        }

        $sql = "SELECT 1
                FROM administration
                WHERE username=:user AND password=:pass";

        //Prepare the above query
        $stmt = $db->prepare($sql);
        //bind the placeholders to the values
        $stmt->bindParam(':user', $_POST['tfuser']);
        $stmt->bindParam(':pass', $_POST['tfpass']);
        //Execute
        $stmt->execute();
        //Fetch Result
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if (!empty($result)){
            //login to panel
            $_SESSION['admin']= 1 ;
            redirect("panel.php");
        } else {
            //back to login page
            redirect("index.php?error");
        }
    } else {
        //back to login page
        redirect("index.php");
    }
}else{
    //back to login page, script not accessed via POST
    redirect("index.php");
}
?>