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 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
php获取系统变量方法小结
May 29 PHP
php多线程并发实现方法
Sep 30 PHP
PHP快速推送微信模板消息
Apr 14 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 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
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
实例讲解php实现多线程
2019/01/27 PHP
javascript静态的url如何传递
2007/05/03 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
python查询sqlite数据表的方法
2015/05/08 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python解析xml简单示例
2019/06/21 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
python3中for循环踩过的坑记录
2020/12/14 Python
毕业生教师求职信
2013/10/20 职场文书
一夜的工作教学反思
2014/02/08 职场文书
《春天来了》教学反思
2014/04/07 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
前台接待岗位职责
2015/02/03 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
利用Apache Common将java对象池化的问题
2022/06/16 Servers