@denford-art

Почему не может определить данные переменной из БД?

Здравствуйте, сделал простую форму регистрации авторизации.
После выхода из системы, почему то выводит ошибку
Notice: Undefined index: user in /opt/lampp/htdocs/registration/index.php on line 17

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
          integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
    <link rel="stylesheet" href="css/style.css">
    <title>Sign up form</title>
</head>
<body>

<div class="container mt-5">
    <?php
    if ($_COOKIE['user'] == ''):
    ?>
    <div class="row">
        <div class="col">
            <h1>SIGN UP</h1>
            <form action="check.php" method="post">
                <input type="text" class="form-control" name="login" id="login" placeholder="Login"><br/>
                <input type="text" class="form-control" name="name" id="name" placeholder="Name"><br/>
                <input type="password" class="form-control" name="pass" id="pass" placeholder="Password"><br/>
                <button class="btn btn-success" type="submit">Sign up</button>
            </form>
        </div>
        <div class="col">
            <h1>LOG IN</h1>
            <form action="auth.php" method="post">
                <input type="text" class="form-control" name="login" id="login" placeholder="Login"><br/>
                <input type="password" class="form-control" name="pass" id="pass" placeholder="Password"><br/>
                <button class="btn btn-success" type="submit">Log in</button>
            </form>
        </div>
    </div>
</div>
<?php else: ?>

    <div class="container">
        <p>Hello, <?= $_COOKIE['user'] ?>. To exit click the button</p>
        <a href="exit.php" class="btn btn-warning mt-2">Sign out</a>
    </div>

<?php endif; ?>

</body>
</html>


Из системы выхожу так
<?php
setcookie('user', $user['name'], time() - 3600 * 24, "");
header('Location: index.php');
  • Вопрос задан
  • 64 просмотра
Решения вопроса 2
@alexalexes
if ($_COOKIE['user'] == '')
Потому что, прощупывать наличие элемента в массиве нужно либо так:
isset($_COOKIE['user'])
либо
array_key_exists('user', $_COOKIE)
Еще инвертируйте логику if авторизации, так как логическое выражение для авторизованного состояния легче читать и отлаживать в сторону истина, на else может сработать что-то еще, что не предполагали что попадет под ложное условие.
<?php
    if (isset($_COOKIE['user']) && $_COOKIE['user'] != ''):
    ?>

<div class="container">
        <p>Hello, <?= $_COOKIE['user'] ?>. To exit click the button</p>
        <a href="exit.php" class="btn btn-warning mt-2">Sign out</a>
    </div>
   
<?php else: ?>
 <div class="row">
        <div class="col">
            <h1>SIGN UP</h1>
            <form action="check.php" method="post">
                <input type="text" class="form-control" name="login" id="login" placeholder="Login"><br/>
                <input type="text" class="form-control" name="name" id="name" placeholder="Name"><br/>
                <input type="password" class="form-control" name="pass" id="pass" placeholder="Password"><br/>
                <button class="btn btn-success" type="submit">Sign up</button>
            </form>
        </div>
        <div class="col">
            <h1>LOG IN</h1>
            <form action="auth.php" method="post">
                <input type="text" class="form-control" name="login" id="login" placeholder="Login"><br/>
                <input type="password" class="form-control" name="pass" id="pass" placeholder="Password"><br/>
                <button class="btn btn-success" type="submit">Log in</button>
            </form>
        </div>
    </div>
</div>
<?php endif; ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BXVoral
@BXVoral
Веб-разработка
1. Это не ошибка, это предупреждение. Гласит оно о том, что массив не содержит значение с ключом user. Что вполне естественно - до того как вы поставили куку с таким именем, это предупреждение и будет появляться. Т.е. доработайте скрипт например так:
if (!isset($_COOKIE['user']) || $_COOKIE['user'] === ''))

т.е. условие становится "если кука не существует или пустая". (если, конечно, вообще возможно у вас пустое значение. Т.к. код который у вас отвечает за выход удалит куку, а не сделает ее равной пустой строке.
2. Ваш вопрос ни как не связан с заголовком. При чем тут БД?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы