【问题标题】:Codeigniter BUG?: Form validation class getting confused with arraysCodeigniter BUG?:表单验证类与数组混淆
【发布时间】:2012-01-17 14:52:32
【问题描述】:

我需要创建一个具有相同字段组的表单(数据来自数据库)

例如:

Group 1: Description field, Amount field, Others fields
Group 2: Description field, Amount field, Others fields
Group 3: Description field, Amount field, Others fields

所以在我看来,我循环了数据库值:

$i = 0;

foreach ($data_from_db as $data) {

  $description = array(
    'name'  => 'description[]',
    'id'    => 'description_field['.$i.']',
    'value' => set_value('description[]', $data->description)
  );

  echo form_label(lang('reward_description'), 'description_field['.$i.']');
  echo form_textarea($description);
  echo form_error('description[]');

  // more fields generated here in similar ways

  $i++
}

在我的控制器中,我有:

$this->form_validation->set_rules('description[]', 'lang:project_edit_description', 'required');

// more similar rules here

根据Codeigniter documentation,这是正确的方法,但它不能正常工作。

Codeigniter 对验证消息感到困惑。

例如,如果我有意将描述字段之一 并提交表单,我会在所有组中收到验证错误消息(我收到“描述字段是必需的”也适用于第 1、2 和 3 组)

【问题讨论】:

  • 你的意思是当这一行的描述字段之一为空时$reward->description ?
  • 不,我提交后验证错误,与线路无关。
  • 好吧,你已经完全自相矛盾了。您希望该字段是必需的,但您允许描述包含空值??
  • 我不知道,这就是为什么我想获得该字段的验证消息但我收到两条验证消息而不是一条。循环中的每个字段一个。
  • 您应该解释您想要发生什么,以及当前正在发生什么 - 包括错误消息。

标签: php codeigniter


【解决方案1】:

只需为每个索引字段设置规则。以下 sn-ps 显示了一个有效的示例(根据需要进行改进):


测试控制器:

function index()
{
    if ($_POST)
    {
        foreach ($_POST as $key => $value)
        {
            if ($key == 'description' && is_array($value))
            {
                foreach ($value as $i => $vector)
                {
                    // set rule for each index
                    $this->form_validation->set_rules('description[' . $i . ']', 'description ' . ($i + 1), 'trim|required');
                }
            }
        }

        $this->form_validation->run();
    }

    $this->load->view('test');
}

测试视图views/test.php:

<?php

echo form_open('');

$data_from_db = $_POST ? $_POST['description'] : array('aaa', 'bbb', 'ccc');
$i = 0;

foreach ($data_from_db as $data)
{
    $description = array(
        'name' => 'description[]',
        'value' => set_value('description[]', $data)
    );

    echo form_label('description ' . ($i + 1) . ':');
    echo form_textarea($description);
    echo '<br>';
    // set error for each index
    echo form_error('description[' . $i . ']');

    // more fields generated here in similar ways

    $i ++;
}

echo form_submit('mysubmit', 'Try it');
echo form_close();
?>

此代码将仅在空白字段中显示The description x field is required.

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 2016-12-14
    • 2010-12-13
    • 2015-11-05
    • 2020-10-10
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多