核心逻辑:流程管理,在各种系统中扮演很重要的地位,可以把设定好的流程放入系统中,规定好几个节点,只要所有节点都通过,就可以通过。

建立四张数据库表:

1.我们首先做一个新建流程页面 flow.php,先把节点做好

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script src="bootstrap/js/jquery-1.11.2.min.js"></script>
  7. </head>
  8. <body>
  9. <h2>管理员新建流程</h2>
  10. <div>请选择人员:
  11. <select id="users" name="users">
  12. <?php
  13. session_start();
  14. require_once "./DBDA.class.php";
  15. $db = new DBDA();
  16. $sql = "select * from users";
  17. $arr = $db->query($sql,0);
  18. foreach($arr as $v){
  19. echo "<option value='{$v[0]}'>{$v[2]}</option>";
  20. }
  21. ?>
  22. </select>
  23. <input type="button" value="添加" id="add" />
  24. </div>
  25. <br />
  26. <div>
  27. <?php
  28. if(empty($_SESSION["jd"])){
  29. echo "还未添加节点人员!";
  30. }else{
  31. $arr = $_SESSION["jd"];//数组形式存在
  32. foreach($arr as $k=>$v){//遍历索引(顺序)和名称
  33. $sql = "select name from users where uid='{$v}'";
  34. $name = $db->StrQuery($sql,0);//查一个(一维数组)
  35. echo "<div>{$k}--{$name}--<input type='button' value='删除' class='del' code='{$k}' /></div>";
  36. //根据索引删除相应节点人员
  37. }
  38. }
  39. ?>
  40. </div>
  41. <br />
  42. <div>请输入流程名称:
  43. <input type="text" id="name" />
  44. </div>
  45. <br />
  46. <input type="button" value="新建" id="addbtn" />
  47. </body>
  48. <script>      
          //添加节点按钮加点击
  49. $("#add").click(function(){
  50. var uid = $("#users").val();
  51. $.ajax({
  52. url:"flowchuli.php",
  53. type:"POST",
  54. data:{uid:uid,type:0},
  55. dataType:"TEXT",
  56. success:function(){
  57. window.location.href = "flow.php";
  58. }
  59. });
  60. })
          //给删除按钮加点击
  61. $(".del").click(function(){
  62. var k = $(this).attr("code");//获取索引属性
  63. $.ajax({
  64. url:"flowchuli.php",
  65. type:"POST",
  66. data:{k:k,type:1},
  67. dataType:"TEXT",
  68. success:function(){
  69. window.location.href = "flow.php";
  70. }
  71. });
  72. })
  73. //给保存按钮加点击
  74. $("#addbtn").click(function(){
  75. var name = $("#name").val();
  76. $.ajax({
  77. url:"flowchuli.php",
  78. type:"POST",
  79. data:{name:name,type:2},
  80. dataType:"TEXT",
  81. success:function(){
  82. alert("添加成功!");
  83. }
  84. });
  85. })
  86. </script>
  87. </html>

2.做新建流程页面的处理页面flowchuli.php

  1. <?php
  2. session_start();
  3. require_once "./DBDA.class.php";
  4. $db = new DBDA();
  5. $type = $_POST["type"];
  6. switch($type){
  7. case 0:
  8. $uid = $_POST["uid"];
  9. if(empty($_SESSION["jd"])){//暂存节点
  10. $arr = array($uid);//新造数组
  11. $_SESSION["jd"] = $arr;//存入session
  12. }else{
  13. $arr = $_SESSION["jd"];//取数组
  14. $arr[] = $uid;//追加变量到数组
  15. $_SESSION["jd"] = $arr;
  16. }
  17. break;
  18. case 1:
  19. $k = $_POST["k"];
  20. $arr = $_SESSION["jd"];
  21. unset($arr[$k]);
  22. $arr = array_values($arr);//重新对数组进行排序,有返回值接收
  23. $_SESSION["jd"] = $arr;
  24. break;
  25. case 2:
  26. $name = $_POST["name"];
  27. $code = time();//自动生成
  28. $sql = "insert into flow values('{$code}','{$name}')";//流程表
  29. $db->query($sql);
  30. //流程节点表
  31. $arr = $_SESSION["jd"];
  32. foreach($arr as $k=>$v){
  33. $sql = "insert into flowpath values(0,'{$code}','{$v}',{$k})";
  34. $db->query($sql);
  35. }
  36. break;
  37. }

