PHP之流程的控制

   在一个公司中,员工肯定会有高层、中层和普通员工的,这样如果在某个公司员工遇到某种问题,需要请假、或者提一些请求的时候,就会需要去申请,申请的时候有的是可以直接和上级申请的,有时比较重要的事情,是要经过层层申请,才可以得到解决的,这就会让我们想到了流程,今天写的就是一个简单的流程控制,设计的表中人员可能比较不那么精确,但是逻辑是一样的。

   这里我是在数据库中设计了四张表格的,分别是 users flowpath liucheng  userflow

  上面显示的就是我所用到的四张表格,现在要做的就是把员工的姓名都显示出来,可供选择到底要经过哪几个人的同意才可以把这件事做成,再就是 还要输入我们所要申请的事情,最后就是保存上交,让上级同意才可以

  首先我要建主页main.php 把我所需要的内容显示出来 ,然后再把里面的按钮功能显示出来即可,如果是比较简单的内容我就直接内嵌php了,其他的选用的是ajax来调用,看起来可能会比较清晰一些 ps:这当然是自我感觉了 哈哈哈

 毫无疑问,肯定会用到jquery  所以需要先调用jquery包

<script src="jquery-3.1.1.min.js"> </script>

 主页最开始还是要把员工的姓名都显示出来 这样方便选择节点人物 我用的是内嵌php的方法,这一步是最基础的,肯定都会看明白,这里就不详细描述了

 1 <h4>选择节点人员</h4>
 2 <div>
 3     <select id="user">
 4         <?php
 5         session_start();
 6         include("DADB.class.php");
 7         $db=new DADB();
 8         $sql="select * from users";
 9         $arr=$db->Query($sql);
10         foreach($arr as $v)
11         {
12             echo"<option value=‘{$v[0]}‘>{$v[2]}</option>";
13         }
14         ?>
15
16     </select>
17 </div><br/>

接下来是添加节点的按钮了

<div><input type="button" value="添加节点" id="jd"/></div>

既然按钮已经有了,随后我们就会想到的是按钮的功能:就是要把上面选择的节点人员添加到按钮下方

//添加节点点击事件

    $("#jd").click(function(){
        var uid = $("#user").val();   //点击添加节点,是要把select里面的value值添加过来,那么我们就要先取出它的value值
        $.ajax({
            url:"chuli.php",
            data:{uid:uid},
            type:"POST",
            dataType:"TEXT",
            success: function(data){
                window.location.href="main.php"; //刷新页面即可
            }
        });
    })

   处理页面就是类似于添加购物车的功能,首先我们会想到现在节点里面有内容吗,如果没有的话,我们需要先建一个数组,然后再把现有的内容用session存一下

 1 <?php
 2 session_start(); //首先要开启session
 3
 4 $uid = $_POST["uid"];
 5 if(empty($_SESSION["user"]))//如果节点里面没有内容 需要先建一个数组,然后把uid放到里面 存一下
 6 {
 7     $arr = array($uid);
 8     $_SESSION["user"] = $arr;
 9 }
10 else            //如果里面已经有内容了,那么就把数组里面的内容存一下
11 {
12     $arr = $_SESSION["user"];
13     array_push($arr,$uid);
14     $_SESSION["user"] = $arr;
15 }

  处理页面写好之后,再回到要添加节点的地方,这时如果节点不为空的话,我们就要把添加的节点显示出来,如果为空就什么也不显示了(这里可以不用考虑),

<?php
if(!empty($_SESSION["user"]))
{
    $attr = $_SESSION["user"];
    foreach($attr as $k=>$v)
    {
        $sname = "select name from users where uid=‘{$v}‘";
        $name = $db->StrQuery($sname);
        echo "<div>{$k}--{$name}--<input type=‘button‘ value=‘删除‘ key=‘{$k}‘ class=‘del‘ /></div>";  //这里运用索引会比较简单一些,索引我们的可以 用的是索引$k
    }
}
?>

