Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP If/Elseif语句工作不正常_Php - Fatal编程技术网

PHP If/Elseif语句工作不正常

PHP If/Elseif语句工作不正常,php,Php,我有一个简单的if语句,可以在本地机器上运行,但当我把它上传到tom ypaid站点时,我的主页上出现了一个错误 错误: Warning: include(./pages/.php) [function.include]: failed to open stream: No such file or directory in /home/a5410474/public_html/index.php on line 33 Warning: include() [function.include]:

我有一个简单的if语句,可以在本地机器上运行,但当我把它上传到tom ypaid站点时,我的主页上出现了一个错误

错误:

Warning: include(./pages/.php) [function.include]: failed to open stream: No such file or directory in /home/a5410474/public_html/index.php on line 33
Warning: include() [function.include]: Failed opening './pages/.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/a5410474/public_html/index.php on line 33
守则:

<?php
    if (isset($_GET['p']) && $_GET['p'] != NULL || $_GET['p'] != '') {
        $p = mysql_real_escape_string($_GET['p']);
    }elseif ($_GET['p'] == '' || $_GET['p'] == NULL){
        $p = 'home';
    }
include("./pages/".$p.".php");
?>

在这里,你需要的不是OR,而是将下半部分用括号括起来

if (isset($_GET['p']) && $_GET['p'] != NULL || $_GET['p'] != '') {

// should be
if (isset($_GET['p']) && ($_GET['p'] != NULL && $_GET['p'] != '')) {
没有其他情况,传递到“$\u GET['p']的值可能既不满足这两个条件,也不满足这两个条件

最好是这样写,用空的


这是一种不那么冗长的写作方式:

$p = empty($_GET['p']) ? 'home' : $_GET['p'];
include("./pages/{$p}.php");
其他一些注意事项:

您不应该对要传递以包含的变量使用mysql\u real\u escape\u字符串。该函数用于准备插入SQL查询的数据

您不应该包含基于通过查询字符串传递的变量或任何类型的用户输入的文件。有人可以用它读取服务器上的系统文件,然后控制整个计算机

您也可以尝试以下方法:

<?php
    $p = 'home';
    if (!empty($_GET['p']))
        $p = $_GET['p'];       
    include("./pages/".$p.".php")
?>

您应该更加了解目录遍历,清理用户输入,并确保文件在那里。回复:您的错误:

<?php
if (isset($_GET['p'])) {
    $p = preg_replace('/[^a-zA-Z0-9_]/s', '', $_GET['p']);
} else {
    $p = 'home';
}
$path = "./pages/" . $p . ".php";

if (file_exists($path) === true) {
    include $path;
} else {
    include './pages/notfound.php';
}

您不需要同时使用isset和empty,因为empty调用isset本身。您需要筛选$p变量,以确保它不包含类似../../../../../usr/share/php/something的内容。你可能只想要字母。更好的方法是保留一个实际存在于./pages中的有效文件数组,并对照该数组检查输入值。我尝试了这个方法,但不知何故它放弃了我的布局。。。在您的页面中,例如:home.php是否包含原始html或与任何html相呼应的php,或者是否将输出包含在变量中?
<?php
if (isset($_GET['p'])) {
    $p = preg_replace('/[^a-zA-Z0-9_]/s', '', $_GET['p']);
} else {
    $p = 'home';
}
$path = "./pages/" . $p . ".php";

if (file_exists($path) === true) {
    include $path;
} else {
    include './pages/notfound.php';
}