#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 если это ответило на ваш вопрос, не могли бы вы, пожалуйста, принять это как ответ.