为什么UPDATE要创建一个新记录


Why is UPDATE creating a new record?

事件列表页面。在将记录插入数据库后,我用

捕获最后一个ID
//Store ID[LAST]
    $ID = mysqli_insert_id($db);

接下来,页面显示事件格式以便阅读。然后用户可以通过"Draft"、"Publish"两个按钮来持有或批准发布项目。我使用提交按钮:

//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语句添加新记录到表,但应该更新相同的记录。

我认为你应该在会话值中保留最后一个插入id,并在用户单击Draft或Publish时使用它,因为它显示数据插入和事件Draft或Publish发生在不同的时间

//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);
}

我解决了这个。由于表单要重新提交整个页面,所以每次都要运行insert语句并添加新记录。这个记录也得到更新,所以看起来像update是添加新记录。真正的INSERT创建新记录和UPDATE同时更改'post '字段。为了解决这个问题,我添加了条件if $_REQUEST not equal submitDraft or submitPublish then INSERT,否则它会跳过INSERT。我也从@Jay Patel和@SBA那里看到了同样的答案。感谢两位