[英]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.