【问题标题】:access element with variable name使用变量名访问元素
【发布时间】:2015-03-30 18:48:30
【问题描述】:

我有一个这样声明的复选框表:

 for ($x = 0; $x < 6; $x++) {
                echo "<tr>";
                echo "<td>"; echo $days[$x];  echo '</td>'; //displays days

                       echo '<td><input type="checkbox" name="check_list[]" onClick="toggle(this, '.$x.')" value="1"/> All';
                       echo '<input type="hidden" name="check_list[]" onClick="toggle(this, '.$x.')" value="0"/></td>'; //creates check all buttons

                       for ($y = 0; $y < 12; $y++){
                        echo '<td><input type="checkbox" name="'.$x.'" value="1"> Bar 1<br/></td>';  //creates the other buttons
                        }
                 echo "</tr>";
            } 

name="check_list[]" 复选框选中时选中同一行中的所有复选框。这是用这个脚本完成的:

<script language="JavaScript">
                    function toggle(source, id) {
                            checkboxes = document.getElementsByName(id);
                            for(var i=0, n=checkboxes.length;i<n;i++) {
                                checkboxes[i].checked = source.checked;
                            }
                    }
</script>

然后数据在数据库中是这样存储的:

<?php
        $i=0;       $store[20];     $check[20];
    foreach($_POST['check_list'] as $value){
            $store[$i] =  $value;               $i= $i + 1;
    } 



    $check = str_split(preg_replace('/10/','1',implode('',$store)));
     array_walk($check, 'intval');



    if($check[0]) {      $monday  = 1; }        if(!$check[0]) {$monday  = 2; }                 
    if($check[1]) {      $tuesday  = 1; }       if(!$check[1]) {$tuesday  = 2; }                    
    if($check[2]) {      $wednesday  = 1; }     if(!$check[2]) {$wednesday  = 2; }                  
    if($check[3]) {      $thursday  = 1; }      if(!$check[3]) {$thursday  = 2; }               
    if($check[4]) {      $friday  = 1; }        if(!$check[4]) {$friday  = 2; }                 
    if($check[5]) {      $saturday  = 1; }      if(!$check[5]) {$saturday  = 2; }
?>

显然,这不是全部代码(我编写了 sql 查询来连接和插入这些天的变量。它确实有效)。但到目前为止,我只取每一行的第一个复选框的值。这意味着如果我选中它,该行的所有复选框都会被选中。但我只阅读了该行的所有复选框都被选中的事实。如果我只连续选中一个普通复选框,则不会发布其值,并且我存储的唯一信息是并非所有复选框都被选中(由值 2 表示)。

我想要做的是取每一行的普通复选框的值,并将它们连接成一个数字。例如,对于星期一复选框(选中、未选中、未选中、选中),我将存储 $monday = 1221。 所有日子(周一至周六)都必须这样做

【问题讨论】:

  • &lt;input type="text" name="'.$x.'[]" &gt; 会做吗?
  • @acontell:在 php 代码中解决它们总是存在问题(看问题的第二部分)。
  • 好的,我想我明白了,我把它作为答案发布了

标签: php arrays post checkbox


【解决方案1】:

按照你描述的方式,这是不可能的。不能将数组声明作为变量名。但是,我有点了解(并假设)您想要做什么。

在动态创建输入元素后,还要创建一个隐藏的输入元素,其中包含创建的元素数量的“计数”。然后,在 PHP 代码中,首先访问 count 元素以找出存在多少元素。然后,遍历该索引,为每个元素构建循环名称并访问它们的值。

【讨论】:

    【解决方案2】:

    你可以这样做:

    for ($y = 0; $y < 12; $y++){
            <input type="text" name="matrix['.$x.']['.$y.']" value="Text" />
    }
    

    在你的服务器中:

    foreach($_POST['matrix'] as $key => $value)  {
       echo $key;// Value of $x
       foreach($value as $k => $val) {
            echo $k;// This would be the value of $y
            echo $val;// This would be the value of the inputs
        }
    }
    

    【讨论】:

      【解决方案3】:

      我很欣赏所提供的建议,但我实际上尝试了另一种解决方案。我不是按名称或 id 来引用元素,而是按类和名称来引用它们。我使用类(变量)来执行切换功能和名称(它是一个一维数组)来获取它们的值。

      简而言之,这就是代码的大致思路: 复选框声明

      echo '<td><input type="checkbox" class="'.$x.'" name="check_list[]"  value="1"> <br/>';
      

      切换功能:

      function toggle(source, id) {
                                  checkboxes = document.getElementsByClassName(id);
                                  for(var i=0, n=checkboxes.length;i<n;i++) {checkboxes[i].checked = source.checked;}
      }
      

      获取值的php代码:

      $i=0;       $unclean[180];
      foreach($_POST['check_list'] as $value){
                  $unclean[$i] =  $value;             $i= $i + 1;
      } 
      

      然后,知道矩阵的维度,我只需将这个一维数组分成一个一维数组(基本上是一个矩阵)的数组,用 for 循环遍历它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 2012-04-29
        相关资源
        最近更新 更多