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 相关文章推荐
3.从实例开始
Oct 09 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
PHP中常用的输出函数总结
Sep 22 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
php多重接口的实现方法
Jun 20 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
php常用日期时间函数实例小结
Jul 04 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
Yii框架应用组件用法实例分析
May 15 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中的字符串函数
2006/11/24 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
php构造函数实例讲解
2013/11/13 PHP
php遍历CSV类实例
2015/04/14 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
express 项目分层实践详解
2018/12/10 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
linux面试题参考答案(11)
2012/05/01 面试题
测试驱动开发的主要步骤是什么
2014/12/10 面试题
宠物店的创业计划书范文
2014/01/11 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
会员活动策划方案
2014/08/19 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android