обновить несколько строк в таблицу Mysql с помощью массива Php

1

У меня есть таблица, которая поступает из базы данных (controller.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], база данных примет значение. но это повторение формы будет несколько time.its зависит от пользователя. пользователь может повторить 1,2,3,4 или много раз в этой поданной форме. Но я не могу обновить мою базу данных все строки, которые ссылаются на mmid. Я могу обновить только одну строку. что я могу сделать. Помощь pls..... !!!!

Теги:
oop
pdo

1 ответ

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 запрос выдаст ошибку. Поскольку он проходит по массиву, я не верю, что bindparam сохранит предыдущее значение, если текущее значение равно нулю.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню