#php #redirect #equals #if-statement
#php #перенаправление #равно #if-оператор
Вопрос:
Я удаляю из базы данных имя страницы и помещаю в оператор this equal:
// Redirect if not there
if ($db_client === $session_client) {
require("custom.php");
} else {
require("general.php");
}
Итак, здесь $ db_client — это идентификатор клиента, сохраненный для пользовательской страницы, а $ session_client — это идентификатор в сеансе. Если он соответствует, это должно привести пользователя к custom.php и если нет, это должно привести их к general.php
По какой-то причине PHP показывает мне обе страницы. general.php сверху и custom.php в нижней части general.php
Я использую это на общей странице:
// If not page (path) is stored in db than show general
if (empty($pagename)) {
require_once("general.php");
} else {
require_once("$pagename");
}
Есть способ это исправить?
Комментарии:
1. Не могли бы вы объяснить немного больше из того, что здесь происходит? Что вы подразумеваете под «перенаправлением»?
2. @AAA может ли этот код быть вызван дважды чем-то другим? также вы можете захотеть использовать
require_once()
, чтобы при повторном вызове этого кода у вас не отображались два одинаковых объекта.3. перенаправление @compeek означает повторение содержимого страницы. игнорируйте это //комментарий
4. @middaparka я думал, ты должен использовать === versus ==
5. @patrick да, кажется, потому что он делает это дважды, один раз, чтобы убедиться, что нет пустого пути, а второй для аутентификации владельца страницы. есть ли способ, которым я могу интегрировать их в один?
Ответ №1:
Проблема может быть в другом месте, чем вы думаете. Тем более, что мы знаем, что general.php может быть включен в нескольких местах.
Итак, вам нужно получить фактический порядок включений, чтобы найти проблему.
Вариант A. Установите модуль xdebug, и вы сможете получать журнал каждого вызова.
Вариант B проще. Пишите echo 'including-', <N>;
перед каждым оператором require. <N>
это число, уникальное для каждого использования. Таким образом, вы сможете узнать, какой оператор вызвал нежелательное включение.
КСТАТИ. Разве require_once($pagename);
это не лучше require_once("$pagename");
, чем? И убедитесь, что $pagename
переменная защищена от атак по относительному пути.
Комментарии:
1. вместо использования чисел используйте макросы
__LINE__
и__FILE__
для этого типа отладки, в случае классов я использую__METHOD__
и__FUNCTION__
для процедурного кода