gpt4 book ai didi

php - 第一个表单提交插入行随后提交更新同一行

转载 作者:可可西里 更新时间:2023-11-01 09:01:38 25 4
gpt4 key购买 nike

有没有人有其他解决方案来解决我的问题。

当我第一次点击提交按钮时,我想在 MYSQL 数据库中插入该行。但是表单会验证输入是否有错误,因此如果发现错误,则用户将不得不再次单击提交按钮。现在我想更新数据库中的行。

我使用 session 变量来实现此目的,但现在我不能,因为该网站使用 Realex 支付网关,所以我无法在支付成功时取消设置 session ,因为此代码在他们的网站上。

这就是我所拥有的:

if(!isset($_SESSION['jid']))    
{
$sql = "INSERT INTO ...";
$result = $db->query($sql);
if($result === false)
sql_failure_handler($sql, $db->error);
$jid = $db->insert_id;
$_SESSSION["jid"] = $jid;
}
else
{
$sql = "UPDATE ... WHERE ID = '$_SESSION['jid']";
$result = $db->query($sql);
if($result === false)
sql_failure_handler($sql, $db->error);
}
}

这段代码是为了让我知道我需要什么。

我在考虑使用 post 变量:

if(empty($_POST['jid']))    // insert on first click of one of the buttons  
{
$sql = "INSERT INTO table ...";
$result = $db->query($sql);
if($result === false)
sql_failure_handler($sql, $db->error);
$jid = $db->insert_id;
}
else
{
$sql = "UPDATE table SET ... WHERE ID = '" . $db->real_escape_string($_POST['jid']) . "'";
$result = $db->query($sql);
if($result === false)
sql_failure_handler($sql, $db->error);
}

然后有一个隐藏变量但不确定这是否有效。也许是一个 jquery 来最初设置 jid 值?

最佳答案

隐藏字段是一个不错的选择。

在表单中包含一个空的隐藏字段:

<input type="hidden" name="jid" value="" id="jid">

在 PHP 中。如果 $_POST['jid'] 为空,插入新行并返回包含新创建行 ID 的响应:

$sql = "INSERT INTO table...";
$result = $db->query($sql) or die('Errant query: '.$sql);
$newid = $db->insert_id;
header('Content-type: application/json');
echo '{"message":"new field added", "id":"'.$newid.'"}';

在客户端,如果发布成功。更新隐藏字段的值,即

$('#jid').val(response.id)

后续帖子现在将具有 jid

另一种选择:

在 PHP 中,如果没有插入,则检查 ID 是否已存在于数据库中,如果存在,则更新。

$sql = "SELECT id FROM table WHERE id = '$jid' LIMIT 1";
$result = $db->query($sql) or die('Errant query: '.$sql);
$row_cnt = $result->num_rows;

if($row_cnt > 0){
UPDATE
}
else{
INSERT
}

关于php - 第一个表单提交插入行随后提交更新同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com