我有一個PHP網站,其中一箇中央功能是點擊頁面上的兩個按鈕之一。非常簡單。基於哪個按鈕被點擊,不同的值被存儲在數據庫中。HTML表單僅提交寄存器零星點擊 - 爲什麼?
最初我以相同的形式使用了兩個<Button>
元素,但由於這似乎與所有瀏覽器都不兼容,所以我改用兩種形式。雖然代碼可能不是必需的(它的工作原理),但無論如何我都提供它。對於實際問題,請向下滾動。表格是這樣定義:
<form method='post' action='index.php'>
<input type='hidden' name='confirm' value='1'/>
<input type='hidden' name='id' value='1'/>
<input type='submit' value='Include'/>
</form>
<form method='post' action='index.php'>
<input type='hidden' name='confirm' value='-1'/>
<input type='hidden' name='id' value='1'/>
<input type='submit' value='Exclude'/>
</form>
而且在index.php中相應的後讀取部:
if (filter_has_var(INPUT_POST,"confirm")) {
$msi = connectDB(); //Creates and returns a mysqli connection
$c = filter_input(INPUT_POST,"confirm");
$id = filter_input(INPUT_POST,"id");
mysqli_query($msi,"UPDATE `table` SET `confirm` = $c WHERE `id` = $id");
header("Location: index.php");
}
現在...這個工程完全按照預期 - 該表與confirm
更新 - 被點擊的價值。當在我的本地主機設置上運行時,根本沒有問題。
但是,一旦我在生產網站上啓動了這個功能,提交按鈕只會偶爾觸發。一旦用戶點擊了任一提交按鈕,它們就會顯示一個新頁面,並帶有相同的按鈕和一個新的ID - 因此該頁面會多次顯示,有時可以在任一按鈕上進行第一次點擊,但大部分時間沒有任何內容點擊時發生(雖然也許刷新頁面 - 我不確定這一點)。有什麼建議麼?
編輯: 多一點信息,我之所以知道它沒有「火」:
每當這個頁面加載時,它會選擇從table
隨機ID,其中confirm
爲0,即不尚未確認。然後它會根據這個ID顯示一些信息。然後PHP用一個新的隨機ID加載一個新頁面。換句話說,無論何時提交被點擊,它應該將當前ID的confirm
值改爲與0不同的值,並且相同的ID將不會再次顯示。在本地主機開發設置中,情況就是如此 - 但在實時設置中,頁面有時會刷新,顯示相同的信息,而不會更新confirm
值。如果用戶再次點擊同一個按鈕,它可能會正確執行 - 它看起來很隨意。
EDIT 2 - 固定: 我有一個懷疑,因爲它的開發工作,而不是在現場,誤差必須在那裏找到。因此,在與同事討論後,我用服務器主機搜索了服務器緩存問題,結果發現其他人也遇到類似的問題。該修復程序添加以下行.htaccess
:
RewriteEngine on
RewriteRule (.*) - [E=Cache-Control:no-cache]
謝謝那些誰了響應時間。
如果我是你,我會更害怕如果用戶改變HTML中的'confirm'和'id'的值,而不是沒有任何反應。大多數情況下,沒有任何反應,因爲沒有機會。如果在ID = 1的情況下有確認= 1,則不會在'include' –
上發生更改爲什麼header(「Location:index.php」); from same index.php – user1844933
上面的'id = 1'是通用的/用作佔位符。實際上它是動態的。這也是'header(「Location:index.php」)的原因;' - 實際上它重定向到一個參數確定的位置,爲了說明的目的,我簡化了它。我的不好 – ipoga