Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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注意:未定义的偏移量数组文件可以';t上传_Php_Arrays_Csv_Import - Fatal编程技术网

PHP注意:未定义的偏移量数组文件可以';t上传

PHP注意:未定义的偏移量数组文件可以';t上传,php,arrays,csv,import,Php,Arrays,Csv,Import,我已经打开了所有与我的帖子相关的问题,但我仍然感到困惑。我尝试使用php导入我的csv文件 我试试这个。但我有一个错误: PHP Notice: Undefined offset: 1 PHP Notice: Undefined offset: 2 PHP Notice: Undefined offset: 3 PHP Notice: Undefined index: csv 我已修改我的数据库: if ($_FILES["csv"]["size"] > 0) { //

我已经打开了所有与我的帖子相关的问题,但我仍然感到困惑。我尝试使用php导入我的csv文件

我试试这个。但我有一个错误:

PHP Notice:  Undefined offset: 1
PHP Notice:  Undefined offset: 2
PHP Notice:  Undefined offset: 3
PHP Notice:  Undefined index: csv
我已修改我的数据库:

if ($_FILES["csv"]["size"] > 0) { 
    //get the csv file 
    $file = $_FILES["csv"]["tmp_name"]; 
    $handle = fopen($file,"r");
    //loop through the csv file and insert into database

//    do { 
        while ($data = fgetcsv($handle,1000,",","'")){
        print_r($data);
        if ($data[0]) { 
            mysql_query("INSERT INTO prod_schedule (RecNo,      Model_Name,     Lot_Number,     Start_Serial,
                                Qty,    Lot_Qty, Line,   Line_Name,      Start_Date,     End_Date,       Due_Date
                        ) VALUES 
                ( 
                    '".addslashes($data[0])."', 
                    '".addslashes($data[1])."', 
                    '".addslashes($data[2])."',
                    '".addslashes($data[3])."', 
                    '".addslashes($data[4])."',
                    '".addslashes($data[5])."',
                    '".addslashes($data[6])."', 
                    '".addslashes($data[7])."', 
                    '".addslashes($data[8])."',
                    '".addslashes($data[9])."' 
                ) 
            "); 
        } 
    } 
//      while ($data = fgetcsv($handle,1000,",","'"));
    // 
    //redirect 
    header('Location: upload.php?success=1'); die; 

}

打印($data)结果为:

Array ( [0] => RecNo Model_Name Lot_Number Start_Serial Qty Lot_Qty Line Line_Name Start_Date End_Date Due_Date ) Array ( [0] => 1 KD-R746BTU9D 011A 421 30 80 N0001 MA 01 3/3/2014 3/3/2014 12/31/2999 ) Array ( [0] => 2 KW-XG56T2UD 057A 25081 79 440 N0001 MA 01 3/3/2014 3/3/2014 12/31/2999 ) Array ( [0] => 3 KD-R646U9D 012B 561 1 60 N0001 MA 01 3/3/2014 3/3/2014 12/31/2999 )

编辑

将($data=fgetcsv($handle,1000,“,””){更改为($data=fgetcsv($handle,1000,“,””){),然后打印($data):

文件仍然没有上传,显示:
PHP注意:未定义索引:csv
。然后将
var\u dump
放在如下位置:

var_dump($_FILES);
if ($_FILES["csv"]["size"] > 0) {

我想我只是浏览了一下数组(0){}

 if (!empty($_GET[success])) 
应该是

 if (!empty($_GET['success'])) 

我认为问题在于如何放置do while。当使用do while语句时,它将首先运行do中的代码,然后检查while语句

你应该做什么,而不是

 do {
    if ($data[0]) {
        mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES
            (
                '".addslashes($data[0])."',
                '".addslashes($data[1])."',
                '".addslashes($data[2])."'
            )
        ");
    }
} while ($data = fgetcsv($handle,1000,",","'")); 
使用

基本上是一样的,它只是先执行
while()
中的代码,然后再执行其中的任何代码


希望这有帮助。

根据您提供的print\r($data)输出,我可以看到字段看起来是用制表符分隔的

您的代码在这里:

while ($data = fgetcsv($handle,1000,",","'")){
正在使用函数查找字段之间的标准逗号分隔符-这是常见做法,因为CSV代表逗号分隔的值

要让脚本使用制表符作为分隔符来读取中的值,请尝试将上面的行调整为:

while ($data = fgetcsv($handle,1000,"\t","'")){

希望这有帮助:)

“我尝试了本教程。但我遇到了这个错误”-这不是教程,而是代码。您的csv中有空行吗?您是否尝试过打印($data);若要查看它包含的内容,以便对代码进行故障排除?我猜这也是一个旧教程中的内容,因为您确实不应该使用在较新的PHP版本中过时的mysql函数,请阅读使用mysqli函数的相关内容。此外,还没有对数据进行转义或sanatising,从而使此脚本完全开放给sql注入。即使在本教程中,它使用了不推荐使用的ext/mysql API。您应该寻找更好的方法。@Fred ii-:这是一些网站的链接文件。请参阅SO=>上的此问答,可能会有所帮助。@nunushow
PHP注意:未定义索引:在我的PHP脚本的第1行:csv
。第1行=if($\u FILES[“csv”][“size”]>0){..这说明它没有从表单接收文件上载。如果没有接收任何文件,为什么在打印($数据)后我得到了结果?请尝试在代码顶部放置一个var_dump($文件),以查看$文件包含哪些内容
while ($data = fgetcsv($handle,1000,",","'")){
while ($data = fgetcsv($handle,1000,"\t","'")){