Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 第一次表单提交插入行后续提交更新同一行_Php_Jquery_Mysql_Forms - Fatal编程技术网

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

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

有没有人对我的问题有别的解决办法

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

我使用session变量来实现这一点,但我现在不能,因为网站使用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);
        }

然后有一个隐藏变量,但不确定这是否有效。也许一个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
}