首页后端开发其他后端知识PHP怎么把Word保存到数据库的呢?

PHP怎么把Word保存到数据库的呢?

时间2024-03-25 13:56:03发布访客分类其他后端知识浏览1388
导读:在这篇文章中我们会学习到关于“PHP怎么把Word保存到数据库的呢?”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。 算起来,折腾了整整一天,就是...
在这篇文章中我们会学习到关于“PHP怎么把Word保存到数据库的呢?”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。


算起来,折腾了整整一天,就是完成将上传的Word文件保存到MS SQL Server 2014数据库中。

第一次使用PHP来开发一个小程序,压力也挺大,主要是用户觉得我很快就能完成,这就有点尴尬了,怎么可能?!对于PHP,我还是个新手。

没有办法,只能硬着头皮干了,星期一开始。

原先我一直以为CSDN是最好的开发文档集散地,查资料是首选,结果我查了无数的资料,都没有找到相关的内容,快崩溃了。我发现很多记录日志真是糟糕,写开发日志是为了方便自己也方便别人,胡乱写有什么意义呢?!

只能不停地试,总算是完成了这个小功能。

完成界面:

前端的页面文件:

!DOCTYPE html>
    
html>
    
head>
    
    meta charset="utf-8">
    
    title>
    layui/title>
    
    meta name="renderer" content="webkit">
    
    meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    
    link rel="stylesheet" href="lib/layui-v2.6.3/css/layui.css" rel="external nofollow"  media="all">
    
    link rel="stylesheet" href="css/public.css" rel="external nofollow"  media="all">
    
    style>

        body {
    
            background-color: #ffffff;

        }
    
    /style>
    
/head>
    
body>
    
div class="layui-form layuimini-form">
    
	form action="" class="layui-form login-bottom" id="uploadFile">
    
		
		div class="layui-form-item">
    
			label class="layui-form-label required">
    模板文件名/label>
    
			div class="layui-input-block">
    
				input type="text" name="Dc01" id="Dc01" lay-verify="required" lay-reqtext="模板文件名称"  value="" class="layui-input">
    
			/div>
    
		/div>
    
	
		div class="layui-form-item">
    
			label class="layui-form-label required">
    简要说明/label>
    
			div class="layui-input-block">
    
				input type="text" name="Dc04" id="Dc04" value="" class="layui-input">
    
			/div>
    		
		/div>
    
	
		div class="layui-form-item" style="border: 0px solid #d70008;
    ">
    
			label class="layui-form-label required">
    Word模板/label>
    
			div class="layui-input-inline" style="width: 600px;
    ">
    
				input type="text" name="Dc05" id="Dc05"  value="" style="width: 400px;
    " class="layui-input" disabled="disabled">
    
			/div>
    
			div class="layui-input-inline" style="left: -200px;
    width: 120px;
    height: 32px;
    ">
    
				!-- input type="button" value="选择Word文件" id="selectWord" style="width: 120px;
    height: 32px;
    "/>
     -->
    
				button type="button" class="layui-btn layui-btn-sm layui-btn-normal" style="width: 100px;
    height: 39px;
    " id="selectWord">
    选择Word文件/button>
    
				input type='file' id='readFile' style="opacity: 0;
    border: 0px solid #1e9fff;
    ">
    
			/div>
    		
		/div>
    
 
		div class="layui-form-item">
    
			label class="layui-form-label">
    项目名称/label>
    
			div class="layui-input-block">
    
				input type="text" name="Dc06"  id="Dc06" value="" class="layui-input">
    
			/div>
    
		/div>
    
 
		div class="layui-form-item">
    
			label class="layui-form-label">
    子项目名称/label>
    
			div class="layui-input-block">
    
				input type="text" name="Dc07"  id="Dc07" value="" class="layui-input">
    
			/div>
    
		/div>
    
	
		div class="layui-form-item">
    
			label class="layui-form-label">
    项目属性/label>
    
			div class="layui-input-inline">
    
				select id="Dc08" name="Dc08" lay-filter="outUnitList">
    
					option value="日常维护">
    服务/option>
    
					option value="定期巡检">
    物质采购/option>
    
					option value="数据处理">
    工程/option>
    
				/select>
    
			/div>
    
			label class="layui-form-label">
    适用年度/label>
    
			div class="layui-input-inline">
    
				input type="text" name="Dc09"  id="Dc09" value="" class="layui-input">
    
			/div>
    
			
		/div>
    	
	
		div class="layui-form-item">
    
			label class="layui-form-label">
    上传人/label>
    
			div class="layui-input-inline">
    
				input type="text" name="Dc02"  id="Dc02" value="" class="layui-input">
    
			/div>
    
			label class="layui-form-label">
    上传时间/label>
    
			div class="layui-input-inline">
    
				input type="text" name="Dc03"  id="Dc03" value="" class="layui-input">
    
			/div>
    
			
		/div>
    
		
		div class="layui-form-item">
    
			div class="layui-input-block">
    
				button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">
    确认保存/button>
    
			/div>
    
		/div>
    
			
	/form>
    
/div>
    
script src="lib/layui-v2.6.3/layui.js" charset="utf-8">
    /script>
    
script>
					
    layui.use(['layer','form','rate'], function () {
    
        var form = layui.form, layer = layui.layer, $ = layui.$;
    
 
		let currentUser='';
    
		let currentDatetime='';

		//得到当前的用户名称
		$.ajax({

			url:'ZTBgetCurrentUser.php',
			type:'POST',
			async:false,
			success:function (data) {
    
				// $("input[name=C02]").val(data);
    
				document.getElementById('Dc02').value=data;
    
				currentUser=data;

			}

		}
    );

		
		//得到当前服务器的时间
		$.ajax({

			url:'ZTBgetServerDatetime.php',
			type:'POST',
			async:false,
			success:function (data) {
    
				// $("input[name=C02]").val(data);
    
				document.getElementById('Dc03').value=data;
    
				document.getElementById('Dc09').value=data.substring(0,4);
    				
				currentDatetime=data;

			}

		}
    );

 
		document.getElementById('selectWord').addEventListener('click',function(){
    
			$("#readFile").trigger("click");
			
		}
    );

  
		document.getElementById('readFile').addEventListener('change',function(){

			if(this.files.length===0){
    
				console.log('没有选择文件!');
    
				return;

			}
    
			
			let reader=new FileReader();

			reader.onload=function (){
    
				console.log(reader.result);

			}
    
			// reader.readAsText(this.files[0]);
    
			// console.log(this.files[0].size);
    
			// console.log(this.files[0].name);
    
			// document.getElementById('Dc05').
			document.getElementById('Dc05').value=this.files[0].name;
    
			// console.log(this.files[0].type);

		}
    )
  
		// localStorage.clear();

        //监听提交
        form.on('submit(saveBtn)', function (data) {
    
			data = data.field;
    			
			
			//检查数据
			var canContinue=true;
    
			var strFalse="";
    
			
			var jsonData=[];
    //准备一个空数组			 
			var updateData=new Object();
    //准备对象
			updateData.strTable="HtTemplateFile";
    
			updateData.strWhere="c01='"+document.getElementById("Dc01").value+"' and c08='"+document.getElementById("Dc08").value+"' and c09='"+document.getElementById("Dc09").value+"'";
    
			// console.log(updateData);
    
			jsonData.push(updateData);
    
			var json_str=JSON.stringify(jsonData);

			$.ajax({
//检查数据库ID是否存在
				url:'ZTBIsExist.php',
				data:json_str,
				type:'POST',
				datetype:'json',
				async:false,
				success:function (data) {

					if(data=='YES'){
     
						canContinue=false;
    
						strFalse="要插入的记录重复!";

					}

				}

			}
    );

 
			if(canContinue){
    
					// let formID = document.getElementById("uploadFile");
    
					// let formData = new FormData(formID);
    //FormData构造器接收的是一个form的DOM对象
					let wordFile = document.getElementById('readFile');
    
					//用FormData对象对表单数据进行封装
					const fd = new FormData();
    //FormData构造器接收的是一个form的DOM对象					
					fd.append("wordFile",wordFile.files[0]);
    //Word文件数据
					fd.append("c01",$('#Dc01').val());
    //模板文件名
					fd.append("c02",currentUser);
    //上传人
					fd.append("c03",currentDatetime);
    //上传时间
					fd.append("c04",$('#Dc04').val());
    //简要说明
					fd.append("c06",$('#Dc06').val());
    //项目名称
					fd.append("c07",$('#Dc07').val());
    //子项目名称
					fd.append("c08",$('#Dc08').val());
    //项目类型
					fd.append("c09",$('#Dc09').val());
//适用年度
															
					$.ajax({
						
						url: 'ZTBHTTemplateFileAdd.php',
						type: "POST",
						data: fd,
						dataType: "JSON",
						async: true,
						processData: false,//设置为false,JQuery则不对数据进行序列化
						contentType: false,//设置为false,JQuery则不设Content-Type请求头
						beforeSend: function(xhr){
    
							console.log('开始!');
							
						}
,
						complete: function(xhr,status){
    
							console.log('完成!');
							
						}
,
						error: function(xhr,status,error){
    
							console.log('请求出错!');

						}
,
						success: function(result){
    
							console.log('表单提交成功!');

						}

					}
    );
    
 
					return false;
//阻止表单的默认提交事件				
					}

           }
    );

 
    }
    );
    
