0

我有以下代码:

switch ($page)
{
default: 
    $page = 'error';

    // header
    require_once 'pages/header.php';

    // content
    require_once 'pages/error.php';
    break;

case 'index':
case 'login':
case 'register':
case 'profile':
    // header
    require_once 'pages/header.php';

    // content
    if (file_exists('pages/' . $page . '.php')) require_once 'pages/' . $page . '.php';


    break;

}

/*
* Footer
*/
require_once 'pages/footer.php';

现在让我们举个例子,将以下代码应用到 header.php 中:

if ($page == 'profile'):
include 'members/core/init.php';
if(isset($_GET['username']) && empty($_GET['username']) === false) {

$username   = htmlentities($_GET['username']);
if ($users->user_exists($username) === false) {
    header('Location:index.php');
    die();
}else{
    $profile_data   = array();
    $user_id        = $users->fetch_info('id', 'username', $username);
    $profile_data   = $users->userdata($user_id);
} 
endif;

以下是footer.php:

if ($page == 'profile'):
}else{
header('Location: index.php');
}
endif;

网站结构如下:

索引.php

(文件夹)

=

头文件.php

索引.php

页脚.php

配置文件.php

但是问题是 header.php 和 footer.php ,似乎没有相互连接,因为我收到以下错误:

解析语法错误,T_ENDIF

如何更改代码以将 header.php 与 footer.php 建立连接?

干杯!

4

3 回答 3

3

PHP 中有两种语法用于 IF - THEN - ELSE。一个是if (condition) :…… endif;另一种是if (condition) { } else { }。不要混合这些。如果您使用冒号:and endif;请不要使用花括号{ }如果您使用花括号(推荐!),请不要使用冒号和 endif。

在您的switch陈述中,我建议您将 thedefault放在最后。

于 2013-11-11T05:45:33.540 回答
1

正如其他人指出的那样,您正在混合if() { ... }and if(): endif;,这是令人困惑的事情。两者之间没有实际区别,但它们必须成对匹配 - 你不能写if ( test_something() ) { do_something(); endif;这在控制结构的替代语法下的手册中有记录:

注意:不支持在同一控制块中混合语法。

另一件需要注意的是,包含的每个 PHP 文件都必须有自己的有效语法 - PHP 不会将所有代码粘在一起然后解析它 - 所以你不能在一个文件中打开一个if语句然后在另一个文件中关闭它. (我实际上找不到很好的手册参考;如果有人知道,请在评论中告诉我,或在此处进行编辑。)

如果在打开if语句或类似块时总是进一步缩进,代码的结构通常会变得更加清晰。如果我们对您的代码执行此操作,并删除其他所有内容,我们就剩下这个;请参阅我添加的评论以了解哪里出错了:

// header.php
    if ($page == 'profile'):

        if(isset($_GET['username']) && empty($_GET['username']) === false) {

            if ($users->user_exists($username) === false) {
            }else{
            } 

        // Closing with endif, but opened with {
        endif;

   // unclosed if statement at end of file

// footer.php:

    if ($page == 'profile'):

    // closing with } but opened with :
    }else{
    }

// stray endif, presumably intended to match the if: at the top of header.php
endif;
于 2013-11-11T21:51:45.907 回答
0

将您的默认语句放在所有特定案例语句之后。否则将执行默认语句块并忽略其他情况

    switch ($page)
    {


    case 'index':
    case 'login':
    case 'register':
    case 'profile':
        // header
        require_once 'pages/header.php';

        // content
        if (file_exists('pages/' . $page . '.php')) require_once 'pages/' . $page . '.php';


        break;
    default: 
        $page = 'error';

        // header
        require_once 'pages/header.php';

        // content
        require_once 'pages/error.php';
        break;

    }

编辑:

endif;php中没有声明

抱歉,我学到了一些东西...谢谢:)

于 2013-11-11T05:43:10.687 回答