Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多文本输入Codeigniter的表单验证_Php_Codeigniter_Validation - Fatal编程技术网

Php 多文本输入Codeigniter的表单验证

Php 多文本输入Codeigniter的表单验证,php,codeigniter,validation,Php,Codeigniter,Validation,表单中的数组值始终是CI中表单验证的问题。现在我必须输入多个值,这些数组值将存储在DB中。现在用户可以错误地将某些字段保留为空白,如下链接所示: 我使用教程在+按钮单击上添加输入框。在提交时,空白值将被截断,然后空数组值将添加到数据库中。我在本机PHP中使用了一个示例程序,但无法在CI中实现它 我使用本机PHP中的以下代码在DB中插入值,截断空值: <?php include 'sql_connect.php'; $str = array(); for($i=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);
?>
预URL函数:

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

我不清楚您的问题,但因为您提到要验证多个文本框。如果你的文本框是这样的

<input type="text" name="txtSiteName[]" />
<input type="text" name="txtSiteName[]" />
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'required|xss_clean|callback_check_array');
验证所有文本框是否为null或空

更新(将参数传入回调)

默认情况下,
CodeIgniter
使用第一个参数,因此第二个参数是您的参数。还可以查看如何插入多个记录

你也可以这样做

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

function sitename_check() {
    $sitenames =  $this->input->post('txtSiteName');
}
更新:(用于阵列漫游)


下面是一个简单的过程

这样设置消息

<input type="text" name="txtSiteName[]" />
<input type="text" name="txtSiteName[]" />
$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);
}   

你是不是在盲目地添加文本框?你能展示一下你尝试过的
CodeIgniter
代码吗?@sheikheera没有什么新东西。我刚刚创建了一个回调函数
公共函数null\u check($str)
,并将$str作为它的参数。添加了多个值,但它只在$str中获取一个字符串,而不是完整的数组。在回调函数中,我将添加上述代码,如本机PHP中的问题所示,不包括DB查询。但我只能在数组可用的情况下才能这样做。您是静态生成这些文本字段还是静态生成这些文本字段dynamically@Venkat动态点击按钮事件。我已经知道了。这不是我的问题。某些文本框可以为空。假设用户想要添加3个值,但他错误地生成了4个文本框,那么他无法删除额外的文本框。因此,如果她输入3个值并保持第四个文本框为空,则数组中的空白值将被截断并存储在DB中,这将是回调函数的工作。在这种情况下,您可以删除“<代码>要求的规则”,或者使用客户端检查来删除在提交之前的空文本框。但是如果您不这样做,人们仍然可以破解。执行服务器端验证-我删除了
必需的
,但我也不能接受空值-是的,我也会这么做。我正在考虑创建一个-按钮来删除文本框。@SilentAssassin,更新了我的答案。你确定
$this->input->post('txtSiteName')将获取完整的数组?如果您使用了复选框数组,则这是相同的事情。如果您不确定,请直接在回调方法中访问$\u POST['txtSiteName']。
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);
}