php pdo update只更改数组中的值

时间:2016-03-14 10:06:22

标签: php arrays pdo

我是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>

3 个答案:

答案 0 :(得分:0)

将数据库中的当前数据加载到数组中(正确格式化),然后使用array_diff获取数据库和表单数据之间的差异,这样您就可以构建UPDATE语句了愿望。

您还可以为未填写的字段指定默认值,因此当它们到达您的服务器时,您知道哪些字段有更改(值与默认值不同)

答案 1 :(得分:0)

Eurekaaaa。 我解决了这个问题:

 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();

    }}}

答案 2 :(得分:-1)

更新查询只会更新需要更改的行。您可以获取受影响的行(http://php.net/manual/en/pdostatement.rowcount.php),它将告诉您已更新的行数。除非您特别需要更改的值(在这种情况下您需要先选择它们),我相信代码会自动处理您需要的内容。