这是问题所在.我有PHP和HTML表单的数据验证和卫生代码.当表单上的某些字段留空时,验证代码将执行并打印一条消息.我以为我设计的形式是所有填充字段在那时保留输入数据的方式.但是,它被证明是不一致的.例如,名字和姓氏字段变空,而电话和街道字段仍然具有用户在验证发生之前输入的数据.
这是HTML:
<p>
<label for="firstname">FIRST NAME*:
</label>
<input type="text" name="firstname" id="firstname" value="<?php echo $firstname?>" />
</p>
<p>
<label for="lastname">LAST NAME*:
</label>
<input type="text" name="lastname" id="lastname" value="<?php echo $lastname?>" />
</p>
<p>
<label for="phone">TELEPHONE NUMBER*:
</label>
<input type="text" name="phone" id="phone" value="<?php echo $phone?>" />
</p>
<p>
<label for="street">STREET ADDRESS*:
</label>
<input type="text" name="street" id="street" value="<?php echo $street?>" />
</p>
Run Code Online (Sandbox Code Playgroud)
这是验证脚本:
if ($_POST['firstname'] != "") {
$_POST['firstname'] = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
if ($_POST['firstname'] == "") {
$errors .= 'Please enter a valid first name.<br/><br/>';
}
} else {
$errors .= 'Please enter your first name.<br/>';
}
if ($_POST['lastname'] != "") {
$_POST['lastname'] = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
if ($_POST['lastname'] == "") {
$errors .= 'Please enter a valid last name.<br/><br/>';
}
} else {
$errors .= 'Please enter your last name.<br/>';
}
if ($_POST['phone'] != "") {
$phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
if ($_POST['phone'] == "") {
$errors .= 'Please enter a valid phone number.<br/><br/>';
}
} else {
$errors .= 'Please enter your phone number.<br/>';
}
if ($_POST['street'] != "") {
$street = filter_var($_POST['street'], FILTER_SANITIZE_STRING);
if ($_POST['street'] == "") {
$errors .= 'Please enter a valid street address.<br/><br/>';
}
} else {
$errors .= 'Please enter your street address.<br/>';
}
Run Code Online (Sandbox Code Playgroud)
对我来说,所有的领域看起来都一样.什么可能导致不一致?
谢谢!
您正在设置$phone和$street变量,但不是$firstname或$lastname.相反,你正在重新分配$_POST变量:
$_POST['lastname'] = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
filter_var返回已过滤的输入或false过滤器失败,因此您还应检查过滤器的结果是否false(而不是== "")以触发错误.
例如:
if ($_POST['firstname'] != "")
{
$firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
if ($firstname === false)
{
$errors .= 'Please enter a valid first name.<br/><br/>';
}
}
else
{
$errors .= 'Please enter your first name.<br/>';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |