1.8 会议记录添加模块
1.8.1 会议记录添加模块概述
系统正常登录之后,每一个用户都有权利添加新的会议,供本部门成员和其他部门成员阅读浏览。本系统中会议记录添加模块的运行结果如图1.17所示。
图1.17 会议记录添加页面
1.8.2 会议记录信息验证技术
向数据库中添加新会议记录时,系统必须保证用户提交的信息不为空。这里应用JavaScript脚本判断上传数据是否为空,在js文件夹下创建add_meeting.js文件,编写check_submit()方法,验证表单提交的数据是否为空。其关键代码如下:
function check_submit(){ if(theForm.meeting_name.value==""){ alert("会议名称不能为空!");theForm.meeting_name.focus();return false; } if(theForm.meeting_place.value==""){ alert("会议地点不能为空!");theForm.meeting_place.focus();return false; } if(theForm.meeting_host.value==""){ alert("会议主持人不能为空!");theForm.meeting_host.focus();return false; } if(theForm.meeting_saver.value==""){ alert("会议记录人不能为空!");theForm.meeting_saver.focus();return false; } if(theForm.meeting_present.value==""){ alert("出席人员不能为空!");theForm.meeting_present.focus();return false; } if(theForm.textarea.value==""){ alert("会议摘要不能为空!");theForm.textarea.focus();return false; } theForm.submit(); }
1.8.3 上传文件处理技术
本系统要求用户在上传会议记录的同时,必须上传文本文档格式的会议记录附件。所以又增加了上传文件和判断上传文件格式两项技术。
1.上传文件
文件上传应用的是move_uploaded_file()函数和$_FILES[]全局变量。
1)move_uploaded_file()函数
move_uploaded_file()函数将文件上传到服务器中指定的位置。如果成功则返回true,否则返回false。语法如下:
bool move_uploaded_file ( string filename, string destination )
参数filename指定上传文件的临时文件名,即$_FILES[tmp_name];参数destination指文件上传后保存的新路径和名称。
说明
如果参数filename不是合法的上传文件,则不会执行任何操作,move_uploaded_file()将返回false。如果参数filename是合法的上传文件,但出于某些原因无法移动,同样也不会执行任何操作,move_uploaded_file()将返回false。此外还会发出一条警告。
2)$_FILES全局变量
对上传文件进行判断应用的是全局变量$_FILES,$_FILES是一个数组,它包含所有上传的文件信息。下面介绍$_FILES数组中每个元素的含义,如表1.1所示。
表1.1 $_FlLES数组中的元素
在$_FILES数组元素中,最为常用的是$_FILES[filename][name]、$_FILES[filename] [size]和$_FILES[filename][tmp_name]。通过这3个元素值完成上传文件名称的获取、判断上传文件的格式(根据上传文件名称的后缀)和判断上传文件的大小。
2.判断上传文件格式
上传文件格式判断,应用自定义函数f_postfix来完成。在自定义函数中应用到如下PHP函数。
1)count()函数
该函数的作用是计算数组的元素个数。相关语法如下:
int count ( mixed var [, int mode] )
返回var中的单元数目,通常是一个数组,任何其他类型都只有一个单元。
2)strtolower()函数
该函数的作用是将特定字符串的所有大写字母转换为小写字母,把转换后的新字符串作为函数的返回值返回。
该自定义函数存储于addmeeting_chk.php文件中,其代码如下:
function f_postfix($f_type,$f_upfiles){ //获取传递的参数值 $is_pass = false; $tmp_upfiles = split("\.",$f_upfiles); //获取上传文件的后缀 $tmp_num = count($tmp_upfiles); //统计返回值的元素数量 for($num = 0; $num < count($f_type);$num++){ //循环读取定义文件类型数组的值 //完成文件类型的大小写转换及判断 if(strtolower($tmp_upfiles[$tmp_num -1]) == $f_type["$num"]) $is_pass = $f_type["$num"]; //获取文件类型 } return $is_pass; //返回上传文件的类型 }
通过该自定义函数的使用,可以实现对上传文件类型的判断。当该函数返回值为true时,说明上传的文件符合规定的格式,否则不符合系统所规定的文件格式。
1.8.4 会议记录添加的实现过程
会议记录添加的操作是通过addmeeting.php与addmeeting_chk.php两个文件来实现的。
(1)在addmeeting.php文件中,创建添加会议记录信息的表单,通过JavaScript脚本对提交的元素进行判断,并且设置action属性值为addmeeting_chk.php。其关键代码如下:
<table cellpadding="0" cellspacing="0" border="0"> <form id="theForm" name="theForm" action="addmeeting_chk.php" method="post" onSubmit="return check_submit();" enctype="multipart/form-data"> <tr><td colspan="3" height="32"><h1 align="center">添加会议记录</h1></td></tr> <tr> <td width="120" height="28"><div align="center">会议名称:</div></td> <td><input class="input2" type="text" name="meeting_name" /></td> <td align="left" width="180" ><span class="sp1">*填写会议记录名称</span></td> </tr> <!--省略部分代码--> <tr> <td height="28"><div align="center">出席人员:</div></td> <td><input class="input2" type="text" name="meeting_present" /></td> <td align="left" width="180"><span class="sp1">*填写会议出席人员</span></td> </tr> <tr> <td height="28">上传会议内容</td><td><input class="upload" name= "meeting_documents" type="file" size="16"></td> <td align="left" width="180"><span class="sp1">*上传txt格式会议文稿</span></td> </tr> <tr> <td ><div align="center">会议摘要:</div></td> <td height="70"><textarea style="width:170px; border:1px solid #CCCCCC" name="textarea" rows="4"></textarea></td> <td align="left" width="180"><span class="sp1">*填写会议记录摘要</span></td> </tr> <tr> <td height="12"colspan="3"></td> </tr> <tr>
(2)创建addmeeting_chk.php文件,获取表单提交的数据。首先,定义自定义函数用于验证上传文件的格式;然后,对上传文件进行验证操作;最后,通过move_upload_file()函数执行文件的上传操作,并且将会议记录添加到指定的数据表中。其关键代码如下:
<?php session_start(); include_once("conn/conn.php"); function f_postfix($f_type,$f_upfiles){ //判断上传格式是否符合上传要求 $is_pass = false; $tmp_upfiles = preg_split("/\./",$f_upfiles); $tmp_num = count($tmp_upfiles); for($num = 0; $num < count($f_type);$num++){ if(strtolower($tmp_upfiles[$tmp_num -1]) == $f_type["$num"]) $is_pass = $f_type["$num"]; } return $is_pass; } if($_FILES["meeting_documents"]["size"]<=0){ //判断是否上传了文件 echo "<script>alert('请上传文件');history.go(-1);</script>"; }else{ $f_type=array("txt"); //定义上传文件的格式 $record_path="upfile"; //定义上传路径 //判断上传格式 if(($postf=f_postfix($f_type,$_FILES["meeting_documents"]["name"])) != false){ $new_path = time().".txt"; //以时间戳定义上传文件名称 if($_FILES["meeting_documents"]["size"] > 0 and $_FILES["meeting_documents"] ["size"] < 1000000){ //判断用户上传文件大小是否超过10MB $date=$_POST[b_y]."-".$_POST[b_m]."-".$_POST[b_d]; $filepath=$record_path."\\".$new_path; //指定新文件名称 $sqlstrii="insert into tb_meeting_info(meeting_name,meeting_department, meeting_place,meeting_date,meeting_host,meeting_saver,meeting_present, meeting_abstruct,meeting_address) values('$_POST[meeting_name]','$_POST [department]','$_POST[meeting_place]','$date','$_POST[meeting_host]', '$_POST[meeting_saver]','$_POST[meeting_present]','$_POST[textarea]', '$filepath')"; //数据库操作命令 $a_rst = $conn->execute($sqlstrii); //执行数据库插入操作 if(!($a_rst==false)){ //判断数据添加是否成功 //上传文件操作 move_uploaded_file($_FILES["meeting_documents"]["tmp_name"],$record_path. "\\".$new_path); echo "<script>alert('添加成功');history.go(-1);</script>"; }else{ echo "<script>alert('添加失败');history.go(-1);</script>"; } }else{ echo "<script>alert('上传文件大小超过1MB');history.go(-1);</script>"; } }else{ echo "<script>alert('上传只支持 \".txt\"格式的文件');history.go(-1);</script>"; } } ?>