首頁 >後端開發 >php教程 >PHP之流程的控製程式碼詳解(圖文)

PHP之流程的控製程式碼詳解(圖文)

黄舟
黄舟原創
2017-03-24 10:18:332423瀏覽

   在一個公司中,員工肯定會有高層、中階和普通員工的,這樣如果在某個公司員工遇到某種問題,需要請假、或者提一些請求的時候,就會需要去申請,申請的時候有的是可以直接和上級申請的,有時比較重要的事情,是要經過層層申請,才可以得到解決的,這就會讓我們想到了流程,今天寫的就是一個簡單的流程控制,設計的表中人員可能比較不那麼精確,但是邏輯是一樣的。

   這裡我是在資料庫中設計了四張表格的,分別是users flowpath liucheng  userflow

  上面顯示的就是我所用到的四張表格,現在要做的就是把員工的姓名都顯示出來,可供選擇到底要經過哪幾個人的同意才可以把這件事做成,再就是還要輸入我們所要申請的事情,最後就是保存交,讓上級同意才可以

  首先我要建立首頁main.php 把我所需要的內容顯示出來,然後再把裡面的按鈕功能顯示出來即可,如果是比較簡單的內容我就直接內嵌php了,其他的選用的是ajax來調用,看起來可能會比較清晰一些ps:這當然是自我感覺了哈哈哈

# 毫無疑問,一定會用到jquery  所以需要先呼叫jquery套件

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

 首頁最開始還是要把員工的姓名都顯示出來這樣方便選擇節點人物我用的是內嵌php的方法,這一步是最基礎的,一定都會看明白,這裡就不詳細描述了

#
<h4>选择节点人员</h4>
<div>
    <select id="user">
        <?php
        session_start();
        include("DADB.class.php");
        $db=new DADB();
        $sql="select * from users";
        $arr=$db->Query($sql);
        foreach($arr as $v)
        {
            echo"<option value=&#39;{$v[0]}&#39;>{$v[2]}</option>";
        }
        ?>

    </select>
</div><br/>

接下來是新增節點的按鈕了

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

既然按鈕已經有了,隨後我們就會想到的是按鈕的功能:就是要把上面選取的節點人員加入按鈕下方

