2016-03-14 58 views
0

我在pdo中很新,所以我只需要更改一個或多個從html作爲數組(item [])發佈的值,下面的代碼更新了發佈的值並將其保持不變值變爲零。 請幫助和謝謝。php pdo更新只改變數組中的值

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

什麼是具體問題?你有沒有收到錯誤?問題在哪裏? – izk

+0

你的桌子是什麼樣的? – apokryfos

+0

爲什麼你不綁定Where語句中的$ t? –

回答

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

    }}} 
-1

更新查詢只會更新需要更改的行。你可以得到受影響的行(http://php.net/manual/en/pdostatement.rowcount.php),它會告訴你有多少行被更新。除非您特別需要更改的值(在這種情況下,您需要先選擇它們),否則我相信代碼將自動處理您需要的值。

+0

他想用正確的值執行UPDATE語句,而不是在執行後得到更改。 – Nadir

0

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

你也可以爲它wasnt填充字段指定一個默認值,所以當他們到達您的服務器,你知道哪些有變化(與那些從默認的一個不同的值)

+0

謝謝Nadir,我提供了從數據庫加載當前數據的建議,但是我想知道是否有其他方式通過更多的測試輸入'我第一次使用pdo編寫代碼,所以我哪裏出錯了。 – Mukh