从表中获取数据并根据选择值Codeigniter填充组合框

时间:2013-03-07 07:39:09

标签: php mysql codeigniter

假设有一个表FRUITS:

mysql> select * from FRUITS;
+---------+-----------+
| fruitid | fruitname |
+---------+-----------+
|       1 | Orange    |
|       2 | Apple     |
|       3 | Pear      |
|       4 | Banana    |
+---------+-----------+
4 rows in set (0.02 sec)

我有一个包含表单的视图文件。

这里我有一个列表,用户可以选择他想要的食物,所以在用户选择“水果”的情况下,我从表格FRUITS获取数据并填写一个组合框....

用户填写表单后,将更新一些表。在此过程中,我需要查阅FRUITS表中的数据,并在用户选择食物列表中的水果时填写一个组合框....

如果我没有使用Codeigniter,我可以使用

<?php
 $conn = mysql_connect('localhost','yourUsernameHere','yourPasswordHere');
 mysql_select_db('testdb',$conn);
 $query = "select fruitid,fruitname from FRUITS order by fruitname";
 $result = mysql_query($query,$conn);
 $selectbox='<select name=\'fruit\'>';
 while ($row = mysql_fetch_assoc($result)) {
     $selectbox.='<option value=\"' . $row['fruitid'] . '\">' . $row['fruitname'] . '</option>';
 }

 $selectbox.='</select>';
 mysql_free_result($result);
 echo $selectbox;
?>

填写表单内的组合框,然后捕获该值并将其发送到其他表中插入数据......

如何在Codeigniter上执行此操作,因为查询必须在控制器文件中完成...?

更新

让我们说我有

模型

class Fruits extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    function what_fruits()
    {
        $this->db->select('fruitname');
        $this->db->from('FRUITS');
        $q = $this->db->get('');
        if($q->num_rows() > 0) 
        {
            $data = array();
            foreach($q->result() as $row) 
            {
                $data=$row;
            }
            return $data;
        }
    }
}

控制器

class main_form_view extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $this->load->view('main_form_view');
    }

    public function result()
    {
        $this->load->model('Fruits');
        $data['fruitname'] = $this->Fruits->what_fruits(); 

    }
}

查看main_form_view

<html>
    <head></head>
    <body>
    <form method="post">
        <select name="food" id="food" onchange="fill_cb_food(this.value);" >
          <option value="0">fruits</option>
          <option value="1">other1</option>
          <option value="2">other2</option>
        </select>

        //response of ajax call display here.???
       <div class="selectbox" id="id_fruits">
          <select name="fruits" id="fruits">
             <option value="">--Choose fruit--</option>
          </select>
       </div>



    </form>
    </body>
</html>



    function fill_cb_food(id)
    {
       $.ajax({
                type: "POST",
                url: "main_form_view/result.php,
                data: "fruit=" + fruitname,
                success: function(html){
                    $("#id_fruits").html(html);
                }
            });
    }

所以我想要一个带

的组合框
 Orange    
  Apple    
  Pear     
  Banana

当用户在表格中选择水果选项时...

2 个答案:

答案 0 :(得分:2)

您可以使用ajax post来获取数据运行时并填充到您的组合框中。 像:

         $.ajax({
                url: 'http://url_to_fetch_fruit_table_data/',
                type: "POST",
                data:data,
                success: function(response) {
                   $("select").html(response);
                }
            });

或 您也可以使用 foraeach 进行循环和填充。

答案 1 :(得分:1)

在模型中,您可以使用'*'选择任何列。

您必须将数据传递给视图文件:

class main_form_view extends CI_Controller
{    
    public function index()
    {
        $this->load->model('Fruits');
        $data['fruits'] = $this->Fruits->what_fruits(); 
        $this->load->view('main_form_view', $data);
    }
}

然后你可以在视图文件中执行:

<?php foreach($fruits as $fruit): ?>
    <option value="<?php print  $fruit['fruitid'] ?>"><?php print $fruit['fruitname']</option>
<?php endforeach; ?>