繁体   English   中英

使用表从数据库获取信息并进行更新

[英]Getting an info from the DB with Tables and Updating it

大家好,我在这种情况下遇到了困难:

我想使用模态获取产品信息,我得到了以下代码:

    //Model.php
    public function getProduct($product_id){
    $this->db->select('product_id,product_name,product_price,product_qty');
    $this->db->from('tbl_products');
    $this->db->where('product_id',$product_id);
    $query = $this->db->get();

    return $query->result();
    }

    //Controller.php
    public function view_product(){
    $product_id = $this->input->post('product_id');
    $this->load->view('header');
    $this->data["post"] = $this->Model->ProductList();
    $this->load->view('product_page',$this->data);
    $this->data["post"] = $this->Model->getProduct($product_id);
    $this->load->view('modal/update_product',$this->data);
    }

    //update_product.php (modal) my View
    lets just go straight into the form
    <form action="" method="post">
    <?php foreach($posts as $post){ ?>
    <input type = "hidden" name = "product_id" value = "<?php echo $post->product_id;?>"/>
    <input type = "text" name = "product_name" value = "<?php echo $post->product_name;?>"/>
    <input type = "text" name = "product_price" value = "<?php echo $post->product_price;?>"/>
    <input type = "text" name = "product_qty" value = "<?php echo $post->product_qty;?>"/>
    <button type="submit">Update</button>
    <?php } ?>
    </form>

我已经有了一张桌子:我可以在product_page.php中看到所有产品,这是桌子的样子:

    ID        Name        Price        Quantity        Option
    1        Shoes        150.00        1                Update
    2        Liquor        67.50        5                Update
    3        Paint        1000.00       5                Update

单击“更新”按钮后,将弹出update_product.php(一个模态)并获得产品1的结果。如果我按第一个“更新”,则仅“鞋”的信息将在模态内,首先我尝试了,我获得了所有产品的所有信息,这使我的模态因foreach而变得多余和循环,然后我尝试从表ID本身获取信息,而没有产品弹出,我怎么只能看到1个使用模态的产品? 非常感谢您,女士和先生。 请我真的需要你的帮助:(

尽管我不清楚您要问的是什么,但这是您的问题的答案。 您的控制器代码似乎没有任何意义。如果您想在页面上显示所有产品,然后在单击相应的更新链接时想要编辑/更新产品,则可以执行此操作。

使用单控制器方法进行列表和更新

//Controller.php
public function view_product(){
    $product_id = (isset($this->input->post('product_id')) ? $this->input->post('product_id'): False ;
    if($product_id == False){
        $this->data["post"] = $this->Model->ProductList();
        $this->load->view('product_page',$this->data);
    } else{
        $this->data["post"] = $this->Model->getProduct($product_id);
        $this->load->view('modal/update_product',$this->data);
    }
}

这是对代码的简单修改,以使其正常工作,但是由于此代码无法处理更新表单的表单提交(除非您将更新表单指向其他控制器),因此您将不得不向该控制器添加其他代码而且您的代码很快就会变得混乱。 我对你的个人建议是

使用不同的控制器进行列表查看和更新

//Controller.php

public function view_product(){
    $this->data["post"] = $this->Model->ProductList();
    $this->load->view('product_page',$this->data);
}

public function update_product($product_id){
    if($this->input>post('submit')){   // 'submit'should be replaced with the name attribute of your submit button
        //call your model and handle the update form submission here
    }
    $this->data["post"] = $this->Model->getProduct($product_id);
    $this->load->view('product_page',$this->data);
 }

现在,您product_page.php的更新选项应指向具有相应产品ID的“ update_product”控制器方法, 例如{base_url} / controller_class_name / update_product / 1

我认为您的product_page.php具有类似这样的代码,可以循环浏览所有产品并在表格中显示产品,现在,当您单击更新链接时,它将指向update_product控制器,并将处理更新过程。

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Price</th>
            <th>Quantity</th>
            <th>Option</th> 
        </tr>
    </thead>
    <tbody>
        <?php if(!$products){ ?>
            <tr>
                <td colspan="5">No result</td>
            </tr>
        <?php } ?>
        <?php if($products){ ?>
        <?php foreach ($products as $product) { ?>
            <tr>
                <td><?php echo $product->id; ?></td>
                <td><?php echo $product->name; ?></td>
                <td><?php echo $product->price; ?></td>
                <td><?php echo $product->quantity; ?></td>
                <td>                        
                    <a href="<?php echo base_url(); ?>controller_class_name/update_product/<?php echo $product->id; ?>" >Update</a>
                </td>
            </tr>
        <?php } } ?>
    </tbody>
</table>

您将不需要在update_product.php内进行foreach循环,因为您一次只能更新一个产品。

希望这是您要寻找的答案,如果没有,请发表评论,我会相应地编辑答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM