2012-11-15 179 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