[英]SQL Database - Update Record via PHP Form. No Errors, but no update.
[英]Trying to update mysql record via php form. Need help?
我有用於更新mySQl行的表單。 我完成了搜索檢索腳本以查找記錄。 現在我需要更新它。
當我提交表單時,我得到一個確認part_no已更新,但它沒有顯示在數據庫中。
我究竟做錯了什么? 有沒有人在我的腳本中看到任何錯誤?
謝謝。
埃里克
這是我的腳本:
<?PHP
session_start();
?>
<?php
$orig_time=$_POST['orig_time'];
$type=$_POST['type'];
$part_no=$_POST['part_no'];
$description=$_POST['description'];
$count=$_POST['count'];
$size=$_POST['size'];
$min=$_POST['min'];
$max=$_POST['max'];
$qty=$_POST['qty'];
if ($part_no == "") echo "! No identifier retrieved";
else
echo "Amending record $part_no";
$host="localhost";
$username="XXXXXX";
$password="XXXXXX";
$db_name="naturan8_hero";
$tbl_name="cartons_current";
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("UPDATE cartons_current SET orig_time='$orig_time', type='$type',
description='$description', count='$count', size='$size', min='$min', max='$max',
qty='$qty', WHERE reference='$part_no'");
echo "<BR>$part_no was updated.<BR><BR>";
?>
您的查詢中存在語法錯誤。 此外,使用錯誤檢查器查看失敗的內容。 並確保您實際上有$part_no
來標識要更新的正確行:
而且,再次提防SQL注入!
$orig_time = mysql_real_escape_string($_POST['orig_time']);
// do the same for the other $_POST indexes before passing them to the query!
// if values are numeric, you can cast them to INT to make sure they are numbers
// e.g. $count = intval($_POST['count']);
mysql_query("UPDATE `cartons_current`
SET `orig_time` ='".$orig_time."',
`type` = '".$type."',
`description` = '".$description."',
`count` = '".$count."',
`size` = '".$size."',
`min` ='".$min."',
`max` ='".$max."',
`qty` ='".$qty."'
WHERE `reference` = '".$part_no."'") or trigger_error(mysql_error());
更新:
嘗試調用mysql_affected_rows()來查看操作的結果。 另外,考慮一下
使用UPDATE時,MySQL不會更新新值與舊值相同的列。 這就產生了mysql_affected_rows()可能實際上不等於匹配的行數的可能性,只有查詢受字面影響的行數。
您的問題似乎源於SQL語句中的此錯誤:
, WHERE reference='$part_no'"
您應該a)在構建腳本之前使用測試數據在測試數據庫上運行所有SQL語句,以及b)使用某種日志記錄,在那里可以使用SQL錯誤(不會顯示在每個人都可以查看它的頁面上) )。 換句話說,擺脫連接和數據庫選擇函數調用期間的OR die()
語句。
我建議使用PDO庫進行數據庫連接。 它更通用,允許您實現預處理語句,這比發送未轉義數據甚至使用類似mysql_real_escape_string()
方法要好得多。
此外,您的腳本邏輯似乎取決於$ _POST ['part_no']值是否有效。 確保在執行任何其他操作之前執行此操作。 使用錯誤或重定向來殺死腳本。 如果沒有正確的數據,沒有意義連接到數據庫。
以下是重新分配所有傳入POST值的快速技巧,BTW:
foreach($_POST AS $k=>$v) {
$$k = $v;
}
這有效的做法是在命名空間中創建一個與數組鍵同名的變量,例如$_POST['part_no']
變為$part_no
。 這消除了重新分配值的所有不必要的代碼行。 您還可以使用循環來執行任何數據驗證或清理/轉義,您無需手動完成所有操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.