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 相关文章推荐
linux下为php添加curl扩展的方法
Jul 29 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
php中rename函数用法分析
Nov 15 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
Laravel 5 学习笔记
Mar 06 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
PHP生成指定范围内的N个不重复的随机数
Mar 18 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
Jul 10 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 中英文语言转换类
2011/09/07 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
python条件和循环的使用方法
2013/11/01 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
python解释器spython使用及原理解析
2019/08/24 Python
深入浅析Python代码规范性检测
2020/07/31 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
新闻系毕业生推荐信
2013/11/16 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
教师网络培训感言
2014/03/09 职场文书
科技之星事迹材料
2014/06/02 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
先进基层党组织材料
2014/12/25 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
导游词之桂林山水
2019/09/20 职场文书