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+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
解析link_mysql的php版
Jun 30 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
php二维码生成以及下载实现
Sep 28 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 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批量生成图片缩略图的方法
2015/06/18 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python实现的Iou与Giou代码
2020/01/18 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
共筑中国梦演讲稿
2014/04/23 职场文书
社保委托书怎么写
2014/08/02 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
就业推荐表院系意见
2015/06/05 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
高效课堂教学反思
2016/02/24 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
python爬取豆瓣电影TOP250数据
2021/05/23 Python
HTML基础详解(上)
2021/10/16 HTML / CSS