最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP實現(xiàn)將Word文件保存到SQL Server數(shù)據(jù)庫

 更新時間:2022年02月26日 10:16:20   作者:dawn  
這篇文章主要介紹了如何利用PHP實現(xiàn)將上傳的Word文件保存到SQL Server數(shù)據(jù)庫,文中的示例代碼講解詳細,需要的可以參考一下

算起來,折騰了整整一天,就是完成將上傳的Word文件保存到MS SQL Server 2014數(shù)據(jù)庫中。

第一次使用PHP來開發(fā)一個小程序,壓力也挺大,主要是用戶覺得我很快就能完成,這就有點尷尬了,怎么可能?!對于PHP,我還是個新手。

沒有辦法,只能硬著頭皮干了,星期一開始。

原先我一直以為CSDN是最好的開發(fā)文檔集散地,查資料是首選,結(jié)果我查了無數(shù)的資料,都沒有找到相關(guān)的內(nèi)容,快崩潰了。我發(fā)現(xiàn)很多記錄日志真是糟糕,寫開發(fā)日志是為了方便自己也方便別人,胡亂寫有什么意義呢?!

只能不停地試,總算是完成了這個小功能。

完成界面:

前端的頁面文件:

<!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="日常維護">服務(wù)</option>
					<option value="定期巡檢">物質(zhì)采購</option>
					<option value="數(shù)據(jù)處理">工程</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='';
		//得到當(dāng)前的用戶名稱
		$.ajax({
			url:'ZTBgetCurrentUser.php',
			type:'POST',
			async:false,
			success:function (data) {
				// $("input[name=C02]").val(data);
				document.getElementById('Dc02').value=data;
				currentUser=data;
			}
		});
		
		//得到當(dāng)前服務(wù)器的時間
		$.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();
        //監(jiān)聽提交
        form.on('submit(saveBtn)', function (data) {
			data = data.field;			
			
			//檢查數(shù)據(jù)
			var canContinue=true;
			var strFalse="";
			
			var jsonData=[];//準備一個空數(shù)組			 
			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({//檢查數(shù)據(jù)庫ID是否存在
				url:'ZTBIsExist.php',
				data:json_str,
				type:'POST',
				datetype:'json',
				async:false,
				success:function (data) {
					if(data=='YES'){ 
						canContinue=false;
						strFalse="要插入的記錄重復(fù)!";
					}
				}
			});
 
			if(canContinue){
					// let formID = document.getElementById("uploadFile");
					// let formData = new FormData(formID);//FormData構(gòu)造器接收的是一個form的DOM對象
					let wordFile = document.getElementById('readFile');
					//用FormData對象對表單數(shù)據(jù)進行封裝
					const fd = new FormData();//FormData構(gòu)造器接收的是一個form的DOM對象					
					fd.append("wordFile",wordFile.files[0]);//Word文件數(shù)據(jù)
					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,//設(shè)置為false,JQuery則不對數(shù)據(jù)進行序列化
						contentType: false,//設(shè)置為false,JQuery則不設(shè)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的數(shù)據(jù)
$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);//將文件內(nèi)容寫到磁盤上
//將內(nèi)容字符串轉(zhuǎn)為十六進制字符串
$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;
 
//準備寫入數(shù)據(jù)庫
require 'ZTBLinkConfig.php';
//準備插入數(shù)據(jù)
$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);//將文件內(nèi)容寫到磁盤上
 
echo json_encode($returnArr,JSON_UNESCAPED_UNICODE);
?>

注意點:

1、美化上傳按鈕

普通的文件上傳按鈕不好看,與整個界面不協(xié)調(diào),放上一個DIV后再放一個LayUI的按鈕就可以了,然后使用事件代理,觸發(fā)實際文件的上傳,是change事件。

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

2、封裝上傳的數(shù)據(jù)

使用formData,可以封裝整個form。

let formID = document.getElementById("uploadFile");
let formData = new FormData(formID);//FormData構(gòu)造器接收的是一個form的DOM對象

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

let wordFile = document.getElementById('readFile');
//用FormData對象對表單數(shù)據(jù)進行封裝
const fd = new FormData();//FormData構(gòu)造器接收的是一個form的DOM對象                    
fd.append("wordFile",wordFile.files[0]);//Word文件數(shù)據(jù)
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,//設(shè)置為false,JQuery則不對數(shù)據(jù)進行序列化
						contentType: false,//設(shè)置為false,JQuery則不設(shè)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、接收上傳的數(shù)據(jù),我為了檢查數(shù)據(jù),是生成在磁盤上,這樣就好判斷上傳的結(jié)果,保存到數(shù)據(jù)庫后也是先取出來再寫到磁盤上來判斷。

保存的時候需要將數(shù)據(jù)轉(zhuǎn)成16進制的,讀取出來就不用再轉(zhuǎn)了!

寫入數(shù)據(jù)庫前寫入磁盤:

$uploadFile = $_FILES["wordFile"];//得到上傳的文件
$wordBlob=file_get_contents($uploadFile['tmp_name']);
file_put_contents("123.docx",$wordBlob , FILE_APPEND);//將文件內(nèi)容寫到磁盤上
//將內(nèi)容字符串轉(zhuǎn)為十六進制字符串
$wordHexData = "0x".bin2hex($wordBlob);

從數(shù)據(jù)庫中讀出來再寫入磁盤:

//讀出來寫到磁盤上,這樣可以判斷上傳文件是否真的寫入了。
$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);//將文件內(nèi)容寫到磁盤上

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

