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调用数据库的存贮过程!
Oct 09 PHP
使用PHP socke 向指定页面提交数据
Jul 23 PHP
PHP define函数的使用说明
Aug 27 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php自定义扩展名获取函数示例
Dec 12 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
PHP文件系统管理(实例讲解)
2017/09/19 PHP
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
简单了解Django模板的使用
2017/12/20 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python实现按长宽比缩放图片
2018/06/07 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
python实现批量转换图片为黑白
2020/06/16 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
上班迟到检讨书范文300字
2014/11/02 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL
Django框架模板用法详解
2022/06/10 Python