/script>
    
/body>
    
/html>
    

后台PHP文件:

?php
// error_reporting(0);
    
session_start();
    
$continue=true;
    
$falseStr="";
    
 
//获取post的数据
$C01 = $_POST['c01'];
    
$C02 = $_POST['c02'];
    
$C03 = $_POST['c03'];
    
$C04 = $_POST['c04'];
    
 
$C06 = $_POST['c06'];
    
$C07 = $_POST['c07'];
    
$C08 = $_POST['c08'];
    
$C09 = $_POST['c09'];

 
if(!isset($_FILES)){
    
	$returnArr['c05']='没有选择上传的文件';

}
else{
    
	$returnArr['c05']='有文件';

}
    
 
if($_FILES['wordFile']['error']>
0){
    
    $returnArr['c05']='文件有错误';

}
    
 
$uploadFile = $_FILES["wordFile"];
    //得到上传的文件
$wordBlob=file_get_contents($uploadFile['tmp_name']);
    
file_put_contents("123.docx",$wordBlob , FILE_APPEND);
    //将文件内容写到磁盘上
//将内容字符串转为十六进制字符串
$wordHexData = "0x".bin2hex($wordBlob);
    
 
$returnArr['c01']=$C01;
    
$returnArr['c02']=$C02;
    
$returnArr['c03']=$C03;
    
$returnArr['c04']=$C04;
    
 
$returnArr['c06']=$C06;
    
$returnArr['c07']=$C07;
    
$returnArr['c08']=$C08;
    
$returnArr['c09']=$C09;
    
 
//准备写入数据库
require 'ZTBLinkConfig.php';
    
//准备插入数据
$sql = "insert into HtTemplateFile(c01,c02,c03,c04,c06,c07,c08,c09,c05) values('$C01','$C02','$C03','$C04','$C06','$C07','$C08','$C09',$wordHexData)";
    
$result =$ZTBConn->
    query($sql);
    
$returnArr['c05']=$result;
    
 
//读出来写到磁盘上,这样可以判断上传文件是否真的写入了。
// $sql = "select * from  HtTemplateFile where c01='模板文件名' and c08='项目属性' and c09='2021'";
    
// $result =$ZTBConn->
    query($sql);
    
