【问题标题】:PHP redirect not working on serverPHP重定向在服务器上不起作用
【发布时间】:2015-03-09 06:47:11
【问题描述】:

我使用 PHP 和 Mysql 构建了一个 Web 应用程序。它有一个登录部分。它工作正常,在我的本地服务器上一切正常。但是当我在实时服务器上上传这个应用程序时,重定向功能不再起作用。我的代码:

signin.php:

<form action="do_login.php" method="post">
    <input name="user" type="text" id="user" size="25" placeholder="Username" />
    <input name="password" type="password" id="password"  size="25" placeholder="Password" />
<input name="submit" type="submit" value="Login" class="submit"/>
</form>

do_login.php:

<?php
include 'includes/dbConnect.php';   

$my_user = $_POST['user'];
$my_password = $_POST['password'];

if ($my_user == '' || $my_password == '')
    {
        $myURL = 'error.php?eType=pass';
        header('Location: '.$myURL);
        exit;
    }

$result = mysql_query("SELECT * FROM users where username = '$my_user' and password =  '$my_password'") or die("SELECT Error: ".mysql_error());
$num_rows = mysql_num_rows($result);
$get_info = mysql_fetch_row($result);

    if (mysql_num_rows($result) > 0)
    { 
        session_start(); 
        $_SESSION['login_status'] = "yes" ;
        $_SESSION['email'] = $get_info['3'];
        $_SESSION['full_name'] = $get_info['0'];
        $myURL = 'admin.php';
        header('Location: '.$myURL);
    }
else
    {
        $myURL = 'error.php?eType=wrong';
        header('Location: '.$myURL);
        exit;
    }
?>

当用户成功登录时,浏览器会转到do_login.php 并显示一个空白页面,该页面不会在实时服务器上重定向到admin.php,但在本地主机上它会重定向到admin.php。当我手动转到admin.php,它有限制,只有登录的用户可以访问它,我可以访问它,这意味着我已经登录并且工作正常。

错在哪里?

【问题讨论】:

  • 不要使用已弃用的mysql_* API。使用mysqli_* 或pdo
  • 开启错误报告 - ini_set('display_errors', 1); error_reporting(E_ALL);。我几乎可以肯定你会收到 "Headers already sent" 错误。
  • 查看您的服务器日志文件以了解是否有错误。
  • 你能照我说的@MajidAli 告诉我出现了什么错误吗?
  • 来这里的人原则上愿意提供帮助。因此,不要乞求(在问题和 cmets 中)按要求更新您的问题,因为它不完整。当更新从不使用 Edit 或 Update 时,我们可以从系统编辑历史记录中看到如有必要发生了哪些变化。更重要的是一个易于阅读、连贯的问题,无需闲聊。

标签: php mysql redirect


【解决方案1】:

将您的 php 代码包装在 ob_*

<?php

ob_start();

//Rest of your code

ob_end_flush();
?>

更新: 这就是我建议ob_* 函数的原因。我从 brian.moonspot.net 复制的

ob_start 的工作原理

那么,ob_start 有什么帮助呢? ob_start 中的 ob 代表输出缓冲。 ob_start 将缓冲输出(HTML),直到页面完全完成。页面完成后,发送标题,然后发送输出。这意味着对 setcookie 或标头函数的任何调用都不会导致错误,并将正确发送到浏览器。您确实需要在任何输出发生之前调用 ob_start 。如果你开始输出,那就太晚了。

【讨论】:

  • 你应该解释为什么他应该把它包装在ob_*函数中,而不是仅仅建议它。
【解决方案2】:

在文件前使用完整的网站网址:-

 $site_url = "www.example.com";
 $myURL = $site_url.'/admin.php';
 header('Location: '.$myURL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 2017-09-28
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多