表单验证codeigniter不起作用,如何上传图片?

问题描述

我是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');
    }
}

我的数据库database

解决方法

开发时应打印错误。它通常会告诉您出了什么问题。 例如:

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变量中。在文件上传功能上进行文件验证。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...