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中json_decode()和json_encode()的使用方法
Jun 04 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
解析php取整的几种方式
Jun 25 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
PHP常用的小程序代码段
Nov 14 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
详解Laravel制作API接口
May 31 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边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
简述vue中的config配置
2018/01/23 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
python matplotlib画图实例代码分享
2017/12/27 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
Python理解递归的方法总结
2019/01/28 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
Python 创建TCP服务器的方法
2020/07/28 Python
python 获取计算机的网卡信息
2021/02/18 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
通信工程专业女生个人求职信
2013/09/21 职场文书
学生打架检讨书1000字
2014/01/16 职场文书
国际贸易专业求职信
2014/06/04 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
Java获取字符串编码格式实现思路
2022/09/23 Java/Android