由于公司需要php方面的项目开发,php刚刚入门,在写按钮提交过程中,asp.net里的按钮事件更好些。先看下面的代码,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<? 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>" ; } ?> |
1
2
3
4
5
|
< 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这个文件的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
<? 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提交原理 实现功能的。
由于时间仓促,来不及说明具体原理,还请见谅,代码大家都可以看懂的。