Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1558445
  • 博文数量: 1481
  • 博客积分: 26784
  • 博客等级: 上将
  • 技术积分: 17045
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-12 09:22
文章分类

全部博文(1481)

文章存档

2014年(10)

2013年(353)

2012年(700)

2011年(418)

分类: 系统运维

2012-10-11 09:43:55

昨天自己给自己挖了一个坑,最后所说的switch case 其实很坑爹!如果不仅仅有01,那排列组合也复杂了,很容易遗漏。而且每种情况实际还是在嵌套。
一天过去,我本以为会被喷的狗血,木有想到,只有路过帮顶,所以不知道是失望呢,还是偷着乐。
今天继续意识流:
学习是漫长的,学习是发散的,学习是要自己找乐子的!项目过程更是如此,千万别像刘翔还没起跑,就倒下了!
下面是自己写帖子精华设置的一点点小感悟,抛砖引玉,2楼有问题求大神剖析(没学好)

由于我不想加精、顶置、加亮、删除这些操作 一个一个提交 所以选择了多选框表单一次性提交数据。


设计思路:
如果没有选择的选项则是0,选择了的就是1,因为我在数据库中给帖子表设计了这些字段,例如is_special=1(tinyint类型),那么就是精华;is_special默认值是0。
提交表单页面代码如下(刚开始是这样写的)
  1. 精华
  2. 加亮
  3. 顶置
  4. 删除

在执行页面做判断:
  1. $reset=$_POST['reset'];
  2. if($_POST['reset'][0]!=null){
  3. $is_special=1;
  4. }else{
  5. $is_special=0;
  6. }
  7. if($_POST['reset'][1]!=null){
  8. $is_light=1;
  9. }else{
  10. $is_light=0;
  11. }
  12. if($_POST['reset'][2]!=null){
  13. $is_up=1;
  14. }else{
  15. $is_up=0;
  16. }
  17. if($_POST['reset'][3]!=null){
  18. $is_pass=0;
  19. }else{
  20. $is_pass=1;
  21. }

发现还有问题(疏忽大意),只要选中一个,第一个(var_dump($is_special);)肯定输出的是int(0),因为没有个各个选项中的name值设置下标,自动生成的索引下标,如果第一个“精华”没有选中,那么第二个加亮选中了,那么提交过来,$_POST['reset'][0]对应的就是高亮的值了,所以第一个(var_dump($is_special))肯定输出的是int(0)了。
解决办法:
自己给各个checkbox 设置name值的数组设置下标就OK了
  1. 精华
  2. 加亮
  3. 顶置
  4. 删除

帖子列表页最后做显示(马上上菜
  1. if($row['is_special']==1){
  2. if($row['is_light']==1){
  3. echo ''.$row['title'].'';
  4. }else{
  5. echo $row['title'].'';
  6. }
  7. }else{
  8. if($row['is_light']==1){
  9. echo ''.$row['title'].'';
  10. }else{
  11. echo $row['title'] ;
  12. }
  13. }

上面幸好只有两个三个,四个、五个、六个这样关系交叉的还使用if吗?是不是要换成switch case 呢?那样反而清晰,简单!嗯,是的!
但是switch不支持多变量同时判断,例如switch($row['is_special'],$row['is_light'])就会报错!Parse error: syntax error, unexpected ','
小弟若有所思

不巧想到把这些变量转换成字符串,然后再把这些字符串连接起来,不就OK啦!就像判断电路开关一样,呵呵!
//首先从数据库中查询到数据赋值给$row这个数组
  1. $max['special']=strval($row['is_special']);
  2. $max['light']=strval($row['is_light']);
  3. $mixstate=implode('',$max);
  4. switch($mixstate){
  5. case 11:
  6. echo ''.$row['title'].'';
  7. break;
  8. case 10:
  9. echo $row['title'].'';
  10. break;
  11. case 01:
  12. echo ''.$row['title'].'';
  13. break;
  14. case 00:
  15. echo $row['title'] ;
  16. break;
  17. default:
  18. echo $row['title'] ;
  19. }


多个选项,也只需书写10101010样式,即可做true or false 判断,不用做多成嵌套式的判断了!
呵呵,学习嘛!自娱自乐,找点乐子,好过日子!

原文地址:

阅读(158) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~