• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

一进来就看见两个表单有关问题,其实小弟我也是冲着表单有关问题来的呀

php 搞代码 4年前 (2022-01-23) 17次浏览 已收录 0个评论

一进来就看见两个表单问题,其实我也是冲着表单问题来的呀
有如下数据表

id—-name—-show
1—–AA——1
2—–BB——0
4—–DD——0
33—-FF——1

读取后输出的操作表单如下:
AA
BB
DD
FF

程序目的:提交后,根据勾选状态重置表里面的所有字段的show值,比如AA没勾选,提交后将它设置为0,而DD被勾选了,提交后将它设置为1
但这里有一个问题,post过来的type数组只带有勾选元素,如本身AA的show是1,输出控制器在输出时将它默认设置为 checked=”checked”,即勾选,这时候我想将AA的show设置为0,所以关闭勾选,并且将本身没勾选的DD进行勾选(想把DD的show设置为1),提交表单,传来的type数组如下:
Array
(

本文来源gaodai.ma#com搞##代!^码@网*
搞gaodaima代码

[0] => 4
[1] => 33
)

即数据只传来了勾选的两个元素,第0个元素其实就是DD,第1个元素就是FF,前面的AA,BB没勾选就没传来,得到这个数组后,
就要根据数组值去找对应id的记录设置为1,但是没有传来的就设置为0,怎么弄?

===============
另一个方案,表单的name值用id命名,而不是数组,即如下表单(这是我的笨方法,加了个hidden记录最大的id值)
AA
BB
DD
FF

提交后,勾选的就提交上来了,我用CI框架的,这样来弄..
$maxid = 从数据库得到最大id;
$types = array();
for($i = 1; $i <= $maxid; $i++){
$types[$i] = ($this->input->post(‘type’.$i)==false)?0:1;
//没有勾选的话,比如post(‘type2’)会返回false,因为type2这个表单表量压根没有传过来..而传过来的都是勾选的,所以非false的就返回1
}

问题这样for循环就添加了很多个不存在的间断id,当然,解决办法就是从数组中获取存在的id组foreach一个个id取值.
请问还有没有其它办法?最终我其实就是想要一个这样的数组:描述了表单里所有选项的勾选状态.现在我只能获取到已勾选的,没勾选的居然不传变量过来我晕死了.

——解决方案——————–
只有选中的checkbox才会提交 第一种是合理的
——解决方案——————–
可以将所有checkbox的name值连成一个字符串,如:”type1,type2……”,将其传到后台,php用explode将其分割,将获得的数组和接收过来的post按键名取差集,得到的就是未勾选的
——解决方案——————–
其实两种办法是差不多的:

第一种:php里准备一个数组,array(1, 2, 4, 33); 遍历这个array, 检查array[i]是否在$_POST[‘type’]内,可以使用isset或者in_array。

第二种:和第一种是一样的.. 只不过用了一下字符串拼接.. array(1, 2, 4, 33), 遍历这个array,检查array[i]是否存在$_POST[‘type’ . $array[i]]


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一进来就看见两个表单有关问题,其实小弟我也是冲着表单有关问题来的呀

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址