提交表单后不显示.success元素

问题描述 投票:0回答:1

提交表单时,当 $_SESSION(['success']) 为 true 时,显示属性的值不会更改为“flex”,并且表单属性的值不会更改为“none”。

我尝试在 register() 方法末尾删除对“index.php”的重定向。我尝试更改 View.php 开头的 if 语句的表示法,以检查会话是否成功

<?php
session_start();
if (isset($_SESSION['success'])) {
    $success = $_SESSION['success'];
} else {
    $success = false;
}

if (isset($_SESSION['errors'])) {
    $errors = $_SESSION['errors'];
} else {
    $errors = [];
}

$display_form = $success ? 'none' : 'flex';
$display_success = $success ? 'flex' : 'none';


unset($_SESSION['success']);
unset($_SESSION['errors']);


?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="https://use.typekit.net/elw3okv.css" />
    <link rel="stylesheet" href="./assets/css/style.css" />
    <title>Register</title>
</head>

<body>
    <form style="display: <?php echo $display_form; ?>" action="index.php?action=register" method="POST" id="add-form">
        <h2>Account erstellen</h2>
        <div class="error-wrapper">
            <div class="gender-wrapper">
                <div>
                    <input checked id="male" type="radio" value="male" name="gender">
                    <label for="male">Mann</label>
                </div>
                <div>
                    <input id="female" type="radio" value="female" name="gender">
                    <label for="female">Frau</label>
                </div>
                <div>
                    <input id="other" type="radio" value="other" name="gender">
                    <label for="other">Sonstiges</label>
                </div>
            </div>
            <?php if (!empty($errors['gender'])) : ?>
            <?php foreach ($errors['gender'] as $errorMsg) : ?>
            <small class="error-msg"><?php echo $errorMsg; ?></small>
            <?php endforeach; ?>
            <?php endif; ?>
        </div>
        <div class="error-wrapper">
            <select name="experience" id="experience">
                <option value="">--Ihr Kochniveau--</option>
                <option selected value="beginner">Küchenhilfe</option>
                <option value="intermediate">Kochlehrling</option>
                <option value="advanced">Jungkoch</option>
                <option value="professional">Küchenchef</option>
            </select>
            <?php if (!empty($errors['experience'])) : ?>
            <?php foreach ($errors['experience'] as $errorMsg) : ?>
            <small class="error-msg"><?php echo $errorMsg; ?></small>
            <?php endforeach; ?>
            <?php endif; ?>
        </div>
        <label class="error-wrapper" for="username">
            <input value="username" placeholder="Benutzername" type="text" id="username" name="username" />
            <?php if (!empty($errors['username'])) : ?>
            <?php foreach ($errors['username'] as $errorMsg) : ?>
            <small class="error-msg"><?php echo $errorMsg; ?></small>
            <?php endforeach; ?>
            <?php endif; ?>
        </label>
        <label class="error-wrapper" for="email">
            <input value="[email protected]" placeholder="Email" id="email" type="text" name="email" />
            <?php if (!empty($errors['email'])) : ?>
            <?php foreach ($errors['email'] as $errorMsg) : ?>
            <small class="error-msg"><?php echo $errorMsg; ?></small>
            <?php endforeach; ?>
            <?php endif; ?>
        </label>
        <label class="error-wrapper" for="password">
            <input value="890()=uioUIO" placeholder="Passwort" id="password" type="password" name="password" />
            <?php if (!empty($errors['password'])) : ?>
            <?php foreach ($errors['password'] as $errorMsg) : ?>
            <small class="error-msg"><?php echo $errorMsg; ?></small>
            <?php endforeach; ?>
            <?php endif; ?>
        </label>
        <div class="error-wrapper">
            <div class="tos-wrapper">
                <input checked name="tos" id="tos" type="checkbox">
                <label for="tos">Hiermit bestätige ich, dass ich die <a href="#">AGBs</a> akzeptiere.</label>
            </div>
            <?php if (!empty($errors['tos'])) : ?>
            <?php foreach ($errors['tos'] as $errorMsg) : ?>
            <small class="error-msg"><?php echo $errorMsg; ?></small>
            <?php endforeach; ?>
            <?php endif; ?>
        </div>
        <button type="submit" value="register">Registrieren</button>
    </form>
    <div class="success" style="display: <?php echo $display_success; ?>">
        <h2 class="success-msg">Ihr Account wurde erstellt!<br>Herzlich Willkommen bei</h2>
        <img class="logo" src="./assets/svg/Logo.svg" alt="Dishare">
    </div>
