2015-01-21 151 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