2012-03-09 161 views
-1

想知道實現某些東西的最佳方式是什麼。總結一下,我有一個表單,我通過ajax加載,用於更新數據庫並將新行插入到數據庫中。要確定它是更新還是插入,我使用下面的代碼(更新後的表單使用mysql查詢來填充表單域)。使用PHP標記插入或更新函數的表單

我的代碼看起來sl and而不是最佳實踐。有沒有其他建議,最好的辦法是做什麼?

<? 
require_once("config.php"); 

$insert = false; 
$update = false; 
$targID = 0; 

if(isset($_POST['targID'])){ 
$targID = $_POST['targID']; 
$targRow = mysql_fetch_array(mysql_query("select * from events where eventid=$targID")); 
$update = true; 
}else{ 
$insert = true; 
} 

?> 
<script type="text/javascript"> 
    var insert = <? echo $insert; ?>+0; 
    var update = <? echo $update; ?>+0; 

    ......javascript button events, validation etc based on inssert/update 
</script> 

回答

0

由於您發送或不發送POST數據項,您已經在客戶端知道它是更新還是插入。所以我會在原始頁面編寫JS來控制提交以及如何處理髮回的數據。這很難不看到頁面的其餘部分編寫代碼,但在僞代碼級別,你可以做到以下幾點:

  1. 使用的onsubmit()來捕捉原始提交行動
  2. 看看是否targID提供
  3. 如果是,則向服務器發送更新請求。當行數據返回時,填寫表單詳細信息並顯示錶單(例如,您可以「顯示」包含表單的隱藏DIV)
  4. 如果沒有 - 您是否需要發送任何內容? - 只是顯示一個空表格(再次顯示以前隱藏的DIV)

希望這在某些方面很有用。

+0

只是爲了補充一點:不要在SQL查詢中直接使用表單數據 - 這就是現在發生的SQL注入攻擊。確保你先清理數據。 – 2012-03-09 09:57:06

0

是什麼在確定客戶端上的意義呢?它有什麼區別?

對於服務器端,我會使用從隱藏字段傳遞的$ targID。如果它大於零 - 更新,否則 - 插入。