PHP(2)复选框表单传值


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()函数判断不为空。