form_dropdown() を取得して Codeigniter で選択された値を表示するにはどうすればよいですか?
-
27-10-2019 - |
質問
データベースからドロップダウンリストを作成しようとしています。私のビューファイルには次のコードがあります
$batch= $query ['batch']; // I pull this data from a separate model
echo form_dropdown('shirts', $options, $batch);
現在、ドロップダウン リストにはデータが正常に入力されていますが、問題は、ページの読み込み時に自動的に選択される値「$batch」が取得できないことです。興味深いことに、$batch をエコーすると、ページ内の他の場所に正しいデータが表示されます。これは、$batch が正常であることを意味します。
これが私のコントローラーです
function update($id){
$this->load->model('mod_studentprofile');
$data['query']= $this->mod_studentprofile->student_get($id);
$data['options']= $this->mod_studentprofile->batchget();
$data['tab'] = "Update Student Information";
$data['main_content']='update_studentprofile';
$this->load->view('includes/template',$data);
}
そして、これが私のモデルです
function batchget() {
$this->db->select('batchname');
$records=$this->db->get('batch');
$data=array();
foreach ($records->result() as $row)
{
$data[$row->batchname] = $row->batchname;
}
return ($data);
}
この問題を解決するのを手伝っていただけませんか。ページの読み込み時にドロップダウン リストで値「$batch」が自動的に選択されるようにしたいと考えています。
前もって感謝します。
編集...Student_get($id) の私のモデル
function student_get($id)
{
$query=$this->db->get_where('student',array('studentid'=>$id));
return $query->row_array();
}
ありがとう :)
解決
おそらく何が起こっているのかというと、$batch の値はドロップダウンでレンダリングされているものと一致しているが、その特定のオプションの $options の実際のキー (HTML の value="" 部分) とは一致していない可能性があるということだと思います。
例えば...
// this wouldn't select 'foo' as you may be thinking
$options => array('0' => 'foo', '1' => 'bar');
$batch = 'foo';
echo form_dropdown('shirts', $options, $batch);
// this would select foo
$options => array('foo' => 'foo', 'bar' => 'bar');
$batch = 'foo';
echo form_dropdown('shirts', $options, $batch);
OPのコメントに応じて編集します:
atchget() メソッドは $options 配列を適切な形式で返し、student_get() メソッドは row_array を返しているように見えます。このビューでは、student_get メソッドによって返されたキーの 1 つの値を、$batch に保存されている選択された値として割り当てているようです。この値は、form_dropdown() の 3 番目の引数として渡されます。
これはすべて正しいようです。$batch の値が実際に $options にある配列キーの 1 つである限り、form_dropdown() はドロップダウン オプションの 1 つを選択済みとして設定します。
他のヒント
デバッグ関連。
var_dump()
$options
, var_dump() $batch
, 2つを見て、どこが間違っていたのかを確認してください。
3 番目のオプションは、ラベルの値ではなく、キーの値である必要があります。
アンソニー・ジャックはおそらく正しい。