如何为表单提交的邮件添加提交日期时间及数据同意声明
解决方案:添加提交时间与数据同意声明到邮件内容
要实现你的需求,我们需要分三步调整代码:完善前端表单字段、后端PHP处理时间与同意信息、可选的前端错误提示优化,具体操作如下:
1. 确保前端表单传递数据同意状态
首先给你的复选框补充name属性,这样表单序列化时才能把勾选状态传给PHP。假设你的HTML复选框代码如下,添加name="consent":
<input type="checkbox" id="verif" name="consent"> <label for="verif">Acceptance of use of data</label>
你的JS已经做了勾选判断,添加name属性后,这个字段就能被serialize()提交到后端了。
2. 修改PHP代码,添加时间与同意信息到邮件
我们需要在PHP中完成三件事:接收同意状态、生成格式化的提交时间、将这两个信息追加到邮件内容里。修改后的contact.php代码如下,我标注了新增内容:
<?php $array = array( "firstname" => "", "name" => "", "email" => "", "phone" => "", "message" => "", "consent" => "", // 新增:存储同意状态 "firstnameError" => "", "nameError" => "", "emailError" => "", "phoneError" => "", "messageError" => "", "consentError" => "", // 新增:同意项错误提示 "isSuccess" => false ); $emailTo = "myemail@gmail.com"; if ($_SERVER["REQUEST_METHOD"] == "POST") { $array["firstname"] = test_input($_POST["firstname"]); $array["name"] = test_input($_POST["name"]); $array["email"] = test_input($_POST["email"]); $array["phone"] = test_input($_POST["phone"]); $array["message"] = test_input($_POST["message"]); // 新增:获取同意状态,转换成目标文本 $array["consent"] = isset($_POST["consent"]) ? "Acceptance of use of data" : "No consent given"; $array["isSuccess"] = true; $emailText = ""; // 原有字段验证逻辑保持不变 if (empty($array["firstname"])) { $array["firstnameError"] = "Il manque votre prénom"; $array["isSuccess"] = false; } else { $emailText .= "Firstname: {$array['firstname']}, "; } if (empty($array["name"])) { $array["nameError"] = "Il manque votre nom"; $array["isSuccess"] = false; } else { $emailText .= "Name: {$array['name']}, "; } if(!isEmail($array["email"])) { $array["emailError"] = "Ceci n'est pas un email"; $array["isSuccess"] = false; } else { $emailText .= "Email: {$array['email']}, "; } if (!isPhone($array["phone"])) { $array["phoneError"] = "Que des chiffres et des espaces, svp..."; $array["isSuccess"] = false; } else { $emailText .= "Phone: {$array['phone']}, "; } if (empty($array["message"])) { $array["messageError"] = "Quel est votre message?"; $array["isSuccess"] = false; } else { $emailText .= "Message: {$array['message']}, "; } // 新增:后端双重验证同意项,提升安全性 if (!isset($_POST["consent"])) { $array["consentError"] = "Merci d'accepter les conditions"; $array["isSuccess"] = false; } // 新增:生成格式化的日期和时间,追加到邮件内容 $submitDate = date("d/m/Y"); // 格式:日/月/年,可按需修改为m/d/Y $submitTime = date("H:i"); // 格式:24小时制小时:分钟,可改为h:i A用12小时制 $emailText .= "date: {$submitDate}, time: {$submitTime}, Consent: {$array['consent']}"; if($array["isSuccess"]) { $headers = "From: {$array['firstname']} {$array['name']} <{$array['email']}> Reply-To: {$array['email']}"; mail($emailTo, "Un message de votre site", $emailText, $headers); } echo json_encode($array); } // 原有函数保持不变 function isEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } function isPhone($phone) { return preg_match("/^[0-9 ]*$/",$phone); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
修改说明:
- 我把邮件内容的分隔符换成了逗号+空格,和你期望的格式完全匹配;如果想要换行显示,改回
\n即可。 - 时间格式可按需调整,比如
date("m/d/Y")是月/日/年,date("h:i A")是12小时制带AM/PM标识。 - 后端新增了同意项验证,即使前端判断被绕过,后端也会拒绝提交,避免无效邮件。
3. (可选)前端错误提示优化
如果需要在前端显示同意项的错误提示,可以修改JS代码的success回调,添加同意项的错误渲染:
success: function(result) { if(result.isSuccess) { $("#contact-form").append("<p class='thank-you'> Votre message a bien été envoyé. Merci de m'avoir contacté </p>") $("#contact-form")[0].reset(); } else { $("#firstname + .comments").html(result.firstnameError); $("#name + .comments").html(result.nameError); $("#email + .comments").html(result.emailError); $("#phone + .comments").html(result.phoneError); $("#message + .comments").html(result.messageError); // 新增:渲染同意项错误提示 $("#verif + .comments").html(result.consentError); } }
同时在HTML复选框后添加错误提示容器:
<input type="checkbox" id="verif" name="consent"> <label for="verif">Acceptance of use of data</label> <span class="comments"></span>
完成以上修改后,你收到的邮件就会包含提交日期、时间和数据同意声明啦!
内容的提问来源于stack exchange,提问作者Olivia A
相关产品推荐
相关产品推荐

