如何知道php中存在导入问题的csv单元格位置?
我做了一个用户上传csv文件的上传表单。csv中的数据将导入数据库。若并没有发生错误,数据将被导入数据库。但有时数据与列数据类型不匹配。示例列数据类型为int,csv中的数据为varchar。如何知道哪个单元格有错误并告诉用户 直到现在,我只是做了一个错误消息有格式错误的csv文件,如果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
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++;
}
你是说。。。如果有一种错误类型,那么不插入到数据库中吗?