如图所示,就是点击添加节点后的效果呢,看到删除按钮了,那么接下来就是点击删除按钮的方法了,这里我用的同样还是ajax

<div><input type="text" id="nr"/></div>
 1 //删除节点的点击事件
 2     $(".del").click(function(){
 3         var key=$(this).attr("key"); //删除里面取key值写起来是非常方便的
 4         $.ajax({
 5             url:"shanchu.php",
 6             data:{key:key},
 7             type:"POST",
 8             dataType:"TEXT",
 9             success:function(aa)
10             {
11                 window.location.href="main.php";
12             }
13         })
14     })

下面是删除页面的代码:

<?php
session_start();
$arr=$_SESSION["user"];  //把之前的节点内容存一下 给$arr
$key=$_POST["key"];  //取出索引值

unset($arr[$key]);  //把选中的删除

$arr = array_values($arr); //把现有的节点的顺序重新排

$_SESSION["user"]=$arr;

 删除就写完了,点击删除就可以把添加的某条内容删除,然后我们就要考虑content了 输入流程名称 最后把添加的节点和写入的流程名称都保存

1 <div>请输入流程名称:<input type="text" id="nr" /></div>
2 <br />
3 <input type="button" value="保存" id="btn" />
 1 //保存按钮的点击事件
 2    $("#btn").click(function(){
 3         var nr=$("#nr").val();
 4         $.ajax({
 5             url:"baocun.php",
 6             data:{nr:nr},
 7             type:"POST",
 8             dataType:"TEXT",
 9             success:function(bc){
10                 alert("保存成功");
11
12             }
13
14         })
15     })
 1 <?php
 2 session_start();
 3 include("DADB.class.php");
 4 $db=new DADB();
 5 $nr=$_POST["nr"];
 6 $code=time();
 7 $sql="insert into liucheng VALUES (‘{$code}‘,‘{$nr}‘)"; //在liucheng表中添加内容
 8 $db->Query($sql,0);
 9
10 //在liucheng表中添加完之后还要保存节点  节点是在flowpath表中的
11
12 $arr = $_SESSION["user"];
13 foreach($arr as $k=>$v)
14 {
15     $sqn="insert into flowpath VALUES (‘‘,‘{$code}‘,‘{$v}‘,‘{$k}‘)";
16     $db->Query($sqn,0);
17 }

  写到这里就可以保存了,点击保存后,进数据库刷新就会显示出你所保存的内容了

  申请提交后,我们就会去考虑,这个申请由谁来审核呢,那就涉及到需要上级登录后是否给通过了,因为登录之前已经写过很多次了,我这里就不再写了,用简单的一个伪登录就可以了

<body>
<?php
session_start();
$_SESSION["user"]="zhangsan"; //这里的用户名可以改为数据库中任意的 是为了查看是否已经审核,或者审核是否通过
?>
</body>

现在我们就要发起流程了

 1 <h4>请选择发起的流程</h4>
 2 <select id="liucheng">
 3 <?php
 4 include("DADB.class.php");
 5 $db=new DADB();
 6 $sql="select * from liucheng";
 7 $arr=$db->Query($sql);
 8 foreach($arr as $v)
 9 {
10    echo"<option value=‘{$v[0]}‘>{$v[1]}</option>";
11 }
12 ?>
13 </select><br/>
14
15 <textarea rows="5" cols="30" id="text"></textarea>
16
17 <input type="button" value="发起" id="faqi"/>

