У меня есть этот код в моем html-файле, который отображается PHP:
<div>
<?php if ($SESSION.userName=='UNSET'): ?>
User is not logged in
<?php else: ?>
user is logged in: user name is: {{ @SESSION.userName }}
<?php endif; ?>
</div>
<div> test {{ @SESSION.userName }}
</div>
Приведенный выше код генерирует этот вывод:
User is not logged in user is logged in: user name is: a
test a
Очевидно, это означает, что оператор if не вычисляется.
В чем проблема и как я могу это исправить? Я новичок в PHP (только сегодня начал!)
Примечание: зарегистрированное имя пользователя
Страница отображается с помощью этой функции из файла index.php:
$f3->route(
'GET @home:/',
function ($f3) {
$f3->set('html_title', 'MyServer');
$f3->set('content', 'index.html');
echo Template::instance()->render('layout.php');
}
Ваш $SESSION должен быть $_SESSION. Так и должно быть $_SESSION['userName']
Я вижу вывод $SESSION.userName, поэтому он должен работать.
Попробуйте файл PHP только с таким содержимым: <?php phpinfo(); Должна получиться длинная страница с информацией о вашем PHP. Имеет ли это?
Ваш файл имеет расширение .html или .php?
@KIKOSoftware Да, это дало мне большой список информации, версия PHP 7.4.28. Я использую сервер, на котором я уверен, что PHP установлен и настроен.
@NigelRen Имеет расширение html.
Ну, обычно вам нужно использовать расширение php для файлов PHP.
@KIKOSoftware Это php, встроенный в html.
Я понимаю, но попробуйте изменить расширение с .html на .php и посмотрите, поможет ли это... возможно, поможет. Только файлы .php сканируются на наличие встроенного кода PHP (обычно).
@KIKOSoftware Сделал это, но без разницы.
Позвольте мне проверить, действителен ли используемый вами синтаксис, довольно неясный, в PHP 7.4.28.
@KIKOSoftware В этом документе указано, что он действителен: php.net/control-structures.alternative-синтаксис
Да, тоже только что нашел.
Извините, у меня закончились идеи. PHP работает, вы используете расширение .php, и ваш синтаксис действителен. Вы все еще можете проверить журналы PHP, чтобы увидеть, есть ли там что-нибудь, но я сомневаюсь в этом.
как проверить логи php?
<?php phpinfo();, вероятно, скажет вам, где они находятся. Это обычный текстовый файл, но расположение может варьироваться. В качестве альтернативы вы можете показать ошибки в выводе HTML.
Вы смешиваете PHP-код с каким-то языком шаблонов, понятным Template::instance()->render(). Части, с которыми работает находятся, не являются частями PHP, такими как {{ @SESSION.userName }}. Вам нужно найти правильный синтаксис для операторов if на этом языке шаблонов, а не на родном PHP.
У меня есть что-то подобное на моем сайте, но он использует if (!isset($_SESSION['username'])) {, а затем перенаправляет пользователя обратно на index.php, если он не вошел в систему.
Так что используйте <?php if ($_SESSION['username']=='UNSET'): ?>
@IMSoP Я использую библиотеку F3 для создания шаблонов и других задач.
Затем вам нужно изучить синтаксис, который он использует для операторов if, а не смешивать их с PHP.






Как вы упомянули, вы используете механизм шаблонов f3, в соответствии с его документация вы можете использовать это для своего условия:
<check if = "{{ @SESSION.userName=='UNSET' }}">
<true>
<div>User is not logged in</div>
</true>
<false>
<div> user is logged in: user name is: {{ @SESSION.userName }}</div>
</false>
</check>
Действительно ли PHP работает на ваш сервер?