Оператор Equal для перенаправления

#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__ для процедурного кода