看到发起的按钮,本能的就会想到要给发起按钮一个点击事件,那么有点击事件就会有处理页面 我们用到的是chuli1.php 就是为了给userflow表添加内容

 1 <script type="text/javascript">
 2     $("#faqi").click(function(){
 3        var  lc = $("#liucheng").val();
 4        var text = $("#text").val();
 5         $.ajax({
 6             url:"chuli1.php",
 7             data:{lc:lc,text:text},
 8             type:"POST",
 9             dataType:"TEXT",
10             success:function(data){
11                 alert("发起成功");
12             }
13         })
14     })
15 </script>
<?php
session_start();
$uid=$_SESSION["user"]; //在伪登录页面存的
$code=$_POST["lc"];   //从发起页面传递过来的
$content=$_POST["text"];
$time=date("Y-m-d H:m:s");
include("DADB.class.php");
$db=new DADB();
$sql="insert into userflow VALUES (‘‘,‘{$code}‘,‘{$uid}‘,‘{$content}‘,0,‘{$time}‘,0)"; //给userflow添加内容
$db->Query($sql,0);

发起完成之后就要进入审核页面了

 1 <h1>审核页面</h1>
 2 <table width="100%" border="1" cellpadding="0" cellspacing="0">
 3     <tr>
 4         <td>流程代号</td>
 5         <td>发起者</td>
 6         <td>发起内容</td>
 7         <td>是否结束</td>
 8         <td>发起时间</td>
 9         <td>操作</td>
10     </tr>
11     <?php
12     session_start();
13
14     $uid=$_SESSION["uid"];
15     echo $uid;
16     include("DADB.class.php");
17     $db=new DADB();
18     //查找登录者参与的所有流程
19     $sql = "select * from userflow where code in(select code from flowpath where uids=‘{$uid}‘)";
20     $arr = $db->Query($sql);
21     //显示在页面
22     foreach($arr as $v)
23     {
24          $dh=$v[1];//查出代号
25         $where=$v[6]; //查出流程到哪里了
26
27         $sqn="select orders from flowpath where code=‘{$dh}‘ and uids=‘{$uid}‘";
28         $orders=$db->StrQuery($sqn);//查出在流程中的次序
29
30         if($where>=$orders)
31         {
32             $caozuo = "";
33             if($where==$orders)
34             {
35                 $caozuo="<a href=‘tongguo.php?code={$v[0]}‘>通过</a>";
36             }
37             else
38             {
39                 $caozuo="<span style=‘background-color:green;color:white‘>已通过</span>";
40             }
41             echo "<tr>
42         <td>{$v[1]}</td>
43         <td>{$v[2]}</td>
44         <td>{$v[3]}</td>
45         <td>{$v[4]}</td>
46         <td>{$v[5]}</td>
47         <td>{$caozuo}</td>
48     </tr>";
49         }
50
51     }
52     ?>
53
54 </table>

下面就是通过页面了,

<?php
session_start();
include("../fengzhuang/DBDA.class.php");
$db = new DBDA();

//流程往下走
$code = $_GET["code"];
$sql = "update userflow set towhere=towhere+1 where ids=‘{$code}‘";
$db->Query($sql,0);

//判断流程是否结束
$sql = "select * from userflow where ids=‘{$code}‘";
$arr = $db->Query($sql);

$lcdh = $arr[0][1]; //流程代号
$tw = $arr[0][6]; //流程走到哪

$sql = "select count(*) from flowpath where code=‘{$lcdh}‘";
$count = $db->StrQuery($sql); //该流程节点人数
if($tw>=$count)
{
    $sql = "update userflow set isok=1 where ids=‘{$code}‘";
    $db->Query($sql,0);
}

header("location:shenhe.php");

要注意的是:如果用伪登录,那么要先运行一下,然后再运行其他页面,不然uid是取不到的

  

 

时间: 2024-10-13 15:37:49

PHP之流程的控制的相关文章

程序流程的控制、数组和方法

