2012-03-26 43 views
0

我正在做一個「我必須發貨的物品清單」,每件物品和一個按鈕「標記爲已發貨」。如何防止PHP在isset(POST ['submit'])之後動態更新項目列表?

我的問題是,當我按標籤發貨時,一個項目消失,但它不是我點擊的。我必須刷新頁面才能看到一個邏輯結果。我想阻止PHP更新這個列表,因爲我想用jQuery來處理這個列表。另外,我想知道如何更新$ numItemHave2Ship而不必刷新頁面(或者用jQuery來做更好嗎?)。

我該怎麼做?非常感謝。

這裏是我的代碼是如何工作的:

首先,我身上的所有物品與MYSQL:

$query=mysql_query("SELECT * FROM items WHERE seller='$username' AND shipped!='1'"); 
$numItemHave2Ship=mysql_num_rows($query); 
echo "You have to ship ".$numItemHave2Ship." items:<p>"; 

然後,對於每一個項目,我有:

<input type='hidden' name='item' value='".$row['item']."'> 
<input type='submit' class='shipped_button' value='Mark as shipped'> 

那麼很明顯,這按鈕觸發mysql查詢:

$query=mysql_query("UPDATE items SET shipped='1' WHERE item='$item' 
AND seller='$username'"); 

編輯:我還沒有jQuery代碼。我的整個代碼是在PHP和HTML。

回答

1

是一個項目的形式的行爲,這一頁?如果是這樣,您必須有條件地調用SQL UPDATE,具體取決於ifset($ _ POST [「item」]),之前您調用SELECT查詢和顯示項目列表的代碼。

如果你想使用jQuery來更新項目列表以及一個numItems標籤無需重新加載頁面,你需要做這樣的事情(未經測試,可能含有錯誤,但這是要點它):

  1. 把UPDATE和SELECT查詢和代碼顯示(回聲)選定的項目在一個單獨的PHP腳本。這必須作爲jQuery ajax()或.get()或.post()中的url來調用。

  2. 在jQuery中,對提交按鈕( 'shipped_button。')按鈕時通過調用$(本),點擊設置點擊方法,類似$。點擊()

  3. 防止默認行爲。 preventDefault()

  4. 使用提交按鈕的name屬性來存儲$ item值。 (如果不使用jQuery,不需要頁面優雅地降級,就可以擺脫隱藏的輸入)。然後,您可以將$ item的值作爲$(this).attr('name')並將其作爲數據傳遞給您的ajax腳本。

  5. 在成功時刷新回調函數中項目列表的內部html,如下所示:$('#items')。html(result)

  6. 減小numItems標籤的值:var str_items = $('#numItems')。html(); var int_items = parseInt(str_items) - 1; $( '#一個numItems')HTML(int_items)。

編輯:如果你不想使用.preventDefault(),你可以很容易地防止表單提交的只是改變了type='submit'type='button'代替。

+0

嗨Stefan,非常感謝您的詳細解答。更改isset(POST)的順序解決了問題的第一部分。我會用你的建議jQuery。再次感謝 – alexx0186 2012-03-26 16:45:53

+0

嗨,我只是想知道如果使用jQuery的post()或ajax()帶來一些安全或可靠性問題?非常感謝,Regards – alexx0186 2012-03-26 17:05:21

+1

高保真jquery ajax安全性,不確定我自己,但請參閱http://stackoverflow.com/questions/6418620/jquery-ajax-and-ssl - 特別是在接受的答案中的意見,關於可能性致電https頁面。可靠性:如果你沒有javascript,如果你完全依賴jQuery,它會失敗 - 但是你不必只依賴它,並且如果javascript失敗,可以正常提交表單。不過,我認爲你可以依靠js,因爲這似乎是一個管理頁面,你可以要求這樣的用戶總是在瀏覽器中啓用javascript。 – Stefan 2012-03-26 17:17:58

0

回調中的某個位置正在刷新列表。沒有看到你的ajax電話,我們不能排除故障。但是,無論構建該列表的電話是否只能被調用一次,可能是在頁面加載時。如果你可以發佈你的ajax函數,我們可以看看。

+0

嗨,謝謝你的回覆。我其實還沒有jQuery。全部以PHP和HTML格式。我只是在考慮使用jQuery。 – alexx0186 2012-03-26 07:30:01

0

你可以有多個提交按鈕做不同的事情。試試這個:

<button type='submit' class='shipped_button' name='item' value='".$row['item']."'>Mark as Shipped</button> 

你可以對那些每行一個,只有該行的項目將被「標記爲已發貨」當你點擊它。

相關問題