Как вернуть массив ошибок из функции на страницу формы - PullRequest
0 голосов
/ 28 февраля 2020

Я создал функцию для регистрации пользователей в моем приложении. который обрабатывает форму. проверить входные данные et c. но у меня проблема с отображением ошибок в форме. Я не могу вернуть массив ошибок в форму для отображения ошибок. кто-то может помочь с этим? пожалуйста!

Форма

  <?php register_user(); ?>
  <form action="signup.php" method="post">
    <div class="form-group mb-3">
      <input type="email" name="email" value="<?php if (isset($email)) echo $email; ?>" placeholder="Enter your email" class="form-control form-control-lg <?php echo isset($errors['email']) ? 'is-invalid' : '' ?>" required>
      <div class="invalid-feedback"><?php echo $errors['email'] ?? ''; ?></div>
    </div>
    <div class="form-group mb-3">
      <input type="text" name="username" value="<?php if (isset($username)) echo $username; ?>" placeholder="Choose a Username" maxlength="15" class="form-control form-control-lg <?php echo isset($errors['username']) ? 'is-invalid' : '' ?>" required>
      <div class="invalid-feedback"><?php echo $errors['username'] ?? ''; ?></div>
    </div>              
    <div class="form-group mb-3">
      <input type="password" name="password" placeholder="Choose a Password" class="form-control form-control-lg <?php echo isset($errors['password']) ? 'is-invalid' : '' ?>" required>
      <div class="invalid-feedback"><?php echo $errors['password'] ?? ''; ?></div>
    </div>
    <div class="form-group mb-3">
      <?php $countries = find_all('countries'); ?>
      <select name="country" class="form-control" required>
        <option value="">Select a country...</option>
        <?php while($country = mysqli_fetch_assoc($countries)) { ?>                  
        <option value="<?php echo h($country['country_id']); ?>"><?php echo h($country['name']); ?></option>
        <?php } ?>
      </select>
      <div class="invalid-feedback"><?php echo $errors['country'] ?? ''; ?></div>
    </div>
    <p class="splash-description mt-3">By joining, you agree to Cointerr's Terms of Service.</p>
    <input type="submit" value="Join" name="signup-submit" class="btn btn-block btn-primary">
  </form>

Регистрация функции

function register_user() {    
    if (is_post_request() && isset($_POST['signup-submit'])) {
        if(isset($_POST['email'])) $email = $_POST['email'];
        if(isset($_POST['username'])) $username = $_POST['username'];
        if(isset($_POST['password'])) $password = $_POST['password'];
        if(isset($_POST['country'])) $country = $_POST['country'];
        // validate
        if (is_blank($email) || !has_valid_email_format($email)) $errors['email'] = 'Looks like this email is incomplete.'; 
        if (is_blank($username)) $errors['username'] = 'Username must begin with a letter and can include numbers and underscores.';
        if (!has_length_exactly($username, 6)) $errors['username'] = 'Username must include at least 6 characters.';
        if (is_blank($password) || !has_length_exactly($password, 8)) $errors['password'] = 'Password must be min 8 characters.';
        if (is_blank($country)) $errors['country'] = 'Please select your country!';

        if (!empty($errors)) {
            return $errors;
        } else {
            // Register user
        }

    }
}

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы возвращаете ошибки:

return $errors;

Однако код на странице игнорирует этот результат:

<?php register_user(); ?>

Установите результат для переменной, которую вы можете использовать:

<?php $errors = register_user(); ?>

Который вы позже попытаетесь использовать:

<?php echo $errors['email'] ?? ''; ?>
0 голосов
/ 28 февраля 2020

Присвоить registerUser() переменной:

<?php $errors = registerUser(); ?>

Также следует убедиться, что ключ ошибки существует в массиве ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...