PHP(2)复选框表单传值
复选框:通常是将一类内容以同样(同名)的形式传递给后台,数据库储存通常是一个字符储存。选中才会提交,不选不会提交。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!DOCTYPE html> <html> <head> <title>"测试"</title> <meta charset="utf-8"> </head> <body> <form method="post" action="./index.php?"> <input type="checkbox" name="hobby" value="basketball"/>basketball <input type="checkbox" name="hobby" value="football"/>football <input type="checkbox" name="hobby" value="pingpang"/>pingpang <input type="submit" value="提交"/> </form> </body> </html> |
1 2 3 4 5 6 7 8 9 | <?php //接收数据 echo'<pre>'; var_dump($_GET);//get方式提交的数据 echo'<hr>'; var_dump($_POST);//post方式提交的数据 echo'<hr>'; var_dump($_REQUEST); ?> |
我们选中了两个,后台却只提交了一个,是因为键值对中的关键值具有唯一性,两个选项的name属性相同,后面的会将前面的覆盖。
复选框的命名方式
1.在浏览器端,checkbox的name属性的值不论什么都会被浏览器毫无保留的提交
2.在PHP中$_POST、$_GET都会对同名的name属性进行覆盖。
解决方案
浏览器不认为[](浏览器不认为有特殊性),但是PHP认为[]有特殊性,系统自动认为该符号时数组的形式,所以PHP就会自动的将同名的但是带有[]的元素组合到一起形成一个数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html> <head> <title>"测试"</title> <meta charset="utf-8"> </head> <body> <form method="post" action="./index.php?"> <input type="checkbox" name="hobby[]" value="basketball"/>basketball <input type="checkbox" name="hobby[]" value="football"/>football <input type="checkbox" name="hobby[]" value="pingpang"/>pingpang <input type="submit" value="sub"/> </form> </body> </html> |
1 2 3 4 5 6 | <?php //接收checkbox数据 header('Content-type:text/html;charset=utf-8');//告诉浏览器当前服务器返回的内容是text/html,同时需要浏览器用utf-8字符集解析 echo'<hr>'; var_dump($_POST); ?> |
PHP处理复选框数据
1、单选按钮的数据处理
Radio button:可以出现多个选项,但是只能选择其中一个
(1)表单中使用name属性,使用同名即可;只能选中一个。
(2)后台接收数据也不需要额外处理。
(3)数据库储存的话只需要一个字段储存普通数据即可(数字或者字符串)
(4)PHP拿到数据之后组织SQL直接储存到数据表即可。
2.多选框的数据处理
· (1)表单中name属性使用数组格式,名字[](一类复选框数据使用一个)。
(2)后台接收到数据之后,是一个数组(数组不能储存到数据库)。
(3)PHP需要将数组转换成指定格式的字符串;使用分隔符分隔每一个元素并且形成字符串。
implode(数组,‘分隔符’),将数组转化为字符串,元素之间分隔符分隔。
(4)PHP组织SQL直接存储到数据库。
1 2 3 4 5 6 7 8 9 10 11 12 | <?php //将复选框内容储存到数据库 //表示设计 /* id name gender hobby 1 mark 男 篮球,足球,乒乓球 */ header('Content-type:text/html;charset=utf-8'); $hobby=implode($_POST['hobby'],','); print_r($hobby); ?> |
(5)如果是取出操作,那么取出数据之后使用explode字符串变成数组。
(6)在HTML显示中,通过判断复选框元素是否在数组中存在,来确定复选框checkbox是否有checked=“checkbox”属性;in_array()函数判断一个元素是否存在在一个数组中。
3、其他常规同名表单项的数据处理
(1)除开radio button 单选框和checkbox复选框,很少会出现同名的表单项。如果非要使用同名的来进行管理,那么可以采用checkbox方式进行操作。
复选框细节
如果复选框没有选中,那么浏览器就不会提交,这样会引起错误,因此在PHP接收使用数据的时候,应该先判断是否存在该数据。
可以使用isset()函数判断不为空。