Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法将CSV文件上载到数据库_Php_Mysql_Csv - Fatal编程技术网

Php 无法将CSV文件上载到数据库

Php 无法将CSV文件上载到数据库,php,mysql,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`

我有一个上传页面,用户只能上传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\u 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文件。好消息是,您的代码(对我来说)运行得非常好,但有两个小问题

您的成功消息是错误的,请删除

if($result){
echo 'Success! Your file was successfully added!';
}else{
echo 'Error! Failed to insert the file';
}
您还试图在日期数据类型中插入日期字符串
03/02/2014
。这将不起作用,您需要相应地格式化此字符串。作为临时措施,我只是将数据库中的数据类型更改为VARCHAR(20)

这两件小事都解决了:


所以我设法解决了我自己的问题。在浏览了我的代码之后,我注意到我的代码在while循环之前是很好的。PHP在读取文件时没有正确识别行尾,因此启用
自动检测行尾
运行时配置有助于解决我的问题。请注意,
auto\u detect\u line\u endings
应设置在
fopen
之前,而不是之后

    <?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>';
?>

我更担心的是上传的文件不符合您期望的格式。@蓝狗,请您详细说明一下好吗?您根本没有检查上传的文件格式。如果你有一个期望数字的文本,会发生什么?如果有8列而不是7列,会发生什么?所有这些(以及更多!)都可以防止数据被插入数据库。你是在向一个充满伤害的世界敞开心扉…@蓝狗我明白你的意思,但是,除了设置文件格式限制外,我现在最担心的是我不能将任何东西上传到我的数据库好的,你明白这一点没关系:)我每天都处理CSV文件,当它们由另一个应用程序生成时(直到供应商更改格式),这很容易,但是尝试插入来自用户的数据是另一回事。我没有意识到我的成功消息是错误的。谢谢你注意到这一点。而且,我也不知道为什么它对我不起作用me@user3519721:我刚才注意到的另一件事是,在HTML文档中,您使用的是简短的PHP标记
:(仍然不起作用。在我第一次编写代码时,它起作用了,但后来它就停止了工作,这是非常重要的。)strange@user3519721:我会说!很抱歉,我无法提供更多帮助,但我无法复制您的问题…如果您注释掉
include(“../template/header.php”),会发生什么情况
?可能里面有什么东西导致了问题。我会尝试修改代码,谢谢你的帮助,虽然我上传了我的新代码,上面已经不再使用简短的开头标记了
    <?
session_start();
<?php
session_start();