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的ob_start();控制您的浏览器cache!
Feb 14 PHP
解析php中const与define的应用区别
Jun 18 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
PHP正则表达式过滤html标签属性(DEMO)
May 04 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
学习Python selenium自动化网页抓取器
2018/01/20 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python利用7z批量解压rar的实现
2019/08/07 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python猜数字算法题详解
2020/03/01 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
写给老婆的检讨书
2014/02/21 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
银行委托书范本
2014/09/28 职场文书
教师业务学习材料
2014/12/16 职场文书
发布会邀请函
2015/01/31 职场文书
九华山导游词
2015/02/03 职场文书
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript