0

PHP Codeigniter を使用して基本的なサインアップ ページを作成しています。

<select>サインアップ ページで、( html 要素を介して) カテゴリの選択から選択するようにユーザーに求めます。これらのカテゴリは、MySQL データベースのリストに保存されています。

私の現在の方法は、ユーザーが関数を呼び出してページをロードし、それを表示するときに、DB からこのリストを取得することです。ただし、ユーザーが間違ったデータを入力し、検証エラーでページをリロードする必要がある場合、リスト内のデータを保持する変数がクリアされているように見えるため、ページを再表示する前にデータベースからリスト データを再取得する必要があります。

この変数を永続的に利用できるように設定する方法についてのドキュメントに何かがあると思いますが、もう一度見てみると、それを見つけることができませんでした。

誰かが私を正しい方向に向けることができますか? 毎回このデータを再フェッチする必要があるのはばかげているように思えます (人々が間違った情報を頻繁に入力することはないことはわかっていますが、これはいくつかの状況で役立ちます)。

注: これは、ユーザーの選択内容の記憶に関する問題ではありません。

4

2 に答える 2

0

たとえば、デフォルト値として設定するだけです

<input type="text" name="username" value="<?php isset($_POST['username']) echo $username;?>" />

そう$_POST['username']すれば、いつでも利用できます。

于 2013-09-24T00:03:12.827 に答える
0

この例は、ci フォーム ヘルパーを使用した選択ドロップダウン リスト用です (別のフォームからこれを変更しているので、すべて正しいことを願っています)。

the Array of select values is: $categoryarray
the drop down field name is 'category'
the default value is $defaultcategory
a css class to style (bootstrap etc): $dropclass = 'class="input-medium"';

コード行は次のとおりです。

  form_dropdown('category',$categoryarray,set_value('category',$defaultcategory),$dropclass).form_error('category');

form_error('category'); 最後に、検証エラー メッセージを表示するためのものです。デフォルト値がありますが (フォームがフォーム内の別のフィールドからの検証に失敗した場合)、これはユーザーが選択したものを「記憶」します。

編集 !

良いニュースと悪いニュースがあります。悪いニュース - カテゴリがデータベースから取得されている場合は、それらを再度取得する必要があります。良いニュース - CI は、ユーザーがドロップダウン リストから選択したカテゴリを記憶しています。

モデルにカテゴリ配列を作成する場合、悪いニュースは実際にはそれほど大きな問題ではありません。次に、検証に追加するコードを 1 行だけ追加します。

// In the Model 

    function makedropdown() {

// get your category list 
$cats = $this->getAllCategories() ;

$categoryarray = array();

   // make the array 
 foreach ( $cats->result() as $row ) {

 $categoryarray[$row->category] =  $row->category ; }

return $categoryarray ;

}

誰かがフォームに記入し、検証を実行すると、検証が失敗します。コントローラーで:

if ( $this->form_validation->run($formrules) == FALSE ) {

// get the categoryarray
$data['categoryarray'] = $this->categorymodel->makedropdown() ; 

// load form again
$this->load->view( 'myform', $data ); }

したがって、選択リストに動的に入力するためにデータベースからカテゴリを再度取得している場合でも、CI はユーザーが最初にフォームを実行したときの選択を記憶しています。

ドロップダウンのデフォルト カテゴリはどうでしょうか。変更しない場合は、構成として設定できます。カテゴリ値がデータベースから取得され、変更される可能性がある場合、モデルにデフォルトのカテゴリを作成できます。

編集2

とにかく私はいつもこれをやっているのに、なぜ私はこれのためにそれを考えなかったのですか. ええ、これは、ビューを表示するための特定の方法を作成するもう1つの理由です

 function _showCategoryForm(){

 // get the categoryarray
$data['categoryarray'] = $this->categorymodel->makedropdown() ; 

// anything else thats needed for the view 

// load form view
$this->load->view( 'myform', $data ); }

今はコードを繰り返す必要はなく、必要に応じてエラー メッセージを表示して検証の失敗を簡単にカスタマイズできます。

// since i'm grinding on this - the validation should happen in a model 
// and that method returns true or false
if ( $this->somemodel->validateCategoryForm() == FALSE ) {

// custom obnoxious error message 
$this->formerrormessage = "What part of required is eluding you?" ;

$this->_showCategoryForm() ;  }

フォームのニーズが変わった場合、変更は 1 か所だけで済むため、これははるかに優れています。また、プライベート メソッドが優れたプラクティスであることを思い出させるために、アンダースコアを追加しました。また、フォームの検証は、コントローラーによって呼び出されるモデルで個別に行う必要があります。

于 2013-09-24T01:22:48.457 に答える