php 把excel批量导入到数据库代码
我们是利用了ExcelFileParser这个扩展来处理的哦,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Excel数据获取演示</title>
<meta name="Keywords" content="TODO" />
<meta name="Description" content="TODO"/>
</head>
<body>
<div>
<div>Excel数据获取演示</div>
<div>
<form method="POST" action="/Index/parse" enctype="multipart/form-data">
<input type="file" name="excel" value="" />
<input type="submit" name="submit" value="提交" />
</form>
</div>
</div>
</body>
</html>
<?php
/**
* CopyRight (c) 2009,
* All rights reserved.
* 文件名:
* 摘 要:
*
* @author 星期八 [email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]
* @version
*/
class IndexAction extends Action
{
/**
* 构造函数
*/
public function __construct()
{
parent::__construct();
}
/**
* 默认索引页
*/
public function index()
{
$this->display();
}
/**
* 提交处理
*/
public function parse()
{
/**
* $_FILES数组说明
* array(n) {
* ["表单文件框名称"] => array(5) {
* ["name"] => 提交文件名称
* ["type"] => 提交文件类型 Excel为"application/vnd.ms-excel"
* ["tmp_name"] => 临时文件名称
* ["error"] => 错误(0成功1文件太大超过upload_max_filesize2文件太大超过MAX_FILE3上传不完整4没有上传文件)
* ["size"] => 文件大小(单位:KB)
* }
* }
*/
$return=array(0,'');
/**
* 判断是否提交
* is_uploaded_file(文件名称)用于确定指定的文件是否使用POST方法上传,防止非法提交,通常和move_upload_file一起使用保存上传文件到指定的路径
*/
if(!isset($_FILES) || !is_uploaded_file($_FILES['excel']['tmp_name']))
{
$return=array(1,'提交不合法');
}
//处理
if(0 == $return[0])
{
import('@.Util.ExcelParser');
$excel=new ExcelParser($_FILES['excel']['tmp_name']);
$return=$excel->main();
}
//输出处理
print_r($return);
}
}
?>
<?php
/**
* CopyRight (c) 2009,
* All rights reserved.
* 文件名:excel数据获取
* 摘 要:
*
* @author 星期八 [email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]
* @version 0.1
*/
class ExcelParser
{
private $_data=array(0,'');
private $_excel_handle;
private $_excel=array();
/**
* 构造函数
* @param <string> $filename 上传文件临时文件名称
*/
public function __construct($filename)
{
/**
* 引入excelparser类
* 普通方法为
* requires 路径.'excelparser.php';
* import为ThinkPHP自带导入类方法
*/
import('@.Util.PHPExcelParser.excelparser','','.php');
$this->_excel_handle=new ExcelFileParser();
//错误获取
$this->checkErrors($filename);
}
/**
* 错误校验
*/
private function checkErrors($filename)
{
/**
* 方法一
*/
$error_code=$this->_excel_handle->ParseFromFile($filename);
/**
* 方法二
* $file_handle = fopen($this->_filename,'rb');
* $content = fread($file_handle,filesize($this->_filename));
* fclose($file_handle);
* $error_code = $this->_excel->ParseFromString($content);
* unset($content,$file_handle);
*/
switch($error_code)
{
case 0:
//无错误不处理
break;
case 1:
$this->_data=array(1,'文件读取错误(Linux注意读写权限)');
break;
case 2:
$this->_data=array(1,'文件太小');
break;
case 3:
$this->_data=array(1,'读取Excel表头失败');
break;
case 4:
$this->_data=array(1,'文件读取错误');
break;
case 5:
$this->_data=array(1,'文件可能为空');
break;
case 6:
$this->_data=array(1,'文件不完整');
break;
case 7:
$this->_data=array(1,'读取数据错误');
break;
case 8:
$this->_data=array(1,'版本错误');
break;
}
unset($error_code);
}
/**
* Excel信息获取
*/
private function getExcelInfo()
{
if(1==$this->_data[0])return;
/**
* 获得sheet数量
* 获得sheet单元对应的行和列
*/
$this->_excel['sheet_number']=count($this->_excel_handle->worksheet['name']);
for($i=0;$i<$this->_excel['sheet_number'];$i++)
{
/**
* 行于列
* 注意:从0开始计数
*/
$row=$this->_excel_handle->worksheet['data'][$i]['max_row'];
$col=$this->_excel_handle->worksheet['data'][$i]['max_col'];
$this->_excel['row_number'][$i]=($row==NULL)?0:++$row;
$this->_excel['col_number'][$i]=($col==NULL)?0:++$col;
unset($row,$col);
}
}
/**
* 中文处理函数
* @return <string>
*/
private function uc2html($str)
{
$ret = '';
for( $i=0; $i<strlen($str)/2; $i++ )
{
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
$ret .= '&#'.$charcode.';';
}
return mb_convert_encoding($ret,'UTF-8','HTML-ENTITIES');
}
/**
* Excel数据获取
*/
private function getExcelData()
{
if(1==$this->_data[0])return;
//修改标记
$this->_data[0]=1;
//获取数据
for($i=0;$i<$this->_excel['sheet_number'];$i++)
{
/**
* 对行循环
*/
for($j=0;$j<$this->_excel['row_number'][$i];$j++)
{
/**
* 对列循环
*/
for($k=0;$k<$this->_excel['col_number'][$i];$k++)
{
/**
* array(4) {
* ["type"] => 类型 [0字符类型1整数2浮点数3日期]
* ["font"] => 字体
* ["data"] => 数据
* ...
* }
*/
$data=$this->_excel_handle->worksheet['data'][$i]['cell'][$j][$k];
switch($data['type'])
{
case 0:
//字符类型
if($this->_excel_handle->sst['unicode'][$data['data']])
{
//中文处理
$data['data'] = $this->uc2html($this->_excel_handle->sst['data'][$data['data']]);
}
else
{
$data['data'] = $this->_excel_handle->sst['data'][$data['data']];
}
break;
case 1:
//整数
//TODO
break;
case 2:
//浮点数
//TODO
break;
case 3:
//日期
//TODO
break;
}
$this->_data[1][$i][$j][$k]=$data['data'];
unset($data);
}
}
}
}
/**
* 主函数
* @return <array> array(标识符,内容s)
*/
public function main()
{
//Excel信息获取
$this->getExcelInfo();
//Excel数据获取
$this->getExcelData();
return $this->_data;
}
}
?>
简单的php 用户注册程序[全套]<?php
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>yd631_php_user会员管理实例</title>
</head>
<body><center>
<form name="form1" method="post" action="reg_cl.php"><table width="68%" height="304" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr align="center" bgcolor="#CCCCCC">
<td colspan="2">注册(reg.php)||<a href="index.php">返回</a></td>
</tr>
<tr bgcolor="#CCCCCC">
<td width="29%" align="right">用户名:</td>
<td width="71%" align="left"><input name="yd631_name" type="text" id="yd631_name"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td align="right">密码:</td>
<td align="left"><input name="yd631_pws" type="password" id="yd631_pws"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td align="right">性别:</td>
<td align="left"><input name="yd631_sex" type="radio" value="男" checked>
男
<input type="radio" name="yd631_sex" value="女">
女</td>
</tr>
<tr bgcolor="#CCCCCC">
<td align="right">年龄:</td>
<td align="left"><input name="yd631_age" type="text" id="yd631_age" size="10" maxlength="4"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td align="right">电话:</td>
<td align="left"><input name="yd631_call" type="text" id="yd631_call"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td align="right">邮件:</td>
<td align="left"><input name="yd631_email" type="text" id="yd631_email"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td align="right">地址:</td>
<td align="left"><input name="yd631_address" type="text" id="yd631_address" size="40"></td>
</tr>
<tr align="center" bgcolor="#CCCCCC">
<td colspan="2"><input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit" value="重置"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
注册php处理页面
<?php
//注册处理页面
//www.yd631.com
//技术D.JOY
function checkmail($nmail){ /// 验证电子邮件地址
if(ereg("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",$nmail))
return true;
else
return false;
}
include("config.php"); //参数页面提取过来
if(empty($_POST["yd631_name"])){
echo ("<script type='text/javascript'> alert('用户名不能是空的');history.go(-1);</script>");
exit;
}
if(empty($_POST["yd631_pws"])){
echo ("<script type='text/javascript'> alert('密码为空了吧');history.go(-1);</script>");
exit;
}
if(empty($_POST["yd631_sex"])){
echo ("<script type='text/javascript'> alert('性别呢');history.go(-1);</script>");
exit;
}
if(empty($_POST["yd631_age"])){
echo ("<script type='text/javascript'> alert('年龄不能为空');history.go(-1);</script>");
exit;
}
if(!is_numeric($_POST["yd631_age"])){
echo ("<script type='text/javascript'> alert('年龄要是数字的');history.go(-1);</script>");
exit;
}
if(empty($_POST["yd631_call"])){
echo ("<script type='text/javascript'> alert('电话不能为空');history.go(-1);</script>");
exit;
}
if(!is_numeric($_POST["yd631_call"])){
echo ("<script type='text/javascript'> alert('电话要是数字的');history.go(-1);</script>");
exit;
}
if(empty($_POST["yd631_email"])){
echo ("<script type='text/javascript'> alert('邮箱不能为空');history.go(-1);</script>");
exit;
}
if($_POST["yd631_email"]!=""){
if(!checkmail($_POST["yd631_email"])) {
echo ("<script type='text/javascript'> alert('不对了,邮箱格式');history.go(-1);</script>");
exit;
}
}
if(empty($_POST["yd631_address"])){
echo ("<script type='text/javascript'> alert('地址不能为空');history.go(-1);</script>");
exit;
}
$yd631_name=$_POST["yd631_name"];
$yd631_pws=$_POST["yd631_pws"];
$yd631_sex=$_POST["yd631_sex"];
$yd631_age=$_POST["yd631_age"];
$yd631_call=$_POST["yd631_call"];
$yd631_email=$_POST["yd631_email"];
$yd631_address=$_POST["yd631_address"];
$yd631_time=date("Y-m-d");
$yd631_pass="no";
$db=mysql_connect($servername,$sqlservername,$sqlserverpws);
mysql_select_db($sqlname,$db) ;
$sql="select * from $sqltable where yd631_name='$yd631_name'";
$result=mysql_fetch_row(mysql_query($sql));
if($result){
echo ("<script type='text/javascript'> alert('用户名在,你就不能注册这个名字');history.go(-1);</script>");
}
else{
$sql="insert into $sqltable(yd631_name,yd631_pws,yd631_sex,yd631_age,yd631_call,yd631_email,yd631_address,yd631_time,yd631_pass) values('$yd631_name','$yd631_pws','$yd631_sex','$yd631_age','$yd631_call','$yd631_email','$yd631_address','$yd631_time','$yd631_pass') ";
mysql_query($sql);
echo ("<script type='text/javascript'> alert('添加成功');location.href='index.php';</script>");
}
?>
mysql数据库
--
-- 表的结构 `yd631_users`
--
CREATE TABLE `yd631_users` (
`yd631_id` int(10) NOT NULL auto_increment,
`yd631_name` varchar(10) default NULL,
`yd631_pws` varchar(10) default NULL,
`yd631_sex` varchar(4) default NULL,
`yd631_age` varchar(4) default NULL,
`yd631_call` varchar(15) default NULL,
`yd631_email` varchar(20) default NULL,
`yd631_address` text,
`yd631_pass` varchar(4) default NULL,
`yd631_time` date default NULL,
PRIMARY KEY (`yd631_id`)
) ;
先来看看调用方法
<?php
$xml = new MySQL2XML(array('host'=>'localhost', 'username'=>'root', 'password'=>'', 'database'=>'mysql'));
$xml->setTables(array('wp_term_relationships','wp_terms'));//设置备份的表
$xml->setSaveFolder('datas/');//保存备份文件的文件夹
$xml->toXML();//备份开始
?>
下面是这个互相转换程序的类型文件
<?php
class MySQL2XML {
protected $conn;
protected $result;
protected $tables;
protected $saveFolder = 'datas/';
public function __construct($config = NULL) {
if($config !== NULL && is_array($config)) {
$this->connect($config);
}
}
public function connect($config) {
$this->conn = mysql_connect($config['host'], $config['username'], $config['password']);
if($this->conn) {
mysql_select_db($config['database']);
return true;
}
return false;
}
public function setSaveFolder($folder) {
if(is_dir($folder)) {
$this->saveFolder = rtrim(str_replace("\", "/", $folder),'/');
return true;
}
return false;
}
public function setTables($tables) {
if(is_array($tables)) {
$this->tables = $tables;
return true;
}
return false;
}
public function query($query) {
if(!isset($query) || trim($query) == '') return false;
$this->result = mysql_query($query);
if($this->result) return true;
return false;
}
public function toXML() {
if(!isset($this->tables)) return false;
foreach($this->tables as $table) {
$file = $this->saveFolder.$table.'.xml';
$fp = @fopen($file, 'w');
if(!$fp) exit('Can not write file');
fwrite($fp, $this->tableToXML($table));
fclose($fp);
unset($fp);
}
return true;
}
public function tableToXML($table) {
header("content-type:text/xml;charset=utf-8");
$xml = "<?xml version="1.0" encoding="utf-8" ?>n<datas>n";
$fields = $this->getFields($table);
$datas = $this->getDatas($table);
$cdata = array();
foreach($datas as $data) {
foreach($data as $key => $value)
$cdata[$key][] = $value;
}
foreach($fields as $element) {
$xml .= "t<fields name="{$element['Field']}" type="{$element['Type']}" null="{$element['Null']}" key="{$element['Key']}" default="{$element['Default']}" extra="{$element['Extra']}">n";
foreach($cdata[$element['Field']] as $value) {
$xml .= "tt<data>{$value}</data>n";
}
$xml .= "t</fields>n";
}
$xml .= '</datas>';
return $xml;
}
protected function getFields($table) {
$query = "SHOW FIELDS FROM {$table}";
$this->query($query);
return $this->fetchAll();
}
protected function getDatas($table) {
$query = "SELECT * FROM {$table}";
$this->query($query);
return $this->fetchAll();
}
protected function fetch() {
if(is_resource($this->result)) {
return mysql_fetch_assoc($this->result);
}
return false;
}
protected function fetchAll() {
if(is_resource($this->result)) {
$return = array();
$row = NULL;
while($row = mysql_fetch_assoc($this->result)) {
$return[] = $row;
}
return $return;
}
return false;
}
}
?>
<?php
//保存报像头上传的图片.
define('SD_ROOT', dirname(__FILE__).'/');
@header("Expires: 0");
@header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
$pic_id = time();
//生成图片存放路径
$new_avatar_path = 'avatar_origin/'.$pic_id.'.jpg';
//将POST过来的二进制数据直接写入图片文件.
$len = file_put_contents(SD_ROOT.'./'.$new_avatar_path,file_get_contents("php://input"));
//原始图片比较大,压缩一下. 效果还是很明显的, 使用80%的压缩率肉眼基本没有什么区别
$avtar_img = imagecreatefromjpeg(SD_ROOT.'./'.$new_avatar_path);
imagejpeg($avtar_img,SD_ROOT.'./'.$new_avatar_path,80);
//nix系统下有必要时可以使用 chmod($filename,$permissions);
log_result('图片大小: '.$len);
//输出新保存的图片位置, 测试时注意改一下域名路径, 后面的statusText是成功提示信息.
//status 为1 是成功上传,否则为失败.
$d = new pic_data();
$d->data->photoId = $pic_id;
//$d->data->urls[0] = 'http://sns.com/avatar_test/'.$new_avatar_path;
$d->data->urls[0] = '/avatar_test/'.$new_avatar_path;
$d->status = 1;
$d->statusText = '上传成功!';
$msg = json_encode($d);
echo $msg;
log_result($msg);
function log_result($word) {
@$fp = fopen("log.txt","a");
@flock($fp, LOCK_EX) ;
@fwrite($fp,$word.":执行日期:".strftime("%Y%m%d%H%I%S",time())."rn");
@flock($fp, LOCK_UN);
@fclose($fp);
}
class pic_data
{
public $data;
public $status;
public $statusText;
public function __construct()
{
$this->data->urls = array();
}
}
?>
在二年前我就接触过了wap网站的制作了,今天 3g出来了现在我们来看看关于用php写wap站点时要注意的一些小细节吧。(1) 使用“<?”和“?>”来包含PHP编写的WML程序行,格式为:
<?
……(程序行);
?>
(2) 其他WML标签和语句行一律使用PHP的echo关键字来声明,每个WML行的后面加上换行符“n”(根据需要,也可加多个)。其基本格式为:
echo("……(WML标签和语句行)n");
例如,下面的语句就是PHP编写WML语句行的典型例子:
echo("<?xml version="1.0"?>n");
而且,echo语句中的“WML标签和语句行”可以连写,以节省程序代码行。例如,下面的一行语句就连写了WML的3行标签语句:
echo ("<wml> <card> <p>");
3) 文件最后保存时采用的扩展名为“.php”或“.php3”,而不是“.wml”等扩展名。
4) 程序行语句均以分号( ; )结尾,这是与ASP编写WML程序不同的地方。
5) 声明脚本语言。这是对PHP编程的继承,向编译器声明当前程序采用的脚本语言为PHP,格式为:
<script language="PHP">
不过这一句可以省略,因为编译器能够自动识别PHP的脚本程序。
6) 使用PHP的header关键字来声明WML的文件类型,基本格式为:
header("Content-type: text/vnd.wap.wml");
上述格式是专为WAP浏览器识别而采取的书写格式。如果开发中用户想使用普通的浏览器,如IE浏览器来测试程序效果,则可在该语句的前面加上双斜线(//),格式为:
// header("Content-type: text/vnd.wap.wml");
这样,基于PC的浏览器将忽略程序中无法理解的WML标签,这时当前的程序实际上成为了HTML页面。当想在WAP设备或者模拟器上测试的时候,只需要去掉“//”,当前页面就会自动变成WML页面。
相关文章
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
- 某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
- mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
- 1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
- 这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
- 这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
- yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
- 1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
- 这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
这篇文章主要介绍了在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11- 这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
- 对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
- 这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16