[英]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
。
在您的模块中,即使可以,您也可以管理数据以创建选择,更好的方法是将查询结果传递给控制器并对其进行管理。
好吧,您需要解决的不仅仅是下拉菜单问题。
转到此链接: 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
永远不要回声!! 将$ 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.