2012-11-15 128 views
2

我有一个页面上有一个发票负载,我希望能够删除发票,然后看到它已被删除。在运行另一个页面时刷新HTML PHP页面?

我正在使用当前的(bastardizing其他代码,因为我真的不知道HTML/PHP都非常清楚......!)

<form name="form1" action="deleteinvoice.php" method="post"> 
    <input name="invoiceid" type="number" size="20"/> 
    <input id="input" 
     type='submit' 
     value='Delete' 
     onclick="form1.action='deleteinvoice.php';target='my-iframe'" 
     class="button save-big" 
     disabled="disabled" > 
    <input type="checkbox" 
     name="agree" 
     value="yes" 
     onclick="input.disabled = !this.checked" />Confirm you have the correct invoice number 
    </form> 

<iframe name="my-iframe" src="deleteinvoice.php" style="display:none"></iframe>  

这是工作的罚款,只要它删除发票(所以我知道deleteinvoice.php页面正在工作),但我真的可以做的事情就是刷新我所在的页面,以便删除的发票消失并且表单再次为空。

想法?

+0

'onclick =“blahblah; form1.reset()”'? –

+0

@MarcB你会把输入与输入的id?即onclick =“form1.action ='deleteinvoice.php'; target ='my-iframe'; from1.reset()”?这将重新排列事物的表单方面,但仍不确定刷新页面以显示发票已被删除? – franglais

+0

有什么特别的原因让你为什么使用iframe? –

回答

3

一个快速和肮脏的PHP解决办法是再创建一个PHP网页,将删除该发票并重新加载你的页面:

<?php 
    ob_start(); 
    require 'deleteinvoice.php'; 
    ob_end_clean(); 
    Header("Location: the-page-you-were-looking-before.php"); 
?> 

然后设置表单动作

onclick="form1.action='workaroundpage.php';" 

注意:这是而不是一个非常干净或安全的设置。这只是一个简单的make-do,因为你说你不熟悉PHP。

上面的代码是做什么的,首先加载真正的“deleteinvoice.php”,就像它是那个页面一样。因此,发票将像以前一样被删除。但是,该页面的任何输出首先被ob_start()缓冲,然后被ob_end_clean()丢弃,从而使此等效(客户端)成为空白页面。然后它重定向浏览器(它可以这样做,因为它就像没有创建输出一样)到原始页面,而不是在iframe中,而是在主窗口中。所以你发现自己回到了列表页面,发票被删除了。

这样做的更优雅(但相对更复杂)的方式可能是,例如,通过jQuery AJAX调用和发票DOM元素销毁。

+0

我假设我需要发布任何变量,并返回?或者它会知道我之前发布的内容? – franglais

+0

这就是(限制:-))美的东西。如果您更改了“ACTION”,那么之前发送到'deleteinvoice.php'的* *变量现在将被发送到'workaround.php'。而且由于'workaround.php'包含'deleteinvoice.php',这最后一个文件将继续接收它之前获得的相同内容,因此应该以相同的方式工作。 (除非它检查它的主文件名,这在许多框架中是一种常见的预防措施,但我认为你并没有使用它)。 – LSerni

+0

听起来很天才 - 这是一个内部托管的网站,外部世界无法访问,所以我不太担心安全问题。 – franglais