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 &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
使用纯php代码实现页面伪静态的方法
Jul 25 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 PHP
Yii 实现数据加密和解密
Mar 09 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
vue-cli配置文件——config篇
2018/01/04 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
Python编写登陆接口的方法
2017/07/10 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
python3大文件解压和基本操作
2017/12/15 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
python实现控制COM口的示例
2019/07/03 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
详解Django CAS 解决方案
2019/10/30 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
了解AppleTalk协议吗
2014/04/01 面试题
委托书范本
2014/04/02 职场文书
常务副总经理任命书
2014/06/05 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
学雷锋日活动总结
2015/02/06 职场文书
数据库连接池
2021/04/06 MySQL