php流程管理功能实现的案例
核心逻辑:流程管理,在各种系统中扮演很重要的地位,可以把设定好的流程放入系统中,规定好几个节点,只要所有节点都通过,就可以通过。
建立四张数据库表:
1.我们首先做一个新建流程页面 flow.php,先把节点做好
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> </head> <body> <h2>管理员新建流程</h2> <p><select id="users" name="users"> <? "./DBDA.class.php" = = "select * from users" = ->query(,0( "<option value='{[0]}'>{[2]}</option>"?> </select> <input type="button" value="添加" id="add" /> </p> <br /> <p> <?((["jd" "还未添加节点人员!" = ["jd"]; ( =>){ = "select name from users where uid='{}'" = ->StrQuery(,0); "<p>{}--{}--<input type='button' value='删除' class='del' code='{}' /></p>"?> </p> <br /> <p><input type="text" id="name" /> </p> <br /> <input type="button" value="新建" id="addbtn" /> </body> <script> "#add").click( uid = $("#users")..:"flowchuli.php",:"POST",:{uid:uid,type:0},:"TEXT",:.location.href = "flow.php"".del").click( k = $(this).attr("code"); $.:"flowchuli.php",:"POST",:{k:k,type:1},:"TEXT",:.location.href = "flow.php" $("#addbtn").click( name = $("#name")..:"flowchuli.php",:"POST",:{name:name,type:2},:"TEXT",:"添加成功!"</script> </html>
2.做新建流程页面的处理页面flowchuli.php
<?phpsession_start();require_once "./DBDA.class.php";$db = new DBDA();$type = $_POST["type"];switch($type){ case 0: $uid = $_POST["uid"]; if(empty($_SESSION["jd"])){//暂存节点 $arr = array($uid);//新造数组 $_SESSION["jd"] = $arr;//存入session }else{ $arr = $_SESSION["jd"];//取数组 $arr[] = $uid;//追加变量到数组 $_SESSION["jd"] = $arr; } break; case 1: $k = $_POST["k"]; $arr = $_SESSION["jd"]; unset($arr[$k]); $arr = array_values($arr);//重新对数组进行排序,有返回值接收 $_SESSION["jd"] = $arr; break; case 2: $name = $_POST["name"]; $code = time();//自动生成 $sql = "insert into flow values('{$code}','{$name}')";//流程表 $db->query($sql); //流程节点表 $arr = $_SESSION["jd"]; foreach($arr as $k=>$v){ $sql = "insert into flowpath values(0,'{$code}','{$v}',{$k})"; $db->query($sql); } break; }
效果如图:
点击选择节点人员可以从数据库调所有人员名单,现在把李四,马七和张三放入流程中,做一个请假流程:
注意:Code必须用varchar,不能用time,因为在上面用了时间戳
3.现在我们在做一个登陆用户页面flowlogin.php,提交请假流程的所有步骤:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/> </head> <style> .-left:-top:.-left:-top: -.name,.-width:.-top:</style> <body> <form ="form-horizontal" role="form"> <h3 ="title">用户登录</h3> <p ="quanju"> <p ="form-group yangshi1"> <label ="firstname" ="col-sm-2 control-label">用户名:</label> <p ="col-sm-10"> <input type="text" ="form-control name" id="uid" placeholder="请输入用户名"> </p> </p> <p ="form-group yangshi2"> <label ="lastname" ="col-sm-2 control-label">密码:</label> <p ="col-sm-10"> <input type="text" ="form-control pwd" id="pwd" placeholder="请输入密码"> </p> </p> <p ="form-group"> <p ="col-sm-offset-2 col-sm-10"> <p ="checkbox"> <label> <input type="checkbox"></label> <label> <input type="checkbox"></label> </p> </p> </p> <p ="form-group"> <p ="col-sm-offset-2 col-sm-10"> <button type="button" id="login" ="btn btn-warning" value="登录" ></button> </p> </p> </p> </form> </body> <script> "#login").click( uid = $("#uid"). pwd = $("#pwd")..:"post",:"flowloginchuli.php",:{uid:uid,pwd:pwd},:"TEXT",:(data.()=="OK".location.href="flowmain.php""用户名或密码有误!"</script> </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
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> </head> <body> <h2>发起流程</h2> <form action="flowfqchuli.php" method="post"> 请选择流程: <select name="flow"> <?php require_once "./DBDA.class.php"; $db = new DBDA(); $sql = "select * from flow"; $arr = $db->query($sql,0); foreach($arr as $v){ echo "<option value='{$v[0]}'>{$v[1]}</option>"; } ?> </select> <br /> <br /> 请输入内容: <textarea name="content"></textarea> <br /> <br /> <input type="submit" value="确定" /> </form> </body> </html>
6.做发起流程的处理页面flowfq.php
<?phpsession_start();require_once "./DBDA.class.php";$db = new DBDA(); $code = $_POST["flow"]; $uid = $_SESSION["uid"];$content = $_POST["content"]; $time = date("Y-m-d H:i:s"); $sql = "insert into userflow values(0,'{$code}','{$uid}','{$content}',0,'{$time}',0)";$db->query($sql);header("location:flowmain.php");
7.审核页面flowsh.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/> </head> <body> <p><h2>审核页面</h2> <table class="table table-bordered"> <thead> <tr> <th>流程代号</th> <th>发起人</th> <th>发起内容</th> <th>通过状态</th> <th>发起时间</th> <th>操作</th> </tr> </thead> <tbody> <?php session_start(); $uid = $_SESSION["uid"]; require_once "./DBDA.class.php"; $db = new DBDA(); //相关子查询(用到父查询的数据)(父查询卡在某一位置) $sql = "select * from userflow a where towhere>=(select b.order from flowpath b where b.code=a.code and b.uid='{$uid}')"; $arr = $db->query($sql,0); foreach($arr as $v){ //$v[6];//流程走到的位置towhere //$v[1];//利用代号和session中存的name查询order $sql = "select order from flowpath where code='{$v[1]}' and uid='{$uid}'"; $order = $db->StrQuery($sql,0);//该人员在流程中的次序 $str = ""; if($v[6]==$order){ //传主键值 $str = "<a href='flowtgchuli.php?ids={$v[0]}'>通过</a>"; }else{ $str = "<span style='color:green'>已通过</span>"; } echo "<tr> <th>{$v[1]}</th> <th>{$v[2]}</th> <th>{$v[3]}</th> <th>{$v[4]}</th> <th>{$v[5]}</th> <th>{$str}</th> </tr>"; } ?> </tbody> </table> </p> </body> </html>
8.做审核页面的处理页面flowshchuli.php
<?php session_start(); $uid = $_SESSION["uid"];require_once "./DBDA.class.php"; $db = new DBDA();$ids = $_GET["ids"]; $sql = "update userflow set towhere=towhere+1 where ids='{$ids}'"; $db->query($sql);//判断;流程是否结束(使用相关子查询) $swc = "update userflow a set isok=1 where ids='{$ids}' towhere>=(select count(*) from flowpath b where b.code=a.code)";header("location:flowsh.php");
流程效果如图:
李四的页面:
点击通过后:
数据库:towhere变成1后结束流程
接着该马七:
然后是张三:
数据库:isok变成1后结束流程
Atas ialah kandungan terperinci php流程管理功能实现的案例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
