2016-08-13 182 views
0

用於活動列表頁面。在插入記錄到db後,我捕獲最後一個ID爲什麼UPDATE創建新記錄?

//Store ID[LAST] 
    $ID = mysqli_insert_id($db); 

接下來的頁面顯示格式化以方便閱讀的事件。 然後用戶可以使用2個按鈕保留或批准要發佈的項目:草稿,發佈。我使用提交按鈕爲每個:

//Check ID value (use for testing) 
    echo "<p>ID = ".$ID."</p>\n"; 

    echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'> 
    <input type='submit' name='submitDraft' value='Draft' /> 
    <input type='submit' name='submitPublish' value='Publish' /> 
    </form>"; 

現在我使用條件更新記錄按照選擇的按鈕。 (注connect.php是包括管理通行碼和連接語句。)

if (isset($_REQUEST["submitDraft"])) { 
    include('includes/connect.php'); 
    $sql="UPDATE sessions SET postit='0' WHERE ID='$ID'"; 
    if (mysqli_query($db, $sql)) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating record: " . mysqli_error($db); 
     } 

     mysqli_close($db); 
    } 

    if (isset($_REQUEST["submitPublish"])) { 
    include('includes/connect.php'); 
    $sql="UPDATE sessions SET postit='1' WHERE ID='$ID'"; 
    if (mysqli_query($db, $sql)) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating record: " . mysqli_error($db); 
     } 

     mysqli_close($db); 
    } 

我的問題是UPDATE語句添加新的記錄表,但應該更新相同的記錄。請問我的錯誤是什麼?

+0

您是否需要表中的每條記錄都是唯一的ID? –

+0

你有在該表上定義的觸發器嗎? – Rahul

+0

@Jay Patel是 - ID必須是唯一的。 – parboy

回答

0

我解決了這個問題。由於表單重新提交整個頁面,插入語句每次運行並添加新記錄。這條記錄也得到更新,所以看起來像UPDATE是添加新記錄。真的INSERT在同一時間創建新記錄和更新'postit'字段。要解決我添加條件,如果$_REQUEST not equal submitDraft or submitPublish then INSERT,否則它跳過INSERT。我也只是從@Jay Patel和@SBA看到同樣的答案。謝謝

1

我認爲你應該在會話值中保留最後一個插入ID,並在用戶單擊草稿或發佈時使用它,因爲它出現插入數據和事件草稿或發佈發生在不同的時間。

//Store ID[LAST] 
$_SESSION['ID'] = mysqli_insert_id($db); 

if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    //Check ID value (use for testing) 
    echo "<p>ID = ".$ID."</p>\n"; 
    } 


echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'> 
<input type='submit' name='submitDraft' value='Draft' /> 
<input type='submit' name='submitPublish' value='Publish' /> 
</form>"; 

if (isset($_REQUEST["submitDraft"])) { 
include('includes/connect.php'); 
if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    } 
$sql="UPDATE sessions SET postit='0' WHERE ID='$ID'"; 
if (mysqli_query($db, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($db); 
    } 

    mysqli_close($db); 
} 

if (isset($_REQUEST["submitPublish"])) { 
include('includes/connect.php'); 
if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    } 
$sql="UPDATE sessions SET postit='1' WHERE ID='$ID'"; 
if (mysqli_query($db, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($db); 
    } 

    mysqli_close($db); 
} 
+0

設置SESSION變量仍會添加新記錄。每次單擊草稿或發佈時檢查ID值測試增量++。 – parboy

+0

@parboy嘗試在頁面頂部包含一次連接,以便在單擊發布或草稿按鈕時不會建立新連接。更新不應該導致數據插入,所以你把連接放在頂部,讓我們看看 – SBA