您的位置:首页 > 编程语言 > PHP开发

php实现批量上传数据到数据库(.csv格式)

2014-03-07 17:40 399 查看
友情提示:上传数据的文档需要转化为.csv格式的文档

前端代码:

<form name="importForm" action="import.php" method="POST" enctype="multipart/form-data">
<input type="hidden" value="import_goods" name="file">
	<table cellpadding="2" cellspacing="1" class="tb">
		<tbody>
		<tr>
			<td width="200">选择批量上传文档:</td>
			<td><input type="file" name="upfilename" id="upfilename" value=""></td>
		</tr>
		<tr>
			<td colspan="2">
				<input type="submit" name="submit" value="提交" class="btn">
			</td>
		</tr>
		</tbody>
	</table>
</form>


后端代码:import.php文件(这里只粘贴主要代码,具体实现方法需自己完成)

if(isset($_POST['submit'])){
			stripos(PHP_OS, "WIN") !== false ? setlocale(LC_ALL, '') : setlocale(LC_ALL,'zh_CN.GBK');
			
			$fext = substr($_FILES['upfilename']['name'], strrpos($_FILES['upfilename']['name'], '.') + 1);
			if ($fext != 'csv') {
				die('请上传csv格式的文件',HTTP_REFERER);
			}
			$handle = @fopen($_FILES['upfilename']['tmp_name'], "rb");
	
			$i = 0;
			$import_type = '';
			if ($handle)
			{
				while($line_data = fgetcsv($handle, 4096, ','))
				{
					if ($i == 0) {
						$import_type = trim($line_data[0]);
						$i = 1;
					} elseif (intval($line_data[0])) {
						$line_list[] = $line_data;
					}
				}
			}
			//循环转换数据格式
			foreach ($line_list as $i=> $v)
			{
				foreach ($v as $j=> $value)
				{
					$line_list[$i][$j] = iconv('GBK', 'UTF-8//IGNORE',$line_list[$i][$j]);
				}
			}//编码转换
			
			fclose($handle);

			if(!empty($line_list))
			{
				// 登记号
				$sn = array();
				$top_catid = 0;
				$name = '';
				$func_name = '';
				switch ($import_type) {
					case 'patent';
					$top_catid = 5;
					$name = '专利申请号';
					$func_name = 'deal_import_patent';
					break;
					case 'trademark';
					$top_catid = 4;
					$name = '商标注册号';
					$func_name = 'deal_import_trademark';
					break;
					case 'copyright';
					$top_catid = 2185;
					$name = '登记号';
					$func_name = 'deal_import_copyright';
					break;
					default:
						die('上传文档未明确指定知产类型!');
					break;
				}
				if ($import_type == 'patent') {
					foreach($line_list as $lkey => $lval) {
						$lval[2] = trim($lval[2]);
						if ($lval[2] == '专利技术') {
							// 技术专利
							if(!empty($lval[1])) {
								if(in_array($lval[1],$sn))
								{
									die('列表中序号为'.$lval[0].'的知产的'.$name.$lval[1].'与前面的出现重复!');//判断是否有重复的数据(根据自己所需判断)
								}
								$sn[] = trim($lval[1]);
							} else {
								die('列表中序号为'.$lval[0].'的知产的'.$name.'为空!');
							}
						} else {
							// 非技术专利
							$line_list[$lkey][1] = '';
						}
					}
				} elseif ($import_type == 'trademark') {
					foreach($line_list as $lkey => $lval) {
						if(!empty($lval[1])) {
							if(in_array($lval[1],$sn))
							{
								die('列表中序号为'.$lval[0].'的知产的'.$name.'与前面的出现重复!');
							}
							$sn[] = $lval[1];
						} else {
							die('列表中序号为'.$lval[0].'的知产的'.$name.'为空!');
						}
					}
				}
				if (!empty($sn)) {
					$sql = 'SELECT serial_number FROM ' .$table_name. ' WHERE top_catid = '.$top_catid.' AND serial_number IN (\'' .implode("','", $sn). '\')';
					$result = $goods_db->query($sql);
					$r = $goods_db->fetch_array();
					$exist = array();
					foreach ($r as $k=>$v){
						$exist[] = $v['serial_number'];
					}
					
					if (!empty($exist)) die($name.'为:'.implode(',',$exist).'的知产已存在');//数据库中是否有相同的数据(根据自己所需判断)
				}		
				// 调用处理函数
				self::$func_name($line_list);//此时$line_list即为你上传文档的数据,数组格式,根据自己所需将数据导入数据库
				die('批量导入完成!');
			}
			
		}


.csv文档的格式为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: