簡體   English   中英

PHP PDO更新僅更改數組中的值

[英]php pdo update only changes value in array

我是pdo的新手,所以我只需要更改的值或從html作為數組(Items [])發布的值,下面的代碼更新發布的值並將未更改的值變為零。 請幫助並謝謝。

<?php

 if(isset($_POST['update'])) {

  for($t=0;$t<8;$t++){ 

       if(isset($_POST['Items'])) {
         $items=$_POST['Items'];
         $update="UPDATE items SET Updater = :LogName, 
         UptoDate = :uptodate, 
         ItemPrice = :Items  
         WHERE id = $t";
          $y=$t-1;
          $stmt=$Link->prepare($update);
          $stmt->bindParam(':Items',$items[$y], PDO::PARAM_STR);
          $stmt->bindParam(':uptodate', $date, PDO::PARAM_STR); 
          $stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR); 
          $stmt->execute();

     } else {
        // Don't do anything because it means there is no $_POST['Items(t)']
    } 
  }
}        
?>

......

</tr>
  </table> 
   <input type="submit" name="update" value="تحديث"/>
  </form>

將數據庫中的當前數據加載到一個數組中(正確格式化),然后使用array_diff獲取數據庫與表單數據之間的差異,因此您可以根據需要構建UPDATE語句。

您還可以為未填寫的字段指定默認值,因此當它們到達服務器時,您會知道哪些字段已更改(那些字段的值與默認值不同)。

尤里卡阿。 我解決了:

 if(isset($_POST['update'])) {
        $Items=$_POST['Items'];
        for($t=0;$t<8;$t++){
            if((!isset($Items[$t])) or ($Items[$t]==="") or ($Items[$t]===0))
                {$t++;}
        elseif(isset ($Items[$t])){
         $y=$t+1;
        $update="UPDATE items SET Updater = :LogName, 
        UptoDate = :uptodate, 
        ItemPrice = :Items  
        WHERE id = $y";

        $stmt=$Link->prepare($update);
        $stmt->bindParam(':Items',$Items[$t], PDO::PARAM_STR);
        $stmt->bindParam(':uptodate', $date, PDO::PARAM_STR); 
        $stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR); 
        $stmt->execute();

    }}}

更新查詢將僅更新需要更改的行。 您可以獲取受影響的行( http://php.net/manual/en/pdostatement.rowcount.php ),該行將告訴您已更新了多少行。 除非您特別需要更改的值(在這種情況下,您需要首先選擇它們),否則我相信代碼將自動處理您需要的內容。

暫無
暫無

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

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