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

时间:2013-10-23 19:21:15

标签: php html forms download formmail

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

现在我的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);
?>

SO!有什么方法当用户点击SUBMIT时,那些.php脚本中的两个将同时运行吗?我在PHP代码中犯了错误吗?我听说这可以在Ajax中完成,但我不知道如何实现类似的东西。有谁能告诉我的方式?感谢!!!


编辑:我通过保留submit.php的方式解决了我自己的问题,并更改了用户点击提交时显示的弹出窗口。它曾经说过“谢谢你下载”,但我改变了弹出窗口,说“点击这里下载”(HERE是文件的超链接)。

这不是华而不实,它并不漂亮 - 但它完成了工作。

1 个答案:

答案 0 :(得分:-2)

如果提交成功,只需重定向到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" />';

}

?>