Если запрос не нашел соответствия - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть веб-страница, которая создает файл cookie на компьютере клиента с именем «token» со случайным значением внутри, когда он входит в систему. Этот файл cookie создается с отдельной страницы входа в систему и здесь не включается, поскольку файл cookie уже создается безпроблемы.

Затем я сопоставляю значение маркера cookie с компьютера клиента со значением токена, имеющимся в базе данных SQLite3.Если оба совпадения совпадают, я выбираю адрес электронной почты клиента из той же строки, что и токен.

В настоящее время этот метод работает, если значение маркера cookie и токена базы данных соответствуют ожидаемым.Но у меня возникли проблемы с определением способа, если оба токена не совпадают, поэтому я не смогу показать их по электронной почте.Чтобы быть точным, у меня есть проблема вокруг;

if(!$email)

области кода, потому что я не знаю, как проверить, нет ли электронной почты для возврата.

Вот весь код, которыйПожалуйста, обратите внимание, что такие переменные, как $url и $db, уже переданы из внешних файлов *.php, которые я включил.

<?php include 'root.php';?>
<?php include ''.$root.'/database.php';?>

<?php

$token=$_COOKIE["token"];   
$auth = $db->query("select email, token from users where token='$token'");

if(!isset($token)){
    header('location: '.$url.'/login');
}
else {
    while ($row = $auth->fetchArray()){
        $email=$row['email'];
        if(!$email){
            echo "Didn't find any emails matching with the current cookie.";
        }
    }
}
?>

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Если ваш метод fetchArray() возвращает результат, $row всегда будет истинным значением.Вместо этого вы можете проверить, является ли значение $row достоверным, так как запрос, который не дал результата, выдает fetchArray() return false.Вы также проверяете, установлена ​​ли переменная , которую вы ранее определили .Вам следует проверить, установлен ли вместо этого файл cookie, и exit после вызова header().Вам также не нужно входить и выходить из PHP таким образом, если только вы не делаете что-то, что не разбирается в PHP-

<?php 
include 'root.php';
include $root.'/database.php';

if (!isset($_COOKIE["token"])) {
    header('location: '.$url.'/login');
    exit;
}

$token = $_COOKIE["token"];   
$auth = $db->query("SELECT email, token as cnt FROM users WHERE token='$token'");
$row = $auth->fetchArray();

if ($row) {
    // Email exists! Use $row['email'] and $row['token']
} else {
    // No rows matching the condition
}
0 голосов
/ 15 февраля 2019

Решение может быть:

$token = $_COOKIE["token"];
// Why execute a query if token is not set?
if(!isset($token)){
    header('location: '.$url.'/login');
    exit();
}

$auth = $db->query("select email, token from users where token='$token'");
// `fetchArray` fetches you row of FALSE if there are no rows.
$row = $auth->fetchArray();

if ($row) {
    $email=$row['email'];
} else {
    echo "Didn't find any emails matching with the current cookie.";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...