php - 无法上传 csv 文件

标签 php mysql ajax codeigniter

我正在尝试上传一个 Microsoft Excel 类型的 csv 文件,但导入 csv 文件时似乎出现问题。

Controller (Csv_import.php):

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

 class Csv_import extends CI_Controller {

 public function __construct()
 {
  parent::__construct();
  $this->load->model('csv_import_model');
  $this->load->library('csvimport');
 }

  function index()
    {
      $this->load->view('csv_import');
      $this->load_data();
    }

  function load_data()
    {
      $result = $this->csv_import_model->select();
      $output = '
       <h3 align="center">Imported User Details from CSV File</h3>
       <div class="table-responsive">
         <table class="table table-bordered table-striped">
           <tr>
            <th>ID Number</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Gender</th>
            <th>Course</th>
            <th>Year</th>
          </tr>
              ';
      $count = 0;
      if($result->num_rows() > 0)
       {
        foreach($result->result() as $row)
         {
          $count = $count + 1;
          $output .= '
          <tr>
           <td>'.$count.'</td>
           <td>'.$row->fname.'</td>
           <td>'.$row->lname.'</td>
           <td>'.$row->gndr.'</td>
           <td>'.$row->crse.'</td>
           <td>'.$row->yr.'</td>
          </tr>
          ';
          }
         }
        else
         {
          $output .= '
           <tr>
           <td colspan="6" align="center">Data not Available</td>
           </tr>
          ';
    }
   $output .= '</table></div>';
   echo $output;
    }

   function import()
    {
     $file_data = $this->csvimport->get_array($_FILES["csv_file"] 
     ["tmp_name"]);
     foreach($file_data as $row)
      {
       $data[] = array(
      'id_number' => $row["ID Number"],
      'fname'  => $row["First Name"],
      'lname'  => $row["Last Name"],
      'gndr'   => $row["Gender"],
      'crse'   => $row["Course"],
      'yr'   => $row["Year"]
     );
    }
   $this->csv_import_model->insert($data);
  }


}

模型(csv_import_model.php):

<?php
 class Csv_import_model extends CI_Model
  {
   function select()
    {
      $this->db->order_by('id_number', 'DESC');
      $query = $this->db->get('tbl_user');
      return $query;
  }

   function insert($data)
    {
     $this->db->insert_batch('tbl_user', $data);
    }
  }

和 View (csv_import.php):

<html>
<head>
<title>CSV Sample</title>

<script type="text/javascript" src="<?php echo base_url();
>bootstrap/js/jquery.js" ></script>
<script type="text/javascript" src="<?php echo base_url();
>bootstrap/dist/js/bootstrap.js" ></script>
<link href="<?php echo base_url()?>bootstrap/dist/css/bootstrap.css" 
rel="stylesheet" type="text/css"/>

</head>
<body>
<div class="container box">
<h3 align="center">CSV Sample</h3>
<br />

<form method="post" id="import_csv" enctype="multipart/form-data">
 <div class="form-group">
  <label>Select CSV File</label>
  <input type="file" name="csv_file" id="csv_file" required accept=".csv" />
 </div>
 <br />
 <button type="submit" name="import_csv" class="btn btn-info" 
  id="import_csv_btn">Import CSV</button>
 </form>
 <br />
  <div id="imported_csv_data"></div>
  </div>
  </body>
  </html>
  <script>

$(document).ready(function(){

 load_data();

function load_data()
 {
  $.ajax({
  url:"<?php echo base_url(); ?>csv_import/load_data",
  method:"POST",
  success:function(data)
   {
    $('#imported_csv_data').html(data);
   }
   })
   }

 $('#import_csv').on('submit', function(event){
  event.preventDefault();
  $.ajax({
  url:"<?php echo base_url(); ?>csv_import/import",
  method:"POST",
  data:new FormData(this),
  contentType:false,
  cache:false,
  processData:false,
  beforeSend:function(){
 $('#import_csv_btn').html('Importing...');
  },
 success:function(data)
  {
   load_data();
   $('#import_csv')[0].reset();
   $('#import_csv_btn').attr('disabled', false);
   $('#import_csv_btn').html('Import Done');

    }
  })
 });

 });
</script>

当我单击导入按钮时没有任何反应,我还在运行代码之前下载了 csv 库。顺便说一句,我正在使用 CodeIgniter

最佳答案

