[英]first form submit insert row subsequent submits update the same row
有沒有人有我的問題的另一種解決方案。
單擊我的提交按鈕后,我想在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?
隱藏的領域是一個不錯的選擇。
在表單中包含一個空的隱藏字段:
<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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.