使用变量名访问元素
access element with variable name
我有一个复选框 table 声明如下:
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。
所有日子(周一至周六)都必须这样做
按照你描述的方式,这是不可能的。不能将数组声明作为变量名。但是,我有点了解(并假设)您想要做的事情。
动态创建输入元素后,还要创建一个隐藏的输入元素,其中包含 "count" 创建的元素数量。然后,在 PHP 代码中,首先访问 count 元素以找出存在的元素数量。然后,遍历该索引,为每个元素构建循环名称并访问它们的值。
您可以进行如下操作:
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
}
}
我很欣赏所提供的建议,但实际上我尝试了另一种解决方案。我没有按名称或 ID 来引用元素,而是按 class 和名称来引用它们。我使用 class(变量)来执行切换功能和名称(这是一个一维数组)来获取它们的值。
简而言之,这是代码的总体思路:
复选框声明
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 循环遍历它
我有一个复选框 table 声明如下:
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。 所有日子(周一至周六)都必须这样做
按照你描述的方式,这是不可能的。不能将数组声明作为变量名。但是,我有点了解(并假设)您想要做的事情。
动态创建输入元素后,还要创建一个隐藏的输入元素,其中包含 "count" 创建的元素数量。然后,在 PHP 代码中,首先访问 count 元素以找出存在的元素数量。然后,遍历该索引,为每个元素构建循环名称并访问它们的值。
您可以进行如下操作:
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
}
}
我很欣赏所提供的建议,但实际上我尝试了另一种解决方案。我没有按名称或 ID 来引用元素,而是按 class 和名称来引用它们。我使用 class(变量)来执行切换功能和名称(这是一个一维数组)来获取它们的值。
简而言之,这是代码的总体思路: 复选框声明
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 循环遍历它