第一个表单提交插入行后续提交更新同一行

时间:2016-09-14 18:36:33

标签: php jquery mysql forms

有没有人能解决我的问题。

首次单击我的提交按钮时,我想在MYSQL数据库中插入该行。但是表单会验证错误条目,因此如果发现错误,则用户必须再次单击“提交”按钮。现在我想更新数据库中的行。

我正在使用会话变量来实现这一点,但我现在不能,因为该网站使用Realex支付网关,所以当付款成功时我无法取消会话,因为此代码在他们的网站上。

所以这就是我所拥有的:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

在PHP中。如果$ _POST [&#39; jid&#39;]为空,请插入新行并返回包含新创建的行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
}