我是stackoverflow和php的新手,我正在尝试正确地编写代码。我想做的是消除index.php以外的页面的显示,但仍然通过使用地址栏来包含它们。例如,我正在尝试编写一个登录脚本,该脚本包含一个login.php文件,但处理表单的所有帖子信息并通过index.php文件进行检查。
我正在尝试创建一个函数,以便在地址栏调用时只包含特定的页面。那么表单的操作将是对index.php?act=login-我想$_GET the act(login)并包含login.php,而不允许用户包含任何其他会带来安全风险的文件。
这是我的代码:
function getContent() {
$pages = array('login','page1');
if(isset($_GET['act']) && $_GET['act'] == $pages) {
include($_GET['act'] . '.php');
} elseif (!isset($_GET['act'])) {
echo 'INDEX PAGE';
}
}
getContent();
我哪里错了?当index.php?act=已设置登录名。文本"INDEX PAGE"显示得很好,但没有设置动作。
这行代码是您的问题:
if(isset($_GET['act']) && $_GET['act'] == $pages) {
您需要将其更改为这样(因为您正在检查页面数组中是否存在act
的值):
if(isset($_GET['act']) && in_array($_GET['act'], $pages)) {
不过,您可能希望用其他标准来替换elseif
。因为如果设置了$_GET['act']
,但不在页面数组中,则不会执行elseif。
此外,我强烈建议您使用像Limonade这样的微框架,一旦您对PHP更加熟悉,它将为您处理此问题(更加安全)。
您的if
不正确。你想要这样的东西:
if(isset($_GET['act']) && in_array($_GET['act'], $pages)) {
include($_GET['act'] . '.php');
}
您可以将其更改为in_array():
if(isset($_GET['act']) && in_array($_GET['act'], $pages)) {
include('path-to-file/'.$_GET['act'] . '.php');
}