当前位置: 代码迷 >> Web前端 >> 项目1之帖子精华设置-若有所思【一】
  详细解决方案

项目1之帖子精华设置-若有所思【一】

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

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


设计思路:
如果没有选择的选项则是0,选择了的就是1,因为我在数据库中给帖子表设计了这些字段,例如is_special=1(tinyint类型),那么就是精华;is_special默认值是0。
提交表单页面代码如下(刚开始是这样写的)
  1. <form action="reset.php?fid=<?php echo $_GET['fid']?>&tid=<?php echo $_GET['tid']?>" method="post">
  2. <input type="checkbox" name="reset[]" value="1" /> 精华
  3. <input type="checkbox" name="reset[]" value="1" /> 加亮
  4. <input type="checkbox" name="reset[]" value="1" /> 顶置
  5. <input type="checkbox" name="reset[]" value="0" /> 删除
  6. <input type="submit" value="提交" />
  7. </form>

在执行页面做判断:
  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. <input type="checkbox" name="reset[0]" value="1" /> 精华
  2. <input type="checkbox" name="reset[1]" value="1" /> 加亮
  3. <input type="checkbox" name="reset[2]" value="1" /> 顶置
  4. <input type="checkbox" name="reset[3]" value="0" /> 删除

帖子列表页最后做显示(马上上菜
  1. if($row['is_special']==1){
  2. if($row['is_light']==1){
  3. echo '<b><font color="red">'.$row['title'].'</font></b><img src="p_w_picpath/wind/file/digest.gif">';
  4. }else{
  5. echo $row['title'].'<img src="p_w_picpath/wind/file/digest.gif">';
  6. }
  7. }else{
  8. if($row['is_light']==1){
  9. echo '<b><font color="red">'.$row['title'].'</font></b>';
  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 '<b><font color="red">'.$row['title'].'</font></b><img src="p_w_picpath/wind/file/digest.gif">';
  7. break;
  8. case 10:
  9. echo $row['title'].'<img src="p_w_picpath/wind/file/digest.gif">';
  10. break;
  11. case 01:
  12. echo '<b><font color="red">'.$row['title'].'</font></b>';
  13. break;
  14. case 00:
  15. echo $row['title'] ;
  16. break;
  17. default:
  18. echo $row['title'] ;
  19. }


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