簡體   English   中英

試圖通過PHP表單更新mysql記錄。 需要幫忙?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM