Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
使用Codeigniter form_验证回调解析用于文件输入的参数_Codeigniter_File Upload_Validation - Fatal编程技术网

使用Codeigniter form_验证回调解析用于文件输入的参数

使用Codeigniter form_验证回调解析用于文件输入的参数,codeigniter,file-upload,validation,Codeigniter,File Upload,Validation,我有一个上传输入,正试图通过CI form_验证库解析回调函数的参数 $this->form_validation->set_rules('orderfile', 'Order Form'," trim|callback_upload_check[$account_id]"); 这就要求: public function upload_check($str, $id) { $errors = $this->do_upload($id); if(isset($

我有一个上传输入,正试图通过CI form_验证库解析回调函数的参数

$this->form_validation->set_rules('orderfile', 'Order Form'," trim|callback_upload_check[$account_id]");
这就要求:

public function upload_check($str, $id)
{
    $errors = $this->do_upload($id);

    if(isset($errors['error']))
    {
        $this->form_validation->set_message('upload_check', $errors['error']);

        return FALSE;
    }else{
        return TRUE;
    }
}
声明在调用函数时,第一个参数被解析为函数内的第二个参数

两个参数都没有被解析。我在网上找到了这篇文章 这似乎可以解释发生了什么(变量被剥离)。如果我将参数更改为
,参数将工作。。。
有办法解决这个问题吗?

您需要像这样编辑代码:

$this->form_validation->set_rules('orderfile', 'Order Form'," trim|callback_upload_check[".$account_id."]");
我还注意到,在表单\u validation->set\u rules中,您没有为id传递任何值,因此在函数中您应该执行以下操作:

public function upload_check($str, $id=0){..}

您需要将函数更改为:

public function upload_check($orderfile)
{
    $errors = $this->do_upload($orderfile);

    if(isset($errors['error']))
    {
        $this->form_validation->set_message('upload_check', $errors['error']);

        return FALSE;
    }else{
        return TRUE;
    }
}

我知道这是一个老问题,但我也遇到了同样的问题,我最终意识到第二个参数是用引号括起来的,所以如果你传递一个值为
1
$id
,它实际上返回为
“1”

因此,对于原始问题,您需要如下回调函数:

$this->form_validation->set_rules('orderfile', 'Order Form'," trim|callback_upload_check[".$account_id."]");
在回拨功能中:

public function upload_check($str, $id){
  $actual_id=str_replace('"', "", $id)
}
$config=array(
排列(
“字段”=>“用户电子邮件”,
“标签”=>“:用户电子邮件:”,
“规则”=>“必需|有效|电子邮件”,
),
排列(
“字段”=>“用户密码”,
标签“=>”:用户密码:“,
“规则”=>“所需最小长度[8]”,
),
);
$error\u messages=数组(
“必需”=>“{field}该字段是必需的。”,
“min_length”=>“{field}字段值很短”,
“有效电子邮件”=>“{field}请发送有效电子邮件”,
);
$this->form\u validation->set\u messages($error\u messages);
$this->form\u validation->set\u rules($config);
如果($this->form\u validation->run()==FALSE){
$alert=preg_replace(“/(\n)+/m)”,带标签(验证错误());
$explode=explode(“:”,$alert);
$arr=array();
对于($i=1;$i
在您的回调\u upload\u检查中,您是否也应该传递$id?它说,如果您在调用函数时传递了一个参数,它将显示为函数中的第二个参数。这些建议没有任何区别,这不是因为函数由于语法而失败/出错,可能是参数被剥离,或者由于某种原因没有解析到回调函数(upload_check)不,没有这样的事情,比如“调用函数时传递一个参数,它显示为函数中的第二个参数”,只需删除$str,并尝试仅使用$idfrom codeigniter userguide
调用回调,只需将函数名放入规则中,并将“callback\uu”作为规则前缀。如果您需要在回调函数中接收一个额外的参数,只需在方括号中的函数名之后添加它,如:“callback_foo[bar]”,然后它将作为回调函数的第二个参数传递
我需要它,但在上传输入时它的工作方式有点奇怪,它认为即使已经填满了也没有填满。看起来$\u POST和$\u文件之间存在冲突。请评论并解释您的代码。首先,创建配置和错误消息以进行验证。如果在验证范围内,则验证的错误消息包含一些html元素。清洁这些元素。并以“:”分隔。生成新的数组标签name=key和message=value。最后返回json_编码数据。因为我接受javascript。您只能返回数组数据。人们不会阅读注释,抱歉,答案中有注释(代码内)
    $config =array(
       
        array(
            "field" => "userEmail",
            "label" => ":userEmail:",
            "rules" => "required|valid_email",
        ),
        array(
            "field" => "userPassword",
            "label" => ":userPassword:",
            "rules" => "required|min_length[8]",
        ),
        
    );

    $error_messages = array(
        "required" => "{field} the field is required.",
        "min_length" => "{field} the field value is so short",
        "valid_email" => "{field} please valid email",
    );

    $this->form_validation->set_message($error_messages);
    $this->form_validation->set_rules($config);

    if($this->form_validation->run() == FALSE) {
        $alert =preg_replace("/(\n)+/m", ' ', strip_tags(validation_errors()));
        $explode =explode(':', $alert);
        
        $arr =array();
        for($i=1; $i < count($explode); $i+=2){
            $y=$i;
            $j =++$y;
            $arr[$explode[$i]] = $explode[$j];
        }
        print json_encode($arr);
        
    } else { 
            //process
    
    }