2013-04-20 101 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(); 
    } 
}