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

Php 当用户点击submit时,HTML表单可以做两件事吗?,php,html,forms,download,formmail,Php,Html,Forms,Download,Formmail,我正在制作一个启动页面,用户必须输入他们的姓名和电子邮件地址才能下载一本书。这是我第一次这样做。当用户填写表单并点击提交时,我希望书籍开始自动下载,并且我希望他们的表单详细信息发送到我的电子邮件中,以便我可以将他们添加到邮件列表中 现在,我的HTML表单如下所示:我正在使用formmail: <form id="myform" method="post" action="submit.php" name="myform" width="100%"> <input type="h

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

现在,我的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时,它访问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);
?>
所以!当用户点击SUBMIT时,是否有任何方式可以同时运行这两个.php脚本?我在PHP代码中犯了错误吗?我听说这可以在Ajax中实现,但我不知道如何实现这样的东西。谁能给我指路吗?谢谢

编辑:我通过保持submit.php不变并更改用户点击submit时出现的弹出窗口来解决了自己的问题。它过去常说谢谢你下载,但我把弹出窗口改为“单击此处下载”,这里是文件的超链接


它不华而不实,也不漂亮——但它完成了任务

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

}

?>

不可以。表单只提交一个操作。但是您可以使用javascript进行多次提交,例如ajax调用、克隆表单和静默提交克隆等等。但是在纯html中,表单提交到一个位置,并且只提交到一个位置。formmail.php是如何阻止下载的?当然,您的脚本可以同时执行这两个操作。没有理由一个脚本不能生成电子邮件,然后继续生成下载。也就是说,它不一定能与您拥有的脚本一起工作,因为formmail.php可能会做一些干扰的事情。你还没有发布formmail.php,所以我不能肯定。@MarcB我认为OP理解“单个动作”的概念,但他试图在一个脚本中组合多个动作。这在原则上应该是可行的,但可能不适用于他拥有的脚本。我不能在这里包含它。我尝试将submit.php更改为无效=[这两种方法都不一定会开始下载。最有可能的结果是浏览器只打开PDF文件。如果浏览器打开PDF文件,我会很高兴,因为这样他们就可以从那里保存它,但代码的标题行根本不起作用。给了我一个错误,代码的回显行与我的o原始代码。它没有打开pdf或下载它,它只是向我发送一封电子邮件,并在表格中填写信息。