上一篇随笔中已经提到如何新建流程,那么现在我们就来看一下如何发起一个流程和审核流程~~~

先说一下思路

(1)登录用session获取到用户的id

(2) 用户发起一个流程

注意:需要写申请事由

(3)处于节点的审核人去依次审核

  注意:每审核通过一个,对应towhere字段要加1; 审核到最后时,对应的isok字段要变为1(此处1表示结束,0表示未结束)

共用到三张表:

第一步:先做一个简单的登录页面,用session获取用户名:

denglu.php页面

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form method="post" action="denglu-cl.php">
  9. 用户名:<input type="text" name="uid" /><br />
  10. 密码:<input type="password" name="pwd" /><br />
  11. <input type="submit" value="登录" />
  12. </form>
  13. </body>
  14. </html>

  denglu-cl.php页面

  1. <?php
  2. session_start();
  3. require "../DB.class.php";
  4. $db = new DB();
  5.  
  6. $uid = $_POST["uid"];
  7. $pwd = $_POST["pwd"];
  8.  
  9. $sql = "select pwd from users where uid='{$uid}'";
  10. $mm = $db->strquery($sql);
  11.  
  12. if($pwd==$mm && !empty($pwd))
  13. {
  14. $_SESSION["uid"]=$uid;
  15. header("location:liucheng.php");
  16. }
  17. else
  18. {
  19. echo "密码或登录名输入错误";
  20. }
  21. ?>

  效果图:

第二步:做个简单的注页面:liucheng.php

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. #body{
  8. height: 200px;
  9. width: 300px;
  10. background-color: gainsboro;
  11. margin: 200px auto;
  12. text-align: center;
  13. vertical-align: middle;
  14. line-height: 30px;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <div id="body">
  20. <h2>主页面</h2>
  21. <div>
  22. <a href="faqi.php">发起流程</a><br />
  23. <a href='shenhe.php'>审核流程</a>
  24. </div>
  25. </div>
  26. </body>
  27. </html>

  

效果图:

第三步:发起流程页面faqi.php

(1)先将所有流程用下拉列表显示

(2)发起流程事由需要由登录用户填写

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. #body{
  8. height: 250px;
  9. width: 300px;
  10. background-color: gainsboro;
  11. margin: 200px auto;
  12. text-align: left;
  13. vertical-align: middle;
  14. line-height: 30px;
  15. padding-left: 30px;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div id="body">
  21. <form method="post" action="faqi-cl.php">
  22. <h2>发起流程页面</h2>
  23. <select id="lc">
  24. <?php
  25. require "../DB.class.php";
  26. $db = new DB();
  27. $sql = "select * from liucheng";
  28. $arr = $db->query($sql);
  29. foreach($arr as $v)
  30. {
  31. echo "<option value='{$v[0]}'>{$v[1]}</option>";
  32. }
  33. ?>
  34. </select><br />
  35. 发起流程事由:
  36. <textarea class="nr"> </textarea><br />
  37. <input type="button" value="确定发起" />
  38. </form>
  39. </div>
  40. </body>
  41. </html>

第四步:写发起流程的处理页面fq-cl.php

  1. <?php
  2. session_start();
  3. require "../DB.class.php";
  4. $db = new DB();
  5.  
  6. $code = $_POST["lc"];
  7. $nr =$_POST["nr"];
  8.  
  9. $uid = $_SESSION["uid"];
  10. $time = date("Y-m-d H:i:s",time());
  11.  
  12. $sql = "insert into liuchengpath values ('','{$code}','{$uid}','{$nr}',0,'{$time}',0)";
  13. $db->query($sql,0);
  14. header("location:liucheng.php");
  15. ?>

  点击“确认发起”,数据库中就会添加此条数据

第五步:流程审核页面shenhe.php

