一些HTML输入字段在PHP验证时被清除,而另一些则没有

vle*_*sha 0 php xhtml

这是问题所在.我有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)

对我来说,所有的领域看起来都一样.什么可能导致不一致?

谢谢!

Dan*_*uis 6

您正在设置$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)