php 模拟 asp.net webFrom 按钮提交事件实例


Posted in PHP onOctober 13, 2014

由于公司需要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基础学习笔记
Mar 18 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
php 设计模式之 工厂模式
Dec 19 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
php中的三元运算符使用说明
Jul 03 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP数据库处理封装类实例
Dec 24 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 PHP
ThinkPHP表单自动验证实例
Oct 13 #PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 #PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 #PHP
php实现设计模式中的单例模式详解
Oct 11 #PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 #PHP
php中字符集转换iconv函数使用总结
Oct 11 #PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 #PHP
You might like
PHP:风雨欲来 路在何方?
2006/10/09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
Python random模块用法解析及简单示例
2017/12/18 Python
python3 flask实现文件上传功能
2020/03/20 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
python进行TCP端口扫描的实现
2018/12/21 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
销售总监岗位职责
2014/01/04 职场文书
生日寿宴答谢词
2014/01/19 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
2014年实习期工作总结
2014/11/27 职场文书
给客户的感谢信
2015/01/21 职场文书
运输公司工作总结
2015/08/11 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript