如何在PHP表单验证后阻止表单输入类型选择数据擦除?

如何在PHP表单验证后阻止表单输入类型选择数据擦除?,php,Php,我正在一个电子商务网站上工作,我正在尝试使用PHP验证一个表单。 因此,对于我当前的代码,在我提交表单后,数据不会被删除,如果有错误,所有数据都会保留在表单中并显示错误消息,但我无法对选择选项执行相同操作。我错过了什么 <?php if (!empty($_POST)) { $error = false; if (empty($_POST["expMonth"])) { echo "<p class='errorMessa

我正在一个电子商务网站上工作,我正在尝试使用PHP验证一个表单。 因此,对于我当前的代码,在我提交表单后,数据不会被删除,如果有错误,所有数据都会保留在表单中并显示错误消息,但我无法对
选择
选项执行相同操作。我错过了什么

<?php
if (!empty($_POST)) {
    $error = false;
    if (empty($_POST["expMonth"])) {
        echo "<p class='errorMessage'> Month must be selected. </p>";
        $error = true;
    }
    if (!$error) {
        header("Location: confirmation.php");
        exit;
    }
}
?>

<th><label for="expDate">Expiration Date</label></th>
  <td><select id="expMonth" name="expMonth"
    <?php
      if (isset($_POST["expMonth"])) echo "value='" . $_POST["expMonth"] . "' selected";
    ?>>
     <option disabled selected>Select Month</option>
     <option value="1">January</option>
     <option value="2">February</option>
     <option value="3">March</option>
     <option value="4">April</option>
     <option value="5">May</option>
     <option value="6">Jone</option>
     </select>

您需要在正确的选项上回显所选的
而不是将值回显到输入中。应该是这样的

此外,有效的HTML只允许select中的一个选项具有
selected
属性。您的默认选项(
Select Month
)可能会导致问题

   <?php
if (!empty($_POST)) {
    $error = false;
    if (empty($_POST["expMonth"])) {
        echo "<p class='errorMessage'> Month must be selected. </p>";
        $error = true;
    }
    if (!$error) {
        header("Location: confirmation.php");
        exit;
    }
}
?>
<th><label for="expDate">Expiration Date</label></th>
<td><select id="expMonth" name="expMonth">
<?php
$months = [
    '1' => 'January',
    '2' => 'February',
    '3' => 'March',
    '4' => 'April',
    '5' => 'May',
    '6' => 'Jone',
];


foreach ($months as $key => $value) {
    $selected = '';
    if (isset($_POST["expMonth"]) && $_POST["expMonth"] == $key) {
        $selected = 'selected';
    }
    echo "<option value='{$key}' {$selected}>{$value}</option>";
}
?>
</select>

您需要在正确的选项上回显所选的
而不是将值回显到输入中。您好,谢谢您的评论!我尝试了你的代码,但它在我的选择选项中重复显示了几个月。。。我添加了截图,因为我不能很好地解释它。发布所有新代码。看起来你试图混合我的代码和你的代码,但你没有删除创建选项的旧HTML代码部分。啊!!!很抱歉,我发现了原因并解决了问题!!!谢谢,还有一个问题,不知何故foreach循环没有得到第一个值“一月”,为什么会这样?我缺少一个
,在您选择输入后,我更新了我的答案。看一看。