0

私はCodeIgniter1.7.1を使用しています。これがシナリオです。フォームが送信されるたびに、2つのことを行う必要があります。

1)ドロップダウンで選択した値を保持します。2)を使用してsession->set_flashdata()、カスタムデータベースメッセージを設定する必要があります。

ご存知のように、このフラッシュデータを設定する前にリダイレクトする必要があります。

これは私が書いたコードです。

if ($this->form_validation->run() == TRUE){

    $this->session->set_flashdata(‘msg’, ‘Taha Hasan’); 
    redirect(current_url());

    $this->ShowReceiveInventoryView();
}

また、ドロップダウンビューでset_selectを使用して、値を永続化します。

<select name=“myselect”&gt;
<option value=“one” <?php echo set_select(‘myselect’, ‘one’, TRUE); ?> >One</option>
<option value=“two” <?php echo set_select(‘myselect’, ‘two’); ?> >Two</option>
<option value=“three” <?php echo set_select(‘myselect’, ‘three’); ?> >Three</option>
</select>

ここに問題があります…フラッシュメッセージが表示されますが、現在のページにリダイレクトしているため、ドロップダウンのset_select値が失われます!!! デフォルト値が選択範囲に表示されます:(..コードのリダイレクト行を削除すると、ドロップダウン値が表示されますが、フラッシュデータは設定されません!!!

皆さんがこの問題の解決策を持っていることを願っています…

4

1 に答える 1

1

set_select()配列にコンテンツが含まれている場合にのみ機能$_POSTしますが(発見したとおり)、リダイレクトは明らかにGETリクエストです。

これを処理する適切な方法は、コントローラー内でクエリを実行し、編集中のオブジェクトをビューに渡すことです。$_POST次に、ビュー内で、フォームが存在するかどうか、または渡されたオブジェクトに基づいて、フォームを再入力するか、デフォルト値を設定します。

myselect(ひどい名前のフィールド)プロパティを持つ製品を編集していると仮定しましょう。PHPの三項演算子を使用して、製品のmyselectパラメーターの値が現在と等しいかどうかをテストします。等しい場合は、の3番目のパラメーターをoption使用してデフォルトを設定します。set_selects()

<option value="one" <?php echo set_select('myslect', 'one', ((!$product) || !$this->input->post('myselect') && $product->myselect == 'one' ? TRUE : FALSE); ?>One</option>

<option value="two" <?php echo set_select('myselect', 'two', (!$this->input->post('myselect') && $product->myselect == 'two' ? TRUE : FALSE); ?>Two</option>
于 2011-06-27T15:05:12.353 に答える