php 模拟 asp.net webFrom 按钮提交事件的思路及代码


Posted in PHP onDecember 02, 2013

由于公司需要php方面的项目开发,php刚刚入门,在写按钮提交过程中,asp.net里的按钮事件更好些。先看下面的代码,

<?
require_once '../inc/EventHelper.php';
function Page_Load()
{
    echo '在任何时候都会运行<br>';
    if(!Page::IsPostBack())
    {
        echo '加载产品分类<br>';
        if($_GET['cmd']=='edit')    
        {
            echo '修改加载需要修改的产品信息<br>';
        }
    }
}
function bAdd_Click()
{
    //Comm::CheckQX('产品管理_添加');
    echo "bAdd_Click<br>";
}
function bEdit_Click()
{
    //Comm::CheckQX('产品管理_修改');
    echo 'proID='.$_GET['proID'].'<br>';
    echo "bEdit_Click<br>";
}
function sdfsdfdsf_Click()
{
    echo "e44444444444444444444<br>";
}
?>
<form name="aa" method="post" action="?<?=Comm::GetParam()?>">
    <input type="submit" name="bAdd" value="添加" />
    <input type="submit" name="bedit" value="修改" />
    <input type="submit" name="sdfsdfdsf" value="ewrewrewr" />
</form>

做过asp.net开发的对上面的代码应该有点熟悉,如:Page_Load,Page.IsPostback,bAdd_Click,这些很像asp.net的事件。

以上代码在点击【添加】按钮时运行bAdd_Click函数(暂且这么叫,function好像是函数的意思),同样的,点击【修改】按钮自动运行bEdit_Click事件。不需要过多的参数变化,也不需要过多的文件,若页面功能不是很复杂的情况下,用这种模式可以快速开发。

下面来看看EventHelper.php这个文件的代码:

<?
    class Page
    {
        //是否回发数据,1:是
        public static function IsPostBack()
        {
            global $SYSRunEventName;
            return !empty($SYSRunEventName);
        }        //加载并执行事件
        function EventLoad()
        {
            global $SYSRunEventName;
            $arrEvent=get_defined_functions();
            $arrEventUser=$arrEvent['user'];
            $arr=array_keys($_POST);
            foreach($arr as $row)
            {
                $name=strtolower($row);
                foreach($arrEventUser as $row1)
                {
                    $name1=str_ireplace('_click','',$row1);
                    if($name==$name1)
                    {
                        $SYSRunEventName=$row1;
                        break;
                    }
                }
                if(!empty($SYSRunEventName))
                {
                    break;    
                }
            }
            if(function_exists('Page_Load')) 
                Page_Load();
            $SYSRunEventRunName=strtolower($SYSRunEventName);
            if(Page::IsPostBack())
            {
                $SYSRunEventName();
            }
        }
    }
    class Comm
    {
        public static function GetParam($params=array(),$cmd='addoverride')
        {
            $allParam=array();
            if($cmd=='addoverride')
            {
                $arrKeys=array_keys($params);
                foreach($arrKeys as $row)
                {
                    if(!in_array($row,array_keys($allParam))) 
                        $allParam[$row]=$params[$row];
                }
            }
            else if($cmd=='del')
            {
                foreach($params as $row)
                {
                    unset($_GET[$row]); 
                }
            }
            
            $arrKeys=array_keys($_GET);
            foreach($arrKeys as $row)
            {
                if(!in_array($row,array_keys($allParam)))
                    $allParam[$row]=$_GET[$row];
            }
            $p='';
            $arrKeys=array_keys($allParam);
            foreach($arrKeys as $row)
            {
                $p.=$row.'='.$allParam[$row].'&';
            }
            return rtrim($p,'&');
        }
    }
    Page::EventLoad();
?>

以上功能大家可以测试下,在我php5.4可以运行成功,不过在安全性方面还没考虑过多,看过一些文章php会有可能通过客户端执行php代码,因为php很许多实用的功能特性。

关于Comm::GetParam,由于经常需要获取get方式的参数,或修改参数,如分页时需要保留所有url参数,只修改分页参数(如page=5),所以就自行写了一些代码。

主要利用php以下几个特点:

function_exists
get_defined_functions

以及利用常用的表单提交原理,利用submit提交原理 实现功能的。

由于时间仓促,来不及说明具体原理,还请见谅,代码大家都可以看懂的。

PHP 相关文章推荐
PHP中读写文件实现代码
Oct 20 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP写日志的实现方法
Nov 05 PHP
php输入数据统一类实例
Feb 23 PHP
php中执行系统命令的方法
Mar 21 PHP
php链表用法实例分析
Jul 09 PHP
PHP邮箱验证示例教程
Jun 01 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
PHP实现微信申请退款功能
Oct 01 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 PHP
php中{}大括号是什么意思
Dec 01 #PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 #PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 #PHP
PHP变量内存分配问题记录整理
Nov 27 #PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 #PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 #PHP
php编写的简单页面跳转功能实现代码
Nov 27 #PHP
You might like
PHP中的正则表达式函数介绍
2012/02/27 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
python实现批量改文件名称的方法
2015/05/25 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
python挖矿算力测试程序详解
2019/07/03 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
为什么是 Python -m
2020/06/19 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
外语学院毕业生的自我鉴定
2013/11/28 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
房屋委托书范本
2014/04/04 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
学校四风对照检查材料
2014/08/28 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
六年级小学生评语
2014/12/26 职场文书
公积金贷款承诺书
2015/04/30 职场文书
防震减灾主题班会
2015/08/14 职场文书
Python实现8种常用抽样方法
2021/06/27 Python