【问题标题】:Access values of multiple checked boxes访问多个复选框的值
【发布时间】:2013-07-13 10:08:24
【问题描述】:

我想访问动态创建的复选框的值。

@ $db = mysql_connect("abc", "abc", "");
                            mysql_select_db("abc");

                            $strSQL = "SELECT * FROM student";
                            $rs = mysql_query($strSQL);
                            $num_rows = mysql_num_rows($rs);
                            echo "<i style='color:#fff'> Number of Students = ".$num_rows."</i>";
                            $i=1;
                            while($r = mysql_fetch_array($rs)){

                            echo "<tr>";
                            echo "<td class='promotetabledata'>".$r[7]."</td>";
                            echo "<td class='promotetabledata'>".$r[6]."</td>";
                            echo "<td class='promotetabledata'><input type='checkbox' class='pr'  value='".$r[7]."'/></td>"; /*dynamically created check boxes*/
                            echo "</tr>";
                            $i++;
                }   

使用 AJAX 将结果显示在 promoteresults div

<form id="promotionform" action="promotestudents.php" method="POST">
            <div id="promoteresults">The results will show up here..!!
            </div>


            <div style=" position:relative; margin-top:10px; padding-left:44%;">  
                <button type="submit" class="button black">Promoted</a>
            </div>
    </form>

当点击提升按钮时,我想获取选定的记录并更新它们的值。要更新记录,我需要 PHP。我可以使用 Javascript 访问选定的记录

var selected = document.getElementsByClassName('pr').checked;

但是如何获取 HTML 表单中的检查记录及其在 PHP 中的值

使用 Javascript 的 AJAX 调用

function getpromotestudents()
{
//alert("hi");

var xmlhttp;
var select1 = document.getElementById('promotefacultyselect1'); 
var facutlyselect = select1.options[select1.selectedIndex].value;


var select2 = document.getElementById('promotedepartmentselect1'); 
var deptselect = select2.options[select2.selectedIndex].value;


var select3 = document.getElementById('promotecourseselect1'); 
var courseselect = select3.options[select3.selectedIndex].value;


var select4 = document.getElementById('promoteyearselect1'); 
var yearselect = select4.options[select4.selectedIndex].value;


var select5 = document.getElementById('promotesemselect1'); 
var semselect = select5.options[select5.selectedIndex].value;


var  the_data = 'faculty='+facutlyselect+' &dept='+deptselect+' &course='+courseselect+' &year='+yearselect+' &sem='+semselect;


if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  /*
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("searchresults").innerHTML=xmlhttp.responseText;
    }
  }*/



  xmlhttp.open("POST", "getpromotestudents.php", true);         // set the request
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");            // adds  a header to tell the PHP script to recognize the data as is sent via POST
  xmlhttp.send(the_data);       // calls the send() method with datas as parameter

  // Check request status
 // If the response is received completely, will be transferred to the HTML tag with tagID
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
      document.getElementById("promoteresults").innerHTML = xmlhttp.responseText;
    }
  }
}

【问题讨论】:

  • 请向我们展示您的 ajax 调用。你在用 jQuery 吗?
  • 如果他使用 jQuey 我认为他不会为 getElementsByClassName 烦恼 :)
  • @vinodadhikary 我正在使用 javascript,我已更新问题以向您展示 AJAX 部分

标签: php javascript html ajax forms


【解决方案1】:
 <td class='promotetabledata'><input type='checkbox' name='pr[]'  value='".$r[7]."'/></td>   

这是我最终编写的用于访问所有复选框并对选中的复选框执行所需操作的 PHP 代码。

<?php
    $checkbox = $_POST['pr'];

    foreach($checkbox as $value){

            if(isset($checkbox)){

            echo '<script>alert("'.$value.'")</script>';
            }
    }
    ?>

【讨论】:

    【解决方案2】:

    像这样给checkboxname属性中的每一个

    <input type='checkbox' class='pr'  value='8' name='chk[]'/>
    

    比在php中你可以得到它们如下

    <?php
     $chkbox = $_POST['chk'];
    
     foreach($chkbox as $a => $b){
        echo $chkbox[$a];
     }
    ?>
    

    【讨论】:

      【解决方案3】:

      将每个复选框的name 属性设置为pr[],如:

      echo "<input type='checkbox' class='pr' name='pr[]' value='".$r[7]."'/>";
      

      然后,第一个复选框将位于$_POST['pr'][0],第二个复选框位于$_POST['pr'][1],依此类推。

      【讨论】:

      • 您也可以自己设置名称为pr[0]等,以防您需要知道被选中的确切复选框。
      • 我读过,name 属性在 HTML5 中已被弃用,而是首选使用 id 或 class。
      • 始终同时使用 id/name,除非您不关心未来 10 年的 6/7/8/9
      • @Akash Gupta :不适用于表单元素。
      • 幸运的是,HTML5 将在 2014 年正式发布,它现在基本上只是一个候选版本,然后我们可以再等 10 年让 IE9 死去,然后才能以它应该的方式使用它与 IE10 一起使用 .. 或 20 :)
      猜你喜欢
      • 2018-01-15
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      相关资源
      最近更新 更多