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编程之高级技巧——利用Mysql函数
Oct 09 PHP
php 字符串替换的方法
Jan 10 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php中数字0和空值的区别分析
Jun 05 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
php实现用于删除整个目录的递归函数
Mar 16 PHP
php查询whois信息的方法
Jun 08 PHP
PHP7.0安装笔记整理
Aug 28 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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初学者头疼问题总结
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
php多重接口的实现方法
2015/06/20 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
canvas绘制多边形
2017/02/24 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
浅析python的优势和不足之处
2018/11/20 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
Python: glob匹配文件的操作
2020/12/11 Python
德国网上药房:Apotal
2017/04/04 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
经理助理岗位职责
2014/03/05 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
拓展策划方案
2014/06/03 职场文书
快递员岗位职责
2014/09/12 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
青年志愿者活动感想
2015/08/07 职场文书