Php 第一次表单提交插入行后续提交更新同一行
有没有人对我的问题有别的解决办法 首先单击“提交”按钮时,我希望在MYSQL数据库中插入该行。但是表单会验证条目是否存在错误,因此如果发现错误,用户必须再次单击submit按钮。现在我想更新数据库中的行 我使用session变量来实现这一点,但我现在不能,因为网站使用Realex支付网关,所以我无法在支付成功时取消会话,因为此代码在他们的网站上 这就是我所拥有的:Php 第一次表单提交插入行后续提交更新同一行,php,jquery,mysql,forms,Php,Jquery,Mysql,Forms,有没有人对我的问题有别的解决办法 首先单击“提交”按钮时,我希望在MYSQL数据库中插入该行。但是表单会验证条目是否存在错误,因此如果发现错误,用户必须再次单击submit按钮。现在我想更新数据库中的行 我使用session变量来实现这一点,但我现在不能,因为网站使用Realex支付网关,所以我无法在支付成功时取消会话,因为此代码在他们的网站上 这就是我所拥有的: if(!isset($_SESSION['jid'])) { $sql = "INSE
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">
在客户端上,如果发布成功。更新隐藏字段的值
$('#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
}
$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
}