【问题标题】:Insert value of checkbox and number input into database将复选框的值和数字输入插入数据库
【发布时间】: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.] ?这些点有什么用?我相信这是错误!

标签: php html sql checkbox


【解决方案1】:

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

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

  2. 你必须在插入部分取计数器并保存 ids,最后用数据库中的计数器值更新 ids 值....

【讨论】:

  • 是的,我正在考虑类似的事情......计算总行数。通过隐藏输入添加值。然后对于每个循环,直到 i
  • 你为什么用 i
  • 和复选框名称“choice[]”只会将复选框的值发布到数组中。
  • 所以你只需要计算选择[] 它只会给出所选复选框的总数并存储该值 ....
  • 目前,我只计算选中的框。问题是输入类型编号,名称为 order[] 将输出一个包含空值和输入值的数组
【解决方案2】:

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

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

修正线:

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

【讨论】:

  • 这是 echo "Choices: $var_checkbox[1][id],$var_checkbox[1][order] 的输出(也去掉了点):"Choices: Array[id],Array [订单]”
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多