简体   繁体   中英

php pdo update only changes value in array

I'm very new in pdo, so I only need the changed value or values that post from html as array (Items[]) , this code below updates posted values and puts the unchanged value become to zero. please help and thanks.

<?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>

Load the current data from database into an array (format it properly), then use array_diff to get the differences between the database and the form data, so you can build the UPDATE statement as you wish.

You could also specify a default value for fields which wasnt filled, so when they arrive to your server, you know which ones have changes (those with a value different from default one)

Eurekaaaa. i solve it:

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

    }}}

Update queries will only update rows that need to be changed. You can get the affected rows ( http://php.net/manual/en/pdostatement.rowcount.php ) which will tell you how many rows were updated. Unless you specifically need the changed values (in which case you'll need to select them first), I believe the code will handle what you need automatically.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM