Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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头重定向不起作用并停留在login.PHP上_Php_Mysql_Session_Pdo - Fatal编程技术网

PHP头重定向不起作用并停留在login.PHP上

PHP头重定向不起作用并停留在login.PHP上,php,mysql,session,pdo,Php,Mysql,Session,Pdo,我正在尝试使用PHP将登录页面重定向到profile.PHP页面。我已经测试过代码是否使用会话从数据库中提取信息。在最终的If语句之前,一切正常。它没有给我任何错误,但是它返回为空,并且不会离开脚本运行的login.php文件 session_start(); //print_r($_POST); if(isset($_POST['email'], $_POST['password'])){ require 'php_includes/db_connect.php'; $qu

我正在尝试使用PHP将登录页面重定向到profile.PHP页面。我已经测试过代码是否使用会话从数据库中提取信息。在最终的If语句之前,一切正常。它没有给我任何错误,但是它返回为空,并且不会离开脚本运行的login.php文件

session_start();
//print_r($_POST);

if(isset($_POST['email'], $_POST['password'])){
    require 'php_includes/db_connect.php';

    $query = $dtb->prepare("SELECT * FROM users WHERE email=:email AND password=:password");
    //$query->bindParam('ss', $_POST['email'], $_POST['password']);
    $query->bindParam(':email', $_POST['email'],PDO::PARAM_STR);
    $query->bindParam(':password', $_POST['password'],PDO::PARAM_STR);
    $query->execute();
    //die('Connection error, because: '.$query->errorInfo());

    //echo 'hi';

    //$query->close();
    if($row = $query->fetch()){
        echo 'hi';
        $_SESSION['email'] = $row['email'];
        header("location: profile.php");
    }
}

去除回声。头重定向之前必须没有输出

这包括任何类型的意外空白,因此无论何时在重定向之前包含另一个文件,都必须确保在调用重定向之前没有输出

通常做法: 大多数编码框架将使用ob_*函数,这意味着它们将把所有输出捕获到浏览器的缓冲区中,并决定是否/何时发送输出

通过在整个应用程序(如init/bootstrap文件)上安装输出缓冲解决方案,可以更轻松地确保cookie、会话和头重定向正确发生,因为您可以控制应用程序中发送输出的确切位置

小问题和难以发现的问题: 因此,不输出任何内容的文件(例如仅包含函数定义的文件或类文件)不应以?>结尾,因为?>后面的空白被视为输出

文件也必须全部以相同的格式保存,如ASCII或UTF-8(带BOM)或UTF-8(不带BOM),否则,格式之间的差异可能会被误解为输出,通常是1-2个字符的输出,很难找到

调试: 将错误报告设置为E_ALL,并设置为“显示错误”,为true。这将响应各种通知和警告,否则您可能看不到这些通知和警告。其中一个警告类似于已发送的标题,其中提到了第一次输出发生的特定文件/行


如果输出的文件/行看起来很熟悉,则可以删除该输出。如果找不到第一次输出发生的位置,则可能存在一个很小且很难找到的问题。

删除回音。头重定向之前必须没有输出

这包括任何类型的意外空白,因此无论何时在重定向之前包含另一个文件,都必须确保在调用重定向之前没有输出

通常做法: 大多数编码框架将使用ob_*函数,这意味着它们将把所有输出捕获到浏览器的缓冲区中,并决定是否/何时发送输出

通过在整个应用程序(如init/bootstrap文件)上安装输出缓冲解决方案,可以更轻松地确保cookie、会话和头重定向正确发生,因为您可以控制应用程序中发送输出的确切位置

小问题和难以发现的问题: 因此,不输出任何内容的文件(例如仅包含函数定义的文件或类文件)不应以?>结尾,因为?>后面的空白被视为输出

文件也必须全部以相同的格式保存,如ASCII或UTF-8(带BOM)或UTF-8(不带BOM),否则,格式之间的差异可能会被误解为输出,通常是1-2个字符的输出,很难找到

调试: 将错误报告设置为E_ALL,并设置为“显示错误”,为true。这将响应各种通知和警告,否则您可能看不到这些通知和警告。其中一个警告类似于已发送的标题,其中提到了第一次输出发生的特定文件/行

如果输出的文件/行看起来很熟悉,则可以删除该输出。如果您找不到第一次输出发生的位置,您可能会遇到一个很小且很难找到的问题。

同时删除回音“hi”;还有Mihai Stancu所说的空格

建议设置出口;在标题位置之后,如下所示:

仅使用header并不意味着代码停止执行。无论何时使用头重定向,都需要显式调用exit来停止脚本的执行。

同时删除echo“hi”;还有Mihai Stancu所说的空格

建议设置出口;在标题位置之后,如下所示:


仅使用header并不意味着代码停止执行。无论何时使用header重定向,都需要显式调用exit来停止脚本的执行。

我在其中使用了echo语句来尝试查看代码停止工作的位置。对不起,在我把它放上去之前我应该把它拿出来。在我删除此项后,它仍然不起作用。@user3080734您是否让它起作用,或者至少找到了错误报告的内容?@user3080734那么,在激活错误报告后,您看到了哪些通知/警告?我在那里有echo语句,以尝试查看代码停止工作的位置。对不起,在我把它放上去之前我应该把它拿出来。在我删除此项后,它仍然不起作用。@user
3080734您是否已使其正常工作,或者至少找到了错误报告的内容?@user3080734那么在激活错误报告后,您会看到哪些通知/警告?您说您已测试代码是否从数据库加载了信息。在页面上显示->执行后进行了回显。您的错误报告设置是什么?您说您已测试代码是否从数据库加载了信息。在页面上显示->执行后进行了回显。您的错误报告设置是什么?@user3080734您可能有空白。。。。转到浏览器并查看源代码,查看其中是否有空格退出将无助于重定向通过它将帮助您识别应该发生重定向的页面。@MihaiStancu我曾经经历过重定向未通过的情况。。。如果您在脚本结束之前设置了另一个头重定向,@Arian。使用“退出”确实很有用,但我想说的是,在脚本结束之前,应用程序不应该执行其他重定向。@MihaiStancu ahhh好的,是的,我同意@用户3080734您可能有空白。。。。转到浏览器并查看源代码,查看其中是否有空格退出将无助于重定向通过它将帮助您识别应该发生重定向的页面。@MihaiStancu我曾经经历过重定向未通过的情况。。。如果您在脚本结束之前设置了另一个头重定向,@Arian。使用“退出”确实很有用,但我想说的是,在脚本结束之前,应用程序不应该执行其他重定向。@MihaiStancu ahhh好的,是的,我同意!
if($row = $query->fetch()){
    $_SESSION['email'] = $row['email'];
    header("location: profile.php");
    exit();
}