use*_*734 1 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';
$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");
}
}
Run Code Online (Sandbox Code Playgroud)
删除回声.标头重定向之前必须没有输出.
这包括任何类型的意外空白区域,因此每当您在重定向之前包含另一个文件时,您必须确保在调用重定向之前没有输出.
大多数编码框架都将使用这些ob_*函数 - 这意味着它们会将浏览器的所有输出捕获到缓冲区中,并决定是否/何时应该发送输出.
通过在整个应用程序(例如init/bootstrap文件)上使用输出缓冲解决方案,可以更加轻松地确保正确地发生cookie,会话和标头重定向,因为您可以控制发送输出的应用程序中的确切点.
由于这些文件不输出任何内容,例如只包含函数定义或类文件的文件不应该以a结尾,?>因为在?>认为输出后有空格.
文件也必须以相同的格式保存,例如ASCII或UTF-8,BOM或UTF-8,否则,格式之间的差异可能被误解为输出(通常1-2个字符的输出)确实很难找到.
设置你error_reporting()的E_ALL和ini_set('display_errors', true).这将通过各种通知回应您可能无法看到的警告.其中一个警告将是"已发送的标头",提到第一个输出发生的特定文件/行.
如果文件/输出行看起来很熟悉,那么您可以删除该输出.如果您找不到第一个输出的位置,您可能会遇到"小而难以找到的问题"之一.