Проверка совпадения двух переменных

#php #variables

#php #переменные

Вопрос:

Я пытаюсь выдать сообщение, если две переменные совпадают на основе идентификатора пользователя, вошедшего в систему, и идентификатора страницы. Я пытался часами и, похоже, не могу добиться окончательного результата.

Я пробовал использовать == в любом случае, но я сохраняю «OK» независимо от того, на какой странице я нахожусь.

Что работает: в приведенном ниже коде $userNowId дает мне идентификатор пользователя текущего сеанса. $ProfileID дает мне идентификатор конкретного идентификатора страницы. ЭТО РАБОТАЕТ.

Оба эти значения отображаются на странице корректно. Например, если я вошел в систему с идентификатором пользователя 1 и ввел url profile.php?user=65, чтобы перейти на их страницу, мой идентификатор базы данных (1) И идентификатор url (65) будут отображаться так, как должны.

Проблема: теперь я хотел бы сделать оператор if, который говорит что-то вроде, если эти два значения не совпадают, эхо-сообщение «не ваш профиль». Не уверен, поможет ли это, но я написал это на ООП PHP.

Вот что у меня есть на данный момент.

 <?php
    require_once 'core/init.php';

    $userNow = new user();
    $userNow->LoggedInUser();

    if (!$username = input::get('user')) {
        redirect::to('index.php');
    } else {
        $user = new user($username);
        if (!$user->exists()) {
            redirect::to(404);
        } else {
            $data = $user->data();
            $userNowId = ($_SESSION amp;amp; $data->id);
            $profileID = ($data->id);

            if ($userNowId == $profileID) {
                echo "Your profile";
            } else {
                echo "Not your profile!";
            }
  

Комментарии:

1. Это дает мне идентификатор пользователя текущего сеанса в базе данных с помощью функции.

2. Я так не думаю. Это логическое выражение.

3. Я прочитал этот код несколько раз и до сих пор не могу понять, что он должен делать. Почему существует 2 user объекта? Почему ты это делаешь !$username = input::get('user') ? Почему $userNowId это логическое значение?

4. Когда я повторяю функцию, она, кажется, работает. Может быть, я что-то упускаю! И да, $username определен в init.php .

5. @tim Вместо этого сделайте var_dump ideone.com/Kp70lD

Ответ №1:

Проблема в том, как вы устанавливаете $userNowId

 $userNowId = ($_SESSION amp;amp; $data->id);
  

Это логическая операция, которая устанавливает значение в логическое значение true или false, а не в идентификатор. Я подозреваю, что на самом деле вы хотели чего-то подобного:

 $userNowId = array_key_exists('id', $_SESSION) ? (int)$_SESSION['id'] : null;
$profileID = (int)$data->id;

if ($userNowId === $profileID) {
  echo "Your profile";
} else {
  echo "Not your profile!";
}
  

Обратите внимание, что я использовал строгое сравнение типов ( === ) null , чтобы предотвратить преобразование в a 0 , что было бы угрозой безопасности. Я также преобразовал идентификатор в целое число, чтобы строгая проверка типа работала, когда PHP преобразует int’ы базы данных в строки, как это происходит.

Комментарии:

1. Спасибо! На самом деле я закончил тем, что использовал going с чем-то немного другим, и это прекрасно работает ! …. if($_SESSION[‘user’] == $ProfileID){ echo $_SESSION[«user»]; } else { echo «Не ваш профиль!»; }

2. @TjOlmsy если это ответило на ваш вопрос, не могли бы вы, пожалуйста, принять это как ответ.