W3CHINA Blog首页    管理页面    写新日志    退出

Blue blue sky

[杂项]几点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。

阅读全文(4380) | 回复(2) | 编辑 | 精华

 


回复:几点PHP学习心得
DFDS(游客)发表评论于2009/5/7 1:43:15



个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

 


回复:几点PHP学习心得
DFDS(游客)发表评论于2009/5/7 1:43:03


 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



This is home

.: 公告

有人的地方就有恩怨

有恩怨的地方就是江湖

人在江湖漂,谁能不挨刀


Bloginess

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31

.: 我的分类(专题)

首页(629)
杂项(69)
我喜欢过的声音(35)
耳机评测(18)
七天乐(127)
工作八卦(174)


In the Bowl

.: 最新日志

变化:俺的2012
迟来的总结,俺的2011
暂停更新:娶了媳妇不上网
一次坦诚的大会
妹子,妹子!
领导满月
当了领导能怎样
俺的播放列表
俺的重构总结
开会的故事

.: 最新回复

回复:迟来的总结,俺的2011
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:小学生作文之记一次拔河比赛
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:暂停更新:娶了媳妇不上网
回复:一次坦诚的大会
回复:一次坦诚的大会
回复:一次坦诚的大会


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



Text Me

.: 留言板

签写新留言

你太客气了
工作是为了更好的生活。。。
飘过!
初烧耳机
路过留声
自动浇花
节日快乐
向您请教
HAHA
咨询下呵呵


Other Fish in the Sea

.: 链接



Lake JJ

真!鱼家MM

传说中的99

王小四的自留地

挣扎中的职场新人tintin同学




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.078 second(s), page refreshed 144759465 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号