PHP+JavaScript+HTML实现上传PDF和浏览PDF课件

        在寒假简单制作PHP网站时,需要实现在线浏览PDF和上传PDF的简单功能,下面就简单介绍下该功能。实现效果如下图所示:
        1.当用户登录后,点击“上传课件”超链接可以实现隐藏和显示上传table的功能;
        2.当用户选择上传的课件后,PDF上传至本地网页文件夹下,同时插入数据库;
        3.当点击相关PDF教学课件后,可以实现在线浏览功能。
        网站布局参考:PHP网站使用JavaScript和Iframe简单实现部分刷新效果

一. 隐藏/显示table

        首先介绍如何通过JavaScript实现点击超链接实现隐藏和显示Table或DIV的效果,代码如下所示:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
	/* 这个链接改变颜色 */
	a.one:link {color: #0000ff}
	a.one:visited {color: #0000ff}
	a.one:hover {color: #ffcc00}
</style>
</head>
<script language="JavaScript">
function change(el) {
	whichEl = document.getElementById(el)    //获得指定ID值的对象
	if (whichEl.style.display == 'none') {   //block是默认值为显示,none为隐藏
	   whichEl.style.display   = 'block';
	} else {
	     whichEl.style.display   = 'none';
	}
	return;
}
</script>
<body>
<TABLE cellSpacing=0 cellPadding=2 width="95%" align=center border=0>
  <TR>
    <TD align=left width=120 style="COLOR: #880000;font-weight:bold;">
    <a href="#" class="one" onclick=change("operate")> 上传课件 </a></TD></TR>
</TABLE>
<form action="upload.php" method="post" enctype="multipart/form-data">
<TABLE id="operate" cellSpacing=0 cellPadding=0 width="80%" align=right border=0 style="DISPLAY: none">
  <tr>
    <td colspan="3"><hr width="90%" size="1" color="#FF0000"></td>
  </tr>
  <TR>
    <td width="80"><div align="right">课程编号: </div></td>
    <td><?php echo $_SESSION['courseid']; ?></td>
    <td></td>
  </TR>
  <TR>
    <td width="120"><div align="right">课件名称: </div></td>
    <td width="250"><input type="text" name="kjname" id="kjname" value="" style=width:165pt; maxlength="50"/></td>
    <td></td>
  </TR>
  <TR>
    <td ><div align="right">上传课件: </div></td>
    <td><input type="file" name="myfile" value="" style='font-size:16px'/>(*小于2M)</td>
  </TR>
  <TR height=4>
    <TD colspan="3"></TD>
  </TR>
  <tr>
    <td colspan="3"><hr width="90%" size="1" color="#FF0000"></td>
  </tr>
  <tr>
      <td colspan="3" align="middle"><div align="middle">
      <input type="submit" style='font-size:22px' name="submit" value="确认上传"/>
      </div></td>
  </tr>
</TABLE>
</form>
</body>
</html>

        其中核心代码是通过<script language="JavaScript">..</script>定义JavaScript函数,设置style.display属性none隐藏、block显示;同时在超链接中调用该函数实现如上图所示的效果。代码如下:
        <script language="JavaScript">
        function change(el) {
            whichEl =document.getElementById(el)    
            if (whichEl.style.display == 'none') {  //block为显示,none为隐藏
                whichEl.style.display   =
'block';
            } else {
                whichEl.style.display
  = 'none';
            }
            return;
        }
        </script>
        <a href="#" class="one"onclick=change("operate")>
上传课件 </a>
        <TABLEid="operate" align=right
border=0style="DISPLAY: none">//初始隐藏
        同时在超链接中我通过设置style属性,当点击、移动到超链接上显示的颜色不同。在超链接中通过<a class="one">即可实现。代码如下:
        <style type="text/css">
            /* 这个链接改变颜色 */
            a.one:link {color: #0000ff}
            a.one:visited {color: #0000ff}
            a.one:hover {color: #ffcc00}
        </style>
        <a href="#" class="one" onclick=change("operate")>
上传课件 </a>
        显示效果如下图所示:

二. 显示PDF在HTML网页中

        显示PDF是通过超链接跳转的,这也是我前面PHP值传递中讲述过的方法。其核心代码main_right3-3.php如下:

<TABLE cellSpacing=0 cellPadding=2 width="90%" align=right border=0>
	<?php
		//获取课件信息
		$hgi=new HttpPostInf();
		$result=$hgi->doquery('2',"select * from Courseware_PDF where CP_Cid='".$cid."';");
		$dj=json_decode($result,true);
		$jcount=count($dj);
		for($i=0; $i<$jcount; $i++){
	?>
	<TR height=10>
  	<TD></TD></TR>
  <TR>
  	<TD width=40><IMG src="../images/pdf-24.png"></TD>
    <TD>
    <A href="main_right3-3-content.php?id=<?php echo $dj[$i]['CP_PDFurl'] ?>"
    	class="one" target="rightFrame"><?php echo $dj[$i]['CP_Cwname'];?></A>
	  </TD>
 	  <TD></TD>
 	</TR>
 	<?php
		}
	?>
	<TR height=20><TD></TD></TR>
</TABLE>

        其中里面嵌套的PHP代码是连接数据库里面的数据,其中数据库是通过新浪SAE搭建的,PDF存储的是URL,你既可以连接本地的地址也可连接云盘上的地址。如下图所示:

        其中实例化类new HttpPostInf在httppost.php中,主要是后台通信处理。代码如下:

<?php
header("Content-Type: text/html; charset=utf-8");
class HttpPostInf{
    function __construct(){ //无参构造函数
    }
    function doquery($type , $sql){ //网路通信函数
			$data = array ('sqlType' => $type , 'sqlExe' => $sql);
			$data = http_build_query($data);
			$opts = array ('http' => array ('method' => 'POST','header'=> "Content-type: application/x-www-form-urlencoded\r\n" ."Content-Length: " . strlen($data) . "\r\n",'content' => $data));
			$context = stream_context_create($opts);
			$html = file_get_contents('http://courseweb.sinaapp.com/courseweb.php', false, $context);
			return $html;
	}
}
?>

        通过下面代码即可实现跳转到main_right3-3-content.php显示相应php,而传递的id参数整数你点击的PDF超链接对应的数据库课件URL地址。
        <A href="main_right3-3-content.php?id=<?php echo $dj[$i]['CP_PDFurl'] ?>" 
            class="one" target="rightFrame">
        下面是main_right3-3-content.php代码显示PDF,这是通过HTML5实现的。

<?php
	header("Content-Type: text/html; charset=utf-8");
	//include ("saestorage.class.php");
	//echo $_GET['id'];
?>

<!DOCTYPE HTML>
<html>
<body>
	<embed width=100% height=100% fullscreen=yes src="<?php echo $_GET['id'];?>" />
</body>
</html>

        下图是显示我们的云盘中PDF的例子:

<html>
<body>
<embed width=100% height=100% fullscreen=yes
src="http://courseweb-coursewebpdf.stor.sinaapp.com/Expected%20Divergence%20based%20Feature%20Selection.pdf" />
</body>
</html>

        你通过上面代码可以显示如下图所示的在线PDF效果。


        同样本地的网址为src="http://localhost:8080/CourseStudy/pdf/iCoot.pdf"即可显示,其中文件夹为安装的Apache路径“F:\\xampp\htdocs\CourseStudy\pdf”,其中CourseStudy是我这个项目的文件名。
 

三. PHP上传PDF

        PHP上传PDF代码如下,通过Form中定义属性enctype="multipart/form-data",同时上传到action="upload.php"该路径下进行处理,提交方法采用POST方法。而选择文件的是input定义type="file"即可。main_right3-3.php代码上传部分如下:

<form action="upload.php" method="post" enctype="multipart/form-data">
<TABLE id="operate" cellSpacing=0 cellPadding=0 width="80%" align=right border=0 style="DISPLAY: none">
  <tr>
    <td colspan="3"><hr width="90%" size="1" color="#FF0000"></td>
  </tr>
  <TR>
  	<td width="80"><div align="right">课程编号: </div></td>
    <td><?php echo $_SESSION['courseid']; ?></td>
    <td></td>
  </TR>
  <TR>
  	<td width="120"><div align="right">课件名称: </div></td>
    <td width="250"><input type="text" name="kjname" id="kjname" value="" style=width:165pt; maxlength="50"/></td>
  	<td></td>
  </TR>
  <TR>
  	<td ><div align="right">上传课件: </div></td>
    <td><input type="file" name="myfile" value="" style='font-size:16px'/>(*小于2M)</td>
  </TR>
  <TR height=4>
    <TD colspan="3">
    </TD>
  </TR>
  <tr>
    <td colspan="3"><hr width="90%" size="1" color="#FF0000"></td>
  </tr>
  <tr>
    <td colspan="3" align="middle"><div align="middle">
      <input type="submit" style='font-size:22px' name="submit" value="确认上传"/>
    </div></td>
  </tr>
</TABLE>
</form> 

        而上传文件upload.php代码如下,主要是通过<input type="file" name="myfile"中myfile对应上传的文件PDF属性,并判断是否是PDF文件。
       
bool move_uploaded_file ( string filename, string destination) 上传文件名filename到指定路径destination
        代码中我是上传到项目中pdf文件夹下,同时以当前时间命名;后面是插入数据库课件表的操作。
        $_FILES['myfile']['name']是指被上传文件的名称
        $_FILES['myfile']['type']是指被上传文件的类型,此时为"application/pdf"
        $_FILES['myfile']['size']是指被上传文件的大小,单位为字节(B)
        $_FILES['myfile']['tmp_name']  是指被上传文件存在服务器中的临时副本文件名称,文件被移动到指定目录后临文件将被自动消毁。
        参考: http://blog.csdn.net/wer1234s/article/details/7845018

<?php
	header("Content-Type: text/html; charset=utf-8");
	include ("../database/human.php");
	include ("../database/course.php");
	session_start();
	if($_POST)
	{
			$file_name= $_FILES['myfile']['name'] ;
			$tmp_name = $_FILES['myfile']['tmp_name'];
			if ($_FILES['myfile']['type'] != "application/pdf") {
				 echo "<p>请上传 PDF 格式的文件.</p>";
			}
			else {
				if(is_uploaded_file($tmp_name)) {
					//upload file
					$dest_dir='pdf'; //上传文件的路径
					$name=$dest_dir.'/'.time().".pdf";
					$time = time();
					$result=move_uploaded_file($tmp_name,$name);
					if($result==1) {
						echo "<p>成功上传</p>";
						$path="http://localhost:8080/CourseStudy/teacher/".$name;
						//echo $path;
						//插入数据
						$sql = "INSERT INTO Courseware_PDF (CP_Cno,CP_Cid,CP_Cwname,CP_PDFurl) ";
						$sql .= "VALUES ('".$time."','".$_SESSION['courseid']."','".$_POST['kjname']."','".$path."');";
						echo $sql;
						$hgi=new HttpPostInf();
						$result=$hgi->doquery('1',$sql);
						header('Location:main_right3-3.php');
					}
				}
				else {
					echo "<p>上传文件失败</p>";
				}
			}
	}
?>

        如下图所示,选择PDF并上传的运行结果,同时文件上传至文件夹为安装的Apache路径“F:\\xampp\htdocs\CourseStudy\pdf”路径下。

        最后希望文章对你有所帮助,因为这些知识都是环环相扣的,所以单独讲述不太易懂,我也是尽我自己的最大努力写这几篇文章,可能文章效果不是很好,也存在着很多不足之处。但请海涵,还是希望你能发现文章中对你有用的知识吧!最后纪念下自己写的第100篇博客,两年时间感谢自己~期待更长
        (By:Eastmount 2015-3-6 深夜3点  http://blog.csdn.net/eastmount/

时间: 2024-11-13 14:14:20

PHP+JavaScript+HTML实现上传PDF和浏览PDF课件的相关文章

jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能

Ajax file upload plugin是一个功能强大的文件上传jQuery插件,可自定义链接.或其它元素庖代传统的file表单上传结果,可实现Ajax动态提示文件上传 过程,同时支撑多文件上传,AjaxFileUpload文件上传插件功能斗劲稳定,今朝应用也斗劲多,简单应用实例如下: 查看AjaxFileUpload相干jQuery官方文档介绍 AjaxFileUpload JS库文件 查看AjaxFileUpload演示 一,创建一个ajax upload按钮元素(button),

PHP中使用Session配合Javascript实现文件上传进度条功能_php技巧

Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP 5.4以前,实现这样的进度条并不容易,主要有三种方法: 1.使用Flash, Java, ActiveX 2.使用PHP的APC扩展 3.使用HTML5的File API 第一种方法依赖第三方的浏览器插件,通用性不足,且易带来安全隐患.不过由于Flash的使用比较广泛,因此还是有很多网站使用Flash作为解决方案. 第二种方法的不足

javascript实现图片上传前台页面_javascript技巧

这篇文章主要通过代码分析javascript实现图片上传前台页面,废话不多说了,直接贴代码了. 代码示例一: <script> //检查图片的格式是否正确,同时实现预览 function setImagePreview(obj, localImagId, imgObjPreview) { var array = new Array('gif', 'jpeg', 'png', 'jpg', 'bmp'); //可以上传的文件类型 if (obj.value == '') { $.messager

PHP Session和Javascript实现文件上传进度条

在PHP 5.4以前,实现这样的进度条并不容易,主要有三种方法: 1.使用Flash, Java, ActiveX 2.使用PHP的APC扩展 3.使用HTML5的File API 第一种方法依赖第三方的浏览器插件,通用性不足,且易带来安全隐患.不过由于Flash的使用比较广泛,因此还是有很多网站使用Flash作为解决方案. 第二种方法的不足在于,它需要安装PHP的APC扩展库,要求用户能够控制服务器端的配置.另外,如果安装APC仅仅是为了实现一个上传进度条,那么显然有点杀鸡用牛刀的意思. 第三

html5+javascript实现简单上传的注意细节_javascript技巧

简单记录下今早做H5上传中一些代码还有坑 一.展示 因为前端上传文件是必须通过form表单的,不能使用ajax,这样的话一个移动页面放入一个type为file的input真心不怎么好看,如下图,很挫有没有 解决办法找了下,PC上有些是把这个input换成flash,采用jquery的工具库比如uploadify来做,但是移动端大部分浏览器是不支持flash的.所以最后采用的办法还是用form表单的形式,只是把这个form和input的透明度设置为0,让它们和准备显示的内容同时在一个div中,显示

ie10-如何实现在WIN8 RT上使用IE10 在线浏览PDF文件

问题描述 如何实现在WIN8 RT上使用IE10 在线浏览PDF文件 我有一个WEB项目,用户使用的是surface rt的ie10,其中需要实现的一个功能是要在线浏览pdf文件.由于metro的ie10不支持插件,每次点击pdf都要提示下载,因此无法实现这个功能. 网上能查到的方法是将pdf转化为swf,然后通过flexpaper查看,这个方法虽然能实现,但是在iis上发布以后,pdf2swf.exe的运行需要使用管理员权限才能正常使用,这点我们的网络管理不能允许,这个方法就不能用了. 另外一

php pdf 上传-代码改成pdf上传路径成功,但内容无法上传,哪位大神帮忙改改

问题描述 代码改成pdf上传路径成功,但内容无法上传,哪位大神帮忙改改 文档管理 <body style="text-align:center;"> <div data-role="page" id="pageone"> <div data-role="content"> <div data-role="navbar"> <ul> <li&g

JavaScript中文件上传API详解_javascript技巧

对于Web程序员来说,在网页上处理文件上传,总是一件很麻烦的事情.在过去,我们不能够通过拖拽上传图片,也没有复杂Ajax上传技术,很少处理多文件批量上传.我们也无法获取上传过程中的信息,除非上传完成后从服务器端获得.有时候,等你上传完毕后才发现上传的文件不合适! 如今,HTML5的革命,现代浏览器的诞生,JavaScript的升级,这些给我们提供了使用Javascript和input[type=file]元素获取上传文件过程信息的能力. 下面就来看看这些上传文件API是如何使用的! 访问要上传的

如何使用javascript限制文件上传大小

javascript|上传 <script type="text/javascript" defer>function crobj(){  var obj=document.getElementById("path");  var fso=new ActiveXObject("Scripting.FileSystemObject");  var opath=fso.GetFile(obj.value);  var s="文件