случай по умолчанию в выражении switch-case PHP не работает по умолчанию?

Я использую следующий 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/"; } }