discuz学习笔记:以easyUI DataGrid为前台进行数据库增查删改操作
编辑和新增记录的过程,本来想从前台直接向discuz后台传送json格式表单数据,发现discuz的安全过滤十分严格,直接屏蔽了。所以只能以普通方式提交表单数据。
gtj_crud.php
<?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * * $Id: bgtj.php cuibq $ */ define("APPTYPEID", 101); define("CURSCRIPT", "bgtj"); require "./source/class/class_core.php"; $discuz = C::app(); $discuz->reject_robot(); $modarray = array("bgtj", "bgtj_crud"); $mod = getgpc("mod"); $mod = (empty($mod) || !in_array($mod, $modarray)) ? "error" : $mod; $discuz->init(); define("CURMODULE", $mod); require DISCUZ_ROOT."./source/module/cat/bgtj_pub_crud.php"; //include_once template("cat/bgtj_publish"); ?>
sourceclass able able_bgtj.php
<?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * 工业产品表 * $Id: table_gycp.php */ if(!defined("IN_DISCUZ")) { exit("Access Denied"); } class table_bgtj extends discuz_table { public function __construct() { $this->_table = "bgtj"; $this->_pk = "id"; parent::__construct(); } public function fetch_all_by_displayorder() { return DB::fetch_all("SELECT * FROM %t ORDER BY id ASC", array($this->_table), $this->_pk); } public function fetch_all_by_sql($start, $limit) { return DB::fetch_all("SELECT * FROM %t ORDER BY id ASC".DB::limit($start, $limit), array($this->_table), $this->_pk); } //返回json格式数据 public function fetch_json_by_sql($start, $limit) { $query = DB::query("SELECT * FROM %t ORDER BY id ASC".DB::limit($start, $limit), array($this->_table), $this->_pk); $result = array(); // 记录数量 $row = DB::fetch_first("SELECT count(*) as cnt FROM %t ", array($this->_table), $this->_pk); //所有记录数量 $result["total"] = intval($row["cnt"]); while($data = DB::fetch($query)){ $list[] = array( "ID" => $data["ID"], "XH" => $data["XH"], "WT" => urlencode($data["WT"]), "DA" => urlencode($data["DA"]) ); } $result["rows"] = $list; return urldecode(json_encode($result)); } //public function fetch_by_id_username($id, $username, $adminid = 1) { //return DB::fetch_first("SELECT * FROM %t WHERE id=%d", array($this->_table, $id, $adminid, $username)); //} // 根据id删除一条记录 public function delete_by_id($id) { $delcnt = DB::delete($this->_table, DB::field($this->_pk, $id)); // 返回删除记录数量,若为0表示删除失败 if ($delcnt == 0) { $arr = array ("msg" => "wrong!", "success" => false); } else { $arr = array ("msg" => "ok!", "success" => true); } return urldecode(json_encode($arr)); } // 根据id 编辑一条数据 public function update_by_id($ID, $form_data) { $ret = DB::update($this->_table, $form_data, "ID=$ID"); $logfile = fopen("log.txt", "w") or die("Unable to open file!"); fwrite($logfile, "ret:".$ret); fclose($logfile); if ($ret == 0) { $arr = array ("msg" => "wrong!", "success" => false); } else { $arr = array ("msg" => "ok!", "success" => true); } return urldecode(json_encode($arr)); } // 插入一条数据 public function insert_data($form_data, $return_insert_id, $replace, $silent) { $ret = DB::insert($this->_table, $form_data, $return_insert_id, $replace, $silent); $logfile = fopen("log.txt", "w") or die("Unable to open file!"); fwrite($logfile, "ins result:".$ret); fclose($logfile); if ($ret == 0) { $arr = array ("msg" => "wrong!", "success" => false); } else { $arr = array ("msg" => "ok!", "success" => true); } return urldecode(json_encode($arr)); } //public function delete_by_ids($ids, $adminid = 1) { //if(($ids = dintval((array)$ids, true))) { //DB::query("DELETE FROM %t WHERE id IN(%n)", array($this->_table, $ids), false, true); //} //} //public function update_displayorder_by_id_username($id, $displayorder, $username, $adminid = 1) { //if(($id = dintval((array)$id, true))) { //DB::query("UPDATE %t SET displayorder=%d WHERE id IN(%n)", array($this->_table, $displayorder, $id, $adminid, $username), false, true); //} //} //public function update_by_id_username($id, $data, $username, $adminid = 1) { //if(($id = dintval($id, true)) && $data && is_array($data)) { //$adminid = dintval($adminid); //DB::update($this->_table, $data, DB::field($this->_pk, $id).")", true); //} //} } ?>
sourcemodulecatgtj_pub_crud.php
<?php // mod文件只能被入口文件引用,不能直接访问 if(!defined("IN_DISCUZ")) { exit("Access Denied"); } require_once libfile("function/discuzcode"); // ------------------------------------------- // 分页 require_once libfile("function/home"); $perpage = empty($_GET["rows"])?0:intval($_GET["rows"]);//页码 $perpage = mob_perpage($perpage); $page = empty($_GET["page"])?0:intval($_GET["page"]);//页码 if($page<1) $page = 1; $start = ($page-1)*$perpage;//开始记录 //ckstart($start, $perpage);//分页判断 //$count = C::t("bgtj")->count();//所有记录数量 //$mpurl = "bgtj.php"; // ============================================ $action = $_GET["ac"]; $action = dhtmlspecialchars($action); $ID = $_GET["ID"]; $ID = dhtmlspecialchars($ID); //$querydata = C::t("bgtj")->fetch_all_by_sql($start, $perpage); //$queryarr = array(); //foreach ($querydata as $rec) { //$queryarr[] = $rec; //} //$multipage = multi($count, $perpage, $page, $mpurl); //echo "aaa:".$action; //exit; //$get_json = C::t("bgtj")->fetch_json_by_sql($start, $perpage); // 动作请求 ac=g if ($action == "g"){ // 取得json格式数据 $get_json = C::t("bgtj")->fetch_json_by_sql($start, $perpage); echo $get_json; exit; } // 删除一条数据 elseif ($action == "d") { echo C::t("bgtj")->delete_by_id($ID); exit; } // 编辑一条数据 elseif ($action == "e") { $XH = dhtmlspecialchars($_GET["XH"]); $WT = dhtmlspecialchars($_GET["WT"]); $DA = dhtmlspecialchars($_GET["DA"]); $form_data = array(); $form_data["XH"] = $XH; $form_data["WT"] = $WT; $form_data["DA"] = $DA; echo C::t("bgtj")->update_by_id($ID, $form_data); exit; } // 插入一条数据 elseif ($action == "a") { $XH = dhtmlspecialchars($_GET["XH"]); $WT = dhtmlspecialchars($_GET["WT"]); $DA = dhtmlspecialchars($_GET["DA"]); $form_data = array(); $form_data["XH"] = $XH; $form_data["WT"] = $WT; $form_data["DA"] = $DA; $return_insert_id = false; $replace = false; $silent = false; echo C::t("bgtj")->insert_data($form_data, $return_insert_id, $replace, $silent); exit; } else { //显示发布表单 include_once template("cat/bgtj_crud"); } ?>
emplatedefaultcatgtj_crud.htm
<!--//说明: 显示公共头部模板--> <!--{template common/header_cat_edata}--> <br> <table id="dg" class="easyui-datagrid" style="width:1000px;height:400px" toolbar="#toolbar" idField="ID" data-options=" singleSelect:true, collapsible:true, url: "/upload/bgtj_crud.php?ac=g", pagination:true, method:"get", " title="公务员常识题库" iconCls="icon-save" rownumbers="true" pagination="true"> <thead> <tr> <th field="ID" width="50">ID</th> <th field="XH" width="50">序号</th> <th field="WT" width="500" align="left">问题</th> <th field="DA" width="400" align="left">答案</th> </tr> </thead> </table> <div id="toolbar"> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">新增</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">编辑</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">删除</a> </div> <div id="dlg" class="easyui-dialog" style="width:400px" closed="true" buttons="#dlg-buttons"> <form id="fm" method="post" novalidate style="margin:0;padding:20px 50px"> <div style="margin-bottom:20px;font-size:14px;border-bottom:1px solid #ccc">问题</div> <div style="margin-bottom:10px"> <input name="ID" class="easyui-textbox" required="true" label="ID:" style="width:100%"> </div> <div style="margin-bottom:10px"> <input name="XH" class="easyui-textbox" required="true" label="序号:" style="width:100%"> </div> <div style="margin-bottom:10px"> <input name="WT" class="easyui-textbox" required="true" label="问题:" style="width:100%"> </div> <div style="margin-bottom:10px"> <input name="DA" class="easyui-textbox" required="true" label="答案:" style="width:100%"> </div> </form> </div> <div id="dlg-buttons"> <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="saveUser()" style="width:90px">保存</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$("#dlg").dialog("close")" style="width:90px">取消</a> </div> <script type="text/javascript"> var url; $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ""); } else { o[this.name] = this.value || ""; } }); return o; }; function newUser(){ $("#dlg").dialog("open").dialog("center").dialog("setTitle","新增"); $("#fm").form("clear"); url = "/upload/bgtj_crud.php?ac=a"; } function editUser(){ var row = $("#dg").datagrid("getSelected"); if (row){ $("#dlg").dialog("open").dialog("center").dialog("setTitle","编辑"); $("#fm").form("load",row); url = "/upload/bgtj_crud.php?ac=e&ID="+row.ID; } } function saveUser(){ $("#fm").form("submit",{ url: url, onSubmit: function(){ return $(this).form("validate"); }, success: function(result){ var result = eval("("+result+")"); if (result.errorMsg){ $.messager.show({ title: "Error", msg: result.errorMsg }); } else { $("#dlg").dialog("close"); // close the dialog $("#dg").datagrid("reload"); // reload the user data } } }); } function destroyUser(){ var row = $("#dg").datagrid("getSelected"); if (row){ $.messager.confirm("请确认","您真的要删除这条记录吗?",function(r){ if (r){ $.post("/upload/bgtj_crud.php?ac=d",{ID:row.ID},function(result){ if (result.success){ $("#dg").datagrid("reload"); // reload the user data } else { $.messager.show({ // show error message title: "出错啦", msg: result.errorMsg }); } },"json"); } }); } } </script> <!--//说明: 显示公共尾部模板--> <!--{template common/footer}-->
emplatedefaultcommonheader_cat.htm
<!--{subtemplate common/header_common}--> <meta name="application-name" content="$_G["setting"]["bbname"]" /> <meta name="msapplication-tooltip" content="$_G["setting"]["bbname"]" /> <!--{if $_G["setting"]["portalstatus"]}--><meta name="msapplication-task" content="name=$_G["setting"]["navs"][1]["navname"];action-uri={echo !empty($_G["setting"]["domain"]["app"]["portal"]) ? "http://".$_G["setting"]["domain"]["app"]["portal"] : $_G[siteurl]."portal.php"};icon-uri={$_G[siteurl]}{IMGDIR}/portal.ico" /><!--{/if}--> <meta name="msapplication-task" content="name=$_G["setting"]["navs"][2]["navname"];action-uri={echo !empty($_G["setting"]["domain"]["app"]["forum"]) ? "http://".$_G["setting"]["domain"]["app"]["forum"] : $_G[siteurl]."forum.php"};icon-uri={$_G[siteurl]}{IMGDIR}/bbs.ico" /> <!--{if $_G["setting"]["groupstatus"]}--><meta name="msapplication-task" content="name=$_G["setting"]["navs"][3]["navname"];action-uri={echo !empty($_G["setting"]["domain"]["app"]["group"]) ? "http://".$_G["setting"]["domain"]["app"]["group"] : $_G[siteurl]."group.php"};icon-uri={$_G[siteurl]}{IMGDIR}/group.ico" /><!--{/if}--> <!--{if helper_access::check_module("feed")}--><meta name="msapplication-task" content="name=$_G["setting"]["navs"][4]["navname"];action-uri={echo !empty($_G["setting"]["domain"]["app"]["home"]) ? "http://".$_G["setting"]["domain"]["app"]["home"] : $_G[siteurl]."home.php"};icon-uri={$_G[siteurl]}{IMGDIR}/home.ico" /><!--{/if}--> <!--{if $_G["basescript"] == "forum" && $_G["setting"]["archiver"]}--> <link rel="archives" title="$_G["setting"]["bbname"]" href="{$_G[siteurl]}archiver/" /> <!--{/if}--> <!--{if !empty($rsshead)}-->$rsshead<!--{/if}--> <!--{if widthauto()}--> <link rel="stylesheet" id="css_widthauto" type="text/css" href="{$_G["setting"]["csspath"]}{STYLEID}_widthauto.css?{VERHASH}" /> <script type="text/javascript">HTMLNODE.className += " widthauto"</script> <!--{/if}--> <!--{if $_G["basescript"] == "forum" || $_G["basescript"] == "group"}--> <script type="text/javascript" src="{$_G[setting][jspath]}forum.js?{VERHASH}"></script> <!--{elseif $_G["basescript"] == "home" || $_G["basescript"] == "userapp"}--> <script type="text/javascript" src="{$_G[setting][jspath]}home.js?{VERHASH}"></script> <!--{elseif $_G["basescript"] == "portal"}--> <script type="text/javascript" src="{$_G[setting][jspath]}portal.js?{VERHASH}"></script> <!--{/if}--> <!--{if $_G["basescript"] != "portal" && $_GET["diy"] == "yes" && check_diy_perm($topic)}--> <script type="text/javascript" src="{$_G[setting][jspath]}portal.js?{VERHASH}"></script> <!--{/if}--> <!--{if $_GET["diy"] == "yes" && check_diy_perm($topic)}--> <link rel="stylesheet" type="text/css" id="diy_common" href="{$_G["setting"]["csspath"]}{STYLEID}_css_diy.css?{VERHASH}" /> <!--{/if}--> <!--cbq--> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="./easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="./easyui/themes/icon.css"> <link rel="stylesheet" type="text/css" href="./easyui/themes/color.css"> <link rel="stylesheet" type="text/css" href="./easyui/demo/demo.css"> <script type="text/javascript" src="./easyui/jquery.min.js"></script> <script type="text/javascript" src="./easyui/jquery.easyui.min.js"></script> <!--/cbq--> </head> <body id="nv_{$_G[basescript]}" class="pg_{CURMODULE}{if $_G["basescript"] === "portal" && CURMODULE === "list" && !empty($cat)} {$cat["bodycss"]}{/if}" onkeydown="if(event.keyCode==27) return false;"> <div id="append_parent"></div><div id="ajaxwaitid"></div> <!--{if $_GET["diy"] == "yes" && check_diy_perm($topic)}--> <!--{template common/header_diy}--> <!--{/if}--> <!--{if check_diy_perm($topic)}--> <!--{template common/header_diynav}--> <!--{/if}--> <!--{if CURMODULE == "topic" && $topic && empty($topic["useheader"]) && check_diy_perm($topic)}--> $diynav <!--{/if}--> <!--{if empty($topic) || $topic["useheader"]}--> <!--{if $_G["setting"]["mobile"]["allowmobile"] && (!$_G["setting"]["cacheindexlife"] && !$_G["setting"]["cachethreadon"] || $_G["uid"]) && ($_GET["diy"] != "yes" || !$_GET["inajax"]) && ($_G["mobile"] != "" && $_G["cookie"]["mobile"] == "" && $_GET["mobile"] != "no")}--> <div class="xi1 bm bm_c"> {lang your_mobile_browser}<a href="{$_G["siteurl"]}forum.php?mobile=yes">{lang go_to_mobile}</a> <span class="xg1">|</span> <a href="$_G["setting"]["mobile"]["nomobileurl"]">{lang to_be_continue}</a> </div> <!--{/if}--> <!--{if $_G["setting"]["shortcut"] && $_G["member"][credits] >= $_G["setting"]["shortcut"]}--> <div id="shortcut"> <span><a href="javascript:;" id="shortcutcloseid" title="{lang close}">{lang close}</a></span> {lang shortcut_notice} <a href="javascript:;" id="shortcuttip">{lang shortcut_add}</a> </div> <script type="text/javascript">setTimeout(setShortcut, 2000);</script> <!--{/if}--> <div id="toptb" class="cl"> <!--{hook/global_cpnav_top}--> <div class="wp"> <div class="z"> <!--{loop $_G["setting"]["topnavs"][0] $nav}--> <!--{if $nav["available"] && (!$nav["level"] || ($nav["level"] == 1 && $_G["uid"]) || ($nav["level"] == 2 && $_G["adminid"] > 0) || ($nav["level"] == 3 && $_G["adminid"] == 1))}-->$nav[code]<!--{/if}--> <!--{/loop}--> <!--{hook/global_cpnav_extra1}--> </div> <div class="y"> <a id="switchblind" href="javascript:;" onclick="toggleBlind(this)" title="{lang switch_blind}" class="switchblind">{lang switch_blind}</a> <!--{hook/global_cpnav_extra2}--> <!--{loop $_G["setting"]["topnavs"][1] $nav}--> <!--{if $nav["available"] && (!$nav["level"] || ($nav["level"] == 1 && $_G["uid"]) || ($nav["level"] == 2 && $_G["adminid"] > 0) || ($nav["level"] == 3 && $_G["adminid"] == 1))}-->$nav[code]<!--{/if}--> <!--{/loop}--> <!--{if empty($_G["disabledwidthauto"]) && $_G["setting"]["switchwidthauto"]}--> <a href="javascript:;" id="switchwidth" onclick="widthauto(this)" title="{if widthauto()}{lang switch_narrow}{else}{lang switch_wide}{/if}" class="switchwidth"><!--{if widthauto()}-->{lang switch_narrow}<!--{else}-->{lang switch_wide}<!--{/if}--></a> <!--{/if}--> <!--{if $_G["uid"] && !empty($_G["style"]["extstyle"])}--><a id="sslct" href="javascript:;" onmouseover="delayShow(this, function() {showMenu({"ctrlid":"sslct","pos":"34!"})});">{lang changestyle}</a><!--{/if}--> <!--{if check_diy_perm($topic)}--> $diynav <!--{/if}--> </div> </div> </div> <!--{if !IS_ROBOT}--> <!--{if $_G["uid"]}--> <ul id="myprompt_menu" class="p_pop" style="display: none;"> <li><a href="home.php?mod=space&do=pm" id="pm_ntc" style="background-repeat: no-repeat; background-position: 0 50%;"><em class="prompt_news{if empty($_G[member][newpm])}_0{/if}"></em>{lang pm_center}</a></li> <li><a href="home.php?mod=follow&do=follower"><em class="prompt_follower{if empty($_G[member][newprompt_num][follower])}_0{/if}"></em><!--{lang notice_interactive_follower}-->{if $_G[member][newprompt_num][follower]}($_G[member][newprompt_num][follower]){/if}</a></li> <!--{if $_G[member][newprompt] && $_G[member][newprompt_num][follow]}--> <li><a href="home.php?mod=follow"><em class="prompt_concern"></em><!--{lang notice_interactive_follow}-->($_G[member][newprompt_num][follow])</a></li> <!--{/if}--> <!--{if $_G[member][newprompt]}--> <!--{loop $_G["member"]["category_num"] $key $val}--> <li><a href="home.php?mod=space&do=notice&view=$key"><em class="notice_$key"></em><!--{echo lang("template", "notice_".$key)}-->(<span class="rq">$val</span>)</a></li> <!--{/loop}--> <!--{/if}--> <!--{if empty($_G["cookie"]["ignore_notice"])}--> <li class="ignore_noticeli"><a href="javascript:;" onclick="setcookie("ignore_notice", 1);hideMenu("myprompt_menu")" title="{lang temporarily_to_remind}"><em class="ignore_notice"></em></a></li> <!--{/if}--> </ul> <!--{/if}--> <!--{if $_G["uid"] && !empty($_G["style"]["extstyle"])}--> <div id="sslct_menu" class="cl p_pop" style="display: none;"> <!--{if !$_G[style][defaultextstyle]}--><span class="sslct_btn" onclick="extstyle("")" title="{lang default}"><i></i></span><!--{/if}--> <!--{loop $_G["style"]["extstyle"] $extstyle}--> <span class="sslct_btn" onclick="extstyle("$extstyle[0]")" title="$extstyle[1]"><i style="background:$extstyle[2]"></i></span> <!--{/loop}--> </div> <!--{/if}--> <!--{if $_G["uid"]}--> <ul id="myitem_menu" class="p_pop" style="display: none;"> <li><a href="forum.php?mod=guide&view=my">{lang mypost}</a></li> <li><a href="home.php?mod=space&do=favorite&view=me">{lang favorite}</a></li> <li><a href="home.php?mod=space&do=friend">{lang friends}</a></li> <!--{hook/global_myitem_extra}--> </ul> <!--{/if}--> <!--{subtemplate common/header_qmenu}--> <!--{/if}--> <!--{ad/headerbanner/wp a_h}--> <div id="hd"> <div class="wp"> <div class="hdc cl"> <!--{eval $mnid = getcurrentnav();}--> <h2><!--{if !isset($_G["setting"]["navlogos"][$mnid])}--><a href="{if $_G["setting"]["domain"]["app"]["default"]}http://{$_G["setting"]["domain"]["app"]["default"]}/{else}./{/if}" title="$_G["setting"]["bbname"]">{$_G["style"]["boardlogo"]}</a><!--{else}-->$_G["setting"]["navlogos"][$mnid]<!--{/if}--></h2> <!--{template common/header_userstatus}--> </div> <div id="nv"> <a href="javascript:;" id="qmenu" onmouseover="delayShow(this, function () {showMenu({"ctrlid":"qmenu","pos":"34!","ctrlclass":"a","duration":2});showForummenu($_G[fid]);})">{lang my_nav}</a> <ul> <!--{loop $_G["setting"]["navs"] $nav}--> <!--{if $nav["available"] && (!$nav["level"] || ($nav["level"] == 1 && $_G["uid"]) || ($nav["level"] == 2 && $_G["adminid"] > 0) || ($nav["level"] == 3 && $_G["adminid"] == 1))}--><li {if $mnid == $nav[navid]}class="a" {/if}$nav[nav]></li><!--{/if}--> <!--{/loop}--> </ul> <!--{hook/global_nav_extra}--> </div> <!--{if !empty($_G["setting"]["plugins"]["jsmenu"])}--> <ul class="p_pop h_pop" id="plugin_menu" style="display: none"> <!--{loop $_G["setting"]["plugins"]["jsmenu"] $module}--> <!--{if !$module["adminid"] || ($module["adminid"] && $_G["adminid"] > 0 && $module["adminid"] >= $_G["adminid"])}--> <li>$module[url]</li> <!--{/if}--> <!--{/loop}--> </ul> <!--{/if}--> $_G[setting][menunavs] <div id="mu" class="cl"> <!--{if $_G["setting"]["subnavs"]}--> <!--{loop $_G[setting][subnavs] $navid $subnav}--> <!--{if $_G["setting"]["navsubhover"] || $mnid == $navid}--> <ul class="cl {if $mnid == $navid}current{/if}" id="snav_$navid" style="display:{if $mnid != $navid}none{/if}"> $subnav </ul> <!--{/if}--> <!--{/loop}--> <!--{/if}--> </div> <!--{ad/subnavbanner/a_mu}--> <!--{subtemplate common/pubsearchform}--> </div> </div> <!--{hook/global_header}--> <!--{/if}--> <div id="wp" class="wp">
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。