用到知识点:子查询:无关子查询(子查询和父查询可以独立执行); 相关子查询(子查询里的条件使用到了父查询的某个东西   )

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. #body{
  8. height: 450px;
  9. width: 800px;
  10. background-color: gainsboro;
  11. margin: 200px auto;
  12. text-align: left;
  13. vertical-align: middle;
  14. line-height: 30px;
  15. padding-left: 30px;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div id="body">
  21. <h2>流程审核页面</h2>
  22. <?php
  23. session_start();
  24. $uid = $_SESSION["uid"];
  25.  
  26. require "../DB.class.php";
  27. $db = new DB();
  28. //先取该用户参与的所有流程
  29. //并且取流程步骤到达该用户或已经被改用户审核通过的记录
  30. $sql="select * from liuchengpath a where code in(select code from liuchengjiedian where uids='{$uid}') and towhere >=(select orders from liuchengjiedian b where b.code = a.code and b.uids = '{$uid}')";
  31.  
  32. $arr = $db->query($sql);
  33. //var_dump($arr);
  34. echo "<table border='1' width='100%' cellpadding='0' cellspacing='0'>
  35. <tr>
  36. <td>流程代号</td>
  37. <td>发起者</td>
  38. <td>发起内容</td>
  39. <td>发起时间</td>
  40. <td>是否结束</td>
  41. <td>操作</td>
  42. </tr>";
  43. foreach($arr as $v){
  44. //操作最后一列
  45. //设置默认项
  46. $zt = "<a href='tongguo-cl.php?code={$v[0]}'>审核未通过</a>";
  47. $sql = "select orders from liuchengjiedian where code ='{$v[1]}' and uids ='{$uid}'";
  48. $wz = $db->strquery($sql);
  49. if($v[6]>$wz)
  50. {
  51. $zt = "<span style='color:green'>审核已通过</span>";
  52. }
  53.  
  54. echo "<tr>
  55. <td>{$v[1]}</td>
  56. <td>{$v[2]}</td>
  57. <td>{$v[3]}</td>
  58. <td>{$v[4]}</td>
  59. <td>{$v[5]}</td>
  60. <td>{$zt}</td>
  61. </tr>";
  62. }
  63. echo "</table>";
  64. ?>
  65. </div>
  66. </body>
  67. </html>

  第六步:写tongguo-cl.php页面(重要)

  1. <?php
  2. $ids = $_GET["code"];
  3. require "../DB.class.php";
  4. $db = new DB();
  5.  
  6. //点击审核后,towhere列加1,目的是使流程向下走
  7. $sql = "update liuchengpath set towhere = towhere+1 where ids ='{$ids}' ";
  8. $db->query($sql,0);
  9.  
  10. //当流程走到最后一个审核的人时,流程要结束
  11. //获取该流程最大的orders
  12. $sql =" select max(orders) from liuchengjiedian where code = (select code from liuchengpath where ids ='{$ids}')";
  13. $maxorders = $db->strquery($sql);
  14.  
  15. //获取该用户处于哪个位置,也就是towhere等于多少
  16. $sql ="select towhere from liuchengpath where ids ='{$ids}'";
  17. $towhere = $db->strquery($sql);
  18.  
  19. //判断是否已到达最后一个审核的人
  20. if($towhere>$maxorders)
  21. {
  22. $sql = "update liuchengpath set isok=1 where ids='{$ids}'";
  23. // var_dump($sql);
  24. $db->query($sql,0);
  25. }
  26. header("location:shenhe.php");
  27. ?>

  当写好这一步时,点击“审核未通过”则会变成“审核已通过”;

我们从头来验证一下效果:

首先:发起一个新的请假流程:

       

其次:zhangsan是第一个要审核人

点击“审核未通过后“,

最后:zhaoliu是最后一个审核人

点击“审核未通过”后,是否结束变为  1 ;操作变为绿色的  “审核已通过”~~~

这样简单的发起流程和流程审核就已经实现了~~~

