问题描述
我是codeigniter的新手,在使用表单验证将数据插入数据库并上传一些图片时遇到了一些问题。首先,当我单击“提交”按钮而没有任何输入时,来自表单验证的错误信息未显示view。其次,当我输入一些信息时,我单击“提交”按钮,它将刷新页面。第三,我学会了将一些图像上传到数据库,但是我不确定它是正确的。请帮助我,我感谢每一个答案和建议。
我的观点(transfer.PHP):
<section class="columns is-centered my-5">
<div class="container column is-half">
<form action="<?= base_url() ?>bukti_add" method="POST">
<p class="has-text-warning-light">
<?=
validation_errors();
?>
</p>
<input type="hidden" name="bukti_id" value="">
<input class="input" type="text" name="bukti_nama_pengirim" value="" placeholder="Masukan Nama Pengirim">
<select class="select input" name="bukti_bank_pengirim" id="">
<option value="">---Pilih Bank Pengirim---</option>
<option value="">Mandiri</option>
<option value="">BCA</option>
<option value="">BNI</option>
<option value="">BRI</option>
<option value="">CIMB</option>
<option value="">Bank Jateng</option>
</select>
<input class="input" type="text" name="bukti_jumlah_transfer" value="" placeholder="Masukan Jumlah Transfer">
<div class="file has-name is-danger">
<label class="file-label"">
<input class=" file-input" type="file" name="bukti_img">
<span class="file-cta">
<span class=" file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label">
Choose a file…
</span>
</span>
<span class="file-name" style="background-color: white;">
Pilih File Foto Bukti Transfer
</span>
</label>
</div>
<section>
<button class="button is-danger" name="">
Lanjut
</button>
</section>
</form>
</div>
我的模型(M_checkout):
private function _uploadImage()
{
$config['upload_path'] = './upload/bukti/';
$config['allowed_types'] = 'gif|jpg|png';
$config['file_name'] = $this->get_payment_by_id;
$config['overwrite'] = true;
$config['max_size'] = 1024; // 1MB
// $config['max_width'] = 1024;
// $config['max_height'] = 768;
$this->load->library('upload',$config);
if ($this->upload->do_upload('bukti_img')) {
return $this->upload->data("file_name");
}
return "default.jpg";
}
public function bukti_to_db()
{
$data = array();
$data['bukti_nama_pengirim'] = $this->input->post('bukti_nama_pengirim');
$data['bukti_bank_pengirim'] = $this->input->post('bukti_bank_pengirim');
$data['bukti_jumlah_transfer'] = $this->input->post('bukti_jumlah_transfer');
$data['bukti_img'] = $this->_uploadImage();
$this->db->insert('bukti',$data);
$bukti_id_save = $this->db->insert_id();
$sdata = array();
$sdata['bukti_id'] = $bukti_id_save;
$this->session->set_userdata($sdata);
}
我的控制器:
public function bukti_add()
{
$this->form_validation->set_rules('bukti_nama_pengirim','Nama','trim|required');
$this->form_validation->set_rules('bukti_bank_pengirim','Bank','trim|required');
$this->form_validation->set_rules('bukti_jumlah_transfer','Jumlah Transfer','trim|required');
$this->form_validation->set_rules('bukti_img','Bukti Transfer','trim|required');
if ($this->form_validation->run()) {
$this->M_checkout->bukti_to_db();
redirect('thank','refresh');
} else {
redirect('transfer','refresh');
}
}
解决方法
开发时应打印错误。它通常会告诉您出了什么问题。 例如:
if ($this->upload->do_upload('bukti_img')) {
return $this->upload->data("file_name");
} else {
print_r($this->upload->display_errors());
exit;
}
if ($this->form_validation->run()) {
$this->M_checkout->bukti_to_db();
redirect('thank','refresh');
} else {
print_r(validation_errors());
exit;
}
尽管我很确定您无法像这样用<input class=" file-input" type="file" name="bukti_img">
来验证form_validation
。由于您正在验证$_POST
,而文件位于$_FILES
变量中。在文件上传功能上进行文件验证。