我正在进行表单验证。当我点击提交时,它会在检查错误后给我有效的输出平均值不为空。但当我制作一个错误数组时,它的工作方式就不一样了。下面将介绍这两种方法。请帮我找到解决方案。。
$name = '';
$nameErr = '';
function test_input($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
if (empty($_POST['name'])){
$nameErr = 'Name is Required';
}else {
$name = test_input($_POST['name']);
if (!preg_match("/^[a-zA-Z ]*$/",$name)){
$nameErr = 'Only letters and white spcaes are allowed';
}else{
$name = $_POST['name'];
}
}
//if (!empty($nameErr)){
$errors = array ($nameErr);
if ($errors != ''){
//var_dump ($nameErr);
var_dump ($errors);
?>
<h2>FeedBack Form</h2>
<span class="error">* Required Fields</span>
<br /><br />
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
Name:<input type="text" name="name" value="<?php echo $name ?>" />
<span class="error">*<?php echo $nameErr ?></span>
<br /><br />
<input type="submit" name="submit" value="submit" />
</form>
<?php
}else {
echo $name;
}
}else {
?>
<h2>FeedBack Form</h2>
<span class="error">* Required Fields</span>
<br /><br />
<form method="post" action="<?php echo htmlspecialchars($_SERVER ['PHP_SELF']); ?>">
Name:<input type="text" name="name" value="" />
<span class="error">*</span>
<br /><br />
<input type="submit" name="submit" value="submit" />
</form>
<?php
}
?>
</body>
</html>
您必须检查您的错误变量$nameErr是否已用isset
初始化,并且不应将数组与字符串(而不是此:$errors != ''
)进行比较:
if (isset($nameErr)) {
$errors = array ($nameErr);
var_dump ($nameErr);
var_dump ($errors);
...
}
如果出现错误,您的2var_dumps将输出以下内容:
string(41) "Only letters and white spcaes are allowed"
array(1) { [0]=> string(41) "Only letters and white spcaes are allowed" }
预计第二个具有额外的数组包装器,但其余的都是相同的。