如何将错误数组从函数返回到表单页



我创建了一个函数来在应用程序中注册用户。它处理表单。验证输入等。但我在表单中显示错误时遇到问题。我无法将$errors数组返回到表单以显示错误。有人能帮忙吗?请

表单

<?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
}
}
}

您正在返回错误:

return $errors;

然而,页面上的代码忽略了这个结果:

<?php register_user(); ?>

将结果设置为可以使用的变量:

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

然后您稍后已经尝试使用:

<?php echo $errors['email'] ?? ''; ?>

registerUser()分配给变量:

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

您还应该检查error键是否存在于errors数组中。

最新更新