簡體   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