php 模拟 asp.net webFrom 按钮提交事件的思路及代码

2015-01-24信息快讯网

这篇文章主要介绍了php模拟asp.net webFrom 按钮提交事件的思路及代码,有需要的朋友可以参考一下

由于公司需要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提交原理 实现功能的。

由于时间仓促,来不及说明具体原理,还请见谅,代码大家都可以看懂的。

ThinkPHP的Widget扩展实例
ThinkPHP3.1的Widget新用法
PHP base64编码后解码乱码的解决办法
PHP安全的URL字符串base64编码和解码
PHP中的多行字符串传递给JavaScript的两种方法
PHP中使用gettext解决国际化问题的例子(i18n)
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Codeigniter出现错误提示Error with CACHE directory的解决方案
Codeigniter中禁止A Database Error Occurred错误提示的方法
PHP资源管理框架Assetic简介
PHP捕获Fatal error错误的方法
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
你可能不知道PHP get_meta_tags()函数
linux使用crontab实现PHP执行计划定时任务
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
php实现telnet功能示例
分享下页面关键字抓取components.arrow.com站点代码
php实现查看邮件是否已被阅读的方法
php中{}大括号是什么意思
浅析echo(),print(),print_r(),return之间的区别
PHP反射类ReflectionClass和ReflectionObject的使用方法
php file_get_contents抓取Gzip网页乱码的三种解决方法
PHP set_error_handler()函数使用详解(示例)
PHP使用SOAP调用.net的WebService数据
php define的第二个参数使用方法
php cURL和Rolling cURL并发方式比较
使用PHP Socket写的POP3类
FireFox浏览器使用Javascript上传大文件
简单实用的.net DataTable导出Execl
PHP error_log()将错误信息写入一个文件(定义和用法)
关于php程序报date()警告的处理(date_default_timezone_set)
php class类的用法详细总结
PHP加密函数 Javascript/Js 解密函数
PHP和JavaScrip分别获取关联数组的键值示例代码
PHP取整函数:ceil,floor,round,intval的区别详细解析
php取整函数ceil,floo,round的用法及介绍
php修改NetBeans默认字体的大小
©2014-2024 dbsqp.com