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设计模式小结
Feb 15 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
php 邮件发送问题解决
Mar 22 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php树型类实例
Dec 05 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
CI框架表单验证实例详解
Nov 21 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
Laravel框架Request、Response及Session操作示例
May 06 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面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
php微信开发之图片回复功能
2018/06/14 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
js 窗口抖动示例
2013/09/04 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
python 图片验证码代码分享
2012/07/04 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
普通员工辞职信
2014/01/17 职场文书
行政办公室岗位职责
2014/03/18 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
2016年清明节寄语
2015/12/04 职场文书
六五普法学习心得体会
2016/01/21 职场文书
同学会演讲稿
2019/04/02 职场文书
python中的random模块和相关函数详解
2022/04/22 Python