【问题标题】:Insert data excel into 2 tables with id codeigniter将数据 excel 插入 2 个带有 id codeigniter 的表中
【发布时间】:2020-11-06 18:26:12
【问题描述】:

我遇到了如何使用 phpsreadsheet 将文件上传到数据库的问题。我想将数据放入两个表中:

  1. Beasiswa 包含表格:beasiswa_namabeasiswa_idbeasiswa_file(链接文件)、beasiswa_tahunDATE_CREATEDDATE_UPDATED
  2. data_mahasiswa 餐桌:id_mhs, nama_mhs, nim_mhs, (FK) id_beasiswa

如何插入文件并读入Beasiswa表,学生数据读入data_mahasiswa

关系表:

错误创建数据:

Beasiswa 控制器

public function create()
{
    $this->form_validation->set_rules('nama_beasiswa', 'Nama Beasiswa', 'trim|required');
    $this->form_validation->set_rules('tahun_beasiswa', 'Tahun Mahasiswa', 'trim|required');

    if (empty($_FILES['nama_mahasiswa_beasiswa']['name'])) {
        $this->form_validation->set_rules('nama_mahasiswa_beasiswa', 'File Nama Mahasiswa', 'required');
    }

    if ($this->form_validation->run() == TRUE) {
        // true case
        $upload_nama_mahasiswa = $this->_upload_nama_mahasiswa();

        $data = array(
            'beasiswa_nama' => htmlspecialchars($this->input->post('nama_beasiswa', true)),
            'beasiswa_tahun' => htmlspecialchars($this->input->post('tahun_beasiswa', true)),
            'beasiswa_file' => $upload_nama_mahasiswa,
            'date_created' => date("Y-m-d H:i:s")
        );

        $create = $this->m_beasiswa->create($data);
        if ($create == true) {
            $this->session->set_flashdata('success', 'Berhasil Upload Data Beasiswa');
            redirect('beasiswa/', 'refresh');
        } else {
            $this->session->set_flashdata('errors', 'Terjadi Galat. Silahkan Periksa Kembali!!');
            redirect('beasiswa/create', 'refresh');
        }
    } else {
        $this->render_template('beasiswa/create', $this->data);
    }
}

private function _upload_nama_mahasiswa()
{
    $filename = 'import-data';
    $config['upload_path'] = 'assets/file/beasiswa/';
    $config['file_name'] = $filename;
    $config['overwrite'] = TRUE;
    $config['allowed_types'] = 'xlsx|xls';
    $config['max_size'] = '1024';

    $this->load->library('upload', $config);
    $this->upload->initialize($config);
    if (!$this->upload->do_upload('nama_mahasiswa_beasiswa')) {
        // $error = array('errors' => $this->upload->display_errors('File yang anda masukkan tidak sesuai permintaan, atau file terlalu besar.'));
        $this->session->set_flashdata('errors', 'File yang anda masukkan tidak sesuai permintaan, atau file terlalu besar.');
        redirect('beasiswa/create', 'refresh');
    } else {
        $data = array('upload_data' => $this->upload->data());
        $img = $data['upload_data']['file_name'];

        $excelReader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        $loadExcel = $excelReader->load($config['upload_path'] . $img);
        $sheet = $loadExcel->getActiveSheet()->toArray(null, true, true, true);
        $dataExcel = array();
        // $this->data['sheet'] = $sheet;

        $numRow = 3;
        foreach ($sheet as $row) {
            if ($numRow > 3) {
                array_push(
                    $dataExcel,
                    [
                        'nama_mhs' => $row['A'],
                        'nim_mhs' => $row['B']
                    ]
                );
            }
            $numRow++;
        }
        $this->db->insert_batch('data_beasiswa', $dataExcel);
        unlink($config['upload_path'] . $img);
    }
}

Beasiswa 模型

public function create($data)
{
    if ($data) {
        $insert = $this->db->insert('beasiswa', $data);
        return ($insert == true) ? true : false;
    }
}

Beasiswa 视图

