PHP перенаправление сервера

Я пытался использовать перенаправление на стороне сервера для выпадающего меню на моей главной странице. Мне нужно, чтобы выбранный вариант запоминался с помощью файлов 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>

1

Решение

<?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>

Две мысли:

  1. Попробуй использовать exit(0) после перенаправления.
  2. Используйте имя файла cookie, отличное от ваших переменных POST и GET. Может быть, ваш сервер настроен так, что переопределяет POST, GET и куки.
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, а затем пользователь будет перенаправлен в любом случае.

Вам все еще нужен этот конец блока? Они всегда собираются перенаправить в выбранный город?

0

По вопросам рекламы [email protected]