[杂项]几点PHP学习心得 |
小工头 发表于 2005/7/19 20:52:59 | PHP已经学习了两周,自制网络服务平台(其实就是网站啦,只是这种华丽的说法比较容易吸引眼球而已)逐步搭建中。说老实话,目前俺的网站可以说是漏洞百出,从头到尾都没有考虑并发处理和访问控制,基本上就是用PHP写的单进程单任务程序而已。这就是从Dos-Windows开始学习编程的后遗症啊……不管那么多,具体功能实现了先,然后再考虑用session实现并发控制以及访问控制的事情。现在俺用的最熟的是form和$PHP_SELF。没有引入session的情况下,用form在页面之间传递参数,然后在动态生成的form中使用$PHP_SELF把输入检查和后续处理统一在同一个页面中。实践证明,这种做法还挺有效的。
目前俺编程的思路还停留在C语言的阶段,编出来的PHP程序仔细看看,都有C程序流程的痕迹,有时自己也觉得土。土归土,照样可以解决问题。下面就来介绍一下俺自己琢磨出来的几个很土但是有效的做法。
一,检查表单输入。录入用户信息的时候,有几项要求不能为空。虽然在输入界面上有提示,但是仍然需要在后台程序加入输入检查的模块。假如某项输入为空,就要求用户重新输入。这种做法,在MFC做的界面里很容易实现,只要在OnOK()函数中来上几句“if(str.IsEmpty()){MessageBox("this string is necessary");return;}”就结了。可是,在俺的程序中,录入用户信息和用户信息处理分属两个页面,检查出某项为空后并不会自动回到录入用户信息界面。即使用Header实现跳转,又存在访问控制的问题。俺的录入处理页面是两类用户共用的,其中一类用户有录入用户信息的权限,另一类则没有,直接跳回去也许会引起混乱。而且,直接跳回去的话,原先已经录入的信息都会被清空,不爽。最后,俺选择了在后台程序中动态生成输入表单的做法。实例如下:
$user_id = $arr_request["user_id"];$user_pwd = $arr_request["user_pwd"];
if(empty($user_id) || empty($user_pwd)){ affy_message("请输入用户名和口令"); echo "<form action=\"$PHP_SELF\" method=\"get\">"; echo "<table><tr><td>用户ID:</td><td><input type=\"text\" name=\"user_id\" maxlength=20></td></tr>"; echo "<tr><td>口令:</td><td><input type=\"password\" name=\"user_pwd\" maxlength=50></td></tr></table>"; echo "</form>"; exit;}
假如用户名或者口令为空,就动态生成一个输入表单,用$PHP_SELF实现对自身的循环调用,直到用户名和口令都不为空为止。俺从中认识到这样一点,网页编程中每重新调用一个网页相当于在C语言中重新起一个进程,不同的是重新调用网页时并不会保存之前已经输入的内容。每次重新调用,出来的是一个全新的、和之前任何网页都没有关系的网页。上述代码看起来有点象递归或者嵌套,实际上的作用是实现网页之间的数据传递。这一点跟C语言有显著的不同,让俺最近有点着迷。
二,用form实现基于角色的访问控制。说起来其实很简单,每次跳转的时候都用form实现,利用hidden传递用户的ID和所属的组。后续的处理页面根据传来的用户信息动态地生成菜单和链接。虽然很简单,对于俺这种菜鸟来说效果已经很炫了,最近一直沉迷于用echo裸写HTML代码,呵呵。可惜的是,这种做法一般会跟前面用form实现的输入内容检查冲突,唉……为什么一个链接只能对应一个form呢?另外一个副作用,每次回退的时候浏览器都会报警说表单已经过期,必须刷新,看着有点烦。不知道将来改用session会不会好点。session和header()俺都不熟,不敢随便用。
三,几个问题。PHP的字符串处理实在是太简便了,好多处理方法搁C语言就是常识性的错误。俺写“if($id == "1001")”这样的句子时总是提心吊胆,生怕养成了坏习惯,将来写C程序的时候死都不知道是怎么死的。有点象在乡下住惯了,什么都是自己动手,突然之间住进了城市的公寓,自来水也不敢用,煤气炉也不敢用,怕坏……应该坚持底层、直接、霸道但是繁琐的C,还是应该信赖简便、快捷、自动化但是黑箱化严重的PHP呢?(两年前出差做项目,跟俺配合的牛人用JAVA,被莫名其妙的小毛病折腾了个半死,一直查不出问题来,最后只能频繁地更换各大公司出品的JDK,严重拖延了进度。从此俺对JAVA失去信心……提一句,据说牛人当初用的也是C,在指针的使用上栽了大跟头,一怒之下改投了没有指针概念的JAVA)动态网页配合基于角色的访问控制好像不太容易。没有session,没法获取访问页面的用户信息。现在虽然用form实现用户信息的传递,但目前只能确认在网页一直按流程进行的情况下有用。如果用户在浏览器端用前进/后退跳转,不知道会出什么事。如果攻击者直接输入URL的,也不知道会出什么事……访问控制该怎么做呢?
貌似后脖子出汗太多,起痱子了,555。
|
|
回复:几点PHP学习心得 |
DFDS(游客)发表评论于2009/5/7 1:43:15 |
|
|
回复:几点PHP学习心得 |
DFDS(游客)发表评论于2009/5/7 1:43:03 |
|
|
» 1 »
|

.: 公告
有人的地方就有恩怨 有恩怨的地方就是江湖 人在江湖漂,谁能不挨刀 |
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 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 | | | | | | | |
|
.: 我的分类(专题)
|

.: 最新日志
.: 最新回复
|

blog名称:少年包工头的工作日记 日志总数:629 评论数量:1458 留言数量:56 访问次数:8966918 建立时间:2004年12月8日 |
|

.: 留言板
|

.: 链接
|

|