Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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_Csv_Ms Access_Export To Csv - Fatal编程技术网

Php CSV文件格式

Php CSV文件格式,php,csv,ms-access,export-to-csv,Php,Csv,Ms Access,Export To Csv,我有个问题:我需要能够用PHP将CSV文件导入MS Access数据库。我有一个脚本可以做到这一点,但我的CSV文件格式不正确 原始格式为: 但脚本使用这种格式: 两个文件都是.csv。如何将第一种文件格式转换为所需的格式 下面的导入脚本没有导入任何内容,也没有给出任何错误: if (isset($_POST['submit'])) { $i=0; require "connection.php"; if (is_upl

我有个问题:我需要能够用PHP将CSV文件导入MS Access数据库。我有一个脚本可以做到这一点,但我的CSV文件格式不正确

原始格式为:

但脚本使用这种格式:

两个文件都是.csv。如何将第一种文件格式转换为所需的格式

下面的导入脚本没有导入任何内容,也没有给出任何错误:

if (isset($_POST['submit'])) {
            $i=0;
            require "connection.php";
            if (is_uploaded_file($_FILES['csv']['tmp_name'])) {
                echo "<h3>" . "File ". $_FILES['csv']['name'] ." uploaded successfully." . "</h3>";
            }
            //Import uploaded file to Database
            $handle = fopen($_FILES['csv']['tmp_name'], "r");
            $import=$db->prepare("INSERT INTO adherence(
                    dateandtime,
                    lastname,
                    firstname,
                    paidtime,
                    approvedtime,
                    notadhering)VALUES(
                    ?,?,?,?,?,?)");
            while (($data = fgetcsv($handle, 1000,"\t","'")) !== FALSE) {
                if($i>0) {
                $data = str_replace('"', '', $data);
                $myDate =  date("Y/m/d",strtotime(str_replace('/','-',$data[0])));
                $import->bindParam(1, $myDate, PDO::PARAM_STR);
                $import->bindParam(2, $data[1], PDO::PARAM_STR);
                $import->bindParam(3, $data[2], PDO::PARAM_STR);
                $import->bindParam(4, $data[3], PDO::PARAM_STR);
                $import->bindParam(5, $data[4], PDO::PARAM_STR);
                $import->bindParam(6, $data[5], PDO::PARAM_STR);
                str_replace('"',' ',$data);
                $import->execute();
                }
                $i++;

            }
if(isset($\u POST['submit'])){
$i=0;
需要“connection.php”;
如果(是否上载了文件($文件['csv']['tmp\U名称]])){
echo“.”文件“$\u文件['csv']['name']”已成功上载。“”;
}
//将上载的文件导入数据库
$handle=fopen($_文件['csv']['tmp_名称'],“r”);
$import=$db->prepare(“插入到(
日期和时间,
姓,
名字,
paidtime,
批准的时间,
notadhering)值(
?,?,?,?,?,?)");
while(($data=fgetcsv($handle,1000,“\t”,”)!==FALSE){
如果($i>0){
$data=str_replace(“,”$data);
$myDate=date(“Y/m/d”,strtotime(str_replace(“/”,“-”,$data[0]));
$import->bindParam(1,$myDate,PDO::PARAM_STR);
$import->bindParam(2$data[1],PDO::PARAM_STR);
$import->bindParam(3,$data[2],PDO::PARAM_STR);
$import->bindParam(4,$data[3],PDO::PARAM_STR);
$import->bindParam(5,$data[4],PDO::PARAM_STR);
$import->bindParam(6,$data[5],PDO::PARAM_STR);
str_替换(“,”$data);
$import->execute();
}
$i++;
}
编辑当前代码:

<?php
        if (isset($_POST['submit'])) {
            $i=0;
            require "connection.php";
            if (is_uploaded_file($_FILES['csv']['tmp_name'])) {
                echo "<h3>" . "File ". $_FILES['csv']['name'] ." uploaded successfully." . "</h3>";
            }
            //Import uploaded file to Database
            $handle = fopen($_FILES['csv']['tmp_name'], "r");
            $import=$db->prepare("INSERT INTO adherence(
                    dateandtime,
                    lastname,
                    firstname,
                    paidtime,
                    approvedtime,
                    notadhering)VALUES(
                    ?,?,?,?,?,?)");
            $badlines=[];
while (($data = fgetcsv($handle, 1000,"\t",'"')) !== FALSE) {
    if($i>0) {
        //skip but keep track of bad data
        if(count($data) !== 5){
            $badlines[] = $i;
            continue;
        }
        $myDate =  date("Y/m/d",strtotime(str_replace('/','-',$data[0])));
        $names = explode(',', $data[1]);
        $import->bindParam(1, $myDate, PDO::PARAM_STR);
        $import->bindParam(2, $names[0], PDO::PARAM_STR);
        $import->bindParam(3, $names[1], PDO::PARAM_STR);
        $import->bindParam(4, $data[2], PDO::PARAM_STR);
        $import->bindParam(5, $data[3], PDO::PARAM_STR);
        $import->bindParam(6, $data[4], PDO::PARAM_STR);
        $import->execute();
    }
    $i++;

}
            $removal=$db->prepare("delete FROM adherence WHERE approvedtime = '0' OR notadhering IS NULL");
            $removal->execute();

            fclose($handle);
        }
“name,lastname”
是一个单列,因为它被双引号包围。 您的代码最初在错误配置fgetscsv时工作,将单引号作为附件参数传递,导致它忽略这些双引号,并将单列视为两列,因为它包含逗号

由于您的新文件是按制表符删除的,因此不会在逗号上拆分

要修复此问题,请将正确的enclosure参数传递给fgetcsv,然后自己拆分列:

$badlines=[];
while (($data = fgetcsv($handle, 1000,"\t",'"')) !== FALSE) {
    if($i>0) {
        //skip but keep track of bad data
        if(count($data) !== 5){
            $badlines[] = $i;
            continue;
        }
        $myDate =  date("Y/m/d",strtotime(str_replace('/','-',$data[0])));
        $names = explode(',', $data[1]);
        $import->bindParam(1, $myDate, PDO::PARAM_STR);
        $import->bindParam(2, $names[0], PDO::PARAM_STR);
        $import->bindParam(3, $names[1], PDO::PARAM_STR);
        $import->bindParam(4, $data[2], PDO::PARAM_STR);
        $import->bindParam(5, $data[3], PDO::PARAM_STR);
        $import->bindParam(6, $data[4], PDO::PARAM_STR);
        $import->execute();
    }
    $i++;

}
“name,lastname”
是一个单列,因为它被双引号包围。 您的代码最初在错误配置fgetscsv时工作,将单引号作为附件参数传递,导致它忽略这些双引号,并将单列视为两列,因为它包含逗号

由于您的新文件是按制表符删除的,因此不会在逗号上拆分

要修复此问题,请将正确的enclosure参数传递给fgetcsv,然后自己拆分列:

$badlines=[];
while (($data = fgetcsv($handle, 1000,"\t",'"')) !== FALSE) {
    if($i>0) {
        //skip but keep track of bad data
        if(count($data) !== 5){
            $badlines[] = $i;
            continue;
        }
        $myDate =  date("Y/m/d",strtotime(str_replace('/','-',$data[0])));
        $names = explode(',', $data[1]);
        $import->bindParam(1, $myDate, PDO::PARAM_STR);
        $import->bindParam(2, $names[0], PDO::PARAM_STR);
        $import->bindParam(3, $names[1], PDO::PARAM_STR);
        $import->bindParam(4, $data[2], PDO::PARAM_STR);
        $import->bindParam(5, $data[3], PDO::PARAM_STR);
        $import->bindParam(6, $data[4], PDO::PARAM_STR);
        $import->execute();
    }
    $i++;

}

第一个参数是以制表符分隔的。如果使用
fgetcsv()
,则只需将第三个参数更改为
“\t”
。将逗号替换为制表符(\t)可能有帮助,或者将导入代码中的
替换为制表符需要查看代码以帮助代码:while($data=fgetcsv($handle,1000,'\t',“'))!==FALSE){给出错误:注意:fgetcsv():分隔符必须是单个字符第一个是制表符分隔的。如果使用
fgetcsv()
,则只需将第三个参数更改为
“\t”
。将逗号替换为制表符(\t)可能会有帮助,或者将导入代码中的
替换为制表符需要查看代码以帮助代码:while($data=fgetcsv($handle,1000,'\t',“')!==FALSE){Gives error:Notice:fgetcsv():分隔符必须是单个字符错误:Notice:Undefined offset:1行:$names=explode(',',$data[1])@JustinasT那么这些毕竟不是选项卡-很难用屏幕截图来分辨。虽然你现有的代码文件格式也会有相同的错误:File.csv。当用文本编辑器打开时,它看起来像在屏幕截图中。当用excel打开时,它看起来像普通的excel文件,每个选项卡都在单独的单元格中(A-date、B-lastname、name、C-Other data等)。不知道如何检查它?您可以在文本编辑器中打开,复制前10行并粘贴到pastebin吗?或者数据是机密的吗?错误:注意:未定义的偏移量:1行:$names=explode(',',$data[1])@JustinasT那么这些毕竟不是选项卡-很难用屏幕截图来分辨。虽然你现有的代码文件格式也会有相同的错误:File.csv。当用文本编辑器打开时,它看起来像在屏幕截图中。当用excel打开时,它看起来像普通的excel文件,每个选项卡都在单独的单元格中(A-date、B-lastname、name、C-Other数据等)。不知道如何检查它?您可以在文本编辑器中打开,复制前10行并粘贴到pastebin吗?或者数据是机密的?