效果如图:

点击选择节点人员可以从数据库调所有人员名单,现在把李四,马七和张三放入流程中,做一个请假流程:

注意:Code必须用varchar,不能用time,因为在上面用了时间戳

3.现在我们在做一个登陆用户页面flowlogin.php,提交请假流程的所有步骤:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script src="bootstrap/js/jquery-1.11.2.min.js"></script>
  7. <script src="bootstrap/js/bootstrap.min.js"></script>
  8. <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  9. </head>
  10. <style>
  11. .title{
  12. margin-left: 600px;
  13. margin-top: 150px;
  14. }
  15. .quanju{
  16. margin-left: 450px;
  17. margin-top: -180px;
  18. }
  19. .name,.pwd{
  20. max-width: 120px;
  21. }
  22. .yangshi1{
  23. margin-top: 200px;
  24. }
  25. </style>
  26. <body>
  27. <form class="form-horizontal" role="form">
  28. <h3 class="title">用户登录</h3>
  29. <div class="quanju">
  30. <div class="form-group yangshi1">
  31. <label for="firstname" class="col-sm-2 control-label">用户名:</label>
  32. <div class="col-sm-10">
  33. <input type="text" class="form-control name" id="uid" placeholder="请输入用户名">
  34. </div>
  35. </div>
  36. <div class="form-group yangshi2">
  37. <label for="lastname" class="col-sm-2 control-label">密码:</label>
  38. <div class="col-sm-10">
  39. <input type="text" class="form-control pwd" id="pwd" placeholder="请输入密码">
  40. </div>
  41. </div>
  42. <div class="form-group">
  43. <div class="col-sm-offset-2 col-sm-10">
  44. <div class="checkbox">
  45. <label>
  46. <input type="checkbox">
  47. 保存密码 </label>
  48. <label>
  49. <input type="checkbox">
  50. 下次自动登录 </label>
  51. </div>
  52. </div>
  53. </div>
  54. <div class="form-group">
  55. <div class="col-sm-offset-2 col-sm-10">
  56. <button type="button" id="login" class="btn btn-warning" value="登录" >
  57. 登录
  58. </button>
  59.  
  60. </div>
  61. </div>
  62. </div>
  63. </form>
  64. </body>
  65. <script>
          //登录按钮的点击事件
  66. $("#login").click(function(){
  67. var uid = $("#uid").val();
  68. var pwd = $("#pwd").val();
  69. $.ajax({
  70. type:"post",
  71. url:"flowloginchuli.php",
  72. data:{uid:uid,pwd:pwd},
  73. dataType:"TEXT",
  74. success:function(data){
  75. if(data.trim()=="OK"){
  76. window.location.href="flowmain.php";
  77. }else{
  78. alert("用户名或密码有误!");
  79. }
  80. }
  81. });
  82. })
  83. </script>
  84. </html>

4.登录后跳转的主页面flowmain.php

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h2>主页面</h2> <a href="flowfq.php">发起流程</a> <a href="flowsh.php">审核流程</a> </body> </html>

5.发起流程页面flow.php

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script src="bootstrap/js/jquery-1.11.2.min.js"></script>
  7. </head>
  8. <body>
  9. <h2>发起流程</h2>
  10. <form action="flowfqchuli.php" method="post">
  11. 请选择流程:
  12. <select name="flow">
  13. <?php
  14. require_once "./DBDA.class.php";
  15. $db = new DBDA();
  16. $sql = "select * from flow";
  17. $arr = $db->query($sql,0);
  18. foreach($arr as $v){
  19. echo "<option value='{$v[0]}'>{$v[1]}</option>";
  20. }
  21. ?>
  22. </select>
  23. <br />
  24. <br />
  25. 请输入内容:
  26. <textarea name="content"></textarea>
  27. <br />
  28. <br />
  29. <input type="submit" value="确定" />
  30. </form>
  31. </body>
  32. </html>

