繁体   English   中英

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个代码点火器文档

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

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

您将通过示例了解该函数的功能以及使用方法。

然后去

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查询构建器可以为您执行数据敏感化,并且您无需运行原始查询即可进行简单的get数据调用。

示例替换

$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:类Country扩展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关闭时视图全部推送到输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM