CodeIgniter下拉列表未填充在正确的位置


CodeIgniter drop down list not populating in the correct location

我是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;
}
}
?>

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

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

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

看这里;

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

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

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

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

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

你使用你的控制器在数据库中保存数据,这在概念上是错误的,你应该把数据传递给你的模型,让它执行查询…你真的应该用ActiveRecord来代替它来防止sqlinjection

在你的模块你管理数据,创建选择,即使你可以,更好的事情是传递查询结果到控制器,让它管理

你需要的不仅仅是解决下拉菜单问题。

1 Codeigniter文档

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

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

,你会明白这个函数是做什么的,以及如何使用。

然后转到

http://ellislab.com/codeigniter/user-guide/database/active_record.html插入

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

至于控制器和模型中最基本的不回显,你会慢慢学会的。

——老评论

As for you

//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查询生成器可以为u做数据敏感化,并且你不需要为简单的get data调用运行原始查询。

替换

$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);

With better

$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: class Country extends CI_Model

永远不要回显!!;向控制器返回$query并让控制器执行类似

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

然后返回$下拉菜单查看,你可以简单地echo form('countrySELECT',$dropdown);


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

和你的信息

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

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