繁体   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