2013-11-11 6 views
0

У меня есть следующий код:PHP переключатель случай Подключается

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; 

И следующее, в сноске. PHP:

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

структура сайта это следующим образом:

index.php

страницы (Папка)

=

header.php

index.php

footer.php

profile.php

Но проблема его header.php и footer.php, которым, кажется, не установить соединение друг с другом, Потому что я получаю следующее сообщение об ошибке: ошибка синтаксиса

Синтаксическая, T_ENDIF

Как может я изменить код для подключения к header.php с помощью footer.php?

Cheers!

ответ

1

Как указывали другие, вы смешиваете if() { ... } и if(): endif;, что путает вещи.Там нет никакой фактической разницы между ними, но они должны совпасть в парах - вы не можете писать if (test_something()) { do_something(); endif; Это описано в руководстве под Alternative syntax for control structures:

Note: Mixing syntaxes in the same control block is not supported.

Другая вещь, следует отметить, что каждый 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; 
+0

Огромное спасибо моему другу .. Что это ответ на вопрос .. Тай так много. Ура! –

0

Поставьте инструкцию по умолчанию после всего конкретного оператора case. Другие мудрый блок оператора по умолчанию будет выполняться и в других случаях игнорируются

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; 

    } 

Edit:

Там нет endif; заявления в PHP

К сожалению, я узнал Somthing ... Спасибо :)

+0

я получаю ту же ошибку: Синтаксическая ошибка: синтаксическая ошибка, неожиданный T_ENDIF в заголовке .. Ty для ваших интересов –

+0

Там нет ENDIF; заявление в PHP , Просто используйте If (condition) {// statmentblock1} else if (condition2) {// statementblock2} else {// statementblock3} – Damodaran

+1

@Damodaran [Да, есть.] (Http://php.net/manual/en/ control-structures.alternative-syntax.php) –

3

В PHP есть два синтаксиса для IF - THEN - ELSE. Один из них - if (condition) : ... endif;. Другой - if (condition) { } else { }. Не смешивайте их. Если вы используете двоеточие : и endif;, не использовать фигурные скобки { }. Если вы используете фигурные скобки (рекомендуется!), не использование двоеточие и endif.

В своем заявлении switch, я рекомендую вам положить default в конец.

+0

Спасибо за ваш ответ, но как я могу отредактировать код? –

+0

Я рекомендую Notepad ++, это здорово. (Если вам нужен еще один ответ, пожалуйста, будьте более конкретным. Я не здесь, чтобы написать код для вас.) –

+0

Мне жаль, но мне очень нужна помощь для этой части кода .. Я новичок в php, поэтому я вам нужна помощь от таких опытных людей, как вы. Вы говорите ** Есть два синтаксиса в PHP для IF - THEN - ELSE. Одним из них является (условие): ... endif ;. Другой - если (условие) {} else {}. Не смешивайте их. Если вы используете двоеточие: и endif;, не используйте фигурные скобки {}. Если вы используете фигурные скобки (рекомендуется!), Не используйте двоеточие и endif. В вашем операторе switch значение по умолчанию должно быть последним. **, но я действительно не знаю, как редактировать код. Спасибо, что поняли меня .. Привет! –

Смежные вопросы