【问题标题】:CSV file not being uploadedCSV 文件未上传
【发布时间】:2017-05-16 11:07:32
【问题描述】:

以下是上传 csv 文件的代码。正确上传的文件很少,但没有正确上传的文件很少。即它说“成员数据已成功插入”。但是当我看到数据库时,记录不存在 请检查代码一次,如果有任何错误,请告诉我。

<?php
//load the database configuration file
include 'csv_css.css';
include 'dbConfig.php';

if(!empty($_GET['status'])){
    switch($_GET['status']){
        case 'succ':
            $statusMsgClass = 'alert-success';
            $statusMsg = 'Members data has been inserted successfully.';
            break;
        case 'err':
            $statusMsgClass = 'alert-danger';
            $statusMsg = 'Some problem occurred, please try again.';
            break;
        case 'invalid_file':
            $statusMsgClass = 'alert-danger';
            $statusMsg = 'Please upload a valid CSV file.'; 
            break;
        default:
            $statusMsgClass = '';
            $statusMsg = '';
       }
}
?>
 <div class="container">
<?php if(!empty($statusMsg)){
     echo '<div class="alert '.$statusMsgClass.'">'.$statusMsg.'</div>';
  } 
?>
   <div class="panel panel-default">
    <div class="panel-heading">
        Members list
        <a href="javascript:void(0);" onclick="$('#importFrm').slideToggle();">Import Members</a>
    </div>
    <div class="panel-body">
        <form action="import_usait.php" method="post" enctype="multipart/form-data" id="importFrm">
            <input type="file" name="file" />
            <input type="submit" class="btn btn-primary" name="importSubmit" value="IMPORT">
        </form>
        <table class="table table-bordered">
            <thead>
                <tr>
                  <th>ContactOwner</th>
                  <th>LeadSource</th>
                  <th>Firstname</th>
                  <th>Lastname</th>
                  <th>Accountname</th>
                  <th>Title</th>
                  <th>EmailID</th>
                  <th>Department</th>
                  <th>Industry</th>
                  <th>Phone</th>
                  <th>Mobile</th>
                  <th>Fax</th>
                  <th>DOB</th>
                  <th>Asssistant</th>
                  <th>Asstphone</th>
                  <th>ReportsTo</th>
                  <th>LinkedIn</th>
                  <th>Street</th>
                  <th>OtherStreet</th>
                  <th>City</th>
                  <th>State</th>
                  <th>Zip</th>
                  <th>Country</th>
                  <th>Description</th>
                </tr>
            </thead>
            <tbody>
<?php
    //get records from database
    $query = $db->query("SELECT * FROM contact ORDER BY id DESC");
    if($query->num_rows > 0){ 
        while($row = $query->fetch_assoc()){ ?>
                <tr>
                  <td><?php echo $row['id']; ?></td>
                  <td><?php echo $row['ContactOwner']; ?></td>
                  <td><?php echo $row['LeadSource']; ?></td>
                  <td><?php echo $row['Firstname']; ?></td>
                  <td><?php echo $row['Lastname']; ?></td>
                  <td><?php echo $row['Accountname']; ?></td>
                  <td><?php echo $row['Title']; ?></td>
                  <td><?php echo $row['EmailID'];?></td>
                  <td><?php echo $row['Department'];?></td>
                  <td><?php echo $row['Industry'];?></td>
                  <td><?php echo $row['Phone']; ?></td>
                  <td><?php echo $row['Mobile']; ?></td>
                  <td><?php echo $row['Fax'];?></td>
                  <td><?php echo $row['DOB'];?></td>
                  <td><?php echo $row['Asssistant'];?></td>
                  <td><?php echo $row['Asstphone'];?></td>
                  <td><?php echo $row['ReportsTo'];?></td>
                  <td><?php echo $row['LinkedIn'];?></td>
                  <td><?php echo $row['Street'];?></td>
                  <td><?php echo $row['OtherStreet'];?></td>
                  <td><?php echo $row['City']; ?></td>
                  <td><?php echo $row['State'];?></td>
                  <td><?php echo $row['Zip'];?></td>  
                  <td><?php echo $row['Country'];?></td>
                  <td><?php echo $row['Description'];?></td>
              </tr>
<?php 
        } 
    }else{ 
?>
                <tr><td colspan="25">No member(s) found.....</td></tr>
<?php } ?>
            </tbody>
        </table>
    </div>
  </div>
 </div>

import_usait.php 文件:

<?php
//load the database configuration file
include 'dbConfig.php';

if(isset($_POST['importSubmit'])){

    //validate whether uploaded file is a csv file
    $csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');

    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$csvMimes)){
        if(is_uploaded_file($_FILES['file']['tmp_name'])){

            //open uploaded csv file with read only mode
            $csvFile = fopen($_FILES['file']['tmp_name'], 'r');

            //skip first line
            fgetcsv($csvFile);

            //parse data from csv file line by line
            while(($line = fgetcsv($csvFile)) !== FALSE){
                //check whether member already exists in database with same Category
                //insert member data into database
                $db->query("INSERT INTO contact 
                                (ContactOwner, LeadSource, Firstname, 
                                Lastname,Accountname, Title, 
                                EmailID, Department,Industry, 
                                Phone, Mobile, Fax, DOB, Assistant, 
                                Asstphone, ReportsTo, LinkedIn, Street, 
                                OtherStreet, City, State, Zip, 
                                Country, Description) 
                        VALUES 
                            ('".$line[0]."','".$line[1]."','".$line[2].
                            "','".$line[3]."','".$line[4]."','".$line[5].
                            "','".$line[6]."','".$line[7]."','".$line[8].
                            ",'".$line[9]."','".$line[10].",'".$line[11]."','".$line[12].",'".$line[13].
                            "','".$line[14].",'".$line[15]."','".$line[16].",'".$line[17].
                            "','".$line[18].",'".$line[19]."','".$line[20].",'".$line[21].
                            "','".$line[22].",'".$line[23]."')");
            }

            //close opened csv file
            fclose($csvFile);

            $qstring = '?status=succ';
        }else{
            $qstring = '?status=err';
        }
    }else{
        $qstring = '?status=invalid_file';
    }
 }

//redirect to the listing page
header("Location: usa_it.php".$qstring);

【问题讨论】:

  • 了解prepared Statement以防止SQL注入
  • 可能是尺寸问题?
  • 检查您的日志。如果某处有什么问题,它应该会出现在那里。
  • 将error reporting 添加到文件顶部测试时在您打开PHP 标记之后,例如&lt;?php error_reporting(E_ALL); ini_set('display_errors', 1); 以查看它是否产生任何结果。跨度>
  • 如果您使用的是MYSQLI_,请将ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 添加到脚本的顶部。这将强制任何mysqli_ 错误生成一个您可以在浏览器上看到的异常,并且其他错误也将在您的浏览器上可见。

标签: php


【解决方案1】:

我自己没有运行这个,但我认为你的 mime 检查在你检查它的时候是一个失误。先看看你是否有 is_uploaded_file(),然后检查 mime。此阶段的 Mime 类型由浏览器报告,可能是奇怪/错误/缺失或危险的。不要相信它。

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2020-06-06
    相关资源
    最近更新 更多