实战突击
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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>";
          }
        }
        ?>