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 相关文章推荐
如何使用脚本模仿登陆过程
Nov 22 PHP
对Session和Cookie的区分与解释
Mar 16 PHP
PHP集成FCK的函数代码
Sep 27 PHP
PHP SEO优化之URL优化方法
Apr 21 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
Yii CGridView用法实例详解
Jul 12 PHP
php 获取文件行数的方法总结
Oct 11 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 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
新闻分类录入、显示系统
2006/10/09 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
使用python实现扫描端口示例
2014/03/29 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
python中append实例用法总结
2019/07/30 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
文秘应聘自荐书范文
2014/02/18 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
Elasticsearch 基本查询和组合查询
2022/04/19 Python