0

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

输入值。

提交时数组中的值。

我使用教程在+按钮单击时添加输入框。提交时,空白值将被截断,然后非空数组值将添加到数据库中。我使用原生 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 个 url 时,它被调用 3 次。这正常吗?我的 array_walk 的回调函数也不起作用。在另一个回调函数中调用回调函数是不可能的?

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

preurl 函数:

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

2 回答 2

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'));
于 2013-02-09T10:01:00.663 回答
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);
}   
于 2013-02-09T10:19:25.800 回答