首页 > 代码库 > Dealing with Multiple-Choice Form Fields(3) - Handling checkbox groups

Dealing with Multiple-Choice Form Fields(3) - Handling checkbox groups

这一节有一些新鲜的内容:

1、多个选项的checkbox,同类的所有的checkbox的name值都是一样的,所以用单个的值很难区分他们,所以这里输入的值就是数组了。

之前还一直奇怪为什么在对输入的值的处理的时候还要考虑数组的情况,现在知道了。

那这一节我们要做什么呢?

1、要给checkbox的name添加一个不同的样式[];就像下面这样(这里的论语放的地方不规范,没有用标签包围,不过只做演示用,这里不影响):

 1 <input class="books" type="checkbox" name="books[]" value="http://www.mamicode.com/lunyu">论语 

这样我们得到的输入值就是一个数组,即$_POST里面可能会有一个$books = (‘lunyu‘,‘shijing‘,‘guwenguanzhi‘);(诗经和古文观止是另外两个具有同样name的input)

2、首先,同上两节学习的checkbox和radio一样,如果用户在不选择任何一个checkbox的情况下,点击submit按钮,$_POST中是不会有$books的量的,我们甚至连一个空数组$books都得不到,不过好在我们知道这种情况(即用户没有选择任何选项点击提交按钮的时候,反映在代码上就是($_POST && isset($_POST[‘books‘]) == false的情况)),这种情况下我们可以认为的设定$_POST[‘books‘] = array();(不能设置$books = array(),因为这个代码是放在包含mail_process.php之前的,$books是在mail_process.php之中定义的,所以这个时候$books是undefined。)

1     if(!isset($_POST[‘books‘])){2         3         $_POST[‘books‘] = array();4     }

3、然后我们要保存用户的输入,就是如果用户其他的输入不合法,确保他再次输入的时候已经输入正确的选项能够保存下来。用到的代码如下,其实和原来的原理是一样的:

1  <input class="books" type="checkbox" name="books[]" value="http://www.mamicode.com/lunyu"2  <?php if($_POST && in_array(‘lunyu‘,$books)){echo ‘checked‘;} ?>3  >论语

4、增加一个验证,验证用户的输入量必须大于某个设定的数值。我们只要设法获得用户已经选择的checkbox的数量,然后和我们设定的一个量做对比即可。

1     $minBooks = 2;2     if($_POST && count($_POST[‘books‘]) < $minBooks){3         $errors[] = ‘books‘;4     }

count($_POST[‘books‘])得到的就是数组$books里面的数量(但这个时候还么有require mail_process.php所以不能用$books),也就是用户选择的的书的数量。

这样,如果in_array(‘books‘,$errors)我们就可以断定用户选择的书的数量是少于$minBooks的,就可以相应的显示错误提示信息了。说到这里还不会的话,说明前面的课没好好学哦~~

 

后面的,由于我们已经将这个值转化的和以前的输入是一样的,就不用担心后面的逻辑了~~

Dealing with Multiple-Choice Form Fields(3) - Handling checkbox groups