Я использую следующий PHP-код на странице, на которую пользователь обращается после отправки формы с определенным именем входа foo
в ней, которое обрабатывает этот PHP-код, и решает, какой URL-адрес должен быть перенаправлен пользователем.
Я только что заметил, что если пользователь не вводит эту страницу с именем ввода foo
(например, форма на предыдущей странице имела вместо «vvv» вместо имени входное имя из-за некоторой ошибки), то это PHP-код не будет отправлять пользователю URL-адрес по умолчанию. вместо этого он обновлялся каждые 3 секунды в цикле.
Зачем? не следует ли получить значение по умолчанию в случае какой-либо ошибки, включая приведенный выше сценарий?
КОД:
<?php if(isset($_POST['foo'])){ switch ($_POST['foo']) { case "aaa": $url = "http://www.aaa.com/"; break; default: $url = "http://www.bbb.com/"; } } header( "refresh:3;url=$url" ); ?> <!doctype html> <html> <head> <style> .test {display: block;} </style> </head> <body> test </body> </html>
1) Я думаю, что вы возились с $_POST
и $_GET
. Get
параметры отображаются в URL-адресе, POST
не отображается в URL-адресе.
2) Если нет $_POST['foo']
, то он будет вызывать ошибку, потому что нет установленной переменной $url
. Лучшее изменение этого кода:
if(isset($_GET['foo'])){ switch ($_GET['foo']) { case "aaa": $url = "http://www.aaa.com/?foo=bbb"; header( "refresh:3;url={$url}" ); break; default: $url = "http://www.bbb.com/?foo=aaa"; header( "refresh:3;url={$url}" ); } die(); // Optionally, if you wish not to continue any script } else { /* Show default code */ }
Убедитесь, что snipet switch
достигнут, когда эта страница перемещена без параметров foo
.
В вашем случае $url
еще не запущен (может быть условие if
было провалено). Так что функция header
фактически отправит браузеру этот заголовок: refresh:3;url=
(пустая строка после url=
), которая вызывает обновление браузера с текущим url каждые 3 секунды.
<?php $url = "http://www.bbb.com/"; if(isset($_POST['foo'])){ switch ($_POST['foo']) { case "aaa": $url = "http://www.aaa.com/"; break; } } header( "refresh:3;url=$url" ); ?> <!doctype html> <html> <head> <style> .test {display: block;} </style> </head> <body> test </body> </html>
Было бы лучше, если бы вы установили URL-адрес по умолчанию вверху. Так что даже если ни один из случаев не будет соответствовать. Значение по умолчанию всегда будет там. Если значение в случае совпадет, то оно будет заменено.
$_POST['foo']
ли $_POST['foo']
имеет какое-либо значение? Попробуйте сбросить значение, чтобы проверить, есть ли в нем что-либо:
var_dump($_POST['foo'])
Если результатом этого является null, то в вашей форме есть ошибка.
Что-то вроде этого должно работать:
<form method='post' action = $this->url()> <div> <input type='text' name='foo' value='foo'> </div> <div> <input type='submit' value='submit' name='submit'> </div> </form>
И действие:
if(isset($_POST['foo']) && !empty($_POST['foo'])){ switch ($_POST['foo']) { case "aaa": $url = "http://www.aaa.com/"; break; default: $url = "http://www.bbb.com/"; } }