//添加节点点击事件

    $("#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存一下##

<?php
session_start(); //首先要开启session

$uid = $_POST["uid"];
if(empty($_SESSION["user"]))//如果节点里面没有内容 需要先建一个数组,然后把uid放到里面 存一下
{
    $arr = array($uid);
    $_SESSION["user"] = $arr;
}
else            //如果里面已经有内容了,那么就把数组里面的内容存一下
{
    $arr = $_SESSION["user"];
    array_push($arr,$uid);
    $_SESSION["user"] = $arr;
}


 

  處理頁面寫好之後,再回到要新增節點的地方,這時如果節點不為空的話,我們就要把新增的節點顯示出來,如果為空就什麼也不顯示了(這裡可以不用考慮),

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

如圖所示,就是點擊添加節點後面的效果呢,看到刪除按鈕了,那麼接下來就是點擊刪除按鈕的方法了,這裡我用的同樣還是ajax

<p><input type="text" id="nr"/></p>
//删除节点的点击事件
    $(".del").click(function(){
        var key=$(this).attr("key"); //删除里面取key值写起来是非常方便的
        $.ajax({
            url:"shanchu.php",
            data:{key:key},
            type:"POST",
            dataType:"TEXT",
            success:function(aa)
            {
                window.location.href="main.php";
            }
        })
    })

下面是刪除頁面的程式碼:

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

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

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

$_SESSION["user"]=$arr;

 刪除就寫完了,點選刪除就可以把新增的某條內容刪除,然後我們就要考慮content了輸入流程名稱最後把新增的節點和寫入的流程名稱都保存

<div>请输入流程名称:<input type="text" id="nr" /></div>
2 <br />
3 <input type="button" value="保存" id="btn" />
//保存按钮的点击事件
   $("#btn").click(function(){
        var nr=$("#nr").val();  
        $.ajax({
            url:"baocun.php",
            data:{nr:nr},
            type:"POST",
            dataType:"TEXT",
            success:function(bc){
                alert("保存成功");

            }

        })
    })
<?php
session_start();
include("DADB.class.php");
$db=new DADB();
$nr=$_POST["nr"];
$code=time();
$sql="insert into liucheng VALUES (&#39;{$code}&#39;,&#39;{$nr}&#39;)"; //在liucheng表中添加内容
$db->Query($sql,0);

//在liucheng表中添加完之后还要保存节点  节点是在flowpath表中的

$arr = $_SESSION["user"];
foreach($arr as $k=>$v)
{
    $sqn="insert into flowpath VALUES (&#39;&#39;,&#39;{$code}&#39;,&#39;{$v}&#39;,&#39;{$k}&#39;)";
    $db->Query($sqn,0);
}

  寫到這裡就可以儲存了,點擊儲存後,進資料庫刷新就會顯示出你所儲存的內容了

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

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

现在我们就要发起流程了

<h4>请选择发起的流程</h4>
<select id="liucheng">
<?php
include("DADB.class.php");
$db=new DADB();
$sql="select * from liucheng";
$arr=$db->Query($sql);
foreach($arr as $v)
{
   echo"<option value=&#39;{$v[0]}&#39;>{$v[1]}</option>";
}
?>
</select><br/>

<textarea rows="5" cols="30" id="text"></textarea>

<input type="button" value="发起" id="faqi"/>

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

<script type="text/javascript">
    $("#faqi").click(function(){
       var  lc = $("#liucheng").val();
       var text = $("#text").val();
        $.ajax({
            url:"chuli1.php",
            data:{lc:lc,text:text},
            type:"POST",
            dataType:"TEXT",
            success:function(data){
                alert("发起成功");
            }
        })
    })
</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 (&#39;&#39;,&#39;{$code}&#39;,&#39;{$uid}&#39;,&#39;{$content}&#39;,0,&#39;{$time}&#39;,0)"; //给userflow添加内容
$db->Query($sql,0);

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

<h1>审核页面</h1>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>流程代号</td>
        <td>发起者</td>
        <td>发起内容</td>
        <td>是否结束</td>
        <td>发起时间</td>
        <td>操作</td>
    </tr>
    <?php
    session_start();

    $uid=$_SESSION["uid"];
    echo $uid;
    include("DADB.class.php");
    $db=new DADB();
    //查找登录者参与的所有流程
    $sql = "select * from userflow where code in(select code from flowpath where uids=&#39;{$uid}&#39;)";
    $arr = $db->Query($sql);
    //显示在页面
    foreach($arr as $v)
    {
         $dh=$v[1];//查出代号
        $where=$v[6]; //查出流程到哪里了

        $sqn="select orders from flowpath where code=&#39;{$dh}&#39; and uids=&#39;{$uid}&#39;";
        $orders=$db->StrQuery($sqn);//查出在流程中的次序

        if($where>=$orders)
        {
            $caozuo = "";
            if($where==$orders)
            {
                $caozuo="<a href=&#39;tongguo.php?code={$v[0]}&#39;>通过</a>";
            }
            else
            {
                $caozuo="<span style=&#39;background-color:green;color:white&#39;>已通过</span>";
            }
            echo "<tr>
        <td>{$v[1]}</td>
        <td>{$v[2]}</td>
        <td>{$v[3]}</td>
        <td>{$v[4]}</td>
        <td>{$v[5]}</td>
        <td>{$caozuo}</td>
    </tr>";
        }

    }
    ?>

</table>

下面就是通过页面了,

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

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

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

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

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


header("location:shenhe.php");

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

以上是PHP之流程的控製程式碼詳解(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn