我创建了两个链接,我希望页面内容能够更改。问题是URL更改但不是页面内容。
<h3>Filter Results</h3>
<p><a href="index.php?filter='Action'>Action</a></p>
<p><a href="index.php?filter='Comedy'">Comedy</a></p>
if (isset($_GET['filter']) == 'Action') {
echo 'Action';
}
else if (isset($_GET['filter']) =='Comedy') {
echo 'Comedy';
}
它始终输出第一个链接信息“Action”。
答案 0 :(得分:7)
您的链接有问题:
<p><a href="index.php?filter=Action">Action</a></p>
<p><a href="index.php?filter=Comedy">Comedy</a></p>
<!-- ^ ^ No single quotes (' ') -->
Yogesh Suthar pointed it out first
此外, isset()
会返回一个布尔值(true
或false
;根据变量是否已设置 )。您将布尔值与字符串 a string will always be converted into TRUE
进行比较(除非字符串为“false”或类似),因此基本上,如果设置了变量,则第一个条件将始终匹配。
你想要
if (isset($_GET["filter"]) && $_GET["filter"] === "Action")
请注意===
的使用,这将确保变量完全符合您的想法,而不是某种其他类型的变量。
如果有多个可能的过滤器,请检查变量是否存在一次,并使用switch/case
块来确定它们中的哪一个:
if(isset($_GET['filter'])) {
switch($_GET['filter']) {
case 'Action':
echo 'Action';
break;
case 'Comedy':
echo 'Comedy';
break;
}
}
答案 1 :(得分:5)
函数isset
仅检查变量是否存在!它不会返回它的价值!试试这个:
<h3>Filter Results</h3>
<p><a href="index.php?filter=Action">Action</a></p>
<p><a href="index.php?filter=Comedy">Comedy</a></p>
if(isset($_GET['filter']) && $_GET['filter'] == 'Action'){
echo 'Action';
}
else if(isset($_GET['filter']) && $_GET['filter'] == 'Comedy') {
echo 'Comedy';
}
此外,使用switch可能会在未来更轻松:
<h3>Filter Results</h3>
<p><a href="index.php?filter=Action">Action</a></p>
<p><a href="index.php?filter=Comedy">Comedy</a></p>
if(isset($_GET['filter'])) {
switch($_GET['filter']) {
case 'Action':
echo 'Action';
break;
case 'Comedy':
echo 'Comedy';
break;
}
}
答案 2 :(得分:3)
正如@MadaraUchiha所说的关于isset
和
if(isset($_GET['filter']) == 'Action')
应该是
if(isset($_GET['filter']) && $_GET['filter'] == 'Action')
另外
<a href="index.php?filter='Action'>Action</a>
^ ^ ^ // here you started " but not ended and remove the single quotes around Action
应该是
<a href="index.php?filter=Action">Action</a>
答案 3 :(得分:3)
确保插入一个开始和结束的php标记:<?php
和?>
为了简化它,您可以通过$_GET
<h3>Filter Results</h3>
<p><a href="index.php?filter='Action'>Action</a></p>
<p><a href="index.php?filter='Comedy'>Comedy</a></p>
<?php
if(isset($_GET['filter'])){
echo $_GET['filter'];
}
?>
答案 4 :(得分:2)
函数isset
将返回true或false(它检查变量是否设置)。更改您的代码:
if(isset($_GET['filter']) && $_GET['filter'] == 'Action') {
答案 5 :(得分:1)
你的if条件不正确:
if(isset($_GET['filter']) && $_GET['filter'] == 'Action'){
echo 'Action';
}
与else相似如果:
else if(isset($_GET['filter']) && $_GET['filter'] =='Comedy') {
当您将isset($_GET['filter'])
与值进行比较时虽然isset返回true为false,因此您需要比较$_GET['filter']
的值。
答案 6 :(得分:1)
isset
返回true
,由于'Action'
不是null
,因此评估为真。
if ((isset($_GET['filter'])) && ($_GET['filter'] == 'Action')) {
// ...
} else if ((isset($_GET['filter'])) && ($_GET['filter'] == 'Comedy')) {
// ...
}
BTW这样的代码迟早会成为维持的噩梦。
您可以改为,例如
function preventDirectoryTraversal($requestParam) {
return preg_replace("/\//", "", $requestParam);
}
// ...
if (isset($_GET['filter'])) {
$filterName = preventDirectoryTraversal($_GET['filter']);
include(FILTERS_DIR . "/" . $filterName . ".php");
}
或类似的东西。当然这可以进一步改进,但我希望你明白这一点。
答案 7 :(得分:1)
错误使用isset,check documentation,返回一个布尔值。
if (isset($_GET['filter']))
{
switch ($_GET['filter'])
{
case 'Action':
//TODO
break;
case 'Comedy':
// TODO
break;
default:
// TODO
break;
}
}
答案 8 :(得分:1)
你不必使用isset()然后比较。
$filter = $_GET['filter'];
if(isset($filter)){
if($filter == 'Action'){
echo 'Action';
}else if($filter == 'Comedy'){
echo 'Comedy';
}
}
答案 9 :(得分:0)
//isset will always return true or false
if(isset($_GET['filter'])){
if($_GET['filter']=='Action')
{
echo 'Action';
}elseif($_GET['filter']=='Comedy'){
echo 'Comedy';
}
}