php审核流程详解
在公司运营中,人员的变动及请假、离职情况都很普遍,这就需要有一个管理系统来系统的做一套流程,可以提升工作效率节省时间。在流程中需要有顺序的进行提交审核,接下来我们做一套简单的新建流程以及提交审核的系统:
首先需要几张表:userss表、liucheng表、jiedian表、userflow表




第一步新建流程,添加节点,这里要将userss表中的性命显示出来,这里可以用单选也可以用下拉,我们用下拉列表显示:
<h1>新建流程</h1>
<div>请选择节点人员:
<select id="user">
<?php
session_start();
require "DBDA.class.php";
$db = new DBDA();
$sql = "select * from userss";
$arr = $db->query($sql);
foreach($arr as $v)
{
echo "<option value='{$v[0]}'>{$v[2]}</option>";//找到人员姓名
}
?>
</select>
<input type="button" value="添加节点" id="addjd" /><!--id为了添加点击事件-->
</div><br />
效果图:

第二步引入jquery包,给节点添加点击事件:
<script>//给节点添加点击事件
$("#addjd").click(function(){
var uid = $("#user").val();
$.ajax({
url:"liuadd.php",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(data){
window.location.href="liucheng.php";//刷新页面
}
})
})
liuadd.php处理页面:
<?php
session_start();
$uid = $_POST["uid"];//取用户名 if(empty($_SESSION["jiedian"]))
{
$arr = array($uid);//如果为空,造一个数组
$_SESSION["jiedian"] = $arr;
}
else
{
$arr = $_SESSION["jiedian"];
$arr[] = $uid;//将值添加进去
$_SESSION["jiedian"] = $arr;
}
第三步嵌入php代码,取出session的值,点击添加节点添加到下方:
<div>
<?php
if(empty($_SESSION["jiedian"]))
{
echo "您尚未添加节点人员";
}
else
{
$arr = $_SESSION["jiedian"];
foreach($arr as $k=>$v)
{
$sql = "select name from userss where uid = '{$v}'";
$name = $db->strquery($sql);
echo "<div id='ys'>{$k}--{$name}--<input type='button' value='移除' class='yichu' sy='{$k}' /></div>";//取出索引,姓名并添加移除按钮
}
}
?>
</div><br />
看看效果:

第四步:给移除按钮添加点击事件:
//移除的点击事件
$(".yichu").click(function(){
var sy = $(this).attr("sy");
$.ajax({
url:"yichu.php",
data:{sy:sy},
type:"POST",
dataType:"TEXT",
success: function(data){
window.location.href="liucheng.php";
}
})
})
yichu.php处理页面:
<?php
session_start();
$sy = $_POST["sy"]; $arr = $_SESSION["jiedian"];
unset($arr[$sy]);//从数组中删除sy这一项
$arr = array_values($arr);//重新索引
$_SESSION["jiedian"] = $arr;
第五步:添加流程名称及保存按钮,保存到数据库:
<div>请输入流程名称:
<input type="text" id="name" />
</div><br />
<input type="button" value="保存" id="baocun" />
保存按钮添加点击事件:
//保存的点击事件
$("#baocun").click(function(){
var name = $("#name").val();
$.ajax({
url:"baocun.php",
data:{name:name},
type:"POST",
dataType:"TEXT",
success: function(data){
alert("保存成功");
}
})
})
baocun.php处理页面:
<?php
session_start();
require "DBDA.class.php";
$db = new DBDA();
$name = $_POST["name"];
$code = time();//时间戳生成code $sql = "insert into liucheng values('{$code}','{$name}')";//保存到liucheng里边
$db->query($sql,0);
$arr = $_SESSION["jiedian"];
foreach($arr as $k=>$v)
{ $sql = "insert into jiedian values('','{$code}','{$v}','{$k}')";//保存到jiedian里边。
$db->query($sql,0);
}
实现效果:

数据库:


上边是新建流程及保存流程,下边我们就要进行流程的发起和审核:
发起流程要先登录,所以先建个登录页面:
<h1>登录页面</h1>
<form action="liudengchuli.php" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<input type="submit" value="登录" />
</form>
登录处理页面:
<?php
session_start();
$uid = $_POST["uid"];
$pwd = $_POST["pwd"]; require "DBDA.class.php";//引入封装类
$db = new DBDA();
$sql = "select pwd from userss where uid = '{$uid}'";//通过用户名找密码
$mm = $db->strquery($sql);
if($mm == $pwd && !empty($pwd))//判断密码是否相同且不为空
{
$_SESSION["uid"] = $uid;
header("location:liumain.php");
}
然后做一个主页面,主页面内容非常简单,就是发起流程和审核流程:
<body>
<h1>主页面</h1>
<div><a href="faqi.php">发起流程</a> <a href="shenhe.php">审核流程</a></div>
</body>

建好主页面后开始发起流程页面的设置:
发起流程用下拉列表显示:
<h1>发起流程</h1>
<form action="faqichuli.php" method="post">
<div>请选择发起的流程:
<select name="lc">
<?php
require "DBDA.class.php";
$db = new DBDA();
$sql = "select * from liucheng";
$arr = $db->query($sql);
foreach($arr as $v)
{
echo "<option value='{$v[0]}'>{$v[1]}</option>";//取出流程名称
}
?>
</select>
</div>
<br />
<div>请输入发起的内容:
<textarea name="nr"></textarea>
</div>
<br />
<input type="submit" value="发起" />
</form>

写发起处理页面:
<?php
session_start();
$code =$_POST["lc"];
$nr = $_POST["nr"];
$uid = $_SESSION["uid"];
$time = date("Y-m-d H:i:s",time());//将时间戳替换为格式化的时间 require "DBDA.class.php";
$db = new DBDA();
$sql = "insert into userflow values('','{$code}','{$uid}','{$nr}',0,'{$time}',0)";
$db->query($sql,0);
header("location:liumain.php");//跳回主页面
发起后要进行审核,审核是一级级的审,下级没有通过的时候上级是不会看到的:
<h1>审核页面</h1>
<?php
session_start();
$uid = $_SESSION["uid"];//存储的用户名 require "DBDA.class.php";
$db = new DBDA(); $sql = "select * from userflow a where code in(select code from jiedian where uid='{$uid}') and towhere >=(select orders from jiedian b where b.code=a.code and b.uid='{$uid}' )" ;//这里用到了相关子查询,流程顺序是否已经到达该用户或已经被该用户审核过 $arr = $db->query($sql);
echo "<table width='100%' border='1' cellpadding='0' cellspacing='0'>
<tr>
<td>流程代号</td>
<td>发起者</td>
<td>发起内容</td>
<td>是否结束</td>
<td>发起时间</td>
<td>操作</td>
</tr>
";
foreach($arr as $v)
{
$zt = "<a href='liutongguo.php? code={$v[0]}'>通过</a>";
$sql = "select orders from jiedian where code='{$v[1]}' and uid='{$uid}'";//通过用户名和代号找出顺序
$wz = $db->strquery($sql);
if($v[6]>$wz)
{
$zt = "<span style='color:green'>已通过</span>";
}
//显示表中内容
echo "<tr>
<td>{$v[1]}</td>
<td>{$v[2]}</td>
<td>{$v[3]}</td>
<td>{$v[4]}</td>
<td>{$v[5]}</td>
<td>{$zt}</td>
</tr>";
}
echo "</table>";
?>
最后是通过处理页面:
<?php
$ids = $_GET["code"];
require "DBDA.class.php";
$db = new DBDA();
//让流程往下走
$sql = "update userflow set towhere = towhere+1 where ids='{$ids}'";//审核通过后顺序加一,给到下一个人
$db->query($sql,0); //判断流程是否结束
$sql = "select max(orders) from jiedian where code=( select code from userflow where ids='{$ids}')";//找出顺序中最大的数
$maxsx = $db->strquery($sql); $sql = "select towhere from userflow where ids='{$ids}'";
$towhere = $db->strquery($sql); if($towhere>$maxsx)
{
//如果结束了,修改状态
$sql = "update userflow set isok = 1 where ids='{$ids}'";
$db->query($sql,0);
} header("location:shenhe.php");
看一下效果:



审核人登录:


点击通过:

最终审核人:

通过后是否结束显示为1:

php审核流程详解的更多相关文章
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
:由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...
- 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...
- Linux启动流程详解【转载】
在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...
- iOS 组件化流程详解(git创建流程)
[链接]组件化流程详解(一)https://www.jianshu.com/p/2deca619ff7e
- git概念及工作流程详解
git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...
- Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...
- JPEG图像压缩算法流程详解
JPEG图像压缩算法流程详解 JPEG代表Joint Photographic Experts Group(联合图像专家小组).此团队创立于1986年,1992年发布了JPEG的标准而在1994年获得 ...
- unity3d-配置Android环境,打包发布Apk流程详解
31:unity3d-配置Android环境,打包发布Apk流程详解 作者 阿西纳尼 关注 2016.08.28 22:52 字数 498 阅读 1806评论 0喜欢 5 Unity配置Android ...
随机推荐
- java.lang.ClassNotFoundException: com.*.*.entity.time.Q*
@Entity 实体类 java.lang.ClassNotFoundException: com.*.*.entity.time.Q* 添加依赖 1.添加DSL依赖 <!--query dsl ...
- (原)关于使用zoompad滤镜生成一个转场效果
之前在 http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=1294&extra=page%3D1 上分享过一个转场效果,今 ...
- 在网址前加神秘字母,让你打开新世界(z)
在网址前加神秘字母,让你打开新世界 1.在百度云后面加“wp”可以高速下载百度云资源<ignore_js_op> 2.在任何网址前面加“wn.run”(一定要加到这个网址www的前面)之后 ...
- OKEx交易所交易记录日期时间转毫秒级时间戳
本文介绍如何将OKEx交易所成交记录数据中的日期时间转毫秒级时间戳. 作者:比特量化 1. OKEx交易记录格式 [ { "time":"2019-09-14T10:29 ...
- DNS与ARP协议
DNS(domain name system) DNS的作用:将域名(如baidu.com)转换为IP地址 DNS的本质是:分层的DNS服务器实现的分布式数据库: 根DNS服务器 - com DNS服 ...
- [K8s] Kubernetes 是什么 不是什么
现在有三种部署方式,传统物理机部署.虚拟机部署.容器化部署. 我们现在所使用的云上服务器一般都是虚拟化出来的,硬件资源独立,操作系统等软件资源亦独立. 容器化的好处是更轻量,复用下层的操作系统,相当于 ...
- 大数据分析常用去重算法分析『Bitmap 篇』
大数据分析常用去重算法分析『Bitmap 篇』 mp.weixin.qq.com 去重分析在企业日常分析中的使用频率非常高,如何在大数据场景下快速地进行去重分析一直是一大难点.在近期的 Apache ...
- 【Docker学习之三】Docker查找拉取镜像、启动容器、容器使用
环境 docker-ce-19.03.1-3.el7.x86_64 CentOS 7 一.查找.拉取镜像.启动容器1.查找镜像-docker search默认查找Docker Hub上的镜像,举例:D ...
- [Linux]虚拟机下安装ubuntu后root密码设置
转自:https://blog.csdn.net/zcyhappy1314/article/details/17448223 问题描述: 在虚拟机下安装了ubuntu中要输入用户名,一般情况下大家都会 ...
- 协程介绍, Greenlet模块,Gevent模块,Genvent之同步与异步
昨日内容回顾 I/O模型,面试会问到I/O操作,不占用CPU.它内部有一个专门的处理I/O模块.print和写log 属于I/O操作,它不占用CPU 线程GIL保证一个进程中的多个线程在同一时刻只有一 ...