【问题标题】:Why is UPDATE creating a new record?为什么 UPDATE 会创建新记录?
【发布时间】:2016-12-20 02:32:30
【问题描述】:

用于活动列表页面。将记录插入数据库后,我使用

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

【问题讨论】:

  • 您是否要求表中每条记录的 ID 都是唯一的?
  • 你在那个表上定义了触发器吗?
  • @Jay Patel 是 - ID 必须是唯一的。
  • @Rahul 为什么是触发器示例?
  • @parboy 你在这个 PHP 页面的任何地方都没有插入查询吗?

标签: php mysql sql-update submit record


【解决方案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);
}

【讨论】:

  • 设置 SESSION 变量仍会添加新记录。每次单击“草稿”或“发布”时检查 ID 值测试增量 ++。
  • @parboy 尝试在页面顶部包含一次连接,以便在单击发布或草稿按钮时不会建立新连接。更新不应该导致数据插入,所以你把连接放在顶部,让我们看看
【解决方案2】:

我解决了这个问题。因为表单重新提交整个页面,所以每次都会运行插入语句并添加新记录。该记录也得到更新,因此看起来像 UPDATE 是添加新记录。真正插入新记录并同时更新更改“postit”字段。为了解决这个问题,我添加了条件 if $_REQUEST not equal submitDraft or submitPublish then INSERT,否则它会跳过 INSERT。我也看到了来自@Jay Patel 和@SBA 的相同回答。谢谢两位

【讨论】:

    猜你喜欢
    • 2016-12-24
    • 2020-04-18
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多