php+ajax发起流程和审核流程(以请假为例)的更多相关文章

  1. php审核流程详解

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

  2. activiti 一个流程的运转步骤 以请假流程为例

    ---为了加深对activiti的理解记忆,对自己做的一个流程进行自述.加强记忆 请假实例 一.设计请假的流程图以及流程文件,完善对应数据项,比如用户信息,请假单信息 --请假单 --流程图 --流程 ...

  3. 策略与计费控制(PCC)流程与信令流程

    该文为3GPP TS23.203-be0 条款6-7译文 策略与计费控制(PCC)流程[^4] IP-CAN 会话有三种显著的场景: 无网关控制会话需求,不会出现网关控制建立 需要网关控制会话支持:B ...

  4. 【干货分享】流程DEMO-离职流程

    流程名: 离职申请   流程相关文件: 流程包.xml WebService业务服务.xml WebService.asmx WebService.cs   流程说明: 流程中集成了webservic ...

  5. YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)

    程序=数据结构+算法,而企业级的软件=数据+流程,流程往往千差万别,客户自身有时都搞不清楚,随时变化的情况更是家常便饭,抛开功能等不谈,需求变化很大程度上就是流程的变化,流程的变化会给开发工作造成很大 ...

  6. PRINCE2项目管理七大流程之指导流程

    PRINCE2项目管理七大流程之指导流程   今天学习七大流程之二--项目指导流程 项目指导流程的目的就是使项目管理委员会能够对项目的成功负责,具体来说,是由项目管理委员会作出关键决策,并进行总体控制 ...

  7. 原始ajax发起请求并反馈

    在用户登陆的时候,离开用户.密码输入框即进行验证:ajax发起请求进行验证的: login.jsp代码: <%@ page language="java" contentTy ...

  8. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】

    上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...

  9. java工作流引擎Jflow流程事件和流程节点事件设置

    流程实例的引入和设置 关键词: 开源工作流引擎  Java工作流开发  .net开源工作流引擎   流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...

随机推荐

  1. layout_weight相关知识

    之前使用layout_weight都是在layout_width或layout_height为0dp的时候,都没出现什么问题,但是无意间看到了如果设为match_parent会出现不同效果记录一下. ...

  2. c++设计成员变量可动态调整的动态类结构

    本文主要介绍一下如何使用c++设计成员变量可动态调整的抽象动态类结构.首先介绍一下项目中以前使用的一种类结构:静态类结构 1.静态类结构 很多时候,在项目开发中设计类结构时,我们往往有一种简单.直接的 ...

  3. Apache2.4.23+PHP5.6.30+MySQL5.7.18安装教程

    最近在工作中常常接触到PHP,自己也写过一些简单的PHP页面.我们知道PHP是在服务器端运行的脚本语言,因此我们需要配置服务器环境.之前为了省事直接使用的是wamp集成环境,但是突然某一天领导要求我们 ...

  4. mybatis新手入门常见问题集(持续更新)

    一.参数为集合 Q:parameterType指的的类型是集合类型还是对象? A:都可以,甚至不用在xml中指定也可以.第一,mybatis会对传入的参数进行判断是不是list或者array,第二,m ...

  5. 玩转SSH端口转发

    SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),**远程端口转发(Local Port Forwarding)**以及**动态端口转发(Dynamic Port ...

  6. oracle 归档日志满 报错ORA-00257: archiver error. Connect internal only, until freed

    归档日志满导致无法用户无法登陆 具体处理办法 --用户登陆 Microsoft Windows [Version 6.1.7601] Copyright (c) Microsoft Corporati ...

  7. HTC开放Vive Tracker代码啦!

    (52VR网2017年5月2日)HTC正在为工作室创建的Vive Tracker项目发布教程和项目文件,作为VR开发人员的新资源. 该公司希望能够让更多的开发者能够在开发Vive VR耳机时制作自己的 ...

  8. 关于mysql表中有大文本limit慢的优化

    问题场景: 商品表goods,里面有几个大文本字段,类型用的MediumText,表中记录28万多.分页查询时用limit,在一般PC上需要12秒左右,这个数量级的数据不应该这么慢. 原因分析: 几个 ...

  9. java.util.prefs.Preferences

    java.util.prefs.Preferences Preferences类是在JDK1.4中首次提供的,可以用它来存放应用程序的配置数据,这里对Preferences类做点介绍. 1.Prefe ...

  10. 最大流算法之Dinic

    引言: 在最大流(一)中我们讨论了关于EK算法的原理与代码实现,此文将讨论与EK算法同级别复杂度(O(N^2M))的算法--Dinic算法. Dinic算法用到的思想是图的分层结构,通过BFS将每一个 ...