【问题标题】:Codeigniter - loop through post information passing value to model query and outputting resultCodeigniter - 循环通过帖子信息传递值以模型查询并输出结果
【发布时间】:2013-04-27 03:34:35
【问题描述】:

我将表单数据传递给新的控制器/视图。

我想循环遍历 $_POST 数组,将值传递给控制器​​/模型,查询数据库并将结果返回给要显示的视图。

所以我的视图中有以下代码:

foreach($_POST as $key => $value) //$key is productcode eg '4560'
    {
       $this->sales_model->get_productdetails($this->input->post('$key'))
       echo "Price: ".$price."<br>";
       echo "Pieces: ".$pieces."<br>";
       echo "Cubic Meters: ".$cubicmeters."<hr>";

    }

这是我的模型:

function get_productdetails($productcode)
{
    $this->db->select('price,pieces,cubicmeters');
    $this->db->from('ProductList');
    $this->db->where('productcode',$productcode);
    $q = $this->db->get();
    if($q->num_rows() > 0) 
    {
        return $q->row_array(); 
    }
}

控制器: 函数 new_auto_spread_details() { $this->load->view('sales/new_autospread_order_lines'); }

这不能正常工作。如何在视图上输出/显示查询结果?这可以做到吗?如果没有,如何通过最佳实践来实现?

一如既往的感谢,

【问题讨论】:

    标签: database codeigniter loops post


    【解决方案1】:

    你应该使用 CodeIgniter 的输入类来获取所有的 post 值。

    $formValues = $this->input->post(NULL, TRUE);
    

    然后在您的控制器中设置一个中间值来保存您的数据。

    $products = array();
    
    foreach($formValues as $key => $value) 
    {
        $products[] = $this->sales_model->get_productdetails($key)
    }
    
    $data = array();
    $data["products"] = $products;
    

    将中介传递给视图。

    $this->load->view('sales/new_autospread_order_lines', $data);
    

    在您的评论中,将 $data 数组中的每个散列项作为变量引用。

    <?php foreach($products as $product) { ?>
    <p>
        <?php echo $product["price"]; ?>
    </p>
    <?php } ?>
    

    【讨论】:

    • 感谢 Randall,我将如何在我的视图中显示它?谢谢,
    • $data 数组中的所有哈希项在您的视图中都成为它们自己的变量。
    【解决方案2】:

    $this-&gt;input-&gt;post('$key') 应该是$this-&gt;input-&gt;post($key)

    任何以$this-&gt; 开头的东西都应该由控制器调用,而不是视图。

    您的控制器应如下所示:

    function new_auto_spread_details()
    {
        $products = array();
        foreach($_POST as $key => $value) //$key is productcode eg '4560'
        {
            /* your model method is returning an array,
               so you need to assign it to a variable */
            $products[] = $this->sales_model->get_productdetails($key)
        }
    
        $this->load->view('sales/new_autospread_order_lines', array(
            'products' => $products
        ));
    }
    

    然后在视图中:

    <?php foreach($products as $product): ?>
        Price: <?php echo $product['price'] ?><br>
        Pieces: <?php echo $product['pieces'] ?><br>
        Cubic Meters: <?php echo $product['cubicmeters'] ?><br>
    <?php endforeach; ?>
    

    【讨论】:

    • 感谢 Samutz,这可能会有所帮助,但现在屏幕为空白,因为输出错误。 $this-&gt;sales_model-&gt;get_productdetails($this-&gt;input-&gt;post($key)) 似乎打破了页面。可以这样绕过控制器吗?
    • 我有点误读了这个问题。 $this 只能用于控制器而不是视图。如果绕过控制器,视图是如何被调用的?
    • 现在将控制器添加到问题中。谢谢。
    • @Smudger 更新了我的答案。
    • 感谢 Samutz,这不起作用。如果我在控制器中设置回显,我可以看到每个 $key/$value。但是,我在视图中看不到任何输出。有任何想法吗?再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2015-12-08
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多