本周主要3个点是程序流程控制 .数组和方法 程序流程控制主要是选择语句和循环语句:其中选择语句是分为 if语句 单分支.双分支.多分支:if语句中又可以嵌套if语句这就是if语句的嵌套格式为: if(条件1) {if(条件2){语句1} else{语句2} } else{ if(条件3){语句3} else{语句4} },  还有是switch语句格式switch(算数表达式){case 常量表达是式1: 语句块1:break; case常量表达式2:语句块2:break; default :语

activiti 流程发起人控制

最近做activiti流程发起人的控制,最开始的想法是新建一张表 ,通过控制流程定义id与发起人id进行控制,如果这样每次发布新的流程就必须 重新设置流程发起人,因为通过流程定义不能获取流程模型id,虽然很不合理,但是确实获取不到流程模型id,最后问了同事,可以通过process的key.以及 defination的key 来进行控制,流程定义的key很好获取,可以通过processDef.getKey()获取,但是流程模型的key不好获取,数据库里的key并不是流程模型的key 流程模型的ke

(2.3)DDL增强功能-流程化控制与动态sql

1.流程控制 在T-SQL中,与流程控制语句相关的关键字有8个: BEGIN...END BREAK GOTO CONTINUE IF...ELSE WHILE RETURN WAITFOR 其实还可以加一个,那就是GO,下面我们一个一个来解释说明意思吧 (1)GO:批处理提交语句,相当于把GO之前的所有东西都提交给系统了(平常看好像不用它也没事,但是在sqlcmd登录后dos界面使用批处理就一定要用),该销毁的销毁该回收的回收等等,演示如图 (2)BEGIN ... END 这个其实就是逻辑块

IT兄弟连 Java语法教程 流程控制语句 控制循环结构1

Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序流程控制的可读性,但降低了程序流程控制的灵活性.为了弥补这种不足,Java提供了continue和break来控制循环结构.除此之外,return可以结束整个方法,当然也就结束了一次循环. 使用break结束循环 某些时候需要在某种条件出现时强行终止循环,而不是等到循环条件为false时才退出循环.此时,可以使用break来完成这个功能.break用于完全结束一个循环,跳出循环体.不管是哪种循环,一旦在循环体中遇到break,系

swift-02代码流程的控制

// //  main.swift //  02-语句 // //  Created by wanghy on 15/8/9. //  Copyright (c) 2015年 wanghy. All rights reserved. // import Foundation //1. //使用分支循环控制代码的流程 //分支: if     if-else    switch //循环: for   while  do-while  for-in //真假:用BOOL推断真假.取值为true 

IT兄弟连 Java语法教程 流程控制语句 控制循环结构2

使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循环本身.如下程序示范了continue的用法. public class ContinueDemo{ public static void main(String[] args){ for(int i = 0; i<3; i++){ System.out.println("i的值是"

程序流程的控制之条件分支(Delphi)

if语句主要来检测一个条件,并根据这个条件是True或者False来执行一段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var   I: Integer;   FileGood: Boolean; begin   FileGood := True;   if FileGood then     { 简洁的写法,判断FileGood是否为True}     ShowMessage('True');   { 上面的写法等同于下面}   if FileG

程序流程控制

流程控制是所有编程语言的基础部分,在Java自然也不例外. 在程序设计时,我们经常需要改变程序的控制流程,也就是语句的执行顺序.有三种基本技术可以改变流程的控制流程: 1.调用方法.调用方法将导致控制流程离开当前方法,转移到被调用的方法. 2.选择.Java中有两种做出选择的机制:if/else语句和switch语句.三目去处符也可以用于选择.但是它通常只是if/else的简写版本. 3.循环.Java中有三种循环语句:for循环.while循环.do/while循环. 选择语句: if语句:一

CoreJavaE10V1P3.8 第3章 Java的基本编程结构-3.8 控制流程(Control Flow)

通过使用条件语句.循环语句可以实现流程的控制. 3.8.1 块作用域(Block Scope) 块(Block)就是由一对花括号包围起来的部分.他指定了一个变量的生存范围,与一个方法的操作范围. Java中不允许在嵌套块中重复定义变量. 3.8.2 条件语句 if (condition) statement { statement 1 statement 2 . . . } if (yourSales >= target) { performance = "Satisfactory&quo