【问题标题】:CodeIgniter drop down list not populating in the correct locationCodeIgniter 下拉列表未填充在正确的位置
【发布时间】:2014-03-10 19:52:05
【问题描述】:

我是 CI 和 PHP 的新手。我有一个由我的数据库中的表填充的国家的下拉列表。我已经设法让 CI 通过 mysql 获取和呈现数据,但它以纯文本形式填充在我的表单上方,而不是在下拉列表的值中。下面是简化的代码。如何获取下拉列表中的值?

我的看法...

<body>

<?php echo validation_errors(); ?>

<?php echo form_open('form'); ?>

<h5>Country</h5>
<select name="countryselect">
<?php echo form_dropdown(countryselect);?>
</select>

<br><br>

<div><input type="submit" value="Submit" /></div>

<?php echo form_close() ?>

</body>

我的控制器...

<?php

class Form extends CI_Controller {

    function index()
    {
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');        

        $this->form_validation->set_rules('firstname', 'First Name', 'trim|required|max_length[12]|xss_clean');
        $this->form_validation->set_rules('lastname', 'Last Name', 'trim|required|max_length[12]|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('pledge', 'Pledge', 'trim|required|max_length[12]|decimal|xss_clean');

        $this->load->model('country');
        $data['country'] = $this->country->get_country();

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('myform');
        }
        else
        {
            $this->load->database();

            $sql = "INSERT INTO donations (firstname, lastname, email, pledge) VALUES (
            ".$this->db->escape($this->input->post('firstname')).",
            ".$this->db->escape($this->input->post('lastname')).",
            ".$this->db->escape($this->input->post('email')).",
            ".$this->db->escape($this->input->post('pledge')).")";

            $this->db->query($sql);

            echo $this->db->affected_rows(); 

            $this->load->view('formsuccess');
        }
    }
}
?>

我的模型...

<?php

class Country extends CI_Model
{

function get_country() {
    $this->load->database();
    $return[''] = 'please select';
    $this->db->order_by('name'); 
    $query = $this->db->get('countries'); 
    foreach($query->result_array() as $row){
        echo '<option value="'.$return[$row['id']] = $row['name'].'">',$return[$row['id']] = $row['name'],'</option>'. "\n";
    }
    return $return;
}
}
?>

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    你的代码有点乱,顺便说一下你在

    中命名为 country 而不是 countryselect
    $data['country'] = $this->country->get_country();
    

    所以在视图中使用$country 作为变量。 最重要的是form_dropdown 需要array 作为参数,而不是option

    看看here;

    如果您想以这种方式创建选择,则不需要form_dropdown,而只需要常规的html

    <select name="select_country"><?php echo $country; ?></select>
    

    你需要将它传递给你的视图:

    $this->load->view('myform', $data);
    

    编辑:

    请记住Controller != Model != View,您必须将它们用于单一目的。

    您使用控制器将数据保存在数据库中,这在概念上是错误的,您应该将数据传递给您的模型并让它执行查询...您确实应该使用 ActiveRecord 而不是那来防止 @987654335 @。

    在您的模块中,您管理数据,用于创建选择,即使可以,最好将查询结果传递给控制器​​并让其管理。

    【讨论】:

    • 好的,所以如果我解释你的第一点,我应该用echo form_dropdown('name', $country, 'Australia'); 替换&lt;h5&gt;Country&lt;/h5&gt; &lt;select name="countryselect"&gt; &lt;?php echo form_dropdown(countryselect);?&gt; &lt;/select&gt;,但我仍然有这个问题。
    • 我认为我的模型有问题
    • 不,如果您从模型返回带有选项的字符串,则您不能使用 form_dropdown
    【解决方案2】:

    您需要的不仅仅是解决下拉问题。

    1 Codeigniter 文档

    转到此链接: http://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

    然后向下滚动到 drop_down function();

    你就会明白 WITH 例子这个函数做了什么以及如何使用。

    然后去

    http://ellislab.com/codeigniter/user-guide/database/active_record.html#insert

    您将了解如何将数据插入数据库。

    至于在控制器和模型中不回显的大多数基础知识,你会随着时间的推移而学习。

    -------旧评论

    至于你的下拉:

    //CI Accept parameters 
    echo $this->form_dropdown('NAME OF INPUT',array('optionValue'=>'label of option',...);
    

    这将产生一个

    <select namr='name of input'>
        <option value='optionValue'>label of option </option>
    </select>
    

    现在更重要的是你为问题建模:

    CI 查询生成器可以为你做数据敏感化,你不需要为简单的获取数据调用运行原始查询。

    示例替换

    $sql = "INSERT INTO donations (firstname, lastname, email, pledge) VALUES (
            ".$this->db->escape($this->input->post('firstname')).",
            ".$this->db->escape($this->input->post('lastname')).",
            ".$this->db->escape($this->input->post('email')).",
            ".$this->db->escape($this->input->post('pledge')).")";
    
            $this->db->query($sql);
    

    用更好的

    $data= array ('firstname'=>$this->input->post('firstname'),
              'lastname'=>$this->input->post('lastname')
    //              ... etc
              );
    $ins = $this->db->insert('donations',$data);
    echo $this->db->affected_rows(); //or what ever
    

    2 : 国家类扩展 CI_Model

    永远不应该回声!!;将 $query 返回给控制器并让控制器执行类似的操作

    foreach($query->result() as $r) {
        $dropdown[] = array( $r->id => $r->name);
    }
    

    然后返回 $dropdown 以查看您可以在哪里简单地echo form('countrySELECT',$dropdown);


    尝试更多地了解 oop 并实现它。永远不要在控制器或模型中回显;

    为了您的信息,

    echo "1";
    $this->load->view('aViewThatEcho2');
    echo "3";
    

    将导致132 而不是123,因为当 CI 在完成所有操作后关闭时,视图都被推送到输出,而不是在加载它们后!。

    【讨论】:

    • 感谢您的冗长回复。上面的第 1 部分......我是否在表单视图中的选择元素标签之间添加它?还有什么,在我的例子中是输入、选项和标签。抱歉,我对此很陌生。
    • 不,它会为你生成选择标签。你需要阅读 CI 的文档。
    • 我一直在尝试,虽然使用 3 个文件来生成一个 http 文档对我来说是压倒性的。阅读文档并不意味着我会立即理解,因为这对我来说完全脱离了上下文。但我一直在努力。另外,您并没有真正澄清我关于那条线的去向的问题。在这种情况下,“...”又是什么?
    • 嗯,我的 #1,是为了修复你插入与你原来的问题无关的 sql,以及......插入语句的其余部分!
    • @square_eyes 转到this link 并向下滚动到 Form_dropdown;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2020-06-11
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多