为什么重定向到谷歌给出一个奇怪的结果?

时间:2013-07-11 04:32:58

标签: php

我的代码不涉及任何数据库或会话,可以提供完美的结果

<!DOCTYPE html>
<?php
if(isset($_GET["engine"]))
{
if($_GET["engine"]=="google")
header("Location:http://www.google.com/search?q=".$_GET["q"]);
elseif($_GET["engine"]=="yahoo")
header("Location:http://search.yahoo.com/search?q=".$_GET["q"]);
if($_GET["engine"]=="bing")
header("Location:http://www.bing.com/search?q=".$_GET["q"]);
}
?>
<html>
<head>
<title>Fake search</title>
</head>
<body>
<form action="fakeSearch.php" method="GET">
<input type="text" name="q" value=""/><br/>
Google <input type="radio" name="engine" value="google"/><br/>
Yahoo <input type="radio" name="engine" value="yahoo"/><br/>
Bing <input type="radio" name="engine" value="bing"/><br/>
<input type="submit"/>
</form>
</body>
</html>

但是当我创建一个登录页面并重定向到home.php时,它与会话变量具有相同的代码,它给了我错误     找不到对象!

 The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error. 

 If you think this is a server error, please contact the webmaster. 
Error 404
localhost
Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7

这是代码

<?php
session_start();
if(isset($_SESSION["authenticated"]))
{
if($_SESSION["authenticated"]==TRUE)
?>
<!DOCTYPE html>
<html>
<head><title>Home</title></head>
<body>
<a href="logout.php">Logout</a>
<?php
if(isset($_GET["engine"]))
{
if($_GET["engine"]=="google")
header("Location:http://www.google.com/search?q=".$_GET["q"]);
elseif($_GET["engine"]=="yahoo")
header("Location:http://search.yahoo.com/search?q=".$_GET["q"]);
if($_GET["engine"]=="bing")
header("Location:http://www.bing.com/search?q=".$_GET["q"]);
}
?>
<form action="fakeSearch.php" method="GET">
<input type="text" name="q" value=""/><br/>
Google <input type="radio" name="engine" value="google"/><br/>
Yahoo <input type="radio" name="engine" value="yahoo"/><br/>
Bing <input type="radio" name="engine" value="bing"/><br/>
<input type="submit"/>
</form>
</body>
</html>
<?php }
else{
header("Location:login.php.");
}?>

3 个答案:

答案 0 :(得分:0)

在您的表单操作中,您使用的是fakesearch.php

<form action="fakeSearch.php" method="GET">

但是您正在使用相同的文件编写动作编码

if(isset($_GET["engine"]))
{
if($_GET["engine"]=="google")
header("Location:http://www.google.com/search?q=".$_GET["q"]);
elseif($_GET["engine"]=="yahoo")
header("Location:http://search.yahoo.com/search?q=".$_GET["q"]);
if($_GET["engine"]=="bing")
header("Location:http://www.bing.com/search?q=".$_GET["q"]);
}

点击提交按钮后,将搜索以查找fakesearch.php文件

尝试使用“#”或在表单标记的action属性中设置为空。

<?php
session_start();
if(isset($_SESSION["authenticated"]))
{
if($_SESSION["authenticated"]==TRUE)
?>

尝试将此代码放在body标记

之后
  if($_SESSION["authenticated"]==TRUE)  {

我认为,缺少开口大括号。(来自@ Orangepil的想法)

一切顺利!

答案 1 :(得分:0)

这可能是“位置:login.php。”中“php”之后的尾随时段。

答案 2 :(得分:0)

您的重定向结束时有一段额外的时间段。试试这个:

header("Location:login.php");