在codeigniter中动态加载表单

时间:2013-02-27 07:46:21

标签: forms codeigniter-2

我是codeigniter的新手,试用了一些简单的页面。我已成功连接到数据库以进行插入和更新。但现在我想填充数据库中的字段进行更新。也就是说,当用户从下拉列表中选择名称时,相应的值应出现在其他字段中,以便用户可以轻松更新。

我已经在没有ajax或jquery的情况下做了这件事。它对我有用但有一些警告信息 - 使用未定义的常量。

我是由mvc给予的。帮我澄清一下。

控制器:

public function update()
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Update Type';
$data['product_type'] = $this->editType_model->get_product_type();
    $data['row'] = $this->editType_model->get_row();

$this->form_validation->set_rules('productype', 'productype', 'required');

if ($this->form_validation->run() === FALSE)
{
    $this->load->view('templates/header', $data);   
    $this->load->view('cm/update', $data);
    $this->load->view('templates/footer');

}
else
{
        $data['title']= 'Updation';
        $data['message']= 'Updation succeeded';
    $this->editType_model->update_news();
    $this->load->view('cm/success', $data);
}
}

型号:

public function get_product_type() {
    $data = array();
            $this->db->order_by("product_type_name", "desc"); 
    $query = $this->db->get('product_type');
    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row){
                $data[] = $row;
            }
    }   
    $query->free_result();
    return $data;   
}
public function get_row() {
    $data = array();
                $id= $_POST[product_type_id];
    $query = $this->db->get_where('product_type', array('product_type_id' => $id));
            if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row){
                $data[] = $row;
            }
    }   
    $query->free_result();
            return $data;   

}
public function update_news()
{
$this->load->helper('date');
$Product = $this->input->post('product_type_id');
$data = array(
    'product_type_name'=>($_POST['productype']),
    'rank'=>($_POST['rank'])        
            );
$this->db->where('product_type_id',$Product);
return $this->db->update('product_type', $data);
}

查看:

<?php $productType = 0;
if(isset($_POST['product_type_id'])){
$productType = $_POST['product_type_id'];
}?>
<div id="Content"><div>
<form action="" method="post" name="f1">
<table ><tr><td>Select Product Type Name:</td>
    <td><Select id="product_type_id" name="product_type_id" onChange="document.f1.submit()">
            <option value="0">--SELECT</option>
            <?php if (count($product_type)) {
                              foreach ($product_type as $list) { ?>
            <option value="<?php echo $list['product_type_id']; ?>" 
            <?php if($productType==$list['product_type_id']) echo     "Selected" ?> >
            <?php echo $list['product_type_name'];  ?></option>
            <?php }} ?></Select></td></tr></table></form>
<?php   if($productType){
            if (count($row)) {
        foreach ($row as $faProductType) { ?>
    <div > <form action="" method="post" class="form-Fields" >
    <input type="hidden" name="product_type_id" id="product_type_id" value="<?php echo     $faProductType['product_type_id']; ?>" >
    <table border="0" cellpadding="8" cellspacing="0" >
    <tr><td>Product Type <font color="red">*</font></td><td style="width: 10px;"> :         </td>
     <td><input name="productype" type="text" value="<?php echo     $faProductType['product_type_name']; ?>" style=" width:300px;" /></td>
            <td><span class="err" id="productTypeDesc1Err"></span></td></tr>
         <tr><td >Rank</td><td style="width:10px;"> : </td>
            <td ><input type="text" name="rank" id="rank" value="<?php echo     $faProductType['rank']; ?>" size="39" />&nbsp;&nbsp;<span class="err"     id="productTypeNameErr"></span></td>
            <td ></td></tr><tr><td></td><Td colspan="2" align="center">
            <input type="submit" value="Update" class="buttonimg"      name='cm/editType/update' style="width:100px"
            onClick="return validEditProductType();">
            </Td><td></td></tr></table></form></div></div></div>
<?php }}} ?>

2 个答案:

答案 0 :(得分:0)

您可以将Ajax用于此目的 选择框的onchange填充表格的div。

控制器方法

function getUserdata(){
    $where['username'] = $this->input->post('username');
    $this->load->model('users_model');
    $data['user'] = $this->users_model->getUser($where);
    $this->load->view('userform',$data);
}

你建模方法

function getUser($where){
    return $this->db->where($where)->get('usertable')->row()
}

的Ajax

$(function(){
    $('#selecttion').change(function(){
         var username = $(this).val();
         $.ajax({
            url : '<?php 'echo url to controller method'?>',
            type : 'POST'  ,
            data : 'username='+username,
            success : function(data){
                $('#dividtofill').html(data);
            }
         }); 

    });
}) 

编辑:

调用ajax很容易 为此包括标题中的jquery库。
这是你的下拉列表

注意:将上面的ajax代码放在脚本

的head部分中
<select name="user" id="selecttion">
    <option value="John">John</option>
    <option value="Sam">Sam</option>
    <option value="David">David</option>
</select>

现在,当更改此下拉列值时,将调用上面定义的ajax函数。

答案 1 :(得分:0)

我终于清除了错误。我通过简单的if isset循环完成了这个。

现在我的模型中的get_row()看起来像这样。

public function get_row() {
            $data = array();
$id= 0;
if(isset($_POST['product_type_id'])){
$id = $_POST['product_type_id'];
}
$query = $this->db->get_where('product_type', array('product_type_id' => $id));
if ($query->num_rows() > 0) {
foreach ($query->result_array() as $row){
$data[] = $row;
}
}
    $query->free_result();
    return $data;   
}