这是按钮
<a href="index.php?p=contact">contact<a>
这是php脚本:
<?php
$p = isset($_GET['p']);
if($p == "artist")
{
include 'artist.php';
}
if($p == "contact")
{
include 'contact.php';
}
if($p == "releases")
{
include 'releases.php';
}
if($p == "downloads")
{
include 'downloads.php';
}
else
{
include 'home.php';
}
?>
因此,当我点击按钮时,我的脚本应该包含contact.php
,但它不包括contact.php
,而是包含所有php文件。 (这也发生在其他按钮上)。
答案 0 :(得分:3)
现在,您的$p
变量等于true
(这是isset返回的内容。)
将$p = isset($_GET['p']);
更改为$p = $_GET['p'];
,您就会很好
更好:
$p = isset($_GET['p']) ? $_GET['p'] : false;
在这种情况下,您可以防止p
为空
修改强>
您的代码还有另一个问题 - 最后else
声明。 $p
与downloads
不同时始终为真。因此,要么将每个if
更改为else if
,请执行以下操作:
if($p == 'artist')
{
include 'artist.php';
}
else if($p == 'contact')
{
include 'contact.php';
}
(...)
else
{
include 'home.php';
}
或将其更改为switch
声明:
switch($p)
{
case 'artist':
include 'artist.php';
break;
(...)
default:
include 'home.php';
}
答案 1 :(得分:1)
isset($ _ GET [&#39; p&#39;])返回true或false,因此将$ p与某些字符串进行比较的代码将始终返回true并在if块中运行代码。
将 $ p = isset($ _ GET [&#39; p&#39;]) 改为 $ p = $ _GET [ &#39; p&#39] 强>
答案 2 :(得分:0)
为了使这个(更多)可重用,你应该稍微改变你的脚本。创建一个简单的白名单,检查它是否允许参数,如果是,直接包含$ _GET ['p']的值:
$allowed = false;
if (isset($_GET['p']))
{
switch $_GET['p'] {
case 'contact':
$allowed = true;
break;
case 'artist':
$allowed = true;
break;
// and so on for all your IFs
}
if ($allowed === true) {
include $_GET['p'].'.php'
}
else
{
die('illegal parameter found')
}
}