Почему мой оператор switch не дает правильных результатов?

Я использую условие и переключатель для определения некоторых значений по умолчанию для нескольких переменных, но я не получаю ожидаемых результатов.

Когда ссылка <a href="index.php?post=myFile"></a> нажата, я ожидаю выполнить первый случай в коммутаторе, но нужные переменные не будут перезаписаны.

Это мой код в мой index.php:

$titulo = '';
$keywords = '';
$descricao = '';
$post = empty($_GET['post']) ? '' : $_GET['post'];
$pagina = empty($_GET['p']) ? 'home' : $_GET['p'];

if (empty($post)) {
switch ($pagina):
case 'posts/myFile':
$titulo = 'this variable doesnot change the value on this file';
$keywords = 'this variable doesnot change the value on this file';
$descricao = 'this variable doesnot change the value on this file';
break;
case 'privacidade':
$titulo = 'Privacidade ';
break;
case 'ultimasnoticias':
$titulo = 'Ultimas Noticias';
break;
default:
$titulo = 'Home';
$pagina = 'home';
endswitch;
} else {
$titulo = 'Post';
}

Мои текущие результаты:

$_GET["post"] = "myFile";
$titulo = "Post";
$keywords = "";
$descricao = "";
$pagina = "home";

Мои желаемые результаты:

$_GET["post"] = "myFile";
$titulo = 'this variable doesnot change the value on this file';
$keywords = 'this variable doesnot change the value on this file';
$descricao = 'this variable doesnot change the value on this file';
$pagina = "home";

Почему я не могу обновить переменные с помощью первого оператора case?

Редактировать:

введите описание изображения здесь

Это код, который находится в моем index.php к nav bar:

<nav>
<ul>
<li><a href="?p=home">Início</a></li>
<li><a href="?p=ultimasnoticias">Últimas Notícias</a>
<li><a href="?p=contato">Contato</a></li>
</ul>
</nav>

1

Решение

Когда вы загружаете index.php?post=myFile, вы генерируете следующий элемент в $_GET суперглобальный массив:

$_GET = array ("post" => "myFile");

затем $post = empty($_GET['post']) ? '' : $_GET['post']; объявляет $post = "myFile",

Это означает, что if (empty($post)) { оценивает false (потому что это не пусто, это myFile) и switch-case блок игнорируется.

else условие выполнено. $titulo = 'Post';


Теперь, если вы хотите, чтобы блок переключателя выполнялся, вы должны:

  • + Изменить if (empty($post)) { в if (!empty($post)) {,

Что касается будущих проблем, которые могут возникнуть в блоке switch-case, убедитесь, что вы совпадаете со значением для $pagina при написании каждого дела. Если вы не уверены в том, с какими значениями вы работаете или что выполняете, просто добавьте эхо в каждом случае, чтобы уточнить.

Я говорю это, потому что posts/myFile не та же строка, что и myFile,


После дальнейшего обсуждения других гиперссылок я рекомендую изменить значение по умолчанию для $pagina и расширение if логика должна быть более содержательной.

$pagina = empty($_GET['p']) ? '' : $_GET['p'];         // I changed 'home' to ''

if ($post != '' || ($post == '' && $pagina != '')) {   // I changed the logic
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector