Вывод текста до нажатия на кнопку(php html)

Совсем недавно познакомился с методами get и post, решил создать что то вроде формы регистрации, чтобы после заполнения полей и нажатия на кнопку выводилось сообщение "Данные сохранены", но вместо этого, сразу выполняется блок else(а когда его нету, выполняется блок if) Подскажите пожалуйста, в чем дело

<?php
$name = $_POST['$name'];
$login = $_POST['$login'];
$pass = $_POST['$password'];
if(isset($_POST['send']) && ( !empty($name)  && !empty($login) && !empty($pass))){
    echo 'Данные сохранены';
}
else{
    echo 'Заполните все поля';
}
?>
<form action="registration.php" method = 'post'>
    <label>
        Введите имя <input type = 'text' name = 'name' ><br><br>
        Введите логин <input type= "text" name = 'login'><br><br>
        Введите пароль <input type ='password' name = 'password'><br><br>
        <input type="submit" name = 'send'>
    </label>
</form>

Ответы (1 шт):

Автор решения: Максим Н Епихин

Проблема кроется в том, что в $_POST вы пишете в качестве ключа $name. По сути, в самом $_POST нет такого ключа, но есть ключ name, который как раз приходит в закроме из формы: <input type = 'text' name = 'name' >.

Те названия, которые записаны в name='...' будут аналогично находится в $_POST или других вариациях.

Ваш код должен выглядеть примерно так:

<?php if(array_key_exists('send', $_POST)): ?>
    <?php
        $name = trim($_POST['name']);
        $login = trim($_POST['login']);
        $pass = trim($_POST['password']);
        $dataIsFull = !empty($name) && !empty($login) && !empty($pass);
    ?>
    <?php if($dataIsFull): ?>
        <p>Данные сохранены</p>
    <?php else: ?>
        <p>Заполните все поля</p>
    <?php endif; ?>
<?php else: ?>
    <form action="registration.php" method = 'post'>
            <label for'name-input'>Введите имя </label>
        <input type = 'text' name = 'name' >
        <br><br>
            
        <label for'login-input'>Введите логин </label>
        <input type= "text" name = 'login'>
        <br><br>
        
            <label for'password-input'>Введите пароль </label>
        <input type ='password' name = 'password'>
        <br><br>        

        <input type="submit" name = 'send'>
    </form>
<?php endif; ?>

Здесь я внес небольшие корректировки:

  1. Лучше всего создать отдельную переменную $dataIsFull, которая будет хранить результат условия всех проверок на полноту данных
  2. Конструкция if(...): else: endif; полезная для разграничения кода.
→ Ссылка