为什么UPDATE会创建新记录?

时间:2016-08-13 02:59:04

标签: php mysql sql-update submit record

对于活动列表页面。将记录插入db后,我用

捕获最后一个ID
//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语句向表中添加新记录但应该更新相同的记录。请问我的错误是什么。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我解决了这个问题。因为表单重新提交整个页面,所以每次运行insert语句并添加新记录。此记录也得到更新,因此看起来像UPDATE是添加新记录。真的INSERT新的记录和更新后发布&#39; postit&#39;在同一时间。要修复我添加条件-standard-semantics,否则它跳过INSERT。另外我只是看到来自@Jay Patel和@SBA的同样答案。谢谢你们两个