如何知道php中存在导入问题的csv单元格位置?

如何知道php中存在导入问题的csv单元格位置?,php,csv,Php,Csv,我做了一个用户上传csv文件的上传表单。csv中的数据将导入数据库。若并没有发生错误,数据将被导入数据库。但有时数据与列数据类型不匹配。示例列数据类型为int,csv中的数据为varchar。如何知道哪个单元格有错误并告诉用户 直到现在,我只是做了一个错误消息有格式错误的csv文件,如果csv文件导入失败 if(isset($_POST["Import"])){ echo $filename=$_FILES["file"]["tmp_name"]; if($_FILES["file"]["si

我做了一个用户上传csv文件的上传表单。csv中的数据将导入数据库。若并没有发生错误,数据将被导入数据库。但有时数据与列数据类型不匹配。示例列数据类型为int,csv中的数据为varchar。如何知道哪个单元格有错误并告诉用户

直到现在,我只是做了一个错误消息有格式错误的csv文件,如果csv文件导入失败

if(isset($_POST["Import"])){

echo $filename=$_FILES["file"]["tmp_name"];
if($_FILES["file"]["size"] > 0){

    $file = fopen($filename, "r");
    while(($emapData = fgetcsv($file, 10000, ",")) !== FALSE){
        $sql = "INSERT INTO Diary(id, date, remarks, status) VALUES('$emapData[0]','$emapData[1]','$emapData[2]','$emapData[3]')";
        if($sql==0){
            echo " There is format error in the csv file ";
        }
        $res=$dbcon->query($sql);
    }
    fclose($file);
    echo "CSV File has been succesfully Imported";
}
else
    echo 'Invalid File:Please Upload CSV File';}

为什么不在将值插入数据库之前验证值

if(is_numeric($emapData[0]) && is_numeric($emapData[1]) ....)
{
$sql = "INSERT INTO Plant_Diary(plant_core_id, date_diary, remarks, plant_status) VALUES('$emapData[0]','$emapData[1]','$emapData[2]','$emapData[3]')";
}
else{ 
echo 'error data type';
}

您只需查找当前行和列,并检查每列的数据类型

我更喜欢创建一个函数数组来按列进行检查

$checkColType = array(
#### col => function($val){ return 'error msg'; }
    0 => function( $val ){
        if( some statement ){ return 'Is not an id'; }
    },
    1 => function( $val ){
        if( some statement ){ return 'Is not a date'; }
    },
    2 => etc...
);


$row = 0;
while(($emapData = fgetcsv($file, 10000, ",")) !== FALSE){
    $CurrentRow = $row+1;

    $ErrorMsg = '';
    #### Do Check, and return Error
    foreach( $checkColType as $col => $ColTypeFns ){
        $CurrentCol = $col+1;

        $Error = $ColTypeFns( $emapData[ $col ] );
        if( $Error ){
            $ErrorMsg.= "Cell $CurrentRow-$CurrentCol: $Error";
        }
    }

    if( $ErrorMsg ){ echo "$ErrorMsg"; }
    else{
        #### Do Something...
    }

    $row++;
}

你是说。。。如果有一种错误类型,那么不插入到数据库中吗?