【问题标题】:Alternative to "header" for re-directs in PHPPHP中重定向的“标头”替代方案
【发布时间】:2011-12-31 17:22:20
【问题描述】:

我正在做一个项目,我需要在别人的网络服务器上运行我的程序。这是一个非常简单的登录页面,我遇到了问题。如果我通过 WAMP 通过本地主机运行该程序,则该程序可以正常工作。我遇到的问题是重定向部分无法正常工作,它验证用户并启动会话,但是当它到达重定向时没有任何反应。

我的语法有问题,我认为这不太可能,因为它确实可以通过我的本地主机正常工作。或者,我认为服务器没有该功能(不确定是否可以选择您的服务器支持的模块,尽管我确信它是可行的)。

我不知道这是否重要,但他们正在使用“cpanel”,这是我可以访问文件的地方,并且所有文件都在同一个目录中,所以如果有人可以告诉我哪里出错或建议重定向的替代方法通过“标题”任何帮助将不胜感激。我环顾四周,但似乎“标头”是标准的工作马。

这是我的代码:

if( (!empty($_POST['username'])) && (!empty($_POST['password'])) )
{
// username and password sent from Form 
$myusername = $_POST['username']; 
$mypassword = $_POST['password']; 


$sql="SELECT UserName FROM User WHERE UserName='$myusername' and        Password='$mypassword'";

$result=mysql_query($sql);

$row=mysql_fetch_array($result);
//$active=$row['active'];
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
{
    echo "we made if to the if";
    session_start();
    session_register("myusername");
    $_SESSION['login_user']=$myusername;
    echo "right b4 the re-direct";
    header("location: UI.php"); 
            exit;
}
else
    echo "Your user name/password was not correct pleast TRY AGAIN!!!";

} 

更新:为了回应关于回声的陈述,我在同一个文件中处理我的表单并使用 echo $_SERVER['PHP_SELF']

【问题讨论】:

  • 您是否启用了错误报告?您是否 100% 确定满足条件并发送标头?
  • 在标题调用之前不能让页面输出任何内容。您的调试语句正在阻止重定向工作。
  • 是的,我尝试删除它们,但仍然无法正确重定向
  • Headers already sent by PHP 中查看<meta> 替代方案。

标签: php redirect


【解决方案1】:

我使用这个功能进行重定向...

这适用于所有情况..即使标头已经发送..甚至 javascript 被禁用..

function redirect($url)
{
    if (!headers_sent())
    {    
        header('Location: '.$url);
        exit;
        }
    else
        {  
        echo '<script type="text/javascript">';
        echo 'window.location.href="'.$url.'";';
        echo '</script>';
        echo '<noscript>';
        echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
        echo '</noscript>'; exit;
    }
}

【讨论】:

  • 为什么不直接使用元刷新标签?这样的字节数要少得多。
  • 浏览器上的后退按钮不起作用!重定向后,浏览器会跳过上一页并返回到两页...
【解决方案2】:

通过使用下面的代码我们重定向页面

$page = $_SERVER['REQUEST_URI'];
echo '<script type="text/javascript">';
echo 'window.location.href="'.$page.'";';
echo '</script>';

【讨论】:

    【解决方案3】:

    来自the docs

    请记住,必须在发送任何实际输出之前调用header(),无论是通过普通的 HTML 标记、文件中的空行还是通过 PHP。

    您的echo 导致重定向失败,在标头之前发送的任何其他输出也是如此。

    【讨论】:

      【解决方案4】:
      echo "<script>window.location.href='yourPage.php'</script>";
      

      【讨论】:

        【解决方案5】:

        你不能在输出一些文本后设置标题,所以要么在 echo 语句之前移动 header 调用(在你的情况下很好),要么使用 output buffering

        【讨论】:

          【解决方案6】:

          如果有任何内容通过标头,则通过标头重定向是非法的。取出所有echos,它应该可以工作。如果您确实希望在重定向之前向用户显示一条消息,您可能必须通过 location.href 使用 JavaScript 来实现。

          【讨论】:

            【解决方案7】:

            在发送 php 标头之前,您可能已经向浏览器发送了内容。 这可以只是一个结束 php 标记 ( ?> )

            之后的 \n

            在较大的项目或相互扩展的长线类中很难找到生成不需要的输出的位置。 要找到问题,您可以这样做:

             error_reporting(E_ALL); 
             ini_set("display_errors", 1);
             header("Location: https://mydomain.com/myLoginAdress/");
             die();
            

            严格的错误报告将抛出输出的行和文件。

            【讨论】:

              【解决方案8】:
              Use This Code 
              

              语法:

                echo '<script type="text/javascript"> window.location="<Your_URL>";</script>';
              
              
              write this line insted of header("location: UI.php");
              
              
                 echo '<script type="text/javascript"> window.location="UI.php";</script>';
              

              【讨论】:

              • 一个好的答案还包括对您编写的代码的一些解释...您能否通过添加一些说明来改进您的答案?
              猜你喜欢
              • 2010-10-03
              • 1970-01-01
              • 2012-12-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-20
              • 2021-07-07
              相关资源
              最近更新 更多