apollodsa 发表于 2017-9-14 10:52:00

关于表单中数组提交后验证错误显示问题

view的代码:
      <ul class="Add">
          <li>
            <p class="Text"><input type="text" name="qname[]" placeholder="请输入被查询人姓名" value="<?php echo set_value('qname[]');?>"/><em class="jia"></em><?php echo form_error('qname[]'); ?></p>
            <p class="Text"><input type="text" name="idcard[]" placeholder="请输入证件号" value="<?php echo set_value('idcard[]');?>"/><?php echo form_error('idcard[]'); ?></p>
          </li>
          <li>
            <p class="Text"><input type="text" name="qname[]" placeholder="请输入被查询人姓名" value="<?php echo set_value('qname[]');?>"/><em class="jia on"></em><?php echo form_error('qname[]'); ?></p>
            <p class="Text"><input type="text" name="idcard[]" placeholder="请输入证件号" value="<?php echo set_value('idcard[]');?>"/><?php echo form_error('idcard[]'); ?></p>
          </li>
      </ul>

li中name="qname[]"和name="idcard[]"是重复的,可以更多,也就是说界面中有js效果可以添加删除li

controller的代码:

$this->form_validation->set_rules('qname[]', '被查询人姓名', 'trim|required');
$this->form_validation->set_rules('idcard[]', '证件号码', 'trim|required|max_length|min_length');

var_dump($this->input->post('qname[]'));
var_dump($this->input->post('idcard[]'));


首先,controller是可以正确接收qname[]和idcard[]数据的,但是,如果用户输入的信息是错误的,特别是第二个li中输入的数据是错误的,那么在第一个li中也会显示错误的信息,这不是我想要的,我想要的结果是,哪个qname[]输入错误,就在哪个qname[]后面显示错误内容,idcard[]也是一样

所以,度了2天了,都没找到跟我问题差不多的,郁闷!新手,求解决方法。


wangyouworld 发表于 2017-9-15 09:39:41

参见这里:
表单验证类-使用数组作为域名称
http://codeigniter.org.cn/user_guide/libraries/form_validation.html#using-arrays-as-field-names

就是说,你可以需要设置一个“别名”

你也可以使用多维数组作为域的名称,例如:

<input type="text" name="options" value="" size="50" />

甚至:

<input type="text" name="sports" value="" size="50" />

和上面的例子一样,你必须在辅助函数中使用完全一样的数组名:

<?php echo form_error('sports'); ?>

-----------------------------------
像你程序中的,
<input type="text" name="qname[]" placeholder="请输入被查询人姓名" value="<?php echo set_value('qname[]');?>"/>
可以将:
name="qname[]"
改为
name="qname"
或者
name="qname"

错误调用时,

<?php echo form_error('qname'); ?>

<?php echo form_error('qname'); ?>


-----------------------------------

另一种方法是,使用 jquery:
    $("input").each(function(){
      console.log($(this).attr('name') + $(this).val());
    });

这个可以遍历到所有文本框,在里面用 JS 加拦截,加判断。

页: [1]
查看完整版本: 关于表单中数组提交后验证错误显示问题