0

你好我有以下问题:

我有一个表格,我想通过 php 检查一些输入错误。除此之外,我想显示有关错误的用户信息。

我遇到的问题是,我只喜欢显示一条消息,而不是同时显示所有消息。因此,我需要过滤来自 php 的所有错误消息,以将其限制为一条。

所以php正在寻找这个:

<?php if (isset($errors['for_a']):?><div id="errormessage">some text</div><?php endif; ?>

php规则是:

(case1) ... if ( isset($errors['for_a']) AND (!isset($errors['for_b'])) AND (!isset($errors['for_c'])) OR (!isset($errors['for_d'])) ...
OR
(case 2) ...AND (!isset($errors['for_b'])) AND (!isset($errors['for_c'])) AND (!isset($errors['for_d'])) ...
and so on for input field a...

所以问题是我有 7 个输入字段,这意味着我必须写下所有的可能性。有没有办法缩短这个?

多谢。

更新:

好吧,也许它不够清楚我想要实现什么。

我没有显示错误消息的问题。这很好用。每个特定输入字段的每个错误消息都可以正确显示。

问题是我每个都有不同的错误消息。我确实将其存储在更多维数组中:

if(empty($a)){$errors['a'][]="first failure for a"}
if(something else happens($a)){$errors['a'][]="second failure for a"}
...

if(empty($b)){$errors['b'][]="first failure for b"}
if(something else happens($b)){$errors['b'][]="second failure for b"}
...

显示错误消息也不是问题。

<?php if (isset($errors['a'])):?>
<?php echo "<div class='erl'>"; 
echo $errors['a'][0];
echo "</div>";          
endif;?>
<?php endif;?>

问题是同时只显示一条错误消息的条件!

所以这里有一些图形来说明我的意思:

这是目前的情况,所有的错误 div 会同时显示:

f0

这就是我想要实现的,同时只会显示一条错误消息,开始通过第一个输入字段进行检查:

f2

这样用户将被迫在显示第二个错误层之前更正第一个输入字段:

f5

希望现在清楚。

4

4 回答 4

1

我不确定你在问什么。通常对于表单,如果您有很多字段,您可以创建一个错误数组,并将错误显示为表单顶部的项目符号列表,或者与其相应的表单元素内联。

<?php
$errors = array();

if (isset($_POST['submit'])) {
    // for each form field check it's valid, if it's not add a key to the errors array, i.e.
    if (empty($_POST['name'])) {
        $errors['name'] = 'Name is a required field';
    }
}

// display form
?>

您现在将拥有一个$errors数组。如果它不为空,则您的表单有错误。然后,您可以通过以下两种方式之一显示这些错误。作为表单顶部的项目符号列表:

<!DOCTYPE html>
<html>
  <body>
    <form method="post">
<?php if (!empty($errors)): ?>
      <p>Please correct the following errors:</p>
      <ul>
<?php foreach ($errors as $error): ?>
        <li><?php echo $error; ?></li>
<?php endforeach; ?>
      </ul>
<?php endif; ?>
      <!-- the rest of your form -->
    </form>
  </body>
</html>

或与每个表单字段内联:

<form method="post">
  <div class="input">
    <label for="name">Name:</label>
    <input type="text" name="name" id="name" />
<?php if (isset($errors['name'])): ?>
    <div class="error"><?php echo $errors['name']; ?></div>
<?php endif; ?>
  </div>
</form>

希望有帮助。

于 2012-07-23T11:09:43.993 回答
0

您如何进行错误处理?

如果你只设置$errors['for_a'],等等...如果输入字段有错误for_a,你可以这样做:

if (count($errors) > 0) {
    foreach ($errors as $input => $errormsg) {
        echo '<div id="errormessage">' . $errormsg . '</div>'
    }
} else {
    // continue normally
}
于 2012-07-23T11:10:50.303 回答
0

OO解决方案怎么样?就像是:

<?php echo $errors->show('for_a', 'some text'); ?>

其中 $errors 指向一个类,该类只有在它之前没有输出任何东西时才会输出“一些文本”。

于 2012-07-23T11:12:36.980 回答
0

可能最简单的解决方案是使用一个全局变量,如果您显示错误,该变量将保持不变。

例如:

$errorShown = false;

还有一个功能:

function showError($whatError,$errArr){
  global $errorShown;
  if ((isset($errArr[$whatError])) && (!$errorShown)){
    echo $whatError;
    $errorShown = true;
  }
}

并改为调用该函数。

<?php showError('for_a',$errors); ?>
于 2012-07-23T11:13:25.147 回答