У меня есть проблема в Codeigniter, как проверить форму, когда загрузка файла не является обязательной.
Я создал нормальную форму, которая проверяет как поле ввода, так и поле загрузки файла в форме, и это нормально работает.
Но я хочу знать, как проверить эту форму, если выбор файла не является обязательным.
Вот мой файл просмотра php (news_add.php)
<?php
/**
* Created by PhpStorm.
* User: Anu
* Date: 8/31/2018
* Time: 10:00 PM
*/?>
<?php include('partials/admin_header.php'); ?>
<?php include("partials/admin_sidebar.php"); ?>
<div class="content-wrapper">
<div class="container-fluid">
<!-- Breadcrumbs-->
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="<?php echo base_url(); ?>admin/dashboard">Dashboard</a>
</li>
<li class="breadcrumb-item active">Test</li>
</ol>
<div class="container mb-4">
<div class="row">
<div class="mx-auto col-10">
<!-- form user info -->
<div class="card">
<div class="card-header">
<h3>Add News & Event</h3>
</div>
<div class="card-body">
<?php $attributes = array('id'=>'news_add','class'=>'form-horizontal'); ?>
<?php echo form_open_multipart('Add/add_data', $attributes); ?>
<div class="form-group">
<b>
<?php echo form_label('User Full Name <small class="text-success"> (required) </small>','', $attributes=array("class" => "control-label col-sm-12 col-lg-12 col-md-12 col-xs-12")); ?>
</b>
<div class="col-sm-12 col-lg-12 col-md-12 col-xs-12">
<?php echo form_input('u_name','', $attributes=array("class" => 'form-control col-sm-12 col-lg-12 col-md-12 col-xs-12',
"id"=>"u_name","placeholder"=>"Enter your full name")); ?>
<?php echo form_error('u_name','<div class="text-danger mb-3">', '</div>'); ?>
</div>
</div>
<div class="col-sm-12 col-lg-12 col-md-12 col-xs-12">
<div class="form-group">
<label for="img">Image <small class="text-success"> (required) </small></label><br>
<div class="form-group">
<input type="file" class="form-control-file" name="userfile" size="20">
</div>
<?php echo form_error('userfile','<div class="text-danger mb-3">', '</div>'); ?>
<?php if(isset($error)) echo "<div class='text-danger mb-3'>$error</div>"; ?>
</div>
<div class="form-group">
<div class="col-sm-12 col-lg-12 col-md-12 col-xs-12">
<?php $data = array('
class'=> 'btn btn-success btn-md center mt-2',
'name'=> 'submit',
'value'=>'Register Now',
'type'=>'submit'
); ?>
<center>
<?php echo form_submit($data); ?>
</center>
</div>
</div>
<?php echo form_close(); ?>
</div><!-- container -->
</div> <!--card-body-->
</div> <!--mx-auto col-sm-6-->
</div><!--row-->
</div><!--container py-3-->
</div><!-- /.container-fluid-->
</div><!-- /.content-wrapper-->
<?php include("partials/admin_footer.php") ?>
Здесь я использовал form_error()
метод для отображения соответствующей ошибки для каждого поля ввода и поля файла. Также я использую один дополнительный способ отображения других ошибок загрузки файлов, которые я использовал здесь <?php if(isset($error)) echo "<div class='text-danger mb-3'>$error</div>"; ?>
Переменная $error
пришла от контроллера
Здесь мой класс контроллера (Add.php)
<?php
/**
* Created by PhpStorm.
* User: Anu
* Date: 8/31/2018
* Time: 10:07 PM
*/
class Add extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function add_data(){
$this->form_validation->set_rules('u_name', 'News Title', 'required');
if (empty($_FILES['userfile']['name']))
{
$this->form_validation->set_rules('userfile', 'User Image', 'trim|xss_clean|required');
}
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 2048000;
// if use helper "upload" don't you need load upload helper here like $this->load->library->('upload',$config)
// and only you need initialize your configuration rules for your file
// and $config can be other name it is globle array variable to codeigniter framework
$this->upload->initialize($config);
if ($this->form_validation->run() == true) {
if ( ! $this->upload->do_upload('userfile')) {
// set file upload error here
$error = array('error' => $this->upload->display_errors());
$this->load->view('admin/news_add', $error);
}
}else{
$this->load->view('admin/news_add');
}
}
}
Это нормально работает, когда требуется как поле ввода, так и поле загрузки файла! но при условии, что поле загрузки файла является необязательным, как проверить эту текущую форму? и если пользователь выбирает файл, как проверить это время также?