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

Php 如何在codeigniter中创建动态链接下拉列表,php,jquery,codeigniter,Php,Jquery,Codeigniter,我想在codeigniter中创建多个下拉列表,在我的情况下,当用户选择国家时,下一个列表应提供该国家的州选项,在用户选择州后,下一部分应提供城镇选项等。。。我希望通过使用一些脚本来提供列表或选项,当用户最终完成选择时,应该在数据库中更新列表。是否可以使用脚本而不是从数据库加载选项来提供选项列表。下面是我想要在其上实现动态下拉列表的视图和模型文件 form_model.php function r_ins() { $session_user=$this->session->

我想在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);

}
函数r_ins()
{
$session_user=$this->session->userdata('logged_in');
$sysdat=日期(“Y-m-j H:i:s”);
$data=数组(
'id'=>this->input->post('id'),
'name'=>this->input->post('name'),
“国家”=>$this->input->post('country'),
'state'=>this->input->post('state'),
'town'=>this->input->post('town'),
“村庄”=>this->input->post('village'),
'c_name'=>$session_用户['username'],
“c_日期”=>sysdat美元
);
$this->db->insert('r_info',$data);
返回$this->input->post('id');
//回声“;
//打印(邮政美元);
}
view.php

<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>
ID:
姓名:
国家:
选择国家
美国
澳大利亚
日本
韩国


声明: 城市: 城镇:
  • 如果您希望下拉列表的内容是动态的,那么我相信如果不通过指定查询来访问数据库,就无法实现这一点
  • 根据我在你的问题中的理解,你需要一个动态下拉列表,其中的内容通过前面的下拉列表过滤。那么最好使用AJAX,因为PHP只能运行服务器访问函数,而不需要刷新页面
  • 这里是一个ajax演示
    
    函数getXMLHTTP(){//返回xml http对象的函数
    var xmlhttp=false;
    试一试{
    xmlhttp=新的XMLHttpRequest();
    }
    第(e)款{
    试试{
    xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
    }
    捕获(e){
    试一试{
    xmlhttp=新的ActiveXObject(“Msxml2.xmlhttp”);
    }
    渔获物(e1){
    xmlhttp=false;
    }
    }
    }
    返回xmlhttp;
    }
    函数getDoc(strURL){
    var req=getXMLHTTP();
    如果(请求){
    req.onreadystatechange=函数(){
    如果(req.readyState==4){
    //只有在“OK”的情况下
    如果(请求状态==200){
    document.getElementById('my_div')。innerHTML=req.responseText;
    }否则{
    警报(“使用XMLHTTP:\n“+req.statusText时出现问题”);
    }
    }               
    }           
    请求打开(“获取”,strURL,true);
    请求发送(空);
    }
    }
    

    这就是魔法发生的地方。在我的第一个下拉列表中,我放置了一个onChange属性。这将调用我的getdocjavascript函数,该函数有一个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> 
    
    
    选择专业
    一般的
    儿科学
    医师
    心脏病专家
    肺的
    
    现在,您需要在HTML中使用一个DIV,它从另一个页面获取数据,然后在当前页面中将其作为DOM返回。这样,您的原始页面不会刷新,但仍然可以从服务器获取数据


    getSpec.php 显示在php工作表下发生的事情
    require_once('dbcon.php');
    $query=“从医生中选择医生姓名,其中专业='$spec';
    $result=mysqli\u查询($conn,$query);
    ?>
    
    你必须使用ajax。互联网上有很多关于这个主题的教程。谢谢@siddhesh,我会用谷歌搜索它。从数据库加载下拉列表并使用ajax脚本有什么优势吗?我已经看到ajax需要在客户端浏览器中启用javascript(将用户重定向到如何启用java脚本的页面)…您无法以任何方式管理客户端的浏览器。如果可以的话,这将是安全问题。现在大多数(如果不是全部的话)浏览器都默认启用了JavaScript。人们禁用JS:的原因是可以理解的。明白你的意思了@Tpojka。谢谢!谢谢@Gokigoooks,我能在我的phpcodeigniter项目中实施你的建议吗?是的,你能。这是一种程序性的方法,所以说“是”是安全的。再次感谢@gokigoooks。。。我会想办法试一下。。。谢谢你
        <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>
    
    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>