zoukankan      html  css  js  c++  java
  • 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是取不到的

      

     

  • 相关阅读:
    spring security 单一账户多地方登陆提醒, ajax 拦截器 Interceptor
    Maven 项目打包发布
    jQuery使用on()绑定动态生成元素的事件无效
    ie下li标签中span加float:right不换行问题解决方案
    IE使用多彩文档上传数据库报错
    对象数组中删除指定元素
    jquery 文本框内容清空
    SQL删除重复数据方法
    静态数据的初始化
    java变量初始化顺序
  • 原文地址:https://www.cnblogs.com/xiaodouding/p/6605265.html
Copyright © 2011-2022 走看看