Home >Backend Development >PHP Tutorial >php 批量修改数据时 input[type=checkbox]发生的问题

php 批量修改数据时 input[type=checkbox]发生的问题

WBOY
WBOYOriginal
2016-06-23 13:43:40969browse

input[type=checkbox] 我用了js 把 数值 'On' 转成了方便我输入数据库的  1 和 0

$('input[type="checkbox"]').change(function(){    this.value ^= 1;});


表单太复杂,就不贴上来了
反正所有栏位我也填上了 name []

问题来了,我除了 $_POST["blank"]; 这个栏位其他都可以正常地批量更新

不是不能更新,是更新的次序有问题

以下是个详细的测试,比如页面上有5条数据可以批量修改

1.  ID1~5 设定$_POST["blank"] = 1  (打勾)
成功
2.  ID1~5 设定$_POST["blank"] = 0  (不打勾)
成功

3. 把 ID 2,3  设定$_POST["blank"] = 1

ID 1,2会变成 1  反而3没有改变

4. 再试试...  把ID 3,4,5 设定$_POST["blank"] = 1   (事先将全部设定回0)

结果不出所料,是ID 1,2,3 变成 blank = 1,而ID4 5 没有改变


理论上,PHP是知道我有多少个设定为blank = 1,但终是只把 排序最前面的定设为1

感觉上是array指针不对之类的?  但这又为什么其他栏位都非常准确正常地可以更新修改?  只有这个栏不能修改?

最烦恼的是知道怎样发生错误,但一直查不出原因来



if (isset($_POST["edit_menu"])) {    $gid =$_POST["gid"];    $sql = "";    $menuCount = count($_POST["id"]);    for($i=0;$i<$menuCount;$i++) {        $title = $_POST["title"];        $url = $_POST["url"];        $id = $_POST["id"];        $blank = $_POST["blank"];        $sql .= "UPDATE `menu` set                         title='" . $title[$i] . "',                        url='" . $url[$i] . "',                        blank='" . $blank[$i] . "'                    WHERE id='" . $id[$i] . "' AND gid = '$gid';";    }    $stmt = $pdo->exec($sql);}


回复讨论(解决方案)

没有被勾选的 checkbox 是不会被提交的!
php 只知道有多少个 checkbox 被选中,但不知道选中的是哪些
所以你需要通过指定 checkbox 的 value 来识别被选中的 checkbox,而不是让他做0、1转换 
checkbox.value 通常是备选项的序号或 id

没有被勾选的 checkbox 是不会被提交的!
php 只知道有多少个 checkbox 被选中,但不知道选中的是哪些
所以你需要通过指定 checkbox 的 value 来识别被选中的 checkbox,而不是让他做0、1转换 
checkbox.value 通常是备选项的序号或 id


我用checkbox是想给用户选择这个项目(record) 写入SQL时,设定是否由新一页打开

因为是在列表中给用户修改,貌似只有这个选择(用checkbox)

如果不用1/0  我接收到的是  On / 'Null'

结果是1/0 一样的

有什么其他的解决办法?

在客户端解决不可以吗?
打钩的,就把target=”_blank“, 写进对应的链接的属性里面,

$('input[type="checkbox"]').click(function(){            var link_id,checkbox_id;            checkbox_id=$this.id;            //得到当前复选框的ID赋值到checkbox_id,变换成对应链接的ID,赋值给link_id,然后            $(link_id).attr(  "target",                                     ($(checkbox_id).value==‘1’)?"_blank":"_self"                                 );});

在客户端解决不可以吗?
打钩的,就把target=”_blank“, 写进对应的链接的属性里面,

$('input[type="checkbox"]').click(function(){            var link_id,checkbox_id;            checkbox_id=$this.id;            //得到当前复选框的ID赋值到checkbox_id,变换成对应链接的ID,赋值给link_id,然后            $(link_id).attr(  "target",                                     ($(checkbox_id).value==‘1’)?"_blank":"_self"                                 );});



我是要把是否 _blank  保存到数据库

给前台调用,这是个后台的批量修改页

问题是不管我把checkbox的值修改成什么,只要没有勾选,HTML ($_POST) 就没有发送任何数值到PHP处理

唠叨大哥说的是对的,
复选框不是这样用的,
不是选中或不选中其值会变,而是选中后,标签会有个checked="checked"的属性。

复选框的值是用来定位的。你把复选框的值变成和id一样就行了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn