Что сделать, чтобы устранить ошибку "Неопределенный ключ массива «login» или «password»" в $_POST?

Здравствуйте! Можете помочь мне исправить ошибку "Undefined array key 'login'" и "Undefined array key 'password'" в моем коде? Вот фрагменты кода на PHP: <br/> <pre><code class="php">&lt;?php

require_once __DIR__ . '/helpers.php';

// Получение данных из формы регистрации

$login = $_POST['login'];
$password = $_POST['password'];

echo $login . '-' . $password;

// Запись данных в базу данных

$connect = getDB();

$sql = "INSERT INTO user (login,password) VALUES ('$login','$password')";

if ($connect -&gt; query(query: $sql) === TRUE) {
    echo 'Регистрация прошло успешно!';
}
else {
    echo 'Данный ползователь уже зарегистирирован';
}
?&gt;</code></pre> <br/> <br/> И HTML-код: <br/> <pre><code class="html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
    &lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&amp;display=swap" rel="stylesheet"&gt;
    

    &lt;link rel="stylesheet" href="styles/style.css"&gt;
    &lt;title&gt;Регистрация&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;main&gt;
        &lt;h2&gt;Регистрация&lt;/h2&gt;
        &lt;form action="src/registration.php"&gt;
       &lt;input type="text" placeholder="Придумайте логин" name="login"&gt;
       
       &lt;input class="pass" type="password" placeholder="Придумайте пароль" name="password"&gt;

       &lt;button type="submit"&gt;Зарегистироваться&lt;/button&gt;

       &lt;/form&gt;
  • 23 ноября 2024 г. 13:43
Ответы на вопрос 2
Ошибка "Undefined array key 'login'" и "Undefined array key 'password'" возникает, когда вы пытаетесь получить доступ к элементу массива `$_POST`, который не существует. Это может происходить по нескольким причинам.

1. **Неправильный метод формы**: Убедитесь, что вы используете правильный метод отправки формы. По умолчанию формы отправляются методом `GET`. Чтобы отправить данные методом `POST`, необходимо указать это в атрибуте `method`.

2. **Отсутствие проверки на наличие ключа в `$_POST`**: Перед доступом к элементам массива `$_POST` стоит проверить, существуют ли эти ключи.

Вот как вы можете исправить ваш код:

**Исправление HTML**:

Добавьте атрибут `method="post"` в тег `<form>`:

```html
<form action="src/registration.php" method="post">
    <input type="text" placeholder="Придумайте логин" name="login">
    <input class="pass" type="password" placeholder="Придумайте пароль" name="password">
    <button type="submit">Зарегистироваться</button>
</form>
```

**Исправление PHP**:

Перед доступом к элементам массива `$_POST` добавьте проверку, что ключи существуют:

```php
require_once __DIR__ . '/helpers.php';

// Проверка, что данные отправлены методом POST
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // Получение данных из формы регистрации
    $login = isset($_POST['login']) ? $_POST['login'] : '';
    $password = isset($_POST['password']) ? $_POST['password'] : '';
    
    if ($login === '' || $password === '') {
        echo 'Логин и пароль обязательны для заполнения.';
        exit;
    }

    echo $login . '-' . $password;

    // Запись данных в базу данных
    $connect = getDB();
    
    $sql = "INSERT INTO user (login, password) VALUES ('$login', '$password')";
    
    if ($connect->query($sql) === TRUE) {
        echo 'Регистрация прошла успешно!';
    } else {
        echo 'Данный пользователь уже зарегистрирован';
    }
}
```

В этом коде мы сначала проверяем, был ли метод запроса `POST`, а затем проверяем, существуют ли переменные `login` и `password`. Если хотя бы одна из этих переменных пустая, выводится сообщение об ошибке, и выполнение скрипта прекращается.
По умолчанию в теге <form /> используется метод GET, поэтому элементов в массиве $_POST не существует. 
В вашем случае должно быть так:
<form action="src/registration.php" method="POST" />
Похожие вопросы