我已经为图片上传创建了验证规则,如下所示。
$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback_file_required|callback_file_size_max[1000]');
在控制器中我已经包含了如下的回调函数。
public function file_required($display_photo) {
if($_FILES[$display_photo]['size'] == 0) {
$this->form_validation->set_message('file_required', 'Upload a file.');
return false;
}
return true;
}
public function file_size_max($display_photo, $max_size) {
if($_FILES[$display_photo]['size'] > $max_size) {
$this->form_validation->set_message('file_size_max', 'This file exceeds max size.');
return false;
}
return true;
}
只有第一条规则正在执行但不是第二条规则。请帮我找出解决方案。
答案 0 :(得分:0)
您应该在配置中传递文件大小限制而不是验证规则。 你可以粘贴执行上传的功能或方法吗?
答案 1 :(得分:0)
一种方法 - 您可以在上传文件之前使用JS
进行验证:
<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
<script>
document.forms[0].addEventListener('submit', function( evt ) {
var file = document.getElementById('file').files[0];
if(file && file.size < 10485760) { // 10 MB (this size is in bytes)
//Submit form
} else {
//Prevent default and display error
evt.preventDefault();
}
}, false);
</script>
但是如果你想在服务器端验证,那么服务器直到我们上传文件时都不知道。
答案 2 :(得分:0)
$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback_file_required_with_validation');
public function file_required_with_validation($display_photo) {
$max_size=1000;
if($_FILES[$display_photo]['size'] == 0) {
$this->form_validation->set_message('file_required', 'Upload a file.');
return false;
}
if($_FILES[$display_photo]['size'] > $max_size) {
$this->form_validation->set_message('file_size_max', 'This file exceeds max size.');
return false;
}
return true;
}
答案 3 :(得分:0)
在CI中验证表单时,不确定是否可以在单个字段上使用两个回调。在任何情况下,您都不需要检查大小以查看文件是否已上载。使用错误代码'4'
解决方案:
if($_FILES[$display_photo]['error'] !== 4) // Error code 4 means no file was uploaded. So if it's not 4 then you have a file.
答案 4 :(得分:0)
在验证定义中'回调'之后,确定你需要双下划线...
$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback__file_required|callback__file_size_max[1000]');