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


Insert value of checkbox and number input into database

我尝试从这里组合两个答案:计算选中了多少个复选框 php/html在这里:验证输入类型"复选框"和"数字"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 和顺序)。

我尝试了其他各种事情,但这一切都回到了同一个问题......顺序(数字)的值存储在数组中,即使为 null,而选择的值(复选框)则不存储。我可以做一个array_filter(),但不能保证用户不会输入订单,同时不勾选选择复选框。如果我将选择的长度与订单长度进行比较,过滤后,如果它们输出相同的大小,仍然无法保证用户没有选中第 x 行的复选框,并在订单字段中添加一个值,在第 y 行。

也许有一种方法可以将未经检查的值作为 null 传递给 choice[] 变量,就像它按顺序 [] 发生的方式一样?

这是什么? choice[.$id.] ?这些点是干什么用的?

我相信这是错误!
您可能之前试图将$id连接到字符串中,只是忘记删除它们?

更正的行:

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

方法可以做到这一点..

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

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