到此這篇關(guān)于PHP實現(xiàn)將Word文件保存到SQL Server數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)PHP Word保存數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用PHP獲取訪客IP、地區(qū)位置、瀏覽器及來源頁面等信息

    利用PHP獲取訪客IP、地區(qū)位置、瀏覽器及來源頁面等信息

    這篇文章主要介紹了利用PHP獲取訪客IP、地區(qū)位置、瀏覽器及來源頁面等信息的相關(guān)資料,文中給出了詳細的示例代碼供大家參考學(xué)習(xí),對大家具有一定的參考借鑒價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • PHP寫的獲取各搜索蜘蛛爬行記錄代碼

    PHP寫的獲取各搜索蜘蛛爬行記錄代碼

    做為站長每天都想知道自己的網(wǎng)站百度蜘蛛等搜索引擎爬蟲是否了網(wǎng)站 來抓取文章,一般站長不知道怎么搞用工具查詢,也可以查看空間里的日志,但是空間里的日志的記錄全是代碼你不知道那個是搜索引擎爬蟲的來路
    2012-08-08
  • php開發(fā)過程中關(guān)于繼承的使用方法分享

    php開發(fā)過程中關(guān)于繼承的使用方法分享

    通常需要這樣一些類,這些類與其它現(xiàn)有的類擁有相同變量和函數(shù)。實際上,定義一個通用類用于所有的項目,并且不斷豐富這個類以適應(yīng)每個具體項目將是一個不 錯的練習(xí)。
    2011-06-06
  • PHP中通過fopen()函數(shù)訪問遠程文件示例

    PHP中通過fopen()函數(shù)訪問遠程文件示例

    這篇文章主要介紹了PHP中通過fopen()函數(shù)訪問遠程文件示例,本文講解了fopen函數(shù)的作用、使用它需要的配置問題、超時問題等內(nèi)容,并給出了代碼實例,需要的朋友可以參考下
    2014-11-11
  • php循環(huán)語句 for()與foreach()用法區(qū)別介紹

    php循環(huán)語句 for()與foreach()用法區(qū)別介紹

    下面我用兩個實例來介紹一下關(guān)于在php中foreach與for語句用法區(qū)別介紹,有需要的朋友可參考一下
    2012-09-09
  • php購物車實現(xiàn)方法

    php購物車實現(xiàn)方法

    這篇文章主要介紹了php購物車實現(xiàn)方法,通過4個文件實現(xiàn)購物車的功能,且使用txt文件保存購物車內(nèi)容,簡單實用,需要的朋友可以參考下
    2015-01-01
  • PHP日志LOG類定義與用法示例

    PHP日志LOG類定義與用法示例

    這篇文章主要介紹了PHP日志LOG類定義與用法,結(jié)合實例形式分析了日志log的具體定義及使用方法,涉及php文件讀寫、日期時間及字符串等相關(guān)操作技巧,需要的朋友可以參考下
    2018-09-09
  • php中g(shù)et_object_vars()在數(shù)組的實例用法

    php中g(shù)et_object_vars()在數(shù)組的實例用法

    在本篇文章小編給大家整理的是一篇關(guān)于php中g(shù)et_object_vars()在數(shù)組的實例用法,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • PHP中ini_set與ini_get用法實例

    PHP中ini_set與ini_get用法實例

    這篇文章主要介紹了PHP中ini_set與ini_get用法,以實例形式講述了ini_set與ini_get函數(shù)的具體功能與適用情況,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • php json相關(guān)函數(shù)用法示例

    php json相關(guān)函數(shù)用法示例

    這篇文章主要介紹了php json相關(guān)函數(shù)用法,列舉了json_encode、json_decode及json_last_error的功能,并實例分析了json_encode與json_decode函數(shù)的具體使用技巧,需要的朋友可以參考下
    2017-03-03

最新評論

乐安县| 贺州市| 大冶市| 巴南区| 南通市| 宾阳县| 府谷县| 奇台县| 建德市| 兴文县| 繁峙县| 修水县| 建德市| 新巴尔虎右旗| 阿拉尔市| 涞源县| 拉孜县| 泰和县| 凉城县| 壶关县| 平乐县| 泽库县| 桑植县| 永靖县| 锡林郭勒盟| 股票| 嵊州市| 达日县| 玛多县| 牡丹江市| 繁昌县| 亚东县| 汨罗市| 忻城县| 改则县| 波密县| 靖西县| 万州区| 同江市| 鸡泽县| 金塔县|