【发布时间】:2013-10-23 19:21:15
【问题描述】:
我正在制作一个启动页面,用户必须输入他们的姓名和电子邮件地址才能下载一本书。这是我第一次这样做。当用户填写表单并点击提交时,我希望图书自动开始下载,并且我希望将他们的表单详细信息发送到我的电子邮件,以便我可以将它们添加到邮件列表中。
现在我的 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 所做的)永远不会发生。当我切换它们(将pocketdownload.php放在formmail.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 中完成,但我不知道如何实现这样的东西。谁能给我指路?谢谢!!!
编辑:我解决了我自己的问题,方法是保留 submit.php 的原样并更改用户点击提交时出现的弹出窗口。它曾经说“感谢您下载”,但我将弹出窗口更改为“单击此处下载”(此处是文件的超链接)。
它不华丽,也不漂亮 - 但它完成了工作。
【问题讨论】:
-
没有。表单仅提交给 SINGLE
action。但是您可以使用 javascript 进行多次提交,例如ajax 调用,克隆表单并默默提交克隆,等等等等。但是在纯 html 中,一个表单只提交到一个地方。 -
formmail.php做了什么阻止下载? -
当然你的脚本可以做这两件事。一个脚本没有理由不能生成电子邮件,然后继续进行下载。也就是说,它不一定适用于您拥有的脚本,因为一个(可能是
formmail.php)可能会做一些干扰。你还没有发布formmail.php,所以我不能肯定。 -
@MarcB 我认为 OP 理解“单一动作”的想法,但他正试图在一个脚本中组合多个动作。这原则上应该有效,但可能不适用于他拥有的脚本。
-
致@MikeW,formmail.php 可在线免费获得,有20,000 行。我不能在这里包含它。
标签: php html forms download formmail