当我们把把上传文件存到数据库时,文件中总会有和数据库重复的数据,那么这些重复的数据该怎么办,下面我们就来解决这个问题。
首先实现上传有uoload方法,再有import将其传入到数据库;
public function upload(){
if(IS_GET){
$this->display();
exit;
}
$upload=new \Think\Upload();//实例化上传类
$upload->maxSize=0;//设置附件上传大小
$upload->exts=array('csv');//设置附件上传类型
$upload->rootPath="./Public/Upload/";//设置附件上传根目录
$upload->savePath='';//设置附件上传(子)目录
//上传文件
$info=$upload->upload();
if(!$info){
//上传错误提示错误信息
$this->error($upload->getError());
}else{
//上传成功
// $this->success('上传成功');
$this->import($upload->rootPath . $info['file']['savepath'] . $info['file']['savename']);
// echo $upload->rootPath . $info['file']['savepath'] . $info['file']['savename'];
}
}
当上传成功后我们调用import方法,实现存入到数据库的问题
public function import($file){
$encoding=detect_encoding($file);
//如果不是utf8格式,则转换为utf8
if($encoding != 'UTF-8'){
$contens=file_get_contents($file);
$contens=mb_convert_encoding($contens, 'utf-8',$encoding);
file_put_contents($file, $contens);
}
$student=M('student');
$arrno=$student->getField('no',true);
// dump($data);
// exit
//解析csv
$fp=fopen($file,'r');
if($fp){
$fields=array('no','name','sex');
$model=M('student');
$arr=array();
while(($row=fgetcsv($fp,1000,","))!==false){
if(in_array($row['0'], $arrno)){
echo $row['0']."已经存在".'<br>';
}else{
$arr[]=array_combine($fields, $row);
$arrno=$row['0'];
}
if(count($arr)==1000){
$model->addAll($arr);
unset($arr);
}
}
if(count($arr)>0){
$model->addAll($arr);
}
$this->success('添加成功',U('student/index'));
}
}
我们首先要判断是不是utf8格式,不是的话转换为utf8,不然会造成显示的乱码
我们建立两个数组$arrno,$arr,一个存学号,一个存查询的结果,用in_array判断其存不存在数据库
存在的话就输出已存在,不必在输入,否则存到数据库。
到最后显示添加成功即可。