我正在使用条件和开关来确定一些变量的一些默认值,但是我没有得到期望的结果。
单击链接<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>
答案 0 :(得分:0)
加载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';
现在,如果要执行switch-case块,则必须:
if (empty($post)) {
更改为if (!empty($post)) {
。对于将来可能遇到的麻烦,您可能会在切换用例块中找到,请在编写每种用例时确保与$pagina
的值相同。如果不确定所使用的值是什么或正在执行的值,只需在每种情况下添加回显即可弄清。
之所以这样说,是因为posts/myFile
与myFile
是不同的字符串。
在对其他超链接进行了更多讨论之后,我建议更改$pagina
的默认值,并将if
逻辑扩展为更具包容性。
$pagina = empty($_GET['p']) ? '' : $_GET['p']; // I changed 'home' to ''
if ($post != '' || ($post == '' && $pagina != '')) { // I changed the logic