我对PHP有点新手,我正在尝试以登录形式执行以下操作: - index.php:登录(链接到reglogin.php) - reglogin.php:注册或登录。登录时:检查电子邮件是否在数据库中。如果是这样 - >登录并转到succes页面。重定向到succes页面不起作用。
的index.php
<?php session_start(); $page=(isset($_GET['page']))?$_GET['page']:"index"; ?>
<!DOCTYPE html>
....
<body>
<?php include 'includes/header.php'; ?>
<div class="content">
<?php
$frontpage="page/home.php";
$page404="page/404.php";
$folder="page/";
if ($page=="index") {
include_once($frontpage);
}
else {
include_once((file_exists($folder.$page.".php"))?$folder.$page.".php":$page404);
}
</div>
</body>
包括/ header.php文件
<div class="header">
<?php
if (isset($_SESSION['email'])) {
?>
<ul><li><a href="index.php?page=logout">Log out</a></li></ul>
<?php
}
else { ?>
<ul><li><a href="index.php?page=reglogin">Log in</a></li></ul>
<?php }
?>
</div>
Reglogin.php
<?php if (!isset($_SESSION['email'])) { ?>
<form method="post" action="index.php?page=logincheck" class="loginform">
<fieldset>
<input type="text" name="login_email" />
<input type="text" name="login_password" />
<input type="submit" name="login_submit" />
</fieldset>
</form>
<?php } else { echo "U are already logged in"; } ?>
Logincheck.php
<?php
session_start();
include 'includes/config.php';
// if session['email'] doesn't exit
if (!isset($_SESSION['email'])) {
if (isset($_POST['login_email']) && isset($_POST['login_password'])) {
$login_email = $_POST['login_email'];
$login_password= $_POST['login_password'];
if (!empty($login_email) && !empty($login_password)) {
$query = 'SELECT Email, Password FROM tblregpersons
WHERE Email="' . $login_email . '"
AND Password="' . $login_password . '"';
if ($query_run = mysql_query($query)) {
$query_num_rows = mysql_num_rows($query_run);
if ($query_num_rows == 0) {
echo "invalid";
}
else {
$_SESSION['email'] = $_POST['login_email'];
header('location: index.php?page=succes');
exit();
***// This redirect doesn't work. The page stays on logincheck.php.***
}
}
else {
echo "query failed";
}
}
else {
echo "Please fill in an email/password";
}
}
else {
echo "no post";
}
else {
"U are already logged in";
}
?>
我与$_SESSION['email']
合作,因为我还有一个注册表单,我将此“电子邮件”会话链接到注册和登录表单的POST。
在重定向中我做错了什么?
答案 0 :(得分:2)
你可以在调用header之前尝试ob_flush,可能是某些输出在header之前得到打印。 同时配置php以显示所有错误,这样你就会得到确切的错误。
答案 1 :(得分:0)
您的index.php脚本在Logincheck.php可以正常工作之前生成输出。
<?php
session_start();
$page=(isset($_GET['page']))?$_GET['page']:"index";
if($page=='logincheck')
{
include('logincheck.php');
}
else
{
?>
<!DOCTYPE html>
....
<body>
<?php include 'includes/header.php'; ?>
<div class="content">
<?php
$frontpage="page/home.php";
$page404="page/404.php";
$folder="page/";
if($page=="index")
{
include_once($frontpage);
}
else
{
include_once((file_exists($folder.$page.".php"))?$folder.$page.".php":$page404);
}
?>
</div>
</body>
<?php
}
?>
注意:您的问题是Logincheck.php,但您的脚本意味着logincheck.php
另一种解决方案是将您的表单发布到logincheck.php并将其标题定位到相应的页面或默认返回index.php并显示错误消息
答案 2 :(得分:0)
这是logincheck.php的新版本 - 将您的表单更改为直接发布到此处
由于这是唯一被引用的脚本,因此应该没有输出和重定向应该起作用
<?php
session_start();
include 'includes/config.php';
// if session['email'] doesn't exit
$error='';
if(!isset($_SESSION['email']))
{
if(isset($_POST['login_email']) && isset($_POST['login_password']))
{
$login_email = $_POST['login_email'];
$login_password= $_POST['login_password'];
if(!empty($login_email) && !empty($login_password))
{
$query = "SELECT Email, Password
FROM tblregpersons
WHERE Email='".mysql_real_escape_string($login_email)."'
AND Password='".mysql_real_escape_string($login_password)."'";
$query_run = mysql_query($query);
if($query_run)
{
$query_num_rows = mysql_num_rows($query_run);
if($query_num_rows != 1)
{
$error="invalid";
}
else
{
$_SESSION['email'] = $_POST['login_email'];
header("Location:index.php?page=success");
exit();
}
}
else
{
$error='sql error '.mysql_error();
}
}
else
{
$error="Please fill in an email/password";
}
}
else
{
$error="no post";
}
}
else
{
$error="U are already logged in";
}
header("Location:index.php?page=logincheck&error=".urlencode($error));
exit();
?>
答案 3 :(得分:-1)
您必须使用页面开头的session_start()
。
答案 4 :(得分:-2)
您的脚本未重定向,因为您已经在脚本的开头发送了输出。
<?php if (!isset($_SESSION['email'])) { ?>
<form method="post" action="index.php?page=logincheck" class="loginform">
<fieldset>
<input type="text" name="login_email" />
<input type="text" name="login_password" />
<input type="submit" name="login_submit" />
</fieldset>
</form>
< ?php } else { echo "U are already logged in"; } ?>
在你的php.ini文件中编辑output_buffering并给它值4096(推荐),这应该可以解决你的问题。