多文本输入Codeigniter的表单验证

时间:2013-02-09 09:32:14

标签: php codeigniter validation

表单中的数组值始终是CI中表单验证的问题。现在我要输入多个值,这些数组值将存储在DB中。现在用户可以错误地保留一些字段空白,如下面的链接所示:

Input values.

Values in the array on submission.

我使用this教程在 + 按钮点击上添加输入框。提交时,空白值将被截断,然后不会将空数组值添加到数据库中。我尝试使用本机PHP中的示例程序,但无法在CI中实现它。

我在本机PHP中使用以下代码在DB截断空值中插入值:

<?php
    include 'sql_connect.php';
    $str = array();
    for($i=0;$i<count($_POST["txtSiteName"]);$i++)
    {
        $str[] = $_POST["txtSiteName"][$i];
    }
    $str = array_filter($str, function($item) {if(!is_null($item)) return $item;});
    foreach($str as $loop_str)
    {
        $arr_str[] = $loop_str;
    }
    for($k = 0; $k<count($arr_str);$k++)
    {
        mysql_query("INSERT INTO sitename (name) VALUES ('".$arr_str[$k]."')") or die(mysql_error());
    }
    print_r($arr_str);
?>

我如何在CI中实现这一目标? 我试图使用回调函数,但数组值没有传递给回调函数。

修改

以下代码显示了我的回调函数:

在输入3个网址时,它被称为3次。这是正常的吗? 我的array_walk的回调函数也无效。在另一个回调函数中调用回调函数是不可能的?

public function null_check()
{
    $urls = $this->input->post('link_name');
    array_walk($urls, 'prepurl');
    var_dump($urls);
}

预包功能:

public function prepurl($item, $key)
{
    $item = "http://".$item;
}

2 个答案:

答案 0 :(得分:1)

您的问题对我来说并不清楚,但是您提到要验证多个文本框。所以如果你的文本框是这样的

<input type="text" name="txtSiteName[]" />
<input type="text" name="txtSiteName[]" />

然后只需使用

$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'required|xss_clean');

将所有文本框验证为空或空。

更新(将参数传递给回调)

$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'callback_sitename_check[' . $this->input->post('txtSiteName') . ']');

function sitename_check($str, $sitenames) {
    // $sitenames will be your textboxe's array
}

第一个参数默认由CodeIgniter使用,因此第二个参数是您的参数。另请查看insert_batch()以插入多个记录。

你也可以这样做

$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'callback_sitename_check');

function sitename_check() {
    $sitenames =  $this->input->post('txtSiteName');
}

更新:(对于array_walk)

array_walk($urls, array($this, 'prepurl'));

答案 1 :(得分:0)

这是一个简单的过程

像这样设置消息

$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'required|xss_clean|callback_check_array');

这是回调

function check_array()
{
    $txtSiteName    =   $this->input->post('txtSiteName');
    $error = 0;
    foreach($txtSiteName as $key => $value)
    {
        if(!empty($value)){
            $error = $error + 1;
        }
    }       
    if($error == 0){
        return TRUE;
    }else{
        $this->form_validation->set_message('check_array', 'All fields are empty. Please provide at leaset 1');
        return FALSE;
    }
}   

验证成功后,运行此代码或根据您的要求进行修改

if ($this->form_validation->run() == FALSE)
{
    $this->load->view('myform');
}
else
{
    $txtSiteName    =   $this->input->post('txtSiteName');
    foreach($txtSiteName as $key => $value)
    {
        if(!empty($value)){
            $data['name']   =   $value;
            $this->mymodel->insert($data);
        }
    }
}

模型方法

function insert($data)
{
    $this-db->insert('table_name',$data);
}