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+DBM的同学录程序(3)
Oct 09 PHP
php split汉字
Jun 05 PHP
基于Zookeeper的使用详解
May 02 PHP
一组PHP加密解密函数分享
Jun 05 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
PHP实现的分解质因数操作示例
Aug 01 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遍历数组的几种方法
2012/03/22 PHP
php实现paypal 授权登录
2015/05/28 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
python计算对角线有理函数插值的方法
2015/05/07 Python
Python实现翻转数组功能示例
2018/01/12 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
python实现自主查询实时天气
2018/06/22 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
python切割图片的示例
2020/11/12 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
行政副总岗位职责
2014/02/23 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
物业管理工作方案
2014/05/10 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
劳模事迹材料范文
2014/12/24 职场文书
升职自荐书
2019/05/09 职场文书
2019银行竞聘书
2019/06/21 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android