Условные выражения в PHP-коде между HTML-кодом - PullRequest
26 голосов
/ 28 сентября 2010

У меня возникла небольшая проблема с использованием условных выражений в PHP, разделенных HTML-кодом.Это тип кода, который я пытаюсь написать.Это страница профиля, и ее должен видеть только пользователь, чей профиль (я использую переменные сеанса для проверки этого):

<?php if(check if user is logged in) ?>
<display users profile in html>
<?php else ?>
<display an error>

Но это не работает.Я также попытался использовать сокращенную запись, поставив : в конце if и используя оператор endif, но это не сработало.(В более раннем проекте метод : работал для foreach и endforeach, поэтому я решил попробовать его)

Есть идеи?

Ответы [ 6 ]

61 голосов
/ 28 сентября 2010

Вы, вероятно, забыли endif синтаксиса альтернативной структуры управления :

<?php if(check if user is logged in): ?>
<display users profile in html>
<?php else: ?>
<display an error>
<?php endif; ?>

Пропуск скобок при написании невозможен.Это возможно только в том случае, если за ним следует регулярный оператор .

13 голосов
/ 28 сентября 2010

PHP имеет два стиля записи для блоков if () (и блоков в целом).

Во-первых, у вас есть многословная запись, которая включает явное указание endif; в конце if ()блок.Это выглядит так:

if(whatever):
   do something
else:
   do something else
endif;

Двоеточия в конце строк if и else важны, потому что в противном случае PHP думает, что вы используете другую нотацию (ниже).

Во-вторых, у вас есть обозначение фигурных скобок, которое похоже на код в стиле C или Perl и выглядит следующим образом:

if(whatever) {
   do something
} else {
   do something else.
}

С помощью этой записи стиля вы можете оставитьпары фигурных скобок отключаются, если ваш блок будет иметь длину только одну строку.(Лично я считаю плохой практикой оставлять их так, но многие клянутся этим, и это совершенно правильный синтаксис. Но я видел, как PHP путался из-за однострочных блоков, когда вы переключаетесь между PHP-кодоми HTML, поэтому я всегда предпочитаю использовать фигурные скобки, даже если пишу только одну строку).

Проблема в вашем случае в том, что вы смешали две нотации.Вы пытаетесь использовать многословную нотацию, но у вас нет двоеточий в строках, поэтому PHP думает, что вы имеете в виду нотацию в скобках.Но поскольку нотация фигурных скобок позволяет пропустить фигурные скобки, PHP рассматривает ваш код как допустимый синтаксис, даже если он не будет работать так, как вы планировали.

Ваше решение - привести его в порядок.так что вы определенно используете один или другой синтаксис.Либо добавьте фигурные скобки ({ и }}) в начало и конец каждого блока, как показано в моем примере, либо добавьте двоеточия и строку endif;.

Таким образом, ваш код должен выглядеть как единое целоеиз этих двух примеров:

<?php if(check if user is logged in): ?>
    <display users profile in html>
<?php else: ?>
    <display an error>
<?php endif; ?>

или ...

<?php if(check if user is logged in) { ?>
    <display users profile in html>
<?php } else { ?>
    <display an error>
<?php } ?>

Надеюсь, что поможет.

6 голосов
/ 28 сентября 2010

используйте фигурные скобки { и }.

<?php if(check if user is logged in) { ?>
<display users profile in html>
<?php } else { ?>
<display an error>
<?php } ?>
1 голос
/ 28 сентября 2010

Ваша первоначальная мысль была правильной. Есть два способа сделать это, согласно PHP документации :

<?php if($loggedin): ?> 
<p>User is logged in.</p>
<?php else: ?>
<p>User is not logged in.</p>
<?php endif; ?>

Или:

<?php if($loggedin){ ?> 
<p>User is logged in.</p>
<?php }else{ ?>
<p>User is not logged in.</p>
<?php } ?>
0 голосов
/ 28 сентября 2010

используйте скобки, потому что для интерпретатора php это занимает несколько строк

<?php if(check if user is logged in)  { ?>
<display users profile in html>
<?php } else { ?>
<display an error>
<?php } // else ?>
0 голосов
/ 28 сентября 2010

Попробуйте заключить в скобки для разделения условий.

<?php if(check if user is logged in) { ?>
<display users profile in html>
<?php } else { ?>
<display an error>
<?php } ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...