php之 常用的 流程管理
1.流程管理的用法是什么样的?2.怎么发起想要的流程?
3.审批的人要是怎么审批通过?
4.流程审核是不是要挨个走过?
一、要有数据库的内容的
肯定会有表的,首先就是用户表了,然后就是流程表,用户编写的流程表,还有审核人员的表
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118150807953-1562133220.png https://images2015.cnblogs.com/blog/748803/201701/748803-20170118150831843-2037734460.png https://images2015.cnblogs.com/blog/748803/201701/748803-20170118150920718-1630391891.png https://images2015.cnblogs.com/blog/748803/201701/748803-20170118150947984-1077690109.png
二、数据库结束后,就是新建流程的页面,这页面会有审核人员,还有流程的名字还有提交的按钮
(1)添加节点的人员,这个是要遍历数据库来查看都什么管理人员
<div>
请选择节点人员:
<?php
session_start(); //开启session
include("DBDA.class.php"); //调用封装好的数据库
$db = new DBDA();//造新对象
$suser = "select * from users";//查询用户表中的所有值
$auser = $db->Query($suser);//执行查询语句
foreach($auser as $v)
{
echo "<input> }
?>
</div>
查看一下显示结果:
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118152157234-452121866.png
(2)既然后选择审核人员,那么就是有添加的按钮
<input type="button" value="添加节点" />//起个名字,便于给它添加单击按钮
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118152617718-1939736258.png
(3)对这个按钮添加点击事件
$("#insert").click(function(){ var ck = $(".ck");//找到项
var uid = "";
for(var i=0;i<ck.length;i++)
{
if(ck.eq(i).prop("checked"))//单选按钮的选中状态
{
uid = ck.eq(i).val();//单选按钮的值
}
}
$.ajax({
url:"addjd.php",//添加节点的处理页面
data:{uid:uid},//将单选按钮的值传过去
type:"POST",//传值方式
dataType:"TEXT",//值的返回状态
success: function(data){
window.location.href="liucheng_gaunli.php";//执行处理页面成功后会刷新页面
}
});
})
(4)添加节点的处理页面
<?php
session_start();//开启session
$uid = $_POST["uid"];//接收传过来的值
if(empty($_SESSION["jiedian"]))
{
$attr = array($uid);//定义一个数组放用户
$_SESSION["jiedian"] = $attr; //将第一个用户放入数组中
}
else
{
$attr = $_SESSION["jiedian"]; //数组中有值
$attr[] = $uid;//放入数组中值
$_SESSION["jiedian"] = $attr; //将值再交给session
}
(5)在主页面中显示添加的这些节点
<?php
if(empty($_SESSION["jiedian"])) //如果没有节点值
{
echo "<div>还没有添加节点</div>";//输出这句话
}
else
{
$attr = $_SESSION["jiedian"];//数组中有了值
foreach($attr as $k=>$v)//循环遍历,$v只是名字,还有有所以所以用$k
{
$sname = "select name from users where uid='{$v}'";//编写查询语句
$name = $db->StrQuery($sname);//执行查询语句
//输出索引号还有名字,加一个删除按钮吧,可以吧这个节点删除
echo "<div>{$k}--{$name}--<input type='button' value='删除' sy='{$k}'> }
}
?>
添加节点看下效果:
1.还没有添加节点的效果图:
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118154934109-1200002957.png
2.随便添加几个审核人员:人员已经显示出来了
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118155011843-522237131.png
(6)这样之后就是对其的删除按钮添加单击事件了
$(".sc").click(function(){ var sy = $(this).attr("sy");//点击这个按钮,选中这个的索引号
$.ajax({
url:"shanchu.php", //删除按钮的处理页面
data:{sy:sy},//把索引号传到处理页面
type:"POST",//传值方式
dataType:"TEXT",
success:function(data){
window.location.href="liucheng_gaunli.php";//执行处理页面成功后会刷新页面
}
});
})
(7)删除按钮的处理页面
<?php
session_start();//开启session
$attr = $_SESSION["jiedian"];//节点的数组
$sy = $_POST["sy"];//接收穿过来的索引号
unset($attr[$sy]); //删除数据
$attr = array_values($attr); //重新索引
$_SESSION["jiedian"] = $attr;
查看下删除节点的效果
1.没有删除之前
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118155011843-522237131.png
2.删除一个节点之后
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118161038250-1963753281.png
(8)节点的操作已经结束之后,那么就是流程的名称了,这个简单,写名称的文本框:重要的就是对这个流程的保存了,那么也要有保存按钮
<div>请输入流程名称:<input type="text" /></div> //起个名字,下面保存的写个单击事件有用
<div><input type="button" value="保存" /></div>//保存按钮要有单击事件的
这样整体的效果图就出来了:
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118161407765-1899322561.png
(9)最后就是保存按钮的单击事件了
$("#save").click(function(){
var name = $("#name").val();//取到文本框的值
$.ajax({
url:"baocun.php",//保存的处理页面
data:{name:name},//将文本框的值传到处理页面
type:"POST",//传值方式
dataType:"TEXT",
success: function(data){
alert("添加成功!");//执行处理页面成功后会弹出提示框
}
});
})
(10)保存流程的处理页面
<?php
session_start();//开启session
include("DBDA.class.php");//调用封装的数据库类
$db = new DBDA();//造新对象
$name = $_POST["name"];//接收传过来的值
$code = time();//代号是时间
$sflow = "insert into flow values('{$code}','{$name}')"; //修改流程表中的值:代号和名字
$db->Query($sflow,0);//执行语句
$attr = $_SESSION["jiedian"];
foreach($attr as $k=>$v)
{
$spath = "insert into flowpath values('','{$code}','{$v}','{$k}')";//修改流程节点的数值
$db->Query($spath,0);//执行语句
}
看下保存效果:
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118162829234-2133664338.png
看下数据库,内容也保存数据库了
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118162852968-492629926.png
三、新建流程页面已经结束了,那么就是用户登录页面了,这个页面写了很多遍了,不多说了,直接上代码
(1)登录的基本显示:都是些基本语句
<h1>用户登录</h1>
<div>账号:<input type="text" /></div>
<div>密码:<input type="password" /></div>
<div><input type="button" value="登录" /></div>
(2)这里登录,我们也用ajax进行登录吧
$("#btn").click(function(){//对登录按钮添加单击事件
var uid=$("#uid").val();//获取用户的值
var pwd=$("#pwd").val();//获取密码的值
$.ajax({
url:"logincl.php",//编写登录的处理页面
data:{uid:uid,pwd:pwd},//将用户和密码传到处理页面
type:"POST",
dataType:"text",
success: function(data)
{
if(data.trim()=="OK")
{
window.location.href="main.php"; //处理页面执行成功后,跳转到主页面
}
else
{
alert("用户名密码输入错误");//否则就提示错误
}
}
})
})
(3)看下处理页面的编写
<?php
session_start();//开启session
include("DBDA.class.php");//调用封装的类
$db = new DBDA();//造新对象
//传过来的值
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];<br>//查询语句
$sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' ";
//执行语句
$attr = $db->Query($sql);
if(!empty($pwd) && !empty($attr) && $attr==$pwd)
{
$_SESSION["uid"] = $uid; //session接收用户值
echo "OK";
}
else
{
echo "ON";
}
?>
最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误
https://images2015.cnblogs.com/blog/748803/201701/748803-20170117151615833-1591639950.png https://images2015.cnblogs.com/blog/748803/201701/748803-20170117151700489-170017306.png
四、节点用户的审核处理界面了(对于这个审核界面有很多需要注意的地方)
(1)登录成功界面的显示部分:并不是每个人登录成功界面是一样的,还有就是如果这个人员不参与审核的话,也应该是没有信息的才对
想要显示的表头,也就是一行:我们可以用表来显示
<tr> <td>流程代号</td>
<td>发起者</td>
<td>发起内容</td>
<td>是否结束</td>
<td>发起时间</td>
<td>操作</td>
</tr>
先看下表头的显示:
https://images2015.cnblogs.com/blog/748803/201701/748803-20170118165636796-917523344.png
(2)开启一下session这样登录者的信息就会保存下来
session_start();
include("DBDA.class.php");//会用到数据库,所以可以调用一下数据库的类
$db = new DBDA();//造新对象
$uid = "";
if(empty($_SESSION["uid"]))//判断保存的session值是不是为空
{
header("location:login.php");//为空就返回登录页面
}
else
{
$uid = $_SESSION["uid"];//不为空就输保存一下用户
}
(3)接下来就是用户这是不是和流程有关系?流程走到哪了(分情况)?还有就是有没有通过
//查询登录者参与的所有流程
$su_flow = "select * from userflow where code in(select code from flowpath where uids='{$uid}')";
$au_flow = $db->Query($su_flow);//执行查询语句
foreach($au_flow as $vu_flow)
{
$towhere = $vu_flow; //流程走到哪里了
//找到登录者在该流程中的位置
$s_weizhi = "select orders from flowpath where code='{$vu_flow}' and uids='{$uid}'";
$wezhi = $db->StrQuery($s_weizhi); //该人员在流程中的位置
if($towhere>=$wezhi)
{
$caozuo = "";
if($towhere==$wezhi)
{
//流程正好走到登录者位置
$caozuo="<a href='tongguo.php?ids={$vu_flow}'>通过</a>"; //get方式传过处理页面
}
else
{
//流程走过登录者
$caozuo = "<span style='background-color:green; color:white'>已通过</span>";
}
echo "<tr><td>{$vu_flow}</td><td>{$vu_flow}</td><td>{$vu_flow}</td><td>{$vu_flow}</td><td>{$vu_flow}</td><td>{$caozuo}</td></tr>";
}
else
{
//流程未走到登录者
}
}
(4)通过的处理页面
<?php
include("DBDA.class.php");//调用封装好的数据库类
$db = new DBDA();//造新对象
$ids = $_GET["ids"];//将代号传过来
$sql = "update userflow set towhere=towhere+1 where>
$db->Query($sql,0);//执行修改语句
$swhere = "select * from userflow where>
$attr = $db->Query($swhere);
$towhere = $attr; //走到哪了
$code = $attr; //流程代号
$ssl = "select count(*) from flowpath where code='{$code}'"; //查询总数
$pcount = $db->StrQuery($ssl); //该流程节点人员数量
if($towhere>=$pcount)
{
$sql = "update userflow set isok=true where>
$db->Query($sql,0);
}
header("location:main.php");
因为还没有写发起流程界面,那么先从数据库中添加几条数据看看:
(1)我们先要新建个流程,这是第一个页面,我们就用新建流程
看下结点还有流程名称https://images2015.cnblogs.com/blog/748803/201701/748803-20170119082803250-18479867.png 来看下数据库中结点的表 https://images2015.cnblogs.com/blog/748803/201701/748803-20170119083106187-372751256.png
根据这些我们在流程表中自己先添加信息吧,等后来再通过发起流程添加,现在只看下效果
https://images2015.cnblogs.com/blog/748803/201701/748803-20170119083522968-1194564812.png
登录审核人员的账号看下:
第一个人是李四:
https://images2015.cnblogs.com/blog/748803/201701/748803-20170119084447171-748114136.png
我们点击通过,继续往下走
第二个人是马七,我们不点通过,看下下一个人员(王五)有没有这个通过的操作:是没有这个操作的
https://images2015.cnblogs.com/blog/748803/201701/748803-20170119084648015-907591655.png
我们让马七通过审核,再看下王五的界面
https://images2015.cnblogs.com/blog/748803/201701/748803-20170119084749218-428030763.png王五的界面就是:https://images2015.cnblogs.com/blog/748803/201701/748803-20170119084811187-1555726393.png就发现有了这个操作,继续下去,我们看下最后这个通过会不会变成1
最后审核人员张三 https://images2015.cnblogs.com/blog/748803/201701/748803-20170119084910046-609829061.png
看下结果是否会结束:https://images2015.cnblogs.com/blog/748803/201701/748803-20170119084934828-96271015.png
再看下数据库中towhere中的数值是不是已经结束了:https://images2015.cnblogs.com/blog/748803/201701/748803-20170119085016515-824247802.png
这个就剩下发起流程的步骤了,可以先看下效果:
(1)发起流程有个链接页面,单击这个,可以链接到发起流程页面
https://images2015.cnblogs.com/blog/748803/201701/748803-20170119093610093-2007040701.png
(2)这个及时发起流程的页面了
https://images2015.cnblogs.com/blog/748803/201701/748803-20170119093551781-1003924495.png
这个挺简单的了,后面再更新吧~~~
至此,这个流程管理就结束了~~
页:
[1]