我想使用codeigniter form_validator库验证表单。
问题是数据来自ajax,所以我不明白代码应该如何。
public function register(){
$this->load->library('form_validation');
$json = $_POST['data'];
$json = json_decode($json);
$data = get_object_vars($json);
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');
if($this->form_validation->run()){
echo 'asdf';
} else {
echo 'xyz';
}
}
你可以看到有一个与$ _POST超全局数组类似的$ data数组。如何验证$ data数组并使用状态为form和errors消息的json编码数组发回响应?
这是我使用ajax发送数据的方式:
function register(){
var site_url = $("#site_url").val();
var post_url = site_url+"index.php/ajax/register";
var details = { };
details.username = $("#username").val();
details.password = $("#password").val();
details.rpassword = $("#rpassword").val();
details.country = $("#country").val();
details.postal_code = $("#postal_code").val();
details.email = $("#email").val();
details.date_of_birth = $("#date_of_birth").val();
var json = JSON.stringify(details);
$.post(post_url, {'data': json}, function(data){
alert(data);
//data = JSON.parse(data);
});
return false;
}
谢谢。
答案 0 :(得分:3)
“注意:这些规则也可以称为离散函数。例如:$ this-> form_validation-> required($ string);”。
答案 1 :(得分:2)
好的还没有测试过,但它应该有用。
首先,请不要将数据作为json发送到您的控制器,只需将其作为正常的发布请求发送。
$.post(post_url, {'data': details}, function(data){
然后在控制器中处理验证,就像您进行任何表单验证一样。
public function register(){
$this->load->library('form_validation');
$this->form_validation->set_rules($this->input->post('username'), 'Username',
'trim|required|min_length[5]|max_length[12]|xss_clean');
if($this->form_validation->run()==FALSE){
$errors = 'Username error here';
}
//You can iterate through any other validation rules building the $errors
//variable then pass them back to the view with:
if(isset($errors))
{
print json_encode(array("status"=>"error", "message"=>$errors));
} else {
/execute pass code here
}
}
之后,您可以回显视图中的错误(如果有的话)。
答案 2 :(得分:0)
有一种方法可以验证不是来自POST / GET请求的数据。 我认为此链接应该有所帮助:https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post
我对来自解码php://input
$filters_obj = json_decode(file_get_contents('php://input'));
$this->form_validation->set_data($filters_prop_arr);
$this->form_validation->set_rules('email', 'Full Name', 'required');
if ($this->form_validation->run() == false) {
var_dump('not workin');
return false;
}