使用PHP取消webform提交

时间:2008-10-23 17:52:19

标签: php html web-services

我正在使用一个小网站来试验上传图片并进行展示。

当有人点击“添加图片”时,他们会转到带有表单的页面。他们可以选择一个文件并单击“提交”按钮。

但我现在要做的是:在正常确认按钮旁边放置一个标有“取消”的提交按钮。如果有人选择上传,选择并点击提交,如果他们在文件完全上传之前按下取消按钮,PHP应该停止上传文件并将其删除。然后回到概述。

没有使用任何Javascript。

我只有localhost,所以测试这个是不可能的,因为我只是复制文件毫秒我按下提交按钮。本地主机没有上传时间,我不打算在某处购买服务器。

基本上现在发生的是PHP检测到发送了哪个按钮。如果发送了提交按钮,则会上传文件,如果发送了取消按钮,则会返回到概述。

但PHP连续执行其任务。所以我认为这不会奏效。如何告诉PHP停止上传?

4 个答案:

答案 0 :(得分:6)

你不能用php查看按钮 - 整个请求将在PHP获取该信息之前发送。

你可以做的是将取消按钮放在不同的<form>中,如下所示:

<form> <input type="file> <input type="submit" value="upload"> </form>
<form> <input type="submit" value="cancel"> </form>

(这只是一个例子 - 当然缺少了一些东西)。

当他们点击取消时,浏览器应放弃其请求并开始新请求,取消上传。

答案 1 :(得分:1)

格雷格在那里有正确的想法。 不要追随大多数人,或者看看事情是如何完成的,看看聪明的替代方案,比如Greg上面的解释。

如果客户端和服务器之间没有有效的链接,任何上传都无法运行;因此,如果您关闭浏览器窗口,或将其重定向到其他地方,则上传将被终止。

使用iframe并将其命名为:“myframe”。你可以轻松地将它隐藏在div中。有一个表单,你的action =“somefile.php”和target =“myframe”。将lil Javascript添加到表单的“文件”字段:onFocus =“uploadlistener()”。您可以将此功能命名为您喜欢的任何名称,但可以使用它来检查此人是否“打开”了任何内容。浏览器将自动交换焦点,无论是用户点击“浏览”,还是他随后打开文件。区别是,在“选择”文件后,输入字段再次获得焦点,但请记住您在“onFocus()”事件上有一个监听器。 so:如果该字段不为空,请调用:document.uploadform.submit()

使用此方法,您甚至不需要提交按钮。如果你想为你的“浏览”按钮设置外观,只需使用CSS使其透明,例如: input name =“myfile”type =“file”style =“width:40px; -moz-opacity:0; filter:alpha(opacity = 0)”onFocus =“somefunction()” 好吧取消上传只是将iframe重定向到其他地方,例如: input type =“button”value =“cancel”onClick =“document.uploadform.action ='blank.php'; document.uploadform.submit()”

请原谅如果上面的html横跨多行,这是我第一次在这里发帖。

要跟踪进度,您需要添加服务器端侦听器(使用PHP-5.2或一些Perl脚本)来检查在上载开始之前检查的文件总大小到目前为止已加载了多少字节。使用某些AJAX可以获得此检查间隔,或者如果您不知道该术语,请查找:HTTP-REQUEST。这会在后台运行服务器端代码,并输出您在浏览器中看到的响应,但在这里您可以将其捕获到变量中,并执行您的操作。我希望这对任何人都有帮助。

答案 2 :(得分:0)

PHP无法停止正在进行的文件上传。在文件上传完成之前,你的PHP代码甚至都没有启动,所以当它运行时,为时已晚。

答案 3 :(得分:0)

如果确实无法取消上传,您可以考虑实施易于使用的撤消或删除功能,以便用户可以立即撤消图像的上传(即图像被删除)。这在您的实验中可能没用,但也许您可以在生产应用程序中使用它?