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保存和输出文件
Oct 09 PHP
一个用php3编写的简单计数器
Oct 09 PHP
php入门小知识
Mar 24 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
php URL跳转代码 减少外链
Jun 25 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php中请求url的五种方法总结
Jul 13 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 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
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
工商管理专业学生的自我评价
2013/10/01 职场文书
中专毕业生自我鉴定范文
2013/11/09 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
写字楼租赁意向书
2014/07/30 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
学习心理学的体会
2014/11/07 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
小学校本教研总结
2015/08/13 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python