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设计模式 Delegation(委托模式)
Jun 26 PHP
header导出Excel应用示例
Jan 24 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
php session的锁和并发
Jan 22 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
php将html转为图片的实现方法
May 19 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
php用xpath解析html的代码实例讲解
Feb 14 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实现水仙花数的4个示例分享
2014/04/08 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
python logging类库使用例子
2014/11/22 Python
Python中正则表达式详解
2017/05/17 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
大学生毕业自我评价范文分享
2013/11/07 职场文书
公司晚会主持词
2014/03/22 职场文书
项目建议书模板
2014/05/12 职场文书
研修心得体会
2014/09/04 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
计划生育责任书
2015/05/09 职场文书
分家协议书范本
2016/03/22 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
python实现简单的井字棋
2021/05/26 Python
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
Java异常体系非正常停止和分类
2022/06/14 Java/Android