2015-01-21 174 views
1

我想结合从这里两个答案: counting how many checkbox are checked php/html 这里: validating input types "checkbox" and "number" php/html插入值到数据库

我的目标是要算多少复选框被选中,并与沿插入他们的价值观号码输入中的数字值。

我发现其他各种关于它的帖子,但无法找出答案。

下面是代码:

echo '<form action="" method="post">'; 

然后,我有一个循环,在那里我创造我的表行,用的复选框。 其中$ 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 ,,,,

我需要从复选框choiced以某种方式链接到从数字字段的命令。实现这一点的唯一方法是,如果它们具有相同的名称,但具有不同的索引,这就是为什么我有矩阵,在第一个索引中,它保存了在每个循环中生成的id号,并在第二个,实际的名称,这使得它们之间的区别(ID和顺序)。

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

也许有一种方法可以将未检查的值传递给选择[]变量为空,它与[]中的顺序相同?

+0

您目前正在混合不同的MySQL API与mysql_'和'mysqli_'。您希望使用'mysqli_real_escape_string()'而不是'mysql_real_escape_string()',其中['mysqli_real_escape_string()'](http://php.net/manual/en/mysqli.real-escape-string.php)要求将数据库连接作为第一个参数传递。 – 2015-01-21 04:00:53

+0

@Fred,他根本不需要逃避那些,因为它们是数字(参见'%d'?)。 – 2015-01-21 04:01:58

+0

我知道,我已经尝试过两种方法,但是我对mysqli_real_escape_string()有不好的体验。 – 2015-01-21 04:02:31

回答

0

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

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

更正行:

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

这是echo“选项:$ var_checkbox [1] [id],$ var_checkbox [1] [order](也删除了点)的输出:”选项:Array [id],Array [order]“ – 2015-01-21 04:30:25

0

有一些方法来做到这一点..

  1. 你必须通过jQuery在计算总的没有选中的复选框,并设置在隐藏字段值的那些查看每个复选框上的检查或在表格提交

  2. 你必须采取计数器插入部分和保存ID和最后更新ids值与计数器值在数据库中...

+1

是的,我正在考虑类似的东西...计算总行数,通过隐藏输入添加值 然后对于每个循环,直到我<计数,检查复选框是否已被选中,如果是,则添加值到DB。但是,我认为这太复杂了...... – 2015-01-21 05:04:13

+0

为什么你用我i Affan 2015-01-21 05:08:46

+0

和复选框名称“choice []”只会在数组中输入复选框的值。 – 2015-01-21 05:08:55