我在HTML中有一个下拉列表,元素名称为staff1,其中包含从数据库中获取的名称。我需要列表旁边的"发送电子邮件"按钮,单击该按钮后,必须在提交页面或表单之前向列表中的选定选项发送电子邮件。
现在,我知道HTML和JavaScript在客户端,PHP在服务器端。使用我的js,我可以在下拉列表中实时获取所选值。我想出了下面,以便能够通过javascript获取选定的值并将其传递给PHP用于电子邮件功能。所有这些都在同一个文件中。
<script>
function sendEmail()
{
var val = document.getElementByName("staff1").value;
}
</script>
<?php
$to = "<script>document.writeln(val);</script>";
$subject = "This is a test email";
$txt = "test body";
$headers = "From: aa@123.com";
mail($to,$subject,$txt,$headers);
?>
我需要在我的 html 的 onclick 事件中调用所有这些 href 按钮。这是我的网页:
<a href="#" onclick="sendEmail()" class="button">Send Email</a>
我不太确定如何将这三个集成在一起,我仍然会像其他一些帖子所建议的那样通过 AJAX 学习。目前,我希望一个快速的解决方案或解决方法可以做到。我到了下面,但它没有发送任何内容,即使我临时使用静态值定义 $to 参数。谢谢!
<?php
echo '<a href="#" onclick="sendEmail()" class="button">Send Email</a><br/><br/>';
echo '<script> function sendEmail() { var val = document.getElementByName("staff1").value; } </script>';
$to = "<script>document.writeln(val);</script>";
$subject = "This is a test email";
$txt = "test body";
$headers = "From: aa@123.com";
mail($to,$subject,$txt,$headers);
?>
我试图给出快速的解决方案。试试吧.
<script>
function sendEmail(){
var to = document.getElementByName("staff1").value;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
// //
}
};
xhttp.open("GET", "send_mail.php?to="+to, true);
xhttp.send();
}
</script>
send_mail.php
<?php
$to = $_GET["to"];
$subject = "This is a test email";
$txt = "test body";
$headers = "From: aa@123.com";
mail($to,$subject,$txt,$headers);
?>
但它没有发送任何东西
这是因为这不是电子邮件地址:
"<script>document.writeln(val);</script>"
因此,邮件服务器可能会返回一个错误,告诉您用HTML包装的JavaScript代码块与电子邮件地址无关。
<小时 />您有两种选择。 将表单值发布到页面或使用 AJAX 向服务器发出请求。 对于单个堆栈溢出问题/答案来说,这两个问题都非常广泛。 但是,让我们看看我是否可以至少在高层次上描述这些过程来帮助您......
发布表单:在这种方法中,您的客户端 HTML 可能如下所示:
<form method="POST" action="somePage.php">
<input type="text" name="email" />
<input type="submit" value="Send Email" />
</form>
单击该提交按钮会将该电子邮件值发布到 somePage.php
,这将具有使用该值的代码。 您仍然可以使用多种选项来自定义此设置。 例如,您可能有一个hidden
输入而不是text
输入,您可以从 JavaScript 动态填充该hidden
输入。
但最终你会得到的是一个发布到页面的表单。 该页面将执行所需的服务器端操作,并直接为用户使用新 UI 进行响应,或者将用户重定向到另一个页面。 您可以想象,这涉及重新加载整个页面。
AJAX:但是,如果您不想重新加载整个页面怎么办? 如果您希望用户留在这里而不必在网站上导航怎么办? 没关系,你可以使用 AJAX。 AJAX基本上是使用JavaScript在后台向页面发出请求。 它比表单帖子复杂一些,但从服务器端代码的角度来看,功能是相同的。
网上有很多例子,这个似乎是一个合理的起点。 从本质上讲,您将使用JavaScript将点击处理程序附加到按钮或链接(或任何元素,实际上),并且JavaScript将向执行该操作的PHP页面发出AJAX HTTP请求。 该请求可以包括从客户端输入收集的信息。 被请求的PHP页面将执行操作并做出响应,理想情况下可能是JSON数据而不是HTML。 然后,客户端代码将对该响应做出反应,可能会向用户显示成功或失败消息。