1、用phpexcel读取excel的数据,显示在网页的同时存入数据库;
读取数据,添加MYSQL:
include('conn.php'); require_once 'PHPExcel.php'; require_once 'PHPExcel/IOFactory.php'; $reader = PHPExcel_IOFactory::createReader('Excel5'); //$reader = PHPExcel_IOFactory::createReader('Excel2007'); // 查\Classes\PHPExcel\Reader //$resource = 'upload/201405-cda.xlsx'; $resource = 'upload/201405-cda.xls'; if (!file_exists($resource)) { exit("$resource is not exists.\n"); } $PHPExcel = $reader->load($resource); // 文件名称 $sheet = $PHPExcel->getSheet(0); // 读取第一个工作表从0读起 $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = $sheet->getHighestColumn(); // 取得总列数,不过是最大列的字母 $highestColumn = PHPExcel_Cell::columnIndexFromString($highestColumn); // 转换字母为对应的统计数字; // getCellByColumnAndRow(0,1),第一列为0,第一行为1; echo $highestRow . "、" . $highestColumn . "、" . $sheet->getCellByColumnAndRow(0, 1)->getCalculatedValue() . "(数量统计结束,换行)<br />"; // 每次读取一行,再在行中循环每列的数值 $excelArray = array(); for ($row = 1; $row <= $highestRow; $row++) { $val = $sheet->getCellByColumnAndRow(0, $row)->getCalculatedValue(); if ($val == "") return; for ($column = 0; $column < $highestColumn; $column++) { $isDate = 0; $isDate = PHPExcel_Shared_Date::isDateTime($sheet->getCellByColumnAndRow($column, $row)); if ($isDate > 0) { $val = PHPExcel_Shared_Date::ExcelToPHPObject($sheet->getCellByColumnAndRow($column, $row)->getCalculatedValue())->format('Y/m/d'); }else { $val = $sheet->getCellByColumnAndRow($column, $row)->getCalculatedValue(); } $excelArray[$row][] = $val; echo "<strong>" . $column . ")" . $val . "</strong>"; echo "<br />"; } echo "<br />已读完第<strong>" . $row . "</strong>行数据:" . $excelArray[$row][3] . "<hr>"; //在这儿使用SQL语句,取$excelArray[$row][3]、$excelArray[$row][4]、$excelArray[$row][5]存入数据库对应字段 $tmpDepartment = $excelArray[$row][1]; $tmpName = $excelArray[$row][2]; $sql="insert into mywage (fdepartment,fname) values ('$tmpDepartment','$tmpName')"; //mysql_query("set names 'UTF-8'"); if (@mysql_query($sql)) { echo "添加数据记录:" . $excelArray[$row][2] . "成功"; }else { echo "tmpName - > ". $tmpName; echo "失败"; } }
后面MYSQL查看数据记录:
2、在上传文件的页面读取存入的数据记录,并显示在网页上;
<?php $sql="select * from mywage where fname = '张三' and fdepartment <> ''"; $li_site=mysql_fetch_array(mysql_query($sql)); $cknum=mysql_num_rows(@mysql_query($sql)); if ($cknum > 0) { echo "oh, my god"; }else { echo "wa o, guai guai"; } echo "上传文件大小限制:" . ini_get('upload_max_filesize'); ?> <strong><?php echo $li_site['fdepartment'] . "、" . $li_site['fname']; ?></strong>
上面是查询出来的结果。
这是数据库的相关信息:
问题是:在MYSQL后台管理查看到的中文数据全是乱码,我自己的php文件是UTF-8编码,MYSQL数据库表、字段的整理是:utf8_unicode_ci,这个该怎么解决,才能在PHPMYADMIN后台看见正常显示的中文数据?
主要是心里不踏实,因为内容能正常查询和条件判断,但是毕竟布署在生产环境 ,担心出问题。
统一三码:
1、php文件使用UTF-8编码。
2、header("Content-Type:text/html;charset=utf-8");
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
3、mysql字符集使用utf8,程序增删查改前都需要set names 'UTF-8',建议写在db类的构造函数里面。
针对LZ从EXCEL导入的出现乱码问题,还需要加一条:
含有中文字符的单元格的值需要转换编码,$s = iconv('GBK', 'UTF-8', $s);
iconv比mb_convert_encoding效率高,一般情况下用前者就够了。
<?php header("Content-Type:text/html;charset=utf-8"); if ($_FILES["file"]["error"] > 0) { echo "错误: " . $_FILES["file"]["error"] . "<br />"; }else { echo "文件名: " . $_FILES["file"]["name"] . "<br />"; echo "类型: " . $_FILES["file"]["type"] . "<br />"; echo "大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 文件已经存在. "; }else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "文件已经被存储到: " . "upload/" . $_FILES["file"]["name"]; echo "文件传输完成,下面开始读取记录……"; } } echo "<hr>";
其实在这个文件的前面,是加了设置头部编码的,我的php文件编码也肯定是UTF-8,而也根据你的建议,增加了导入时的编码处理:
$tmpDepartment = iconv('GBK','UTF-8',$excelArray[$row][1]); $tmpName = iconv('GBK','UTF-8',$excelArray[$row][2]); $sql="insert into mywage (fdepartment,fname) values ('$tmpDepartment','$tmpName')"; mysql_query("set names 'UTF-8'"); if (@mysql_query($sql)) { echo "添加数据记录:" . $excelArray[$row][2] . "成功";
不过结果不太理想,仍然是原来的问题,phpMyadmin中查看到的还是乱码。
@sfrost:
mysql_query("set names 'UTF-8'"); $sql="insert into mywage (fdepartment,fname) values ('$tmpDepartment','$tmpName')";