2014年2月17号 星期一
一:关于manage document):今天之前有两个问题一直不明白:
1)怎样将一个数据库读出的记录文件(show.php)显示在主界面(main.php)恰当的位置上,主要是布局上的问题?
2)之前的(manage document)的main.php主界面还没有完善,使其主界面效果看起来更好?
今天,早上一来,就在构思怎样把界面弄得漂亮些,然后就先找些图片素材,感觉看起来舒服就采用.关于主界面设计:
采用了页眉,导航条,主显示区,尾页四部分. 对页眉,尾页各自写入top.php和bottom.php.导航条还需要进一步完善,主显示区应该随点击的菜单,显示不同的页面,所以主显示区的页面调用需要进步一研究.
关于第一个问题,今天解决了,主要是采用了table布局,在合适的位置调用其显示的部分.
关于第二个问题.今天也基本完善了!效果还挺好的!
二:明天来研究下怎样下载文件?
1)昨天主界面有个问题,就是界面列表菜单选择没有按照预期显示,只显示了<option value="0'">上海</option> ,显示了0[解决]
今天改了过来,<option value="上海'">上海</option> ,但是插不进数据库中,怎没能插不进去数据库呢?自己测试了下,发现是sql语句有问题,sql语句中数字可以不带单引号,而现在是字符串,所以就得带单引号了! 小小记录一下.
下载文件可以有两种方式,一种是普通文件下载方式(准备采用这种,简单,缺点就是不够安全),第二中用安全下载方式.
目前采用第一种方式,第二中有待学习
三:今天把删除文档操作搞了一下!基本可以大概实现其功能,有待完善.准备细化一下自己的知识点:
HTML中的超级链接:
超级链接可以是一个字,一个词,或者一组词,也可以是一副图像,您可以点击这些内容来跳转到新的文档或者当前前文档的某个部分.
在开发中页面之间的跳转一般都采用超级链接,超文本的连接的重要特性之一,使用者可以从一个页面直接跳转到其他页面,图形和服务器.一个连接的基本格式:
<a href="资源地址">链接文字</a>
标签<A>表示一个连接的开始,</A>表示连接的结束 属性href 定义连接所指的地方,通过点击链接文字可以达到指定的文件.
四:学习尝试用switch和include语句设计框架
其实现原理是:应用switch语句,根据超级链接中传递的变量进行判断,根据不同变量值应用include调用不同的子文件.
五:关于对onmousemove事件的学习:
定义和用法onmousemove事件是在鼠标移动时发生的,语法:onmousemove = "SomeJavascriptCode"; 参数和描述,javascript是必须的,规定该事件时执行javascript.
示例:
<img src="/i/eg_mouse2.jpg" alt="mouse"
οnmοusemοve="alert('您的鼠标刚才经过了图片!')" />
六:关于超级链接传递参数值:
<a href="index.php?"res=<?php echo urlencode('明日科技');?></a>
这段代码是为超级链接设置一个参数res,设置参数值为'明日科技',通过urlencode()函数对参数值进行编码.
<?php
if(isset($_GET['link'])) /*通过isset()函数验证$_GET['res']是否存在*/
{
$link=$_GET['link'; /*如果存在则将该值赋给变量$res*/]
}
else{
$link="首页";
}
switch($link){
.......
终于把用超级链接调用文件弄出来了,其实很简单,就是自己第一次尝试,有时候$_GET[' ']写成了$GET,我檫,不仔细导致我的进度明显慢了好多!
七:关于对简单分页技术的理解
分页核心技术在于确定当前的页数,然后利用MySQL中的LIMIT关键字来指定输出的对应的记录数啊.
如当前第一页,就输出LIMIT 0,4(这里第一页只输出4条记录),如果想输出第二页就是LIMIT 4,4 ,第三页就是 LIMIT 8,4 ....第n也就是LIMIT(n-1)x4,4
采用超级链接获取参数$p,
八:关于查询功能开发:
1)方式采用时间段查询:
在SQL语句中,对指定范围内的数据进行查找可以有两种方式:
第一种通过关键字between ...and ...实现.语法格式如下:
select 要查找的字段 from 表名 where 字段名 between 初始值 and 终止值;
第二中方式是通过比较运算符实现.语法格式如下:
select 要查找的字段 from 表名 where 字段名 >初始值 and 字段名 <终止值;
2)关于模糊查询
$sql=mysql_query("select * from tb_jour where wznr like '%$keyword%' order by id desc limit 2");
$info=mysql_fetch_array($sql);
这里简单介绍下mysql_fetch_array()函数,
使用mysql_query()函数执行select 语句时,成功将返回查询结果集,返回结果集后,使用mysql_fetch_array()函数可以将查询结果集信息,并放入一个数组中.
3)关于模糊查询中的遇见的一个小问题:
也就是常用的do.{} while(); 和 while .() {}
$info=mysql_fetch_array($sql);
if($info==false)
{
echo "<br><div align=center>对不起,没有查找到您要查找的内容!</div>";
}
else
{
?>
<table width="100%" border="2" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
<tr align="left" valign="middle" class="style3" >
<td height="18"> <div align="center">资源名称</div></td>
<td>共享者</td>
<td height="18">关键字</td>
<td height="18">简单描述</td>
<td height="18">上传时间</td>
<td height="18">下载区域</td>
</tr>
<?php
do
{
?>
<tr align="center" valign="middle" class="style1">
<td height="15">
<div align="left"><span class="style2"><?php echo $info['filename'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['staff'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['tag'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['des'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['time'];?></span></div></td>
<td height="15">
<div align="left"><a href="../document/<?php echo $info['filename'];?>">点击下载</a></div></td>
</tr>
<?php
}while($info=mysql_fetch_array($sql));
}
刚开始以为可以用while(){}句型替换掉,测试发现后总是显示记录不全,查后发现第一条记录直接被忽视了!所以,采用do {} while ();还是比较好,第一条其实已将被读到数组中了采用这种方式,不需要判断条件,先读出录入的数据信息,然后再录入第二条! 采用while(){}句型,第一条直接被忽视了! ,其实整个代码可以被改造,采用while();句型也可以!小小的记录一下!
八:关于文件删除学习
PHP中文件删除函数unlink()
unlink()函数用于删除一个文件,如果成功,则返回true,否则返回false.
语法:bool unlink(string filename)
例子:
<?php unlink("test.txt"); ?>
示例:删除Doc目录下的所有文件.
PHP中的Del.php
<html>
<head>
<title>
删除示例
</title>
</head>
<body>
<form method="post" name="form1" action="CkDel.php" id="form1">
<input type="submit" value="删除" name="delbutton">
</form>
</body>
</html>
CkDel.php
<?php
$path="../DOC/";
if(is_dir($path))
{
echo"指定的文件夹存在";
if($dh=opendir($path))
{
while(($file=readdir($dh)))
{
if( $file!="." && $file!="..")
{
$fullpath="$path"."$file";
if(!is_dir($fullpath))
{
if(unlink("$fullpath"))
{
echo "已经成功删除$fullpath";
}
else
{
echo "删除失败!";
}
}
else
{
echo "$fullpath是一个目录";
}
}
}
}
closedir($dh);
}
else
{
echo "指定文件夹不存在";
}
?>
效果:删除文件加DOC目录下的所有文件.使DOC为空文件.
<今天终于把删除功能写出来了>
//删除文件函数delfile($path,$file) ,参数给出目录路径和要删除的文件名.
/*
输入参数为$path; 文件存储路径 $path="../document/";
输入参数为$file; 删除文件名称
*/
function delfile($path,$file)
{
//先判断指定的文件夹是否存在
if(is_dir($path))
{
//指定文件夹存在,那就打开指定目录
if(opendir($path))
{
//文件全路径
$fullpath="$path"."$file";
// echo "$fullpath";
if(!is_dir($fullpath)) //判断文件是子目录还是子文件,如果是子文件,就删除
{
if(unlink("$fullpath"))
{
echo "$fullpath文件已经成功删除";
}
else
{
echo "删除文件失败!";
}
}
else
{
echo "不能直接删除目录操作!";
}
}
else
{
echo "打开指定目录出错!";
}
}
else
{
echo "指定的文件夹目录$path不存在";
}
}
做删除功能今天调试遇到一个需要注意的问题: 我们通过提交的关键字id来得到要删除的文件名称集,我们应该先删除文件后,然后再删除数据库中的记录!前后关系必须懂!今天就是因为把数据库中的记录都删除了,然后在获取删除的文件名,可想而知,这是不可能的!记录已经被删了,怎没还能读出来呢! 记录下自己的过失!
<?php
include_once("../Conn/Conn.php"); //包含数据库文件
//文件存储路径
$path="../document/";
if($_POST['conn_id']!=""){
for($i=0;$i<count($_POST['conn_id']);$i++)
{
//获取数据库的文件名称记录
$dbfile=mysql_query("select * from tb_document where id='".$_POST['conn_id'][$i]."'",$conn);
if($info=mysql_fetch_array($dbfile))
{
//获取记录的文件名称
$delfile=$info['filename'];
// echo "filename";
}
//调用删除函数
delfile($path,$delfile);
//删除数据库中的数据
$result=mysql_query("delete from tb_document where id='".$_POST['conn_id'][$i]."'",$conn);
if($result)
{
echo "<script>alert('删除数据库文件记录成功!');window.location.href='delfile.php';</script>";
}
else
{
echo "删除数据库文件记录失败!";
}
}
}
//删除文件函数
/*
输入参数为$path; 文件存储路径 $path="../document/";
输入参数为$file; 删除文件名称
*/
function delfile($path,$file)
{
//先判断指定的文件夹是否存在
if(is_dir($path))
{
//指定文件夹存在,那就打开指定目录
if(opendir($path))
{
//文件全路径
$fullpath="$path"."$file";
// echo "$fullpath";
if(!is_dir($fullpath)) //判断文件是子目录还是子文件,如果是子文件,就删除
{
if(unlink("$fullpath"))
{
echo "$fullpath文件已经成功删除";
}
else
{
echo "删除文件失败!";
}
}
else
{
echo "不能直接删除目录操作!";
}
}
else
{
echo "打开指定目录出错!";
}
}
else
{
echo "指定的文件夹目录$path不存在";
}
}
?>
2014年03月10日:
case 1:简单描述如果少于10个字,跳转页面就会出现异常!
这个case上传数据库时,就已经对传入的字符进行判断,如果小于10,就会跳出提示框! 此次操作原因是<script> </script>少了一个斜杠!
case 2:上传文档的大小,怎样获取其小数2位数,如果文件比较大,就用MB作单位,如果文件比较小,就如KB作单位.
例如:数字结果为3.1415926 ,结果应该是3.14.需要用到这个函数floor.该函数是舍去取整.如floor(3.664544) ,结果就是4.
我们可以采用先乘以100,然后再取整,然后再除以一百,
例如 $a=floor((3.1415926*100))/100 .就可以得到3.14.
经常用到小数点后取几位,但不能进位的情况。比如3.149569 取小数点后两位,最后两位不能四舍五入。结果应该是3.14。需要用到这个函数floor。该函数是舍去取整。如floor(4.66456) 结果:4 。 floor(9.1254) 结果9 。所以要去小数点后两位,需要先乘以100,然后舍去取整,在除以100 $a=floor(3.149569*100)/100
2014年4月1号:今天学习下Session 管理
Session(会话)是指在用户访问web站点上的时期内存储的用户操作的一些动作.
Session的生命周期是从用户访问页面开始,到断开与网站的连接为止,形成Session的生命周期.
Session在Web技术中占有非常重要的地位.由于网页是一种无状态的连接程序,无法记录用户的浏览状态,因此必须通过Session记录用户的有关信息,以供用户再次以此身份对Web服务器提供要求时确认.
php中会话启动的方式有两种:一种是应用session_start()函数;另一种是应用session_register()函数为会话登录一个变量来隐含地启动会话.
Cookie与Session的比较:
Sessions是将信息保存在服务器上,并通过一个Session ID来传递客户端的信息,服务器在接收到Session ID后根据这个ID来提供相关的Session信息资源;
而Cookie是所有的信息以文本文件的形式保存在客户端,并由浏览器进行管理和维护.
由于Session为服务器存储,远程用户没有办法修改Session文件内容;而Cookie为客户端存储,所有Session要比Cookie安全的多.当然是用Session还有很多优点,如控制容易,可以按照用户定义存储(存储于数据库中)等.
2014年04月04日:
还需要解决一些验证问题:
例如注册时,绑定手机时,看手机格式是否正确,邮箱格式时候正确!
浏览器的兼容性问题也得解决!
2014年0408日:
昨天空闲时间把注册的一些小问题解决掉了!在没有登录之前,非法进入主页面也解决掉了!
做下小记录!
还需要把登出小功能做了!(注销)
2014年0411日:
怎样添加验证码功能!
2014年0425:
又要扩展下这个东西,今天主要任务:怎样实现多文件上传:
HTML <form>标签的enctype属性
定义和用法
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
语法
<form enctype="value">
属性值
值 描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。
在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 "+" 加号,但不对特殊字符编码。
2014年04月28号
昨天实现了多文件上传,后面要实现需要创建目录,然后将文档上传到固定的目录中!
文档分类:
创建分类目录,目的上让不同的文档传入到不同改的分类目录中,
然后将创建的分类,放入到数据库中,做记录.
在多文件上传的界面,显示不同的分类.
2014年05月13号
今天上传大文件报错如下:
Warning: POST Content-Length of 23373902bytes exceeds the limitof 8388608bytes in Unknown on line 0
现在解答:
我们使用POST请求提交的数据大小超过了服务器的最大限制数(8388608字节=8MB)
出现上述错误的原因是,在PHP的配置文件php.ini中,默认存在如下配置信息(在php.ini中,行首的分号”;”表示当前行是注释,不会生效):
;脚本解析输入数据(类似 POST 和 GET)允许的最大时间,单位是秒。它从接收所有数据到开始执行脚本进行测量的。
max_input_time = 60
;允许客户端单个POST请求发送的最大数据
post_max_size = 8M
;是否开启文件上传功能
file_uploads = On
;文件上传的临时存放目录(如果不指定,使用系统默认的临时目录)
;upload_tmp_dir =
;允许单个请求上传的最大文件大小
upload_max_filesize = 2M
;允许单个POST请求同时上传的最大文件数量
max_file_uploads = 20
从上面的配置信息中我们可以看出,PHP的默认配置信息就是导致PHP文件上传时提示文件大小超出限制的“罪魁祸首”。上述配置信息中给出了各个指令选项对应的中文注释信息,大家可以根据自己的实际需求情况对php.ini配置文件进行相应的修改
2014年5月26号:
今天主要是实现创建根目录,以便于在根目录中再次创建子目录.
这里先对几个函数的理解:
dirname 返回路劲中的目录部分,string dirname(string path) 返回 path的父目录
mkdir 创建文件目录,只能创建一级目录.
is_dir 用于判断文件名给出的目录是否是有效目录
[需求]创建多及目录!例如:$dir="../document/renyao";
<?php
$path_dir="../document/renyaobin";
mkdirs($path_dir);
function mkdirs($dir, $mode=0777)
{
if(is_dir($dir) || @mkdir($dir,$mode)) return TRUE;
if(!mkdirs(dirname($dir),$mode)) return FALSE;
return @mkdir($dir,$mode);
}
?>
2014年5月28号 今天实现下用PHP代码实现文件安全下载,我们一般实现下载都是调用url来下载,但是遇到ie能识别打开的文件就不能用这种方式了,比如下载图片,html网页等,这时就需要编程来实现,下来我们用PHP代码来解决此问题:
<?php
//我们需要下载../document/renyb/Learning Python_4.pdf
//文件下载路径
$file_path="../document/renyb/Learning Python_4.pdf";
$filename="Learning Python_4.pdf";
//首先检查文件是否存在
if(!file_exists($file_path))
{
echo "文件找不到";
}
else
{
//打开指定文件
$file =fopen($file_path,"r");
header("Content-type:application/octet-stream"); //输出MIME类型
header("Accept-ranges:bytes"); //可接受的范围
header("Accept-length:".filesize($file_path)); //文件长度
header("Content-Disposition:attachment;filename=".$filename); //默认的文件保存对话框中的文件名称
//输出文件内容
echo fread($file,filesize($file_path));
fclose($file);
}
?>
2014年5月29日 关于目录树的学习
我们想要一个什么样的目录树:
我们有一个根目录:
根目录下我们创建一级菜单,在每一个一级菜单,我们在创建一个子菜单,然后当我们点击子菜单的时候,就可以在主界面主显示在子目录中的所有文档.