将复选框和数字输入的值插入数据库

时间:2015-01-21 03:48:18

标签: php html sql checkbox

我尝试从这里结合两个答案: 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(number)的值存储在数组中,即使为null,而choice(checkbox)的值也不存在。 我可以做一个array_filter(),但是不能保证用户不会输入订单,而不能勾选一个选项复选框。 如果我将选择的长度与订单的长度进行比较,在过滤后,如果它们输出相同的大小,仍然无法保证,用户没有检查第x行的复选框,并在订单字段中添加了一个值,在线y。

也许有办法将未经检查的值传递给choice []变量为null,就像它在顺序[]中发生的那样?

2 个答案:

答案 0 :(得分:0)

这是什么? choice[.$id.]?点是什么?

我相信这就是虫子! 您可能之前尝试将$id连接到字符串中,只是忘了删除它们?

更正后的行:

echo "<td style='vertical-align: top;'><input type='checkbox' name='choice[$id][id]' value='$id'></td>";

答案 1 :(得分:0)

有一些方法可以做到这一点..

  1. 您必须通过jQuery计算所选复选框的总数,并在每个复选框检查或表单提交的视图页面的隐藏字段中设置这些值

  2. 你必须在插入部分上使用计数器并保存id,并在数据库中保存带有计数器值的最后更新ID值。