在Codeigniter验证失败后重新填充动态javascript

时间:2014-06-24 15:03:25

标签: javascript php forms codeigniter

我有一个javascript表单,允许用户通过php将数据添加到MySQL表。该表单允许用户动态添加更多数据输入,如果它们需要的数据输入超过最初给出的单个输入。

用户点击"添加预算项"按钮添加更多项目。

视图中的表单如下所示:

<input type="button" value="Add Budget Item" onClick="addRow('dataTable')" /> 
  <input type="button" value="Remove Budget Item" onClick="deleteRow('dataTable')" /> 
  <br>
  <p>(All actions apply only to entries with check marked check boxes only.)</p>
</p>

<table id="dataTable" class="form" border="1">
 <tbody>
  <tr>
    <p>
    <td >
        <input type="checkbox" name="chk[]" checked="checked" value ='<?php echo set_value('chk[]') ?>' />
    </td>
    <td>
    <label>Item/Procedure</label>
    <input type="text" name="itm_nm[]" value ='<?php echo set_value('itm_nm[]') ?>'/>
    </td>
    <td>
    <label for="itm_trig">Trigger/Visit</label>
    <input type="text" class="small"  name="itm_trig[]" value ='<?php echo set_value('itm_trig[]') ?>'/>
    </td>
    <td>
    <td>
    <label for="itm_amt">Budget Amount</label>
    <input type="text" class="small"  name="itm_amt[]" value ='<?php echo set_value('itm_amt[]') ?>'>
    </td>
    </p>
  </tr>
 </tbody>
</table>

表单将提交给验证控制器。验证失败后,我希望用所有动态创建的字段及用户输入的数据重新填充表单。

验证基本上如下:

function index(){


        $this->form_validation->set_rules('itm_nm[]', 'Item Names', 'required');
        $this->form_validation->set_rules('itm_trig[]', 'Item Triggers/Visits', 'required');
        $this->form_validation->set_rules('itm_amt[]', 'Item Amounts', 'required|decimal');     

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


            $this->load->view('build_bud2');

        }

返回视图时,这适用于非由用户动态生成的第一个表单项。但是,没有动态生成的数据字段出现(显然没有重新填充先前提交的数据)。

如何重新显示动态生成的数据字段,并以与验证失败时初始数据相同的方式重新填充?

2 个答案:

答案 0 :(得分:0)

我会这样做,使用带有Codeigniter和Ajax的JSON视图,而不是“发布”表单。

  • 使用AJAX将您的表单提交到您的PHP脚本。
  • PHP脚本获取字段并发回JSON响应
  • 如果存在一个或多个验证错误,请发回包含所有字段和错误的相应JSON响应。例如,响应可以是带有错误消息的字段ID。
  • JS接受JSON响应并显示错误(如果有的话)。

如果你想要使用POST,你至少有2个选择:

  • 输出用户输入的JSON表示,该表示将在JavaScript中可用。然后,循环遍历所有字段并基于JSON表示“重做”字段结构。
  • 或者,用PHP表示用户输入的内容(在对象或数组中)并在PHP中循环显示字段,并逐个显示所有字段。

答案 1 :(得分:0)

我会这样做:

  1. 点击提交按钮表格
  2. 验证输入
  3. 如果验证失败,请将相同的POST数据传递到视图页面(再次)
  4. 使用foreach循环和视图处理传递的POST数据 东西。
  5. 顺便说一句,这个链接可以帮助或给你一个想法

    How can I use CodeIgniter's set_value for a field that's an array?