PHP服务器重定向

PHP服务器重定向,php,server-side,Php,Server Side,我一直试图在主页上的下拉菜单中使用服务器端重定向。我需要使用cookies记住所选选项,以便它将重定向到上次访问的选项本身 这就是我到目前为止所做的,但我无法找出我在哪里犯了错误 <?php if (isset($_POST['submitted'])){ $newcity=$_POST['city']; #set cookies setcookie("city",$newcity,time()+22896000); } if ((!isset($_COOKIE['city']) ))

我一直试图在主页上的下拉菜单中使用服务器端重定向。我需要使用cookies记住所选选项,以便它将重定向到上次访问的选项本身

这就是我到目前为止所做的,但我无法找出我在哪里犯了错误

<?php
if (isset($_POST['submitted'])){
$newcity=$_POST['city'];
#set cookies
setcookie("city",$newcity,time()+22896000);

}

if ((!isset($_COOKIE['city']) )){
$city = "";
}


else{
header("location:http://example.com/".$_COOKIE['city'].""); 
}
?>

<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method ="POST">
<select name="city">
<option value ="toronto">Toronto</option>
<option value ="ottawa">Ottawa</option>
<option value ="kingston">Kingston</option>
</select>

<input type="submit" name="submitted" value="Submit">
</form>
两个想法:

尝试在重定向后使用exit0。 使用与POST和GET变量不同的cookie名称。也许您的服务器以某种方式配置为覆盖POST、GET和cookie。
您的问题存在,因为您无法在设置cookie值的同一页上访问该值。因此,它仅在重新加载页面时才起作用

您最好在cookie设置之后立即重定向它们:

if (isset($_POST['submitted'])){
    $newcity = $_POST['city'];
    setcookie("cookie_city", $newcity, time()+22896000);
    die(header("Location: http://example.com/".$new_city));
}

if ((!isset($_COOKIE['cookie_city']))){
    $city = "";
} else{
    header("Location: http://example.com/".$_COOKIE['cookie_city']);
    exit(0); // <<< Try this
}
这样,您将设置cookie,然后用户将被重定向到任意一种方式


不过你还需要那个端块吗?他们总是要重定向到他们选择的城市吗?

如果你在HTML中添加一个输入,是否有效?我很确定提交类型的输入不会随POST请求一起发送。我不会添加隐藏的输入,只需检查是否设置了$\u POST['city'],而不是submit按钮。此外,您还可以阅读提交输入的发布值。旁注:如果需要,您可以删除2个括号!isset$_饼干['city']{@JCOC611仍然不起作用。我试过了。我也试过使用它。它没有重定向。当我触发提交按钮时,它会在位置栏中我的域名末尾附加/index.php,如example.com/index.php。问题仍然是一样的。如果我选择toronto并单击submit,它会包含/index.php而不是值。当我再次单击submit按钮,它将重定向到/toronto.it仍然不工作。检查。它现在只重定向到example.com,不包括子目录。不,它仍然是一样的。有没有其他方法可以这样做?除了Javascript,我已经这样做了,但它在重定向到子目录时显示主页。你可以使用会话。
if (isset($_POST['submitted'])){
    $newcity = $_POST['city'];
    setcookie("cookie_city", $newcity, time()+22896000);
    die(header("Location: http://example.com/".$new_city));
}

if ((!isset($_COOKIE['cookie_city']))){
    $city = "";
} else{
    header("Location: http://example.com/".$_COOKIE['cookie_city']);
    exit(0); // <<< Try this
}