
摘要:本文旨在解决在使用 HTML、JavaScript 和 PHP 构建的联系表单中,部分数据在邮件中显示为 "Undefined" 的问题。通过检查 HTML 结构、JavaScript 代码中的选择器以及 PHP 端的变量接收,我们将逐步排查问题所在,并提供相应的解决方案,同时强调服务器端数据验证的重要性,以避免潜在的安全风险。
当你在使用 HTML、JavaScript 和 PHP 创建联系表单时,可能会遇到一个常见的问题:某些表单字段的数据在最终收到的邮件中显示为 "Undefined"。 这通常意味着数据没有正确地从前端传递到后端,或者在后端没有正确地接收和处理。 本文将引导你逐步检查代码,找出问题所在并提供解决方案。
首先,仔细检查你的 HTML 代码,确保每个输入字段都具有唯一的 name 属性,并且 class 属性与 JavaScript 代码中的选择器对应。 这是最常见的问题来源。 例如:
<input type="text" name="clinic" class="form-control clinic" placeholder="Clinic Name*">
请注意,name 属性用于在 PHP 中访问数据,而 class 属性用于在 JavaScript 中选择元素。 确保所有输入框的class属性都与name属性对应,避免所有输入框都使用相同的class名称。
接下来,检查你的 JavaScript 代码,特别是 $(".contact-form").submit() 函数中的代码。 确保你正确地获取了每个输入字段的值,并将它们包含在 dataString 中。
$(document).ready(function() {
"use strict";
$(".contact-form").submit(function(e) {
e.preventDefault();
var name = $(".name");
var email = $(".email");
var clinic = $(".clinic");
var phone = $(".phone");
var address = $(".address");
var valutation = $(".valutation");
var subject = $(".subject");
var msg = $(".message");
var flag = false;
if (name.val() == "") {
name.closest(".form-control").addClass("error");
name.focus();
flag = false;
return false;
} else {
name.closest(".form-control").removeClass("error").addClass("success");
}
if (email.val() == "") {
email.closest(".form-control").addClass("error");
email.focus();
flag = false;
return false;
} else {
email.closest(".form-control").removeClass("error").addClass("success");
}
var dataString = "name=" + name.val() + "&email=" + email.val() + "&subject=" + subject.val() + "&msg=" + msg.val() + "&clinic=" + clinic.val() + "&phone=" + phone.val() + "&address=" + address.val() + "&valutation=" + valutation.val();
$(".loading").fadeIn("slow").html("Loading...");
$.ajax({
type: "POST",
data: dataString,
url: "php/contactForm.php",
cache: false,
success: function(d) {
$(".form-control").removeClass("success");
if (d == 'success') // Message Sent? Show the 'Thank You' message and hide the form
$('.loading').fadeIn('slow').html('<font color="#48af4b">Mail sent Successfully.</font>').delay(3000).fadeOut('slow');
else
$('.loading').fadeIn('slow').html('<font color="#ff5607">Mail not sent.</font>').delay(3000).fadeOut('slow');
}
});
return false;
});
$("#reset").on('click', function() {
$(".form-control").removeClass("success").removeClass("error");
});
})在上面的代码中,name = $(".name"); 这样的代码可能会导致问题,因为它会选择页面上所有 class="name" 的元素。 如果有多个元素具有相同的 class,则可能会获取到错误的值。
解决方案:
最后,检查你的 PHP 代码,确保你正确地接收了来自前端的数据。
<?php
$name = $_REQUEST["name"];
$email = $_REQUEST["email"];
$clinic = $_REQUEST["clinic"];
$phone = $_REQUEST["phone"];
$address = $_REQUEST["address"];
$valutation = $_REQUEST["valutation"];
$to = "<a class="__cf_email__" data-cfemail="e28f9b878f838b8ea2878f838b8ecc818d8f" href="/cdn-cgi/l/email-protection">[email protected]</a>";
if (isset($email) && isset($name)) {
$email_subject = "Request to access to the Price List";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= "From: ".$name." <".$email.">\r\n"."Reply-To: ".$email."\r\n" ;
$msg = "From: $name<br/> Email: $email <br/> Clinic: $clinic <br/> Phone: $phone <br/> Address: $address <br/> Valutation: $valutation";
$mail = mail($to, $email_subject, $msg, $headers);
if ($mail) {
echo 'success';
} else {
echo 'failed';
}
}
?>确保你使用 $_REQUEST 或 $_POST 正确地访问了每个字段的值,并且变量名称与 HTML 中的 name 属性匹配。
注意事项:
通过仔细检查 HTML 结构、JavaScript 代码和 PHP 代码,你应该能够找到导致 "Undefined" 数据问题的原因。 确保每个输入字段都具有唯一的 name 属性,并且 JavaScript 代码中的选择器与 HTML 中的 class 属性对应。 在 PHP 中,正确地接收和验证来自前端的数据,并对所有输入进行转义,以防止安全漏洞。
记住,客户端验证只是为了改善用户体验,真正的验证和安全措施应该在服务器端进行。
以上就是解决联系表单中出现 "Undefined" 数据的问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号