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)这个及时发起流程的页面了
这就是整个流程管理的做法和思路了,有问题可以一起讨论学习。