【发布时间】:2015-03-19 12:07:18
【问题描述】:
我尝试结合此处的两个答案: counting how many checkbox are checked php/html 和这里: validating input types "checkbox" and "number" php/html
我的目标是计算有多少复选框被选中,并将它们的值与数字值一起插入数字输入中。
我找到了各种关于它的其他帖子,但找不到答案。
代码如下:
echo '<form action="" method="post">';
然后我有一个 for 循环,我在其中创建表格行,并带有复选框。 其中 $id = $row[0] 在每个循环中更新,这是我的条目的 id 等价物。 (
的输出echo '<td style="vertical-align: top;">' . $row[0] . '</td>';
正确显示 id)
echo '<tr>';
echo "<td style='vertical-align: top;'><input type='checkbox' name='choice[$id][id]' value='$id'></td>";
echo "<td style='vertical-align: top;'><input type='number' name='choice[$id][order]' size='20'></td>";
echo '</tr>';
echo '<b> <input type="submit" value="Insert"></b>';
然后,在下一页,我有这个:
$var_checkbox=$_POST['choice'];
$sql_var_id = "SELECT id FROM custom_form WHERE id=(SELECT max(id) FROM custom_form)";
$var_id_result = mysqli_query($link,$sql_var_id);
$var_id = mysqli_fetch_array($var_id_result);
$count=count($var_checkbox[$var_id[0]]);
for($i=0; $i<$count; $i++){
if($var_checkbox[$i]!= NULL){
$sql1 = sprintf("INSERT INTO custom_form_has_property (custom_form_id,property_id,field_order) VALUES ('%d','%d','%d');",
$var_id[0],
$var_checkbox[$var_id[0]][id],
$var_checkbox[$var_id[0]][order]
);
$result1 = mysqli_query($link,$sql1);
}
}
问题是,没有插入复选框或数字的值。
(作为旁注,尝试更具体) 如果不是矩阵,我使用
echo "<td style='vertical-align: top;'><input type='checkbox' name='choice[]' value='$row[0]'></td>";
echo '<td style="vertical-align: top;"><input type="number" name="order[]" size="2"></td>';
还有
$var_checkbox=$_POST['choice'];
$order = $_POST['order'];
然后
echo "Orders: $order[0],$order[1],$order[2],$order[3],$order[4],$order[5],$ordemr[6]";
echo "Choices: $var_checkbox[0],$var_checkbox[1],$var_checkbox[2],$var_checkbox[3],$var_checkbox[4],$var_checkbox[5],$var_checkbox[6]";
会输出
订单:1,,2,,3,,选择:1,3,13,,,,
我需要从复选框中选择的内容以某种方式链接到数字字段中的订单。实现这一点的唯一方法是,如果它们具有相同的名称,但索引不同,这就是为什么我有矩阵的原因,在第一个索引中,它保存了在每个循环中生成的 ID 号,在第二个索引中, 实际名称,用于区分它们(id 和 order)。
我尝试了其他各种方法,但都回到了同一个问题...... order (number) 的值存储到数组中,即使为 null,而 choice (checkbox) 的值不存储。 我可以做一个array_filter(),但不能保证用户不会输入订单,同时不会勾选选择复选框。 如果我将选择的长度与订单的长度进行比较,过滤后,如果它们输出相同的大小,仍然不能保证用户没有选中第 x 行的复选框,并在订单字段中添加了一个值,在第 y 行。
也许有一种方法可以将未经检查的值作为 null 传递给 choice[] 变量,就像在 order[] 中发生的方式一样?
【问题讨论】:
-
您目前正在混合 MySQL API
mysql_和mysqli_,它们不会相互混合。您希望使用mysqli_real_escape_string()而不是mysql_real_escape_string(),其中mysqli_real_escape_string()要求将数据库连接作为第一个参数传递。 -
@Fred,他根本不需要逃避那些,因为它们是数字(见
%d?)。 -
我知道,我都试过了,但是我对 mysqli_real_escape_string() 的体验很糟糕。
-
不管怎样,如果你想使用
real_escape_string(),你不能混用你现在正在做的API。 -
这是什么?
choice[.$id.]?这些点有什么用?我相信这是错误!