Я пытался использовать перенаправление на стороне сервера для выпадающего меню на моей главной странице. Мне нужно, чтобы выбранный вариант запоминался с помощью файлов cookie, чтобы он перенаправлялся к самому последнему посещенному варианту.
Это то, что я сделал до сих пор, но не смог понять, где я делаю ошибку.
<?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>
<?php
if (isset($_POST['submitted'])){
$newcity = $_POST['city'];
setcookie("cookie_city", $newcity, time()+22896000);
}
if ((!isset($_COOKIE['cookie_city']))){
$city = "";
} else{
header("Location: http://example.com/".$_COOKIE['cookie_city']);
exit(0); // <<< Try this
}
?>
<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>
Две мысли:
exit(0)
после перенаправления.Ваша проблема присутствует, потому что вы не можете получить доступ к значению 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, а затем пользователь будет перенаправлен в любом случае.
Вам все еще нужен этот конец блока? Они всегда собираются перенаправить в выбранный город?