用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1717|回复: 1
收起左侧

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

[复制链接]
发表于 2017-9-14 10:52:00 | 显示全部楼层 |阅读模式
view的代码:
HTML复制代码
      <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的代码:
PHP复制代码
 
$this->form_validation->set_rules('qname[]', '被查询人姓名', 'trim|required');
$this->form_validation->set_rules('idcard[]', '证件号码', 'trim|required|max_length[18]|min_length[18]');
 
var_dump($this->input->post('qname[]'));
var_dump($this->input->post('idcard[]'));
 
复制代码


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

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


发表于 2017-9-15 09:39:41 | 显示全部楼层
参见这里:
表单验证类-使用数组作为域名称
http://codeigniter.org.cn/user_g ... rays-as-field-names

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

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

HTML复制代码
<input type="text" name="options[size]" value="" size="50" />
复制代码


甚至:
HTML复制代码
 
<input type="text" name="sports[nba][basketball]" value="" size="50" />
复制代码


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

PHP复制代码
<?php echo form_error('sports[nba][basketball]'); ?>
复制代码


-----------------------------------
像你程序中的,
HTML复制代码
<input type="text" name="qname[]" placeholder="请输入被查询人姓名" value="<?php echo set_value('qname[]');?>"/>
复制代码

可以将:
name="qname[]"
改为
name="qname[0]"
或者
name="qname[a]"

错误调用时,

PHP复制代码
<?php echo form_error('qname[0]'); ?>
复制代码


PHP复制代码
<?php echo form_error('qname[a]'); ?>
复制代码



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

另一种方法是,使用 jquery:
JS复制代码
 
    $("input[type='text']").each(function(){
        console.log($(this).attr('name') + $(this).val());
    });
复制代码


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

本版积分规则