昨天自己给自己挖了一个坑,最后所说的switch case 其实很坑爹!如果不仅仅有0和1,那排列组合也复杂了,很容易遗漏。而且每种情况实际还是在嵌套。
一天过去,我本以为会被喷的狗血,木有想到,只有路过帮顶,所以不知道是失望呢,还是偷着乐。
今天继续意识流: http://bbs.lampbrother.net/read-htm-tid-132651.html
学习是漫长的,学习是发散的,学习是要自己找乐子的!项目过程更是如此,千万别像刘翔还没起跑,就倒下了!
下面是自己写帖子精华设置的一点点小感悟,抛砖引玉,2楼有问题求大神剖析(没学好)。
由于我不想加精、顶置、加亮、删除这些操作 一个一个提交 所以选择了多选框表单一次性提交数据。
设计思路:
如果没有选择的选项则是0,选择了的就是1,因为我在数据库中给帖子表设计了这些字段,例如is_special=1(tinyint类型),那么就是精华;is_special默认值是0。
提交表单页面代码如下(刚开始是这样写的)
- <form action="reset.php?fid=<?php echo $_GET['fid']?>&tid=<?php echo $_GET['tid']?>" method="post">
- <input type="checkbox" name="reset[]" value="1" /> 精华
- <input type="checkbox" name="reset[]" value="1" /> 加亮
- <input type="checkbox" name="reset[]" value="1" /> 顶置
- <input type="checkbox" name="reset[]" value="0" /> 删除
- <input type="submit" value="提交" />
- </form>
在执行页面做判断:
- $reset=$_POST['reset'];
- if($_POST['reset'][0]!=null){
- $is_special=1;
- }else{
- $is_special=0;
- }
- if($_POST['reset'][1]!=null){
- $is_light=1;
- }else{
- $is_light=0;
- }
- if($_POST['reset'][2]!=null){
- $is_up=1;
- }else{
- $is_up=0;
- }
- if($_POST['reset'][3]!=null){
- $is_pass=0;
- }else{
- $is_pass=1;
- }
发现还有问题(疏忽大意),只要选中一个,第一个(var_dump($is_special);)肯定输出的是int(0),因为没有个各个选项中的name值设置下标,自动生成的索引下标,如果第一个“精华”没有选中,那么第二个加亮选中了,那么提交过来,$_POST['reset'][0]对应的就是高亮的值了,所以第一个(var_dump($is_special))肯定输出的是int(0)了。
解决办法:
自己给各个checkbox 设置name值的数组设置下标就OK了
- <input type="checkbox" name="reset[0]" value="1" /> 精华
- <input type="checkbox" name="reset[1]" value="1" /> 加亮
- <input type="checkbox" name="reset[2]" value="1" /> 顶置
- <input type="checkbox" name="reset[3]" value="0" /> 删除
帖子列表页最后做显示(马上上菜)
- if($row['is_special']==1){
- if($row['is_light']==1){
- echo '<b><font color="red">'.$row['title'].'</font></b><img src="p_w_picpath/wind/file/digest.gif">';
- }else{
- echo $row['title'].'<img src="p_w_picpath/wind/file/digest.gif">';
- }
- }else{
- if($row['is_light']==1){
- echo '<b><font color="red">'.$row['title'].'</font></b>';
- }else{
- echo $row['title'] ;
- }
- }
上面幸好只有两个三个,四个、五个、六个这样关系交叉的还使用if吗?是不是要换成switch case 呢?那样反而清晰,简单!嗯,是的!
但是switch不支持多变量同时判断,例如switch($row['is_special'],$row['is_light'])就会报错!(Parse error: syntax error, unexpected ',' )
小弟若有所思
不巧想到把这些变量转换成字符串,然后再把这些字符串连接起来,不就OK啦!就像判断电路开关一样,呵呵!
//首先从数据库中查询到数据赋值给$row这个数组
- $max['special']=strval($row['is_special']);
- $max['light']=strval($row['is_light']);
- $mixstate=implode('',$max);
- switch($mixstate){
- case 11:
- echo '<b><font color="red">'.$row['title'].'</font></b><img src="p_w_picpath/wind/file/digest.gif">';
- break;
- case 10:
- echo $row['title'].'<img src="p_w_picpath/wind/file/digest.gif">';
- break;
- case 01:
- echo '<b><font color="red">'.$row['title'].'</font></b>';
- break;
- case 00:
- echo $row['title'] ;
- break;
- default:
- echo $row['title'] ;
- }
多个选项,也只需书写10101010样式,即可做true or false 判断,不用做多成嵌套式的判断了!
呵呵,学习嘛!自娱自乐,找点乐子,好过日子!