php - 无法将 CSV 文件上传到数据库

标签 php mysql csv

我有一个上传页面,用户只能上传 CSV 文件。但是,当我点击上传按钮时,没有任何内容上传到我的数据库,也没有显示错误消息。仅显示返回按钮,这意味着我的代码不能正确执行我的代码。我该如何解决这个问题?

    CREATE TABLE `Jobs` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  `order_ref` varchar(250) NOT NULL,
  `first_name` varchar(250) NOT NULL,
  `last_name` varchar(250) NOT NULL,
  `postcode` varchar(250) NOT NULL,
  `country` varchar(250) NOT NULL,
  `quantity` varchar(250) NOT NULL,
  `scott_packing` varchar(250) NOT NULL,
  `packing_price` varchar(250) NOT NULL,
  `courier_price` varchar(250) NOT NULL,
  `dispatch_type` varchar(250) NOT NULL DEFAULT '',
  `tracking_number` varchar(250) NOT NULL,
  `job_status` varchar(250) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
)

HTML:

    <?
session_start();
if(!session_is_registered(myusername))
{
    header("location:../index.php");
}
?>
<?
include("../template/header.php");
?>
<!DOCTYPE html>
<head>
    <title></title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
    <div class="content">
        <div class="toggle">
            <div class="header"><img style="float: right; padding: 10px;" src="../img/show.gif"><h4>Upload New File:</h4></div>  
    <form id="upload" action="upload_file.php" method="post" enctype="multipart/form-data">
        <input type="file" name="uploaded_file"><br>
        <input type="submit" value="Upload file">
    </form>
    <!--<p>
        <a href="list_files.php" style="padding: 20px;">See all files</a>
    </p>-->
</div>
</div>
</body>
</html>

upload_file.php:

    <?php


if(isset($_FILES['uploaded_file'])) {
    if($_FILES['uploaded_file']['error'] == 0) {

        $database = "spineless";

        $dblink = mysql_connect("localhost", "root", "vario007")
           or die("Could not connect");

        $db = mysql_select_db($database)
        or die("Could not select database");

        if(mysql_errno()) {
            die("MySQL connection failed: ". mysql_error());
        }

        $file = $_FILES  ['uploaded_file']['tmp_name'];
        $handle = fopen($file, "r");
        $row = 1;
        while (($data = fgetcsv($handle, 0, ",","'")) !== FALSE)
        {
            if($row == 1)
            {
                // skip the first row   
            }
            else
            {
                //csv format data like this 
                //$row[0] = date
                //$row[1] = order_ref
                //$row[2] = postcode
                //$row[3] = country
                //$row[4] = quantity
                //$row[5] = packing_price
                //$row[6] = dispatch_type

                $query = "
                INSERT INTO `Jobs` (
                `date`, `order_ref`, `postcode`, `country`, `quantity`, `packing_price`, `dispatch_type`, `created`
                )
                VALUES (
                '".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."', '".$data[5]."', '".$data[6]."', NOW()
                )";
                $result = mysql_query($query);


                 // Check if it was successfull
                if(!$result) {
                    echo 'Success! Your file was successfully added!';
                }
                else {
                    echo 'Error! Failed to insert the file';

                 }
            }
            $row++;
        }



    }
    else {
        echo 'An error accured while the file was being uploaded. '
           . 'Error code: '. intval($_FILES['uploaded_file']['error']);
    }

    // Close the mysql connection
    mysql_close();
}
else {
    echo 'Error! A file was not sent!';
}

// Echo a link back to the main page
echo '<p>Click <a href="joblist.php">here</a> to go back</p>';
?>

CSV 如下所示: http://i754.photobucket.com/albums/xx182/rache_R/Screenshot2014-04-24at151348_zps807cedb0.png

最佳答案

所以我已经设法解决了我自己的问题。查看我的代码后,我注意到我的代码在 while 循环之前都很好。 PHP 在读取文件时无法正确识别行结尾,因此启用 auto_detect_line_endings 运行时配置有助于解决我的问题。请注意,auto_detect_line_endingsfopen之前设置,而不是在之后。

    <?php

if(isset($_FILES['uploaded_file'])) {


    if($_FILES['uploaded_file']['error'] == 0) {

        // Connect to database
        $database = "spineless";
        $link = mysql_connect("localhost", "root", "vario007") or die("Could not connect");
        $db = mysql_select_db($database,$link) or die("Could not select database");

        // Upload file
        $file = $_FILES['uploaded_file']['tmp_name'];
        ini_set("auto_detect_line_endings", true); // auto_detect_line_endings added here
        $handle = fopen($file, "r");
        $row = 1;
        while (($data = fgetcsv($handle, 0, ",","'")) !== FALSE)
        {
            if($row == 1)
            {
                // skip the first row   
            }
            else
            {
                //csv format data like this 
                //$row[0] = date
                //$row[1] = order_ref
                //$row[2] = postcode
                //$row[3] = country
                //$row[4] = quantity
                //$row[5] = packing_price
                //$row[6] = dispatch_type

                $query = "
                INSERT INTO `Jobs` (
                `date`, `order_ref`, `postcode`, `country`, `quantity`, `packing_price`, `dispatch_type`, `created`
                )
                VALUES (
                '".$data[1]."', '".$data[2]."', '".$data[5]."', '".$data[6]."', '".$data[7]."', '".$data[9]."', '".$data[11]."', NOW()
                )";

                $result = mysql_query($query);




                 // Check if it was successfull
                if($result) {
                    echo 'Success! Your file was successfully added!';
                }
                else {
                    echo 'Error! Failed to insert the file';

                 }
            }
            $row++;
        }

    }
    else {
        echo 'An error accured while the file was being uploaded. ';
    }

    // Close the mysql connection
    mysql_close();
}
else {
    echo 'Error! A file was not sent!';
} 

// Echo a link back to the main page
echo '<p>Click <a href="joblist.php">here</a> to go back</p>';
?>

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

相关文章:

C++如何使用相同的类和方法来读取/写入可变大小的数据

php - 超链接强制文件下载 - 如何在服务器上保存文件?

ios - 快速初始化 CHCSVPaser

php - 如何在 php mysql 搜索中加粗关键字?

php - 保存唯一的 "post_id"来定位div

php - 将用户分配到我的 PHP 应用程序中的多个项目,最佳方法?

mysql - LOAD DATA INFILE 和 LINES TERMINATED 错误

php - 无法在 html 文本框中显示 0 值

mysql - 如何从选择结果中选择字段?

javascript - PHP按下按钮时更新数据库中文本输入的值