重定向和set_select问题

时间:2011-06-26 12:50:35

标签: php codeigniter drop-down-menu persist

我正在使用CodeIgniter 1.7.1.Ok这里是方案。当表单提交时,我需要做两件事

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”>
<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>

现在问题是......出现了flash消息但是因为我重定向到当前页面,下拉的set_select值丢失了!默认值出现在选择中:( ..如果我删除代码中的重定向行,则下拉值已预先存在,但未设置Flash数据!!!

希望你们有解决这个问题的方法......

1 个答案:

答案 0 :(得分:1)

set_select()仅在$_POST数组包含内容(如您所发现)时有效,但您的重定向显然是GET请求。

处理此问题的正确方法是在Controller中执行查询,将正在编辑的对象传递给您的视图。在您的视图中,您可以根据$_POST重新填充表单或设置默认值(如果存在)或基于传递的对象。

假设我们正在编辑一个产品,该产品具有myselect(一个可怕的命名字段)属性。我们将使用PHP的三元运算符来测试产品myselect参数的值是否等于当前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>