哈哈,我知道已经过去一年了,但不知何故我设法回来解决了这个问题。我认为我自己的问题是我从另一个来源复制了这段代码并保证这段代码 100% 工作,所以为了让这段代码工作,我编辑了 Controller 而不是这个:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

 class Csv_import extends CI_Controller {

 public function __construct()
  {
  parent::__construct();
  $this->load->model('csv_import_model');
  $this->load->library('csvimport');
 }

  function index()
    {
      $this->load->view('csv_import');
      $this->load_data();
    }

  function load_data()
    {
      $result = $this->csv_import_model->select();
      $output = '
       <h3 align="center">Imported User Details from CSV File</h3>
       <div class="table-responsive">
       <table class="table table-bordered table-striped">
       <tr>
        <th>ID Number</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Gender</th>
        <th>Course</th>
        <th>Year</th>
      </tr>
          ';
      $count = 0;
      if($result->num_rows() > 0)
       {
        foreach($result->result() as $row)
         {
          $count = $count + 1;
          $output .= '
          <tr>
           <td>'.$count.'</td>
           <td>'.$row->fname.'</td>
           <td>'.$row->lname.'</td>
           <td>'.$row->gndr.'</td>
           <td>'.$row->crse.'</td>
           <td>'.$row->yr.'</td>
          </tr>
          ';
          }
         }
    else
     {
      $output .= '
       <tr>
       <td colspan="6" align="center">Data not Available</td>
       </tr>
      ';
    }
   $output .= '</table></div>';
   echo $output;
    }

   function import()
    {
     $file_data = $this->csvimport->get_array($_FILES["csv_file"] 
     ["tmp_name"]);
     foreach($file_data as $row)
       {
       $data[] = array(
      'id_number' => $row["ID Number"],
      'fname'  => $row["First Name"],
      'lname'  => $row["Last Name"],
      'gndr'   => $row["Gender"],
      'crse'   => $row["Course"],
      'yr'   => $row["Year"]
     );
    }
   $this->csv_import_model->insert($data);
  }


    }

我将 $output 替换为 echo 那么它应该是这样的:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

 class Csv_import extends CI_Controller {

 public function __construct()
  {
  parent::__construct();
  $this->load->model('csv_import_model');
  $this->load->library('csvimport');
 }

  function index()
    {
      $this->load->view('csv_import');
      $this->load_data();
    }

  function load_data()
    {
      $result = $this->csv_import_model->select();
      $echo'
       <h3 align="center">Imported User Details from CSV File</h3>
       <div class="table-responsive">
       <table class="table table-bordered table-striped">
       <tr>
        <th>ID Number</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Gender</th>
        <th>Course</th>
        <th>Year</th>
      </tr>
          ';
      $count = 0;
      if($result->num_rows() > 0)
       {
        foreach($result->result() as $row)
         {
          $count = $count + 1;
          $echo '
          <tr>
           <td>'.$count.'</td>
           <td>'.$row->fname.'</td>
           <td>'.$row->lname.'</td>
           <td>'.$row->gndr.'</td>
           <td>'.$row->crse.'</td>
           <td>'.$row->yr.'</td>
          </tr>
          ';
          }
         }
    else
     {
      $echo'
       <tr>
       <td colspan="6" align="center">Data not Available</td>
       </tr>
      ';
    }
   $echo '</table></div>';
    }

   function import()
    {
     $file_data = $this->csvimport->get_array($_FILES["csv_file"] 
     ["tmp_name"]);
     foreach($file_data as $row)
       {
       $data[] = array(
      'id_number' => $row["ID Number"],
      'fname'  => $row["First Name"],
      'lname'  => $row["Last Name"],
      'gndr'   => $row["Gender"],
      'crse'   => $row["Course"],
      'yr'   => $row["Year"]
     );
    }
   $this->csv_import_model->insert($data);
  }


    }

终于成功了。

关于php - 无法上传 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991348/

相关文章:

javascript - JQUERY文本区域输入提交

ajax - 如何在不使用链接的情况下在 Drupal 8 中打开模态?

php - 通过 php exec() 运行 mysqldump,管道到 gzip,返回 mysqldump stderr

php - Symfony2 响应

php mysql 条件查询 AND OR

php - 设置 PDO 连接无需密码

javascript - 如何将 jQuery 变量放入 PHP 变量

javascript - Uncaught ReferenceError : getPrice is not defined

php - 使用 jQuery 在单击时 POST 到 MySQL

mysql - 不明白为什么