替代"标题"用于在PHP中重新定向

时间:2011-12-31 17:22:21

标签: php redirect

我正在开展一个项目,我需要在其他人的网络服务器上运行我的程序。这是一个非常简单的登录页面,我遇到了问题。如果我通过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']

8 个答案:

答案 0 :(得分:41)

我使用此功能进行重定向...

哪种情况适用于所有情况..即使标题已经发送..甚至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;
    }
}

答案 1 :(得分:2)

来自the docs

  

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

您的echo导致重定向失败,与标头之前发送的任何其他输出一样。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

输出一些文字后无法设置标题,因此您可以在header语句之前移动echo来电(在您的情况下很好)或使用output buffering

答案 4 :(得分:1)

echo "<script>window.location.href='yourPage.php'</script>";

答案 5 :(得分:0)

如果有任何内容通过,重定向通过标头是非法的。取出所有echo,它应该有效。如果希望在重定向之前向用户显示消息,则可能必须通过location.href使用JavaScript进行此操作。

答案 6 :(得分:0)

在发送php标头之前,您可能已经将内容发送到浏览器。 在关闭php标签(?&gt;)

之后,这可能只是一个\ n

要找到生成不需要的输出的地方,对于较大的项目或相互延伸的长行项目可能很难。 要找到问题,您可以这样做:

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

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

答案 7 :(得分:0)

echo '<script type="text/javascript"> window.location="<Your_URL>";</script>';

header("location: UI.php");  

Replace with ...
echo '<script type="text/javascript"> window.location="UI.php";</script>';