我有一个带有文本输入和文件输入的表单。使用Codeigniter的验证库验证两种输入类型的正确方法是什么?我找到了一些解决方案,但它们无法正常工作或看起来像是一种过度杀伤(创建新库或修改CI系统文件)。
在我看来,我正在使用1个多部分表单并显示文本验证错误和上传错误。
以下是我目前在控制器中的内容......
function create() //create new post
{
$this->form_validation->set_rules('content', 'Entry', 'trim|required|xss_clean');
$this->form_validation->set_rules('category_id', 'Category', 'trim|required|xss_clean|integer');
//Text input fields
if ($this->form_validation->run() == FALSE)
{
$this->load->view('new_post');
}
else
{
$config['upload_path'] = './uploads/posts/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '800'; //in KB
$this->load->library('upload', $config);
//File Upload
if (! $this->upload->do_upload())
{
$upload_error['upload_error'] = array('error' => $this->upload->display_errors());
$this->load->view('my_view', $upload_error);
return FALSE;
}
//Add to database
$data = array (
'user_id' => $this->tank_auth->get_user_id(),
'category_id' => $this->input->post('category_id'),
'content' => $this->input->post('content')
);
$this->Posts_model->create_post($data);
$this->session->set_flashdata('success', 'Post_added!');
redirect('posts');
}
}
我的观点一直是You did not select a file to upload.
。
答案 0 :(得分:4)
文件输入的名称是什么? do_upload()期望它默认为'userfile',但如果您有<input type="file" name="image"...
之类的内容,则需要调用$this->upload->do_upload('image')
您还需要确保将表单设置为多部分 - http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html
答案 1 :(得分:2)
您正确使用CodeIgniter的帮助程序,这可能会更多地运行PHP问题,然后运行CodeIgniter问题。
您的文件可能对于PHP配置来说太大了? PHP似乎没有将文件传递给您。创建php_info()
文件并查看UPLOAD_MAX_FILESIZE
设置的内容?
另外,请确保在application/config/mimes.php
中设置了扩展名和mime类型对。
答案 2 :(得分:0)
默认的codeigneter上传类是$ this-&gt; upload-&gt; do_upload('field_name = userfile'),因此您可以设置您所制作的字段文件的名称,或者您使用文件的默认codeigneter name字段,如果您需要要更改表单中文件类型的名称字段,请检查codeigneter如何为该类设置,实际上是简单的类并且易于使用..,因为该类需要文件的参数名称
答案 3 :(得分:0)
使用codeigniter进行文件上传的表单字段验证
控制器:Upload.php
注意:在基础级别创建文件夹上传 上传文件夹存储文件..
<?php
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function index()
{
//$this->load->view('upload_form', array('error' => ' ' ));
$this->load->library('form_validation');
$this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean');
//Text input fields
if ($this->form_validation->run() == FALSE)
{
$this->load->view('upload_form');
}
else
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1024';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
}
}
?>
<强>形式:(upload.form.php)强>
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open_multipart();?>
Title: <input type="text" name="title" size="30" /><br/>
<input type="file" name="userfile" size="20" />
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>
**upload_success.php**
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open_multipart();?>
Title: <input type="text" name="title" size="30" /><br/>
<input type="file" name="userfile" size="20" />
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>