Я использую условие и переключатель для определения некоторых значений по умолчанию для нескольких переменных, но я не получаю ожидаемых результатов.
Когда ссылка <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>
Когда вы загружаете 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
Других решений пока нет …