2016-08-13 63 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

相关问题