6.做发起流程的处理页面flowfq.php

  1. <?php
  2. session_start();
  3. require_once "./DBDA.class.php";
  4. $db = new DBDA();
  5.  
  6. $code = $_POST["flow"];
  7. $uid = $_SESSION["uid"];
  8. $content = $_POST["content"];
  9. $time = date("Y-m-d H:i:s");
  10. $sql = "insert into userflow values(0,'{$code}','{$uid}','{$content}',0,'{$time}',0)";
  11. $db->query($sql);
  12. header("location:flowmain.php");

7.审核页面flowsh.php

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script src="bootstrap/js/jquery-1.11.2.min.js"></script>
  7. <script src="bootstrap/js/bootstrap.min.js"></script>
  8. <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  9. </head>
  10. <body>
  11. <div><h2>审核页面</h2>
  12. <table class="table table-bordered">
  13. <thead>
  14. <tr>
  15. <th>流程代号</th>
  16. <th>发起人</th>
  17. <th>发起内容</th>
  18. <th>通过状态</th>
  19. <th>发起时间</th>
  20. <th>操作</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. <?php
  25. session_start();
  26. $uid = $_SESSION["uid"];
  27. require_once "./DBDA.class.php";
  28. $db = new DBDA();
  29. //相关子查询(用到父查询的数据)(父查询卡在某一位置)
  30. $sql = "select * from userflow a where towhere>=(select b.order from flowpath b where b.code=a.code and b.uid='{$uid}')";
  31. $arr = $db->query($sql,0);
  32. foreach($arr as $v){
  33. //$v[6];//流程走到的位置towhere
  34. //$v[1];//利用代号和session中存的name查询order
  35. $sql = "select order from flowpath where code='{$v[1]}' and uid='{$uid}'";
  36. $order = $db->StrQuery($sql,0);//该人员在流程中的次序
  37. $str = "";
  38. if($v[6]==$order){ //传主键值
  39. $str = "<a href='flowtgchuli.php?ids={$v[0]}'>通过</a>";
  40. }else{
  41. $str = "<span style='color:green'>已通过</span>";
  42. }
  43. echo "<tr>
  44. <th>{$v[1]}</th>
  45. <th>{$v[2]}</th>
  46. <th>{$v[3]}</th>
  47. <th>{$v[4]}</th>
  48. <th>{$v[5]}</th>
  49. <th>{$str}</th>
  50. </tr>";
  51. }
  52. ?>
  53. </tbody>
  54. </table>
  55. </div>
  56. </body>
  57. </html>

8.做审核页面的处理页面flowshchuli.php

  1. <?php
  2. session_start();
  3. $uid = $_SESSION["uid"];
  4. require_once "./DBDA.class.php";
  5. $db = new DBDA();
  6.  
  7. $ids = $_GET["ids"];
  8. $sql = "update userflow set towhere=towhere+1 where ids='{$ids}'";
  9. $db->query($sql);
  10. //判断;流程是否结束(使用相关子查询)
  11. $swc = "update userflow a set isok=1 where ids='{$ids}' towhere>=(select count(*) from flowpath b where b.code=a.code)";
  12. header("location:flowsh.php");

流程效果如图:

李四的页面:

点击通过后:

数据库:towhere变成1后结束流程

接着该马七:

然后是张三:

数据库:isok变成1后结束流程

