Booleans не работает правильно

0

Программирование функции, чтобы узнать, является ли пользователь "активным" или нет.

function user_active($username) {
$username = sanitize($username);
$query = mysqli_query($_POST['x'], "SELECT * FROM users");
$row = mysqli_fetch_array($query);

if ($row['username'] === $username and $row['active'] === 1) {

    return true;
    } else {
    return false;

           }
    }

а потом....

if (user_active($username) === false) {
    $errors[] = 'You have not activated your account. Please check your
    email to activate your account.';

Он работает только тогда, когда я тестирую $ username, но когда я включаю $ row ['active'] === 1, он перестает работать.

Теги:
mysqli

2 ответа

1

=== проверяет идентичное совпадение, что означает

$x === 1 

проверит, является ли $x целым числом со значением 1.

== проверяет равенство только в значении, поэтому

$x == 1

будет проверять, имеет ли значение $x значение 1, будь то строка или целое число или что-то еще, как логическое значение true.

Попробуйте изменить свое выражение на

$row['active'] == 1

или, если вы знаете, что ваша переменная является строкой,

$row['active'] === '1'

Справка:

$ a == $ b.... Equal.... TRUE, если $ a равно $ b после манипуляции с типом.

$ a === $ b.... Идентично.... ИСТИНА, если $ a равно $ b, и они одного типа.

http://php.net/manual/en/language.operators.comparison.php

  • 0
    Попробовал это, затем переключил значение active в таблице с 1 на 0, и это все еще позволило мне войти в систему
  • 0
    var_dump($row['active']) . Какое значение и тип?
Показать ещё 2 комментария
0

Попробуй это

Различие между == и === равно '===' проверяет равенство между левой и правой сторонами с типом данных при сравнении с использованием '===', если тип данных не равен, а затем возвращает false.

function user_active($username) {
$username = sanitize($username);
$query = mysqli_query($_POST['x'], "SELECT * FROM users");
$row = mysqli_fetch_array($query);

if ($row['username'] === $username and $row['active'] == 1) {

    return true;
    } else {
    return false;

           }
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню