PHP表单,如果没有正确填写,所有字段都清除自己

时间:2014-01-24 11:29:31

标签: php forms

我按照本教程制作了一个联系表单:http://tinyurl.com/nyxv8ub

一切正常,但有些参数没有得到解决。

事实上,在提交时,如果用户没有正确填写表格,他会收到通知并且所有字段都会自行清除。

用户重新输入他的信息很痛苦,所以我希望他在没有清除任何字段的情况下收到他的错误通知。

目前,有两种方法可以解决表单错误。您是否填写了电子邮件或姓名字段,或者垃圾邮件问题的答案是错误的。

是否可以防止这种情况发生?

您可以在此处找到表单:http://bettercheckthekids.com/Form/index.php

这是php:

<?php
    $name = $_POST['name'];
    $firm = $_POST['firm'];
    $email = $_POST['email'];
    $list = $_POST['list'];
    $message = $_POST['message'];
    $spam = $_POST['spam'];
    $from = 'From: Adiwatt Online'; 
    $to = 'clement.fauquet@gmail.com'; 
    $subject = 'Hello';

    $body = "From: $name\n Firm: $firm\n E-Mail: $email\n Objet: $list\n Message:\n $message";
    ?>


    <?php
    if ($_POST['submit']) {
    if ($name != '' && $email != '') {
        if ($spam == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        } 
    } else if ($_POST['submit'] && $spam != '4') {
        echo '<p>You answered the anti-spam question incorrectly!</p>';
    }
    } else {
        echo '<p>You need to fill in all required fields!!</p>';
    }
    }
    ?>

3 个答案:

答案 0 :(得分:2)

使用input的{​​{1}}属性在上一个表单中预先插入用户的输入。

此外,您可以在输入中使用HTML5的value属性,并使用JavaScript确保在提交表单之前正确设置所有字段。

示例:

  • 在PHP中使用required

    value
  • 使用$value = isset($_POST["value"]) ? htmlspecialchars($_POST["value"], ENT_QUOTES) : ""; /* ... snip ... */ <input name="value" value="<?= $value ?>"> 属性

    required

    这将使浏览器(假设它是现代浏览器)进行验证,并确保在提交表单时它不为空。

对于JavaScript,请阅读表单的<input name="value" required>事件和输入的onsubmit属性。

答案 1 :(得分:2)

首先,我会尽可能地将后端代码与结构分开。如果我有任何其他选项,我不会在PHP代码中生成html。您的结构应如下所示:

<form method="post" action="index.php"> 
    <label>Name *</label>
    <input name="name" placeholder="..." value="<?php echo ((isset($_POST["name"])) ? (htmlspecialchars($_POST["name"], ENT_QUOTES)) : ("")); ?>">

    <label>Firm</label>
    <input name="firm" placeholder="..." value="<?php echo ((isset($_POST["firm"])) ? (htmlspecialchars($_POST["firm"], ENT_QUOTES)) : ("")); ?>">

    <label>Email *</label>
    <input name="email" type="email" placeholder="..." value="<?php echo ((isset($_POST["email"])) ? (htmlspecialchars($_POST["email"], ENT_QUOTES)) : ("")); ?>">

    <label>Object</label>
    <select name="list" id="list"> 
       <option value="Pas d'objet" <?php if ((isset($_POST["list"])) && ($_POST["list"] === "Pas d'objet")) {echo "selected";} ?>>--</option> 
       <option value="Je veux sortir" <?php if ((isset($_POST["list"])) && ($_POST["list"] === "Je veux sortir")) {echo "selected";} ?>>Object 1</option> 
       <option value="Je sortirai demain" <?php if ((isset($_POST["list"])) && ($_POST["list"] === "Je sortirai demain")) {echo "selected";} ?>>Object 2</option> 
       <option value="Je n'ai pas d'argent" <?php if ((isset($_POST["list"])) && ($_POST["list"] === "Je n'ai pas d'argent")) {echo "selected";} ?>>Object 3</option> 
    </select> 

    <label>Message</label>
    <textarea name="message" placeholder="..."><?php echo ((isset($_POST["message"])) ? (htmlspecialchars($_POST["message"], ENT_QUOTES)) : ("")); ?></textarea>

    <label>What is 2+2? (Anti-spam) *</label>
    <input name="spam" placeholder="..." value="<?php echo ((isset($_POST["spam"])) ? (htmlspecialchars($_POST["spam"], ENT_QUOTES)) : ("")); ?>">    

    <input id="submit" name="submit" type="submit" value="Send">
</form>

干杯!

答案 2 :(得分:1)

在输入标记中说<input name="name" placeholder="...">,将其更改为此<input name="name" placeholder="..." value="<?php if(isset($POST['name'])) echo $_POST['name'] : '' ?>">

我的例子还有三元运算符变体,如:value="<?php echo isset($POST['name']) ? $_POST['name'] : '' ?>"