zoukankan      html  css  js  c++  java
  • php流程管理练习

    今天我们做一个流程管理:

    1.流程管理的用法是什么样的?

    2.怎么发起想要的流程?

    3.审批的人要是怎么审批通过?

    4.流程审核是不是要挨个走过?

    一、

    做这个流程管理肯定要有数据库:

    二、数据库结束后,就是新建流程的页面,这页面会有审核人员,还有流程的名字还有提交的按钮

    (1)添加节点的人员,这个是要遍历数据库来查看都什么管理人员

     1 <div>
     2   请选择节点人员:
     3      
     4     <?php
     5     session_start();   //开启session
     6     include("DBDA.class.php");   //调用封装好的数据库
     7     $db = new DBDA();  //造新对象
     8      
     9     $suser = "select * from users";  //查询用户表中的所有值
    10     $auser = $db->Query($suser);  //执行查询语句
    11     foreach($auser as $v)
    12     {
    13         echo "<input class='ck' type='radio' value='{$v[0]}' name='ck' />{$v[2]} ";  //输出单选按钮,数组中的索引2,也就是用户名,但是它的值是代号
    14     }
    15     ?>
    16 </div>

    查看一下显示结果:

    (2)既然后选择审核人员,那么就是有添加的按钮

    <input type="button" value="添加节点" id="insert" /> 

    (3)对这个按钮添加点击事件

     1 $("#insert").click(function(){
     2     var ck = $(".ck");  //找到项
     3     var uid = "";
     4     for(var i=0;i<ck.length;i++)
     5     {
     6         if(ck.eq(i).prop("checked"))  //单选按钮的选中状态
     7         {
     8           uid = ck.eq(i).val();  //单选按钮的值
     9         }
    10     }
    11          
    12     $.ajax({
    13         url:"addjd.php",  //添加节点的处理页面
    14         data:{uid:uid},  //将单选按钮的值传过去
    15         type:"POST",  //传值方式
    16         dataType:"TEXT",  //值的返回状态
    17         success: function(data){
    18             window.location.href="liucheng_gaunli.php";  //执行处理页面成功后会刷新页面
    19           }
    20         });
    21 })

    (4)添加节点的处理页面

     1 <?php
     2 session_start();  //开启session
     3 $uid = $_POST["uid"];  //接收传过来的值
     4  
     5 if(empty($_SESSION["jiedian"]))
     6 {
     7     $attr = array($uid);  //定义一个数组放用户
     8     $_SESSION["jiedian"] = $attr; //将第一个用户放入数组中
     9 }
    10 else
    11 {
    12     $attr = $_SESSION["jiedian"]; //数组中有值
    13     $attr[] = $uid;  //放入数组中值
    14     $_SESSION["jiedian"] = $attr;   //将值再交给session
    15 }

    (5)在主页面中显示添加的这些节点

     1 <?php
     2 if(empty($_SESSION["jiedian"]))   //如果没有节点值
     3 {
     4     echo "<div>还没有添加节点</div>";  //输出这句话
     5 }
     6 else
     7 {
     8     $attr = $_SESSION["jiedian"];  //数组中有了值
     9     foreach($attr as $k=>$v)  //循环遍历,$v只是名字,还有有所以所以用$k
    10     {
    11         $sname = "select name from users where uid='{$v}'";  //编写查询语句
    12         $name = $db->StrQuery($sname);  //执行查询语句<br>          //输出索引号还有名字,加一个删除按钮吧,可以吧这个节点删除
    13         echo "<div>{$k}--{$name}--<input type='button' value='删除' sy='{$k}' class='sc' /></div>"; 
    14     }
    15 }
    16 ?>

    然后我们看看效果:

    1.还没有添加节点的效果图:  

    2.随便添加几个审核人员:人员已经显示出来了

     (6)这样之后就是对其的删除按钮添加单击事件了

     1 $(".sc").click(function(){
     2     var sy = $(this).attr("sy");  //点击这个按钮,选中这个的索引号
     3     $.ajax({
     4         url:"shanchu.php",   //删除按钮的处理页面
     5         data:{sy:sy},  //把索引号传到处理页面
     6         type:"POST",  //传值方式
     7         dataType:"TEXT",
     8         success:function(data){
     9             window.location.href="liucheng_gaunli.php";  //执行处理页面成功后会刷新页面
    10         }
    11     });
    12 })

    (7)删除按钮的处理页面

    1 <?php
    2 session_start();  //开启session
    3 $attr = $_SESSION["jiedian"];  //节点的数组
    4 $sy = $_POST["sy"];  //接收穿过来的索引号
    5  
    6 unset($attr[$sy]); //删除数据
    7 $attr = array_values($attr); //重新索引
    8 $_SESSION["jiedian"] = $attr;

    查看下删除节点的效果

    1.没有删除之前

    2.删除一个节点之后

    (8)节点的操作已经结束之后,那么就是流程的名称了,这个简单,写名称的文本框:重要的就是对这个流程的保存了,那么也要有保存按钮

    <div>请输入流程名称:<input type="text" id="name" /></div>    //起个名字,下面保存的写个单击事件有用
    <div><input type="button" value="保存" id="save" /></div>  //保存按钮要有单击事件的

    这样整体的效果图就出来了:  

    (9)最后就是保存按钮的单击事件了

     1 $("#save").click(function(){
     2   var name = $("#name").val();  //取到文本框的值
     3   $.ajax({
     4     url:"baocun.php",  //保存的处理页面
     5     data:{name:name},  //将文本框的值传到处理页面
     6     type:"POST",  //传值方式
     7     dataType:"TEXT",
     8     success: function(data){
     9         alert("添加成功!");  //执行处理页面成功后会弹出提示框
    10       }
    11   });<br>})

    (10)保存流程的处理页面

     1 <?php
     2 session_start();  //开启session
     3 include("DBDA.class.php");  //调用封装的数据库类
     4 $db = new DBDA();  //造新对象
     5  
     6 $name = $_POST["name"];  //接收传过来的值
     7 $code = time();  //代号是时间
     8  
     9 $sflow = "insert into flow values('{$code}','{$name}')"; //修改流程表中的值:代号和名字
    10 $db->Query($sflow,0);  //执行语句
    11  
    12 $attr = $_SESSION["jiedian"]; 
    13 foreach($attr as $k=>$v)
    14 {
    15     $spath = "insert into flowpath values('','{$code}','{$v}','{$k}')";  //修改流程节点的数值
    16     $db->Query($spath,0);  //执行语句
    17 }

    看下保存效果:

    看下数据库,内容也保存数据库了

    三、新建流程页面已经结束了,那么就是用户登录页面了,这个页面写了很多遍了,不多说了,直接上代码

    (1)登录的基本显示:都是些基本语句

    1 <h1>用户登录</h1>
    2 <div>账号:<input type="text" id="uid" /></div>
    3 <div>密码:<input type="password" id="pwd" /></div>
    4 <div><input type="button" value="登录" id="btn" /></div>

    (2)这里登录,我们也用ajax进行登录吧

     1 $("#btn").click(function(){  //对登录按钮添加单击事件
     2   var uid=$("#uid").val();  //获取用户的值
     3   var pwd=$("#pwd").val();  //获取密码的值
     4   $.ajax({
     5     url:"logincl.php",  //编写登录的处理页面
     6     data:{uid:uid,pwd:pwd},  //将用户和密码传到处理页面
     7     type:"POST",
     8     dataType:"text",
     9     success: function(data)
    10     {
    11       if(data.trim()=="OK")
    12       {
    13         window.location.href="main.php";    //处理页面执行成功后,跳转到主页面
    14       }
    15       else
    16       {
    17         alert("用户名密码输入错误");  //否则就提示错误
    18       }
    19     }
    20   })      
    21 })

    (3)看下处理页面的编写

     1 <?php
     2 session_start();  //开启session
     3 include("DBDA.class.php");  //调用封装的类
     4 $db = new DBDA();  //造新对象
     5 //传过来的值
     6 $uid = $_POST["uid"];
     7 $pwd = $_POST["pwd"];<br>//查询语句
     8 $sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' ";
     9 //执行语句
    10 $attr = $db->Query($sql);
    11 if(!empty($pwd) && !empty($attr) && $attr[0][0]==$pwd)
    12 {
    13     $_SESSION["uid"] = $uid; //session接收用户值
    14     echo "OK";
    15 }
    16 else
    17 {
    18     echo "ON";
    19 }
    20 ?>

    最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误

       

    四、节点用户的审核处理界面了(对于这个审核界面有很多需要注意的地方)

    (1)登录成功界面的显示部分:并不是每个人登录成功界面是一样的,还有就是如果这个人员不参与审核的话,也应该是没有信息的才对

    想要显示的表头,也就是一行:我们可以用表来显示

    1 <tr>
    2    <td>流程代号</td>
    3    <td>发起者</td>
    4    <td>发起内容</td>
    5    <td>是否结束</td>
    6    <td>发起时间</td>
    7    <td>操作</td>
    8 </tr>

    先看下表头的显示:

    (2)开启一下session这样登录者的信息就会保存下来

     1 session_start();
     2 include("DBDA.class.php");  //会用到数据库,所以可以调用一下数据库的类
     3 $db = new DBDA();  //造新对象
     4 $uid = "";
     5 if(empty($_SESSION["uid"]))  //判断保存的session值是不是为空
     6 {
     7   header("location:login.php");  //为空就返回登录页面
     8 }
     9 else
    10 {
    11   $uid = $_SESSION["uid"];  //不为空就输保存一下用户
    12 }

    (3)接下来就是用户这是不是和流程有关系?流程走到哪了(分情况)?还有就是有没有通过

     1 //查询登录者参与的所有流程
     2 $su_flow = "select * from userflow where code in(select code from flowpath where uids='{$uid}')";
     3 $au_flow = $db->Query($su_flow);  //执行查询语句
     4                  
     5 foreach($au_flow as $vu_flow)
     6 {
     7   $towhere = $vu_flow[6]; //流程走到哪里了
     8                      
     9   //找到登录者在该流程中的位置
    10   $s_weizhi = "select orders from flowpath where code='{$vu_flow[1]}' and uids='{$uid}'";
    11   $wezhi = $db->StrQuery($s_weizhi); //该人员在流程中的位置
    12                      
    13   if($towhere>=$wezhi)
    14   {
    15     $caozuo = "";
    16     if($towhere==$wezhi)
    17     {
    18       //流程正好走到登录者位置
    19       $caozuo="<a href='tongguo.php?ids={$vu_flow[0]}'>通过</a>"; //get方式传过处理页面
    20     }
    21     else
    22     {
    23       //流程走过登录者
    24       $caozuo = "<span style='background-color:green; color:white'>已通过</span>";
    25     }
    26     echo "<tr><td>{$vu_flow[1]}</td><td>{$vu_flow[2]}</td><td>{$vu_flow[3]}</td><td>{$vu_flow[4]}</td><td>{$vu_flow[5]}</td><td>{$caozuo}</td></tr>";
    27   }
    28   else<br>  {
    29     //流程未走到登录者
    30   }
    31 }

    (4)通过的处理页面

    <?php
    include("DBDA.class.php");  //调用封装好的数据库类
    $db = new DBDA();  //造新对象<br>
    $ids = $_GET["ids"];  //将代号传过来
    $sql = "update userflow set towhere=towhere+1 where ids='{$ids}'";  //修改towhere的值看已经执行到哪了
    $db->Query($sql,0);  //执行修改语句
     
    $swhere = "select * from userflow where ids='{$ids}'"; 
    $attr = $db->Query($swhere);
     
    $towhere = $attr[0][6]; //走到哪了
    $code = $attr[0][1]; //流程代号
    $ssl = "select count(*) from flowpath where code='{$code}'";   //查询总数
    $pcount = $db->StrQuery($ssl); //该流程节点人员数量
     
    if($towhere>=$pcount)
    {<br>  $sql = "update userflow set isok=true where ids='{$ids}'";  //修改是不是已经通过了
      $db->Query($sql,0);
    }
    header("location:main.php");

    (1)我们先要新建个流程,这是第一个页面,我们就用新建流程

    看下结点还有流程名称   来看下数据库中结点的表     

    根据这些我们在流程表中自己先添加信息吧,等后来再通过发起流程添加,现在只看下效果

    登录审核人员的账号看下:

    第一个人是李四:

    我们点击通过,继续往下走

    第二个人是马七,我们不点通过,看下下一个人员(王五)有没有这个通过的操作:是没有这个操作的

    我们让马七通过审核,再看下王五的界面

      王五的界面就是:就发现有了这个操作,继续下去,我们看下最后这个通过会不会变成1

    最后审核人员张三    

    看下结果是否会结束:

    再看下数据库中towhere中的数值是不是已经结束了:

    这个就剩下发起流程的步骤了,可以先看下效果:

    (1)发起流程有个链接页面,单击这个,可以链接到发起流程页面

      

    (2)这个及时发起流程的页面了

    这就是整个流程管理的做法和思路了,有问题可以一起讨论学习。

  • 相关阅读:
    主键索引和非主键索引解析
    DNS劫持、污染的原理
    B-树,B+树与B*树的优缺点比较
    CollectionUtils工具类
    maven换源
    哪些字段可以加索引?
    callable和runnable的区别
    类加载器实例化时的顺序
    28BYJ-48步进电机
    《计算机网络》读书笔记之应用层
  • 原文地址:https://www.cnblogs.com/axj1993/p/6604771.html
Copyright © 2011-2022 走看看