<?php
defined('BASEPATH') or exit('No direct script access allowed');
?>
<!-- Main Content -->
<div class="main-content">
    <section class="section">
        <div class="section-header">
            <div class="section-header-back">
                <a href="<?php echo base_url('beasiswa'); ?>" class="btn btn-icon"><i class="fas fa-arrow-left"></i></a>
            </div>
            <h1>Tambah Beasiswa</h1>
        </div>

        <div class="section-body">
            <div class="row">
                <div class="col-md-12 col-xs-12 col-xl-12 col-12">
                    <div id="messages"></div>
                    <?php if ($this->session->flashdata('success')) : ?>
                        <div class="alert alert-success alert-dismissible">
                            <div class="alert-body">
                                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                    <span aria-hidden="true">&times;</span>
                                </button>
                                <?php echo $this->session->flashdata('success'); ?>
                            </div>
                        </div>
                    <?php elseif ($this->session->flashdata('errors')) : ?>
                        <div class="alert alert-danger alert-dismissible show fade">
                            <div class="alert-body">
                                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                    <span aria-hidden="true">&times;</span>
                                </button>
                                <?php echo $this->session->flashdata('errors'); ?>
                            </div>
                        </div>
                    <?php endif; ?>

                    <div class="card">
                        <div class="card-body">
                            <b style="font-size: 17px">Unduh format excel data mahasiswa</b><br>
                            <a href="<?= base_url() . 'beasiswa/templateexcel' ?>">Download template</a>
                            <form action="<?php base_url('beasiswa/create') ?>" method="POST" enctype="multipart/form-data">
                                <div class="form-group">
                                    <div class="section-title">Nama Program Beasiswa</div>
                                    <input type="text" class="form-control" name="nama_beasiswa" id="nama_beasiswa" placeholder="Nama Program Beasiswa" value="<?= set_value('nama_beasiswa'); ?>">
                                    <?= form_error('nama_beasiswa', '<small class="text-danger">', '</small>'); ?>
                                </div>

                                <div class="form-group">
                                    <div class="section-title">Tahun Beasiswa</div>
                                    <input type="text" class="form-control" name="tahun_beasiswa" id="tahun_beasiswa" placeholder="Tahun Beasiswa (contoh: 2020)" value="<?= set_value('tahun_beasiswa'); ?>">
                                    <?= form_error('tahun_beasiswa', '<small class="text-danger">', '</small>'); ?>
                                </div>

                                <div class="form-group">
                                    <div class="section-title">Upload File Nama Mahasiswa</div>
                                    <input type="file" name="nama_mahasiswa_beasiswa" id="nama_mahasiswa_beasiswa" class="form-control col-sm-6 col-md-6">
                                    <p class="text-danger" style="font-style:italic"><b>* Upload file sesuai dengan format yang sudah disesuaikan</b></p>
                                </div>

                                <button type="submit" class="btn btn-primary">Simpan</button>
                                <a href="<?php echo base_url('beasiswa/') ?>" class="btn btn-warning">Kembali</a>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>
</div>

【问题讨论】:

  • 你能把你擅长的样本包括进来吗?
  • gofile.io/d/RzYf7i这个链接示例我的excel上传@kirb

标签: mysql database codeigniter phpspreadsheet


【解决方案1】:

这是因为您在data_mahasiswa 表中插入了空数据,可能会发生外键错误。

foreach ($sheet as $row) 中使用的 Excel 中有空白空间(可能已被编辑?)。您可以通过以下方式解决此问题:

foreach ($sheet as $row) {
    if ($numRow > 3) {
         if($row['A'] != null && $row['B'] != null)
         {
             $dataExcel[] = array(
                 'nama_mhs' => $row['A'],
                 'nim_mhs' => $row['B']
             );
         }
         /*you can also break the function, if no empty row between data in your excel*/
         /*else
         {
             break;
         }*/
    }
}

【讨论】:

  • 这是代码运行,但是,我如何将数据 excel 输入到 data_mahasiswa,id 为 beasiswa
  • 错误无法从beasiswa输入id到data_beasiswa
【解决方案2】:

当你将数据输入数据库时​​,你需要去掉空值。在 Beasiswa Controller

的这行代码上方
$this->db->insert_batch('data_beasiswa', $dataExcel);

添加这行代码删除有空数据的单元格

foreach ($dataExcel as $data => $val) {
    if(empty($val['nama_mhs'])){
        unset($dataExcel[$data]['nama_mhs']);
        unset($dataExcel[$data]['nim_mhs']);                
    }
}
$dataExcel = array_filter($dataExcel);
$data = array('data_excel' => $dataExcel);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2019-09-10
    • 2013-12-25
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多