我需要我的表單來發布INSERT或UPDATE數據,具體取決於列是否已經存在。 INSERT查詢工作正常,但UPDATE不。我想這應該是因爲最初的sql查詢($ query)失敗,很可能是因爲它沒有找到$ Unique_Ref POST數據。如果是這種情況,我該如何從$ invoice_data數組中提取這個單個值?PHP提交插入和更新數據
這是表單頁面代碼:
if (isset($_GET['success']) && empty($_GET['success'])) {echo 'Record saved'; } else {if (empty($_POST) === false && empty($errors) === true) {$invoice_data = array(
'Unique_Ref' => mysqli_real_escape_string($conn, $_POST['Unique_Ref']),
'Supplier_Name' => mysqli_real_escape_string($conn, $_POST['Supplier_Name']),
'Supplier_Invoice_Ref' => mysqli_real_escape_string($conn, $_POST['Supplier_Invoice_Ref']),
'Office' => mysqli_real_escape_string($conn, $_POST['Office']),
'Loss_Surplus_Amount' => mysqli_real_escape_string($conn, $_POST['Loss_Surplus_Amount']),
'Loss_Surplus_Currency' => mysqli_real_escape_string($conn, $_POST['Loss_Surplus_Currency']),
'Outcome' => mysqli_real_escape_string($conn, $_POST['Outcome']));
save_invoice($invoice_data);header('Location: invoices.php?success'); exit();
} else if (empty($errors) === false) {echo output_errors($errors);} ?> *html form....*
這是save_invoice()函數:
function save_invoice($invoice_data) {
global $conn;
array_walk($invoice_data, 'array_sanitize');
$fields = '`' . implode('`, `', array_keys($invoice_data)) . '`';
$data = '\'' . implode('\', \'', $invoice_data) . '\'';
$query = mysqli_query($conn, "SELECT * FROM `invoicelog` WHERE `Unique_Ref` = '$Unique_Ref'");
$result = mysqli_num_rows($query);
if($result > 0) {
mysqli_query($conn, "UPDATE `invoicelog` SET $fields = $data WHERE `Unique_Ref` = '$Unique_Ref'");
} else {
mysqli_query($conn, "INSERT INTO `invoicelog` ($fields) VALUES ($data)");
}
任何建議將是非常歡迎的。正如我所提到的,最終的INSERT查詢工作正常,它是不起作用的UPDATE查詢。
使用UPDATE時會出現什麼錯誤?你確定$ fields,$ data,$ Unique_Ref的內容嗎?另外要注意你的語法,如果你直接在你的查詢中加入變量,你可能會對SQL注入造成損害...... – Random