簡體   English   中英

mysql更新設置所有字段相同

[英]mysql update setting all fields the same

這是我的PHP代碼:

if (isset($_POST['data']) && is_array($_POST['data'])) {
                foreach ($_POST['data'] as $row => $data) {
                    $result = mysql_query("UPDATE orders SET project_ref='".$data['project_ref']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                    $result1 = mysql_query("UPDATE orders SET supp_short_code='".$data['supp_short_code']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                    $result2 = mysql_query("UPDATE orders SET om_part_no='".$data['om_part_no']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                    $result3 = mysql_query("UPDATE orders SET description='".$data['description']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                    $result4 = mysql_query("UPDATE orders SET quantity='".$data['quantity_input']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                    $result5 = mysql_query("UPDATE orders SET cost_of_items='".$data['cost_of_items']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                    $result6 = mysql_query("UPDATE orders SET cost_total='".$data['cost_total_td']."' where order_id = '".$data['order_id']."'") or die(mysql_error());
                }
            }

因此,當用戶想要編輯訂單ID:1時,我希望它將更新order_id為1的所有行,但是此代碼正在將所有字段設置為“ 1”?

編輯:

這就是我將數據發送到PHP的方式:

$('#submit').live('click',function(){               
                    var postData = {};
                    postData['data[order_id]'] = $('#order_id').text();
                    $('#items tr').not(':first').each(function(index, value) {
                        var keyPrefix = 'data[' + index + ']';
                        postData[keyPrefix + '[supp_short_code]'] = $(this).closest('tr').find('.supp_short_code').text();
                        postData[keyPrefix + '[project_ref]'] = $(this).closest('tr').find('.project_ref').text();
                        postData[keyPrefix + '[om_part_no]'] = $(this).closest('tr').find('.om_part_no').text();
                        postData[keyPrefix + '[description]'] = $(this).closest('tr').find('.description').text();
                        postData[keyPrefix + '[quantity_input]'] = $(this).closest('tr').find('.quantity_input').val();
                        postData[keyPrefix + '[cost_of_items]'] = $(this).closest('tr').find('.cost_of_items').text();
                        postData[keyPrefix + '[cost_total_td]'] = $(this).closest('tr').find('.cost_total_td').text();
                    });

                $.ajax
                    ({
                    type: "POST",
                    url: "updateorder.php",
                    dataType: "json",
                    data: postData,
                    cache: false,
                    success: function()
                        {
                            alert("Order Updated");
                        }
                    });
            });

您可以先閱讀此內容 ,以免將來麻煩很多。

另外,您無需為每個需要更新的字段創建查詢。 忽略安全問題,您可以執行以下操作:

$q = "
  UPDATE orders 
  SET    project_ref='".$data['project_ref']."' ,
         supp_short_code='".$data['supp_short_code']."' ,
         om_part_no='".$data['om_part_no']."' ,
         description='".$data['description']."' ,
  // .... remaining fields here, don't forget   ^  the coma
  WHERE  order_id = '".$data['order_id']."'
";

mysql_query($q) or die(mysql_error());

這段代碼正在做的是設置你的表字段project_ref, supp_short_code, om_part_no, ...的東西(它來自$_POST['data']到任何order_id來自$_POST['data']['order_id']

如果您所有的字段都變為1,則您從表單發送的數據可能會遇到麻煩。 嘗試使用print_r($_POST)來解決它。

$_POST數據通常由用戶提供,因此除非您自己創建( $_POST['data'] = array() ),否則它不可能是本機PHP數組。

清理您的輸入,並在運行任何查詢之前記錄它... print_r($_POST['data']) ...確保它包含您實際想要的數據。

也許在MySQL中檢查DB Type for order_id。 我假設它被定義為INT。 如果是這樣,請在此處刪除單引號:

where order_id = ".$data['order_id']."

首先,$ _POST ['data']是一個數組數組嗎? 對我來說似乎有些奇怪。 一個foreach循環遍歷數組中的每個項目,並檢索as之后的鍵和值。 那是你的意思嗎?

if (isset($_POST['data']) && is_array($_POST['data'])) {
  foreach ($_POST['data'] as $row => $data) {
    $result = mysql_query("UPDATE orders SET $row='$data' WHERE order_id = '" . $_POST['data']['order_id'] . "';");
  }
}

第二點是,您不應該為每個字段創建一個新的SQL查詢。 嘗試這個:

if (isset($_POST['data']) && is_array($_POST['data'])) {
  $sql = "UPDATE orders SET ";
  foreach ($_POST['data'] as $row => $data) {
    $sql .= "$row = '$data'";
  }
}
$sql .= " WHERE order_id = '" . $_POST['data']['order_id'] . "'";
$result = mysql_query($sql);

第三,閱讀SQL注入。 至少要在$ row和$ data變量以及$ _POST ['data'] ['order_id']周圍放置mysql_real_escape_string()。 所以:

if (isset($_POST['data']) && is_array($_POST['data'])) {
  $sql = "UPDATE orders SET ";
  foreach ($_POST['data'] as $row => $data) {
    $sql .= "mysql_real_escape_string($row) = 'mysql_real_escape_string($data)'";
  }
}
$sql .= " WHERE order_id = '" . mysql_real_escape_string($_POST['data']['order_id']) . "'";
$result = mysql_query($sql);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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