表单提交 当所有字段都不为空时,我必须按两次提交


Form submission I have to press submit twice when all fields are not empty

我有这段代码,我验证每个字段都不为空,问题是当每个字段都填写时,我必须按两次提交才能提交表单。

<table>
    <form method ="post" <?php 
    if(!empty($_POST['Firstname']) &&
       !empty($_POST['Lastname']) &&
       !empty($_POST['Email']) &&
       !empty($_POST['Comments'])){
       echo 'action="messagesent.php"';}
     else if(isset($_POST['Firstname']) ||
       isset($_POST['Lastname']) ||
       isset($_POST['Email']) ||
       isset($_POST['Comments'])) {
       echo 'action="contact.php"';}?> >
        <tr>
        <td><label>Firstname:</td><td><input name ="Firstname" type ="text" size ="30" <?php if(!empty($_POST['Firstname'])){$Firstname=$_POST['Firstname'];echo "value=$Firstname";} ?> /></td><td><?php if(empty($_POST['Firstname'])){echo "<font color='blue'>*</font>";}?></td>
        </tr>
        <tr>
        <td><label>Lastname:</td><td><input name="Lastname" type ="text" size ="30" <?php if(!empty($_POST['Lastname'])){$Lastname = $_POST['Lastname'];echo "value=$Lastname";}?> /></td><td><?php if(empty($_POST['Lastname'])){echo "<font color='blue'>*</font>";}?></td>
        </tr>
        <tr>
        <td><label>E-mail:</td><td><input name="Email" type ="text" size ="30" <?php if(!empty($_POST['Email'])){$Email = $_POST['Email'];echo "value=$Email";}?> /></td><td><?php if(empty($_POST['Email'])){echo "<font color='blue'>*</font>";}?> </td>
        </tr>
        <tr>
        <th colspan="2"><label>Your Message</th>
        </tr>
        <tr>
        <td colspan="2"><textarea name= "Comments" rows="10" cols="34"><?php $Comments=$_POST['Comments'];if(!empty($_POST['Comments'])){echo "$Comments";} ?> </textarea></td><td><?php if(empty($_POST['Comments'])){echo "<font color='blue'>*</font>";}?> </td>
        </tr>
        <tr>
        <td><input type="submit" value = "SUBMIT"/> </td>
        </tr>
    </form>
</table>

看起来你希望PHP检查页面上的字段是否被填写。这不是PHP的工作方式。它在首次呈现页面时评估一次,然后在再次加载页面之前再也不会执行任何操作。PHP 的 $_POST 数组不引用页面上的输入字段;它是指页面在加载时从表单接收的值。所以正在发生的事情是;

  1. 页面首次加载,$_POST为空,因为未提交表单。
  2. PHP 看到这一点并设置ACTION将您发送回同一页面。
  3. 您填写表格并点击提交。
  4. 页面将重新加载,但这次$_POST包含值,因为您刚刚提交了表单。
  5. PHP 看到$_POST中的值,并设置ACTION以将您发送到下一页。
  6. 您再次填写表格,点击提交,然后被发送到下一页。

如果你想在提交表单之前检查表单以查看字段是否已填写,则不能使用 PHP。你需要使用一些javascript。下面是一个快速教程,其中第一个示例解决了您要查找的内容。