【问题标题】:PHP Checkbox array validatingPHP复选框数组验证
【发布时间】:2014-08-29 00:45:31
【问题描述】:

有一些复选框,我需要用“0”(未选中)和“1”(选中)将其验证为格式。

<input type="checkbox" name="subcategory1[]" >Text 1<br>
<input type="checkbox" name="subcategory1[]" >Text 2<br>
<input type="checkbox" name="subcategory1[]" >Text 3<br>

我尝试使用此代码验证它(在互联网上找到):

$sc1 = "";
for($i=0; $i<=2; $i++)
  {
  if(isset($_POST['subcategory1'][$i])){ $sc1 .= '1'; }
  else { $sc1 .= '0'; }   
  }

首先效果很好,但是当我添加更多复选框时,这不起作用。它在 $sc1 的开头设置所有“1”。数一数。

可能是它们在 3 个 div 中(一列一个 div),但名称仍然相同?

Edit1: $sc1 应该看​​起来像 010

【问题讨论】:

    标签: php html


    【解决方案1】:

    这是因为您在循环中使用了 $sc1 .=。你正在添加你的价值观。所以一旦它设置为 1,任何 0 都会被添加。 摆脱循环中的句号(.= 应该只是 =)

    更新:你应该把键放在数组中

    <input type="checkbox" name="subcategory1[1]" >Text 1<br>
    <input type="checkbox" name="subcategory1[2]" >Text 2<br>
    <input type="checkbox" name="subcategory1[3]" >Text 3<br>
    

    【讨论】:

    • 感谢您的回复,但 $sc1 应该看​​起来像 f.e. 001101 结尾(好像是 111000)
    • 好的,如果没有完整的脚本,很难准确地告诉它发生了什么以及你想要什么。你应该把数字放在数组键中: Text 1
      Text 2 文本 3
    【解决方案2】:

    改变

    for($i=0; $i<=2; $i++)
    

    for($i=0; $i<count($_POST['subcategory1']); $i++)
    

    如果您添加更多复选框,则需要循环所有复选框,而不是像您正在做的那样只循环 3 个

    【讨论】:

    • 感谢回复,我将 2 提高到我需要的数字,这只是示例,只有 3 个复选框
    【解决方案3】:

    这可能是因为您的循环并未针对所有变量运行。使用count()统计for循环中$_POST['subcategory1']的总数或使用foreach循环。

    【讨论】:

    • 感谢回复,我将 2 提高到我需要的数字,这只是示例,只有 3 个复选框
    【解决方案4】:

    您应该进行一些更改。

    为每个复选框添加一个值,以便您知道表单发布提交了哪个复选框:

    <input type="checkbox" name="subcategory1[]" value='1'>Text 1<br>
    <input type="checkbox" name="subcategory1[]" value='2'>Text 2<br>
    <input type="checkbox" name="subcategory1[]" value='3'>Text 3<br>
    

    接下来循环遍历每个 $_POST['subcategory1'] 以查看在表单发布数据中发送了哪些复选框:

    $checked = []; // start with empty array
    for ($x = 0; $x < count($_POST['subcategory1']); ++$x) {
      $checked[] = $_POST['subcategory1'][$x]; // add value to array
    }
    

    此更改的原因是:如果未选中复选框,则在提交表单时不会将其发送到服务器。这将为您构建一个包含已选中复选框的值的数组。

    例如,如果我检查了 Text 1 和 Text 3 复选框,则在 for 循环之后的 $checked 转储将显示名为“value”的属性的值:

    array (size=2)
      0 => string '1' (length=1)
      1 => string '3' (length=1)
    

    【讨论】:

    • 谢谢,如果我需要字符串 f.e. 000110,如何编辑代码,使其“接受”未选中的复选框(或仅添加“0”)?
    猜你喜欢
    • 2011-10-11
    • 2018-10-24
    • 2016-06-24
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2013-01-05
    • 2012-10-01
    相关资源
    最近更新 更多