2013-04-20 73 views
1

以下是我的表單,其中有兩個不同的$ _POST數組,「ids」和「數量」。我試圖通過它們循環,以便我可以更新數據庫列。

我的形式:

<form action="" method="post"> 
      <ul> 
<?php  foreach($rows as $row) { ?> 
       <li> 
        <input type="hidden" name="ids[]" value="<?php echo $row['id']; ?>"> 
       </li> 
       <li> 
        <input type="text" name="quantities[]" value="1" size="3"> 
        <?php echo $row['title']; ?> 
       </li> 
<?php  } ?> 
       <li> 
        <br><input type="submit" value="Submit New Release Edits" name="submit"> 
       </li> 
      </ul> 
      </form> 

,我試圖以正確更新數據庫運行的代碼是:

if(isset($_POST['submit'])) { 
     foreach($_POST['quantities'] as $quantity) { 
      foreach($_POST['ids'] as $id) { 
       $stmt = $db->prepare("UPDATE titles SET release_quant=:release_quant WHERE id=:id"); 
       $stmt->bindValue(':release_quant', $quantity, PDO::PARAM_INT); 
       $stmt->bindValue(':id', $id, PDO::PARAM_INT); 
       $stmt->execute(); 
      } 
     } 
    } 

我知道代碼是不正確的,因爲它不」 t同時循環數量和id數組。我如何需要調整我的代碼?

回答

2

試試這個:(取代通過直接接入第二循環,所以你只能得到ID所需)

$i = 0; 
if(isset($_POST['submit'])) { 
     foreach($_POST['quantities'] as $quantity) { 
       $id = $_POST['ids'][$i]; 
       $stmt = $db->prepare("UPDATE titles SET release_quant=:release_quant WHERE id=:id"); 
       $stmt->bindValue(':release_quant', $quantity, PDO::PARAM_INT); 
       $stmt->bindValue(':id', $id, PDO::PARAM_INT); 
       $stmt->execute(); 
       $i++; 
     } 
    } 
+0

非常感謝。 – JimRomeFan 2013-04-20 21:47:41

+1

如果它對你有幫助,你應該批准這個答案。 – djmati11 2013-04-20 22:00:25

+1

我必須等一段時間才能批准它。 – JimRomeFan 2013-04-20 22:05:31

1

由於要同時通過2個陣列循環,最好是使用常規for循環索引而不是foreach循環:

if(isset($_POST['submit'])) { 
    $count = count($_POST['quantities']); 
    for($i = 0; $i < $count; $i++) { 
     $stmt = $db->prepare("UPDATE titles SET release_quant=:release_quant WHERE id=:id"); 
     $stmt->bindValue(':release_quant', $_POST['quantities'][$i], PDO::PARAM_INT); 
     $stmt->bindValue(':id', $_POST['ids'][$i], PDO::PARAM_INT); 
     $stmt->execute(); 
    } 
}