// while($row=$result->
fetch()){
    
//         $hexData= $row['c05'];

// }
    
 
// $binData=hex2bin($hexData);
    
// file_put_contents("333.docx",$hexData , FILE_APPEND);
    //将文件内容写到磁盘上
 
echo json_encode($returnArr,JSON_UNESCAPED_UNICODE);
    
?>

注意点:

1、美化上传按钮

普通的文件上传按钮不好看,与整个界面不协调,放上一个DIV后再放一个LayUI的按钮就可以了,然后使用事件代理,触发实际文件的上传,是change事件。

        document.getElementById('selectWord').addEventListener('click',function(){
    
            $("#readFile").trigger("click");
            
        }
    );
    

2、封装上传的数据

使用formData,可以封装整个form。

let formID = document.getElementById("uploadFile");
    
let formData = new FormData(formID);
    //FormData构造器接收的是一个form的DOM对象

也可以按照要求逐个添加。

let wordFile = document.getElementById('readFile');
    
//用FormData对象对表单数据进行封装
const fd = new FormData();
    //FormData构造器接收的是一个form的DOM对象                    
fd.append("wordFile",wordFile.files[0]);
    //Word文件数据
fd.append("c01",$('#Dc01').val());
    //模板文件名
fd.append("c02",currentUser);
    //上传人
fd.append("c03",currentDatetime);
    //上传时间
fd.append("c04",$('#Dc04').val());
    //简要说明
fd.append("c06",$('#Dc06').val());
    //项目名称
fd.append("c07",$('#Dc07').val());
    //子项目名称
fd.append("c08",$('#Dc08').val());
    //项目类型
fd.append("c09",$('#Dc09').val());
//适用年度

既然是对象,最好使用const定义。

完整的上传,使用ajax。

					$.ajax({
						
						url: 'ZTBHTTemplateFileAdd.php',
						type: "POST",
						data: fd,
						dataType: "JSON",
						async: true,
						processData: false,//设置为false,JQuery则不对数据进行序列化
						contentType: false,//设置为false,JQuery则不设Content-Type请求头
						beforeSend: function(xhr){
    
							console.log('开始!');
							
						}
,
						complete: function(xhr,status){
    
							console.log('完成!');
							
						}
,
						error: function(xhr,status,error){
    
							console.log('请求出错!');

						}
,
						success: function(result){
    
							console.log('表单提交成功!');

						}

					}
    );
    
 
					return false;
//阻止表单的默认提交事件				
					}
    

注意,返回值一定要是JSON格式!!!

3、接收上传的数据,我为了检查数据,是生成在磁盘上,这样就好判断上传的结果,保存到数据库后也是先取出来再写到磁盘上来判断。

保存的时候需要将数据转成16进制的,读取出来就不用再转了!

写入数据库前写入磁盘:

$uploadFile = $_FILES["wordFile"];
    //得到上传的文件
$wordBlob=file_get_contents($uploadFile['tmp_name']);
    
file_put_contents("123.docx",$wordBlob , FILE_APPEND);
    //将文件内容写到磁盘上
//将内容字符串转为十六进制字符串
$wordHexData = "0x".bin2hex($wordBlob);
    

从数据库中读出来再写入磁盘:

//读出来写到磁盘上,这样可以判断上传文件是否真的写入了。
$sql = "select * from  HtTemplateFile where c01='模板文件名' and c08='项目属性' and c09='2021'";
    
$result =$ZTBConn->
    query($sql);
    
while($row=$result->
fetch()){
    
         $hexData= $row['c05'];

}
    
 
file_put_contents("333.docx",$hexData , FILE_APPEND);
    //将文件内容写到磁盘上

MS SQL Server 2014的文件字段为image。



关于“PHP怎么把Word保存到数据库的呢?”的内容就介绍到这,感谢各位的阅读,相信大家对PHP怎么把Word保存到数据库的呢?已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP怎么把Word保存到数据库的呢?
本文地址: https://pptw.com/jishu/652823.html
PHP+ffmpeg实现获取视频缩略图的详细过程是什么 PHP空值是什么,哪些情况被赋空值?

游客 回复需填写必要信息