</body>

</html>
<?php

class RegistrationController
{
    public function __construct()
    {
        session_start();
    }

    public function register(): void
    {

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $inputs = [
                'gender' => $_POST['gender'] ?? '',
                'experience' => $_POST['experience'] ?? '',
                'username' => $_POST['username'] ?? '',
                'email' => $_POST['email'] ?? '',
                'password' => $_POST['password'] ?? '',
                'tos' => $_POST['tos'] ?? false,
            ];

            $errors = ['gender' => [], 'experience' => [], 'username' => [], 'email' => [], 'password' => [], 'tos' => []];

            foreach ($inputs as $input => $value) {
                switch ($input) {
                    case 'gender':
                        $genders = ['male', 'female', 'other'];
                        if (!isset($value)) $errors['gender'][] = 'Geschlecht ist erforderlich.';
                        if (!in_array($value, $genders)) {
                            $errors['gender'][] = 'Geschlecht muss valide sein.';
                        }
                        break;
                    case 'experience':
                        $experiences = ['beginner', 'intermediate', 'advanced', 'professional'];
                        if (empty($value)) $errors['experience'][] = 'Kochniveau ist erforderlich.';
                        if (!in_array($value, $experiences)) {
                            $errors['experience'][] = 'Kochniveau muss valide sein.';
                        }
                        break;
                    case 'username':
                        if (empty($value)) {
                            $errors['username'][] = 'Benutzername ist erforderlich.';
                        }
                        if (strlen($value) < 4) {
                            $errors['username'][] = 'Benutzername muss mindestens 4 Zeichen lang sein.';
                        }
                        if (strlen($value) > 16) {
                            $errors['username'][] = 'Benutzername darf maximal 16 Zeichen lang sein.';
                        }
                        if (str_contains($value, ' ')) {
                            $errors['username'][] = 'Benutzername darf keine Leerzeichen enthalten.';
                        }
                        break;
                    case 'email':
                        if (empty($value)) {
                            $errors['email'][] = 'Email ist erforderlich.';
                        }
                        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                            $errors['email'][] = 'Gültige Email erforderlich.';
                        }
                        break;
                    case 'password':
                        if (empty($value)) {
                            $errors['password'][] = 'Passwort ist erforderlich.';
                        }
                        if (strlen($value) < 4) {
                            $errors['password'][] = 'Passwort muss mindestens 4 Zeichen lang sein.';
                        }
                        if (strlen($value) > 16) {
                            $errors['password'][] = 'Passwort darf maximal 16 Zeichen lang sein.';
                        }
                        if (str_contains($value, ' ')) {
                            $errors['password'][] = 'Passwort darf keine Leerzeichen enthalten.';
                        }
                        if (!preg_match('/[A-Z]/', $value)) {
                            $errors['password'][] = 'Passwort muss mindestens einen Großbuchstaben enthalten.';
                        }
                        if (!preg_match('/[a-z]/', $value)) {
                            $errors['password'][] = 'Passwort muss mindestens einen Kleinbuchstaben enthalten.';
                        }
                        if (!preg_match('/[0-9]/', $value)) {
                            $errors['password'][] = 'Passwort muss mindestens eine Zahl enthalten.';
                        }
                        break;
                    case 'tos':
                        if (!$value) $errors['tos'][] = 'AGBs müssen akzeptiert werden.';
                        break;
                }
            }
            $_SESSION['errors'] = $errors;
            if (empty($errors)) {
                $_SESSION['success'] = true;
            } else {
                $_SESSION['success'] = false;
            }

            header('Location: index.php');
        }
    }

    public function show()
    {
        header('Location: RegistrationView.php');
    }
}
<?php

require_once "RegistrationController.php";

$action = isset($_GET['action']) ? $_GET['action'] : '';

$controller = new RegistrationController();

if ($action === 'register') {
    $controller->register();
    exit();
} else {
    $controller->show();
    exit();
}
php forms validation
1个回答
0
投票

$errors
不为空,因为它包含数组键。

if (empty(array_filter($errors))) {
    $_SESSION['success'] = true;
} else {
    $_SESSION['success'] = false;
}

这将返回数组键的值,因此,如果没有设置,则数组为空

© www.soinside.com 2019 - 2024. All rights reserved.