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实现采集程序原理和简单示例代码
Mar 18 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
基于empty函数的输出详解
Jun 17 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
php中的观察者模式简单实例
Jan 20 PHP
php 批量查询搜狗sogou代码分享
May 17 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
php获取是星期几的的一些常用姿势
Dec 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数组(array)输出的三种形式详解
2013/06/05 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
js模仿hover的具体实现代码
2013/12/30 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
Python的subprocess模块总结
2014/11/07 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
python函数不定长参数使用方法解析
2019/12/14 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
通过实例解析python and和or使用方法
2020/11/14 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
房地产项目策划书
2014/02/05 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
办理收楼委托书范本
2014/10/09 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
入党政审材料范文
2014/12/24 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
付款证明模板
2015/06/19 职场文书
Nginx 常用配置
2022/05/15 Servers
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers