我在本教程之后添加了一个联系表: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: $namen Firm: $firmn E-Mail: $emailn Objet: $listn 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>';
}
}
?>
首先,我会尽可能将后端代码与结构分开。如果我还有其他选项,我不会在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>
欢呼!
使用 input
的 value
属性将用户的输入预先插入上一张。
另外,您可以在输入上使用HTML5的required
属性,并使用JavaScript确保在提交表单之前正确设置所有字段。
示例:
-
使用php
使用value
$value = isset($_POST["value"]) ? htmlspecialchars($_POST["value"], ENT_QUOTES) : ""; /* ... snip ... */ <input name="value" value="<?= $value ?>">
-
使用
required
属性<input name="value" required>
这将使浏览器(假设它是现代的浏览器)可以验证并确保在提交表单时它不是空的。
至于JavaScript,请阅读表单的onsubmit
事件,并在输入的value
属性中阅读。
在您的输入标签中说<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'] : '' ?>"
。