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 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
PHP微信开发之有道翻译
Jun 23 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
$()JS小技巧
2007/07/21 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python进度条的制作代码实例
2019/08/31 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
卫校中专生个人自我评价
2013/09/19 职场文书
助人为乐表扬信范文
2014/01/14 职场文书
领班岗位职责范文
2014/02/06 职场文书
党校学习党性分析材料
2014/12/19 职场文书
丽江古城导游词
2015/02/03 职场文书
担保贷款承诺书
2015/04/30 职场文书
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