gpt4 book ai didi

php - 重复错误显示错误函数php

转载 作者:行者123 更新时间:2023-12-03 07:54:01 24 4
gpt4 key购买 nike

我的网站上有一个output_errors函数,该函数在变量中输出所有“设置”错误。

除了一件事外,它几乎完全可以正常工作。特别是对于一个错误,它将多次输出该错误(不应输出)。

它的工作方式是:如果正在注册的用户未在表单的特定部分中输入任何信息,则它需要输出(一旦)错误Fields marked with an asterisk(*) must be filled in.,以及用户遇到的任何其他错误跨越。所有这些都显示在无序列表中。

这是我创建的功能:

function output_errors($errors){
return '<ul><li>' . implode('</li><li>', $errors) . '</li></ul>';
}

这是我指定何时输出错误的代码:
$required = array('fname', 'username', 'password', 'password_again', 'email');
$reqCCNo = array('ccno');

// validation

foreach($_POST as $key=>$value){
if(empty($value) && in_array($key, $required) === true){
$errors[] = 'Fields marked with an asterisk(*) must be filled in.';
}
if(empty($value) && in_array($key, $reqCCNo) === true){
$errors[] = 'Please select a country.';
}
}

if(empty($errors)){

// credentials
if(preg_match('/[^a-z_\-0-9]/i', $fnp) || preg_match('/[^a-z_\-0-9]/i', $lnp)){
$errors[] = 'Credentials must only contain letters and numbers.';
}

// username
$result = mysqli_query($conn, "SELECT username FROM users WHERE username = '$user'");
$count = mysqli_num_rows($result);
if($count !== 0) {
$errors[] = 'That username is already taken.';
}
if(strlen($user) < 4){
$errors[] = 'Your username must be more than 4 characters long.';
}
if(strlen($user) > 16){
$errors[] = 'Your username must not be more than 16 characters long.';
}
if(preg_match('/[^a-z_\-0-9]/i', $user)){
$errors[] = 'Your username can only contain Alphanumeric characters.';
}

// email
if(filter_var($emailNex, FILTER_VALIDATE_EMAIL) === false){
$errors[] = 'That is not a valid email type.';
}
$email_result = mysqli_query($conn, "SELECT email FROM users WHERE email = '$emailNex'");
$email_count = mysqli_num_rows($email_result);
if($email_count !== 0) {
$errors[] = 'That email is already in use.';
}

// password
if(strlen($pass) < 6){
$errors[] = 'Your password must be more than 6 characters long.';
}
if($pass !== $_POST['password_again']){
$errors[] = 'Those passwords do not match!';
}

}

并且,这是我用来输出所有这些错误的代码:
if(!empty($errors)){
echo output_errors($errors);
}

假设我将所有字段都保留为空白,并且输入的用户名长度少于4个字符,这是应如何输出的:

标有星号(*)的字段必须填写。

您的用户名必须超过4个字符。

现在是这样输出的:

标有星号(*)的字段必须填写。

标有星号(*)的字段必须填写。

标有星号(*)的字段必须填写。

请选择一个国家。

您的用户名必须超过4个字符。

感谢所有帮助!

谢谢

最佳答案

问题出在您的foreach loop上。它为每个必需文件插入错误消息。

您需要在foreach循环外创建一个标志,并将其设置为true时将其设置为true,

$flag=FALSE;// set it false
foreach($_POST as $key=>$value){
if(empty($value) && in_array($key, $required) === true){
$flag=TRUE;// set true if fulfill your condition
}
}
if($flag){// set your message
$errors[] = 'Fields marked with an asterisk(*) must be filled in.';
}

它将设置您的错误消息一次而不是多次

关于php - 重复错误显示错误函数php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com