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 相关文章推荐
phpMyadmin 用户权限中英对照
Apr 02 PHP
Fatal error: Call to undefined function curl_init()解决方法
Apr 09 PHP
php 文件缓存函数
Oct 08 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
php数组键名技巧小结
Feb 17 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP中set_include_path()函数相关用法分析
Jul 18 PHP
比较完整的微信开发php代码
Aug 02 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
php app支付宝回调(异步通知)详解
Jul 25 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
咖啡的传说和历史
2021/03/03 新手入门
层叠菜单的动态生成
2006/10/09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
jquery Form轻松实现文件上传
2017/05/24 jQuery
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
js数组去重的方法总结
2019/01/18 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python矩阵/字典实现最短路径算法
2019/01/17 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
骨干教师培训制度
2014/01/13 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
中介业务员岗位职责
2014/04/09 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
汽车维修求职信
2014/06/15 职场文书
学雷锋的心得体会
2014/09/04 职场文书
房产协议书范本
2014/10/18 职场文书
伏羲庙导游词
2015/02/09 职场文书
实名检举信范文
2015/03/02 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android