2017-04-10 48 views
0

我需要在foreach循環中傳遞兩個或多個帶有公共索引鍵的輸入,以一次更新多個mysql行。如何使用foreach循環中的通用索引鍵傳遞多個值?

前端

<table> 
       <thead> 
       <tr> 
        <th>ID</th> 
        <th>Column 1</th> 
        <th>Column 2</th> 
       </tr> 
       </thead> 

       <tbody> 

     <form method="post" action="process.php"> 

     <?php 
     $stmt = $mysqli->prepare("SELECT id,column1,column2 FROM table"); 
     $stmt->execute(); 
     $stmt->store_result(); 
     $stmt->bind_result($id,$column1,$column2); 
     while ($stmt->fetch()) { 

      ?> 
       <tr> 
        <td><?php echo $id ?></td> 

        <!-- Here User will input values for the below two fields in all the rows --> 

        <td><input type="text" name="column1[<?php echo $id; ?>]"/></td> 
        <td><input type="text" name="column2[<?php echo $id; ?>]"/></td> 


       </tr> 
     <?php } ?> 
       <input type="submit" name="submit" value="Update all"> 
       </form> 
       </tbody> 

</table> 

後端

<?php 
if(isset($_POST['submit'])){ 

     foreach($_POST['column1'],$_POST['column2'] as $key=>$value,$value1){ //column1 and column2 have common $id in each row 

      $stmt = $mysqli->prepare("UPDATE table SET column1 = ?, column2 = ? WHERE id = ?"); 
      $stmt->bind_param('ssi',$value,$value1,$key); 
      $stmt->execute(); 

     } 

     if ($stmt->execute()) { 
      echo "Done!"; 
      exit(); 
     } 

} 

?> 

在這裏,索引關鍵字(ID)是在每行中 「列1」 和 「列2」 之間共用。所有行都有唯一的ID。

我需要在foreach循環中將「column1」和「column2」的值與公共索引鍵一起傳遞。這樣我就可以在單個查詢中的所有行中更新數據庫表列「column1」和「column2」。

所有的幫助將不勝感激。

+0

你應該在循環之前做'prepare'和'bind_param',而不是每次。 – Barmar

+0

@Barmar Ok注意!謝謝 –

回答

2
<?php 
foreach (array_keys($_POST['column1']) as $key) { 
    $value = $_POST['column1'][$key]; 
    $value1 = $_POST['column2'][$key]; 
    $stmt = $mysqli->prepare("UPDATE table SET column1 = ?, column2 = ? WHERE id = ?"); 
    $stmt->bind_param('ssi',$value,$value1,$key); 
    $stmt->execute(); 
} 
+0

它工作。謝謝! –