如何在codeigniter中创建动态链式下拉列表

时间:2015-03-14 14:10:39

标签: php jquery codeigniter

我想在codeigniter中创建多个下拉列表,在我的情况下,当用户选择国家/地区时,下一个列表应提供该国家/地区的州选项,并且在用户选择州后,下一部分应提供城镇选项等。 ..我希望使用一些脚本提供列表或选项,当用户最终完成选择时,应在数据库中更新列表。是否可以通过使用脚本而不是从数据库加载选项来提供选项列表。这是我想要实现动态下拉列表的视图和模型文件

form_model.php

function r_ins()
{

    $session_user=$this->session->userdata('logged_in');
    $sysdat = date("Y-m-j H:i:s");      

    $data= array(
        'id'        => $this->input->post('id'),
        'name'      => $this->input->post('name'),          
        'country'   => $this->input->post('country'),
        'state'     => $this->input->post('state'),
        'town'      => $this->input->post('town'),
        'village'   => $this->input->post('village'),           
        'c_name'    => $session_user['username'],
        'c_date'    => $sysdat
        );

    $this->db->insert('r_info',$data);

    return $this->input->post('id');
    //echo "<pre>";
    // print_r($_POST);

}

view.php

 <label> ID:<span id="r_id" style="font-size:12px;float:right;"></span></label>
     <input type="text" name="id" id="r_id" placeholder="ID" required/>    

     <label >Name:</label>
     <input type="text" name="name"  placeholder="Name" required/>

     <label >Country:</label>
     <select name="country" >
         <option>Select Country</option>
         <option value="USA">USA</option>
         <option value="AUS">Austrailia</option>
         <option value="Jap">Japan</option>
         <option value="Korea">Korea</option>
     </select><br/><br/>                                

     <label >State:</label>
     <input type="text" name="state" placeholder="State" required/>

     <label >City:</label>
     <input type="text" name="city" placeholder="City" required/>
     <label >Town:</label>
     <input type="text" name="town" placeholder="Town" required/>         

     <input type="submit" value="Save" id="re_submit" class="button"><br/>

 </form>

1 个答案:

答案 0 :(得分:0)

  1. 如果您希望下拉列表的内容是动态的,那么我相信您无法通过指定查询来访问数据库,从而实现此目的。
  2. 根据我在您的问题中的理解,您需要一个动态下拉列表,其内容将通过其前面的下拉列表进行过滤。那么你最好的选择是使用AJAX,因为PHP只能运行服务器访问功能,而不需要 POST GET ,这需要刷新页面。
  3. 这是一个ajax演示

    <script type="text/javascript"> 
    
    
    
    
    function getXMLHTTP() { //function to return the xml http object
    var xmlhttp=false;  
    try{
        xmlhttp=new XMLHttpRequest();
    }
    catch(e)    {       
        try{            
            xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){
            try{
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e1){
                xmlhttp=false;
            }
        }
    }
    
    return xmlhttp;
    }
    
    
    
    function getDoc(strURL) {       
    
    var req = getXMLHTTP();
    
    if (req) {
    
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                // only if "OK"
                if (req.status == 200) {                        
                    document.getElementById('my_div').innerHTML=req.responseText;                       
                } else {
                    alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                }
            }               
        }           
        req.open("GET", strURL, true);
        req.send(null);
    }
    
    }
                                    </script>
    

    这里是魔术发生的地方。在我的第一个下拉列表中,我放置了一个onChange属性。这会调用我的getDoc javascript函数,它具有PHP FUNCTION作为参数。

        <select name="docSpec" id="docSpec" onChange="getDoc('getSpec.php?spec='+this.value)">
    
                <option>pick a specialization</option>
                <option value="General">General</option>
                <option value="pediatrics">pediatrics</option>
                <option value="Physician">Physician</option>
                <option value="Cardiologist">Cardiologist</option>
                <option value="Pulmonary">Pulmonary</option>
    
        </select>
        <div id="my_div" style="display:inline;">       
                    <!--content from getSpec.php goes here--->                              
        </div>
    

    现在您需要HTML中的DIV从另一个页面获取数据,然后在当前页面中将其作为DOM返回。这样您的原始页面就不会刷新,但仍会从服务器获取数据。


    <强> getSpec.php 显示php表单下发生的事情     

    require_once('dbcon.php');
    $query="select doctorName from doctors where specialty= '$spec'";
    $result=mysqli_query($conn,$query);
    
    ?>
    <select name="docName">
    
    <?php 
    
        while( $row = mysqli_fetch_row($result)) { 
    
    echo "<option type='hidden' value='$row[0]'>$row[0]</option>";
    } ?>
    
     </select> 
    

    我希望此代码有所帮助。你可以根据自己的需要调整它。