当用户点击提交时,HTML 表单可以做两件事吗?


Can an HTML form do two things when a user hits submit?

我正在制作一个启动页面,用户必须输入他们的姓名和电子邮件地址才能下载书籍。这是我第一次这样做。当用户填写表单并点击提交时,我希望图书自动开始下载,我希望他们的表单详细信息发送到我的电子邮件,以便我可以将它们添加到邮件列表中。

现在我的HTML表单看起来像这样(我正在使用formmail):

<form id="myform" method="post" action="submit.php" name="myform" width="100%">
<input type="hidden" name="good_url" value="index.html#submitgood" />
<input type="hidden" name="bad_url" value="index.html#submitbad" />
<input type="hidden" name="env_report" value="REMOTE_HOST,REMOTE_ADDR,HTTP_USER_AGENT,AUTH_TYPE,REMOTE_USER" />
<input type="hidden" name="derive_fields" value="email=EmailAddr,realname=username" />
<input type="hidden" name="recipients" value="myaddress" />
<input type="hidden" name="subject" value="Book Download" />
<fieldset><legend>Please fill out the information below to download.<br><br>Filesize, 59.8 MB.</legend>
<table><tr><td><label for="Name" id="namelabel"><strong>Full name:</strong></label><br>
<input id="Name" type="text" name="username" title="Enter your full name" placeholder="Your Name" autofocus required /></td></tr>
<tr><td><label for="eMail" id="emaillabel"><strong>Email address:</strong></label><br>
<input id="eMail" type="email" name="EmailAddr" title="Enter your email address" placeholder="example@mail.com" required /></td></tr>
<tr><td><label for"eMail_repeat" id="emaillabel2"><strong>Repeat Email address:</strong></label>
<input id="eMail_repeat" type="email" name="email_addr_repeat" title="Repeat your email address" placeholder="example@mail.com" required oninput="check(this)" /></td></tr>
</table><br>
<input id="reset" type="reset" name="reset" value="Clear" />
<input id="submit" type="submit" name="submit" value="Submit" />
<input type="hidden" name="mail_options" value="HTMLTemplate=MYURL/fmtemplates/mailtemplate.html" /></fieldset></form>

您可以看到,当用户点击提交时,它会访问 submit.php,如下所示:

<?php
require_once('formmail.php');
require_once('pocketdownload.php');
?>

所以,问题是,第一个对象(在这种情况下,formmail.php)工作得很好,我收到了包含他们信息的电子邮件,但下载(这就是pocketdownload.php所做的)从未发生过。当我在formmail.php之前切换它们(放置pocketdownload.php)时,下载完美发生,但电子邮件从未发送,并且告诉用户感谢您下载的成功弹出窗口永远不会出现。基本上,使用此PHP代码,只有第一个代码可以工作。

这就是pocketdownload.php的样子:

<?php
$file_url = 'http://LOCATION_OF_MY_FILE';
header("Content-type: application/pdf");
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename='"" . basename($file_url) . "'""); 
readfile($file_url);
?>

所以!有没有办法在用户点击提交时,这两个.php脚本将同时运行?我的 PHP 代码有误吗?我听说这可以在 Ajax 中完成,但我不知道如何实现这样的事情。谁能给我指路?谢谢!!!


编辑:我通过保持提交的方式解决了我自己的问题.php并更改用户点击提交时出现的弹出窗口。它曾经说"感谢您下载",但我将弹出窗口更改为"单击此处下载"(HERE 是文件的超链接)。

它不华丽,也不漂亮 - 但它完成了工作。

如果提交成功,只需重定向到PDF。

<?php
if(isset($_POST['submit'])) {
  /* do your things */
  header("Location: http://mywebsite.com/book.pdf")
  # OR
  echo '<meta http-equiv="Refresh" content="0; url=http://mywebsite.com/book.pdf" />';
}
?>