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 相关文章推荐
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
php旋转图片90度的方法
Nov 07 PHP
基础的WordPress插件制作教程
Nov 24 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
php遍历解析xml字符串的方法
May 05 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
Laravel框架中缓存的使用方法分析
Sep 06 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
Laravel实现ORM带条件搜索分页
Oct 24 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
destoon官方标签大全
2014/06/20 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
JQuery 写的个性导航菜单
2009/12/24 Javascript
js 巧妙去除数组中的重复项
2010/01/25 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
关于axios如何全局注册浅析
2018/01/14 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
财务人员求职自荐书范文
2014/02/10 职场文书
期中考试反思800字
2014/05/01 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
服务理念口号
2014/06/11 职场文书
公司应聘自荐书
2014/06/14 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
解决Python字典查找报Keyerror的问题
2021/05/26 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python