PHP实现流程管理功能的更多相关文章

  1. 流程管理软件(BPM)功能简介

    易协流程管理系统实现将人为控制的业务活动,通过信息化手段实现系统控制,降低人为控制管理的风险以及促进企业的各项决策方针的顺利实施. 系统目标: 实现管理的规范化.制度化.程序化: 帮助企业将内控制度流 ...

  2. 熊乐:H3 BPM为加速企业流程管理提供源动力

    近日,在北京·金隅喜来登酒店,H3 BPM以"让天下没有难用的流程"为主题,正式发布H3 BPM10.0版本.全新的业务流程管理系统在易用性方面大大提升,并且全面支持Java与.N ...

  3. 从国内流程管理软件市场份额看中国BPM行业发展

    随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...

  4. RDIFramework.NET V3.3 Web版新增报表管理功能模块-重量级实用功能

    功能描述 在RDIFramework.NET V3.3 Web版本新增了全新的报表管理功能模块,非常实用的功能,重量级推荐.主要用于对日常常用的报表做定制展示.可以自动发布到模块(就可授权给指定资源访 ...

  5. 用svg做流程管理

    说起流程管理这个功能,如果没有个动态图配合显示,简直就是太没有客户体验感了.就比如说请假流程吧,流程走到哪一步了,流程走向过程中都那些人审批的,审批的结果等等,如果就来个列表,也不是说不行,就是觉得太 ...

  6. 网络Devops探索与实践 流程管理分析师

    https://mp.weixin.qq.com/s/OKLiDi78uB8ZkPG2kUVxvA 网络Devops探索与实践 王镇 鹅厂网事 2020-09-23  9月16日举办的2020 ODC ...

  7. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

  8. 解析大型.NET ERP系统 通用附件管理功能

    大型系统具备一个通用的附件管理功能,对于单据中无法清晰表达的字段,用一个附件图片或附件文档表示是最好的方法了.比如物料清单附加一张CAD图纸,销售订单评审功能中附加客户的各种表格,通用附件功能对系统起 ...

  9. C#开发微信门户及应用(25)-微信企业号的客户端管理功能

    我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理.标签管理.人员管理.以及消息的发送等功能,其中 ...

随机推荐

  1. 从Java的角度简单修复Cookie越权漏洞

    技术实在是有限,讲解cookie越权的时候可能有点简单和粗糙.这里就简单记录学习下. 首先自己写一段存在漏洞的代码code: sendCookie.java package cookie; impor ...

  2. webpack入门(一)webpack的动机 ---前端专业英语

    记得某次考试,出国N年老师出的卷子全是英语,坑的英语不好的我们不要不要的.幸亏上了专业英语课.最重要的是专业英语对于我们很重要,比如webpack,一堆博客都是几小时入门,如何会用webpack,当你 ...

  3. The 2018 ACM-ICPC Asia Qingdao Regional Contest

    The 2018 ACM-ICPC Asia Qingdao Regional Contest 青岛总体来说只会3题 C #include<bits/stdc++.h> using nam ...

  4. 【CF600E】Lomsat gelral

    题目大意:给定一棵 N 个节点的有根树,1 号节点是树的根节点,每个节点有一个颜色.求对于每个节点来说,能够支配整棵子树的颜色之和是多少.支配的定义为对于以 i 为根的子树,该颜色出现的次数不小于任何 ...

  5. ASP.NET MVC计划任务实现方法(定时执行某个功能)

    系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...

  6. ERRORS: ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

    Ubuntu下,运行django项目的时候失败,报错: (env36) root@JD:~/xueyiwang# python manage.py runserver 0.0.0.0:8000 Per ...

  7. 安卓和java开发环境的安装

    java配置安卓需要,sdk,jdk(java),adt,eclipse 对于jdk的配置和安装: 1 卸载原来的jdk,重新配置环境变量只需要:在系统变量中把新的jdkJ安装路径写到“JAVA_HO ...

  8. HTML学习笔记Day1

    一.网站建设流程 1.注册域名(网址) 2.租用空间(服务器) 3.网站建设 (1)确定网站主题(项目) (2)搜集材料(项目) (3)规划网站(UI) (4)制作页面(前端--后端) 4.网络推广 ...

  9. Go GraphQL初学者教程

    Go GraphQL初学者教程 https://tutorialedge.net/golang/go-graphql-beginners-tutorial/ https://tutorialedge. ...

  10. Spring Boot项目中的字体文件问题_Failed to decode downloaded font

    1.问题:字体文件加载失败,本来应该是“X”号,现在只有一个小方块 2.原因:问题是Maven正在过滤字体文件并破坏它们. <resource> <filtering>true ...