您好我有以下问题:
我有一个表格,我想通过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将同时显示:
这是我想要实现的,只有一条错误消息会同时显示,从第一个输入字段开始检查:
以便在显示第二个错误层之前强制用户更正第一个输入字段:
希望现在能够明白。
答案 0 :(得分: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>
希望有所帮助。
答案 1 :(得分:0)
你如何进行错误处理?
如果您只设置$errors['for_a']
等,如果输入字段for_a
中存在错误,您可以这样做:
if (count($errors) > 0) {
foreach ($errors as $input => $errormsg) {
echo '<div id="errormessage">' . $errormsg . '</div>'
}
} else {
// continue normally
}
答案 2 :(得分:0)
OO解决方案怎么样?类似的东西:
<?php echo $errors->show('for_a', 'some text'); ?>
其中$ errors指向一个类,只有在之前没有输出任何内容时才会输出'some text'。
答案 3 :(得分:0)
最简单的解决方案可能是使用一个globalvariable,如果你显示错误就会保留。
例如:
$errorShown = false;
一个功能:
function showError($whatError,$errArr){
global $errorShown;
if ((isset($errArr[$whatError])) && (!$errorShown)){
echo $whatError;
$errorShown = true;
}
}
并改为调用该函数。
<?php showError('for_a',$errors); ?>