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 相关文章推荐
实用函数2
Nov 08 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
php格式化金额函数分享
Feb 02 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 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
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php文件上传的两种实现方法
2016/04/04 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python错误处理详解
2014/09/28 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python代码编写计算器小程序
2020/03/30 Python
Django实现文件上传下载功能
2019/10/06 Python
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
华为慧通笔试题
2016/04/22 面试题
机电一体化职业规划书
2014/01/07 职场文书
运动会广播稿80字
2014/01/23 职场文书
见习期自我鉴定
2014/01/31 职场文书
眼镜促销方案
2014/03/15 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
董事长开业致辞
2015/07/29 职场文书
导游词之太湖
2019/10/08 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