2015-11-11 16 views
1

我有一個從數據庫(Controller.php這樣)來到一個表....更新多行到一個MySQL表使用PHP數組

<?php 
class masterClass 
{ 
public $db_host = "127.0.0.1"; 
public $db_user = "root"; 
public $db_pass = ""; 
public $db_name = "bachelor_bd"; 

public $db; 
public function __construct() 
{ 
    try 
    { 
     $this->db = new PDO("mysql:host={$this->db_host};dbname={$this->db_name}", $this->db_user, $this->db_pass); 
     $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $e) 
    { 
     $e->getMessage(); 
    } 
} 
public function bazar_deposit_show_parson($bid) 
{ 
    $sql = $this->db->prepare("SELECT * FROM `bachelor_member` WHERE bachelor_id=:bid"); 
    $sql->execute(array(':bid' => $bid)); 
    while ($data = $sql->fetch(PDO::FETCH_ASSOC)) 
    {   
     echo "<div class='float_left col-10'> 
       <div class='user-title col-3'><strong>$data[name]</strong></div>      
       <div class='user-title col-2'> 
       <input type='text' id='boxthree' name='deposit[]'> 
       </div> 
        <input type='hidden' name='mmid[]' value='$data[id]'> 
        <div class='edit col-1'><button type='submit' name='start_depo' class='btn btn-warning btn-lg btn-block'>Save</button>      
       </div> 
       </div>"; 
    } 
}} ?> 

而且聽到的是帖子頁

<?php 
// Header Area Goes Hear 
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "../layout/header.php"); 

if (isset($_POST['submit'])) 
{ 
    $row_data_id = array(); 
    foreach($_POST['mmid'] as $row=>$mmid) 
    { 
     $mmid= $mmid; 
     $row_data_id[] = $mmid; 
    } 

    $row_data_deposit = array(); 
    foreach($_POST['deposit'] as $row=>$deposit) 
    { 
     $deposit= $deposit; 
     $deposit= ($_POST['deposit'][$row]); 
     $row_data_deposit[] = $deposit; 
    }      
    $bachelor->update_bazar_deposit($row_data_id,$row_data_deposit); 
    if($bachelor) 
    { 
     echo "Update Successful" 
    } 
} 

//Bachelor Zone Left Sidebar 
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "../layout/sidebar.php");?> 

<div class="user-form post-block col-6">     
    <form action="bazar_deposit.php?b_zone=<?php $_GET['b_zone']; ?>&m_category=<?php $_GET['m_category']; ?>" method='POST'> 
     <?php if(isset($_GET['b_zone'])) { $bid=$_GET['b_zone']; $bachelor->bazar_deposit_show_parson($bid); } ?> 
     <button type='submit' name='submit' class='btn btn-warning btn-lg btn-block'>Save Recode</button> 
    </form> 
</div>  

<!-- Bottom navigation --> 
<?php require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "../layout/footer.php"); ?> 

然後當我提交表單它擊中(Controller.php這樣)

public function update_bazar_deposit($mmid,$deposit) 
{ 
    $sql = $this->db->prepare("UPDATE `bazar_deposit` SET deposit=:deposit WHERE bachelor_member_id=:mmid"); 

    $sql->bindparam(':mmid', $mmid[]);  
    $sql->bindparam(':deposit', $deposit[]); 
    $sql->execute(); 
    return $sql;  
} 

我在PDO和OOP新。好吧,當我設置$ mmid [1]和$ deposit [1]的值時,數據庫將取值。但是這種形式的重複會有好幾次,取決於用戶。用戶可以在此表單上重複1,2,3,4或多次。但我無法更新我的數據庫所有行由mmid引用。我只能更新一行。我能做什麼。幫助請..... .....

回答

1

準備好查詢後循環訪問數組。

是這樣的:如果該值被綁定

public function update_bazar_deposit($mmid,$deposit) 
{ 
    $sql = $this->db->prepare("UPDATE `bazar_deposit` SET deposit=:deposit WHERE bachelor_member_id=:mmid"); 

    for($i=0;$i<count($mmid);$i++) { 
     $sql->bindparam(':mmid', $mmid[$i]);  
     $sql->bindparam(':deposit', $deposit[$i]); 
     $sql->execute(); 
    } 
    return $sql;  
} 
+0

會發生什麼是空?它仍然會覆蓋以前的值,是嗎? –

+0

不,因爲如果它們都是'null',那麼查詢就會出錯。當它循環遍歷數組時,如果當前爲null,我不相信'bindparam'會保持以前的值。 – Jon

+0

很多很多謝謝jon其工作很好.... !!!! –