有没有人能解决我的问题。
首次单击我的提交按钮时,我想在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?
答案 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
}