2016-06-08 25 views
0

我已經發布了這個,但最後我沒有弄清楚這一點。我有一些複選框的PHP表單(其中一些是啓用和一些禁用)。其中每一個都有一個來自數據庫的id(id1 = 1,id2 = 2,id3 = 3,...)。Implode函數沒有按預期存儲數據

因此,當我提交表單時,我想將這些id存儲在數據庫表中,如下所示:如果我只選擇id = 1的第一個複選框,我應該在表格中存儲'1',如果我選擇1st第三我應該存儲'1,3'。問題是我只選擇1st,而存儲的數據是'1,2,3,4',因爲我有4個複選框ENABLED。

PHP形式:

<form method='post' action='insert.php'> 
    . 
    . 
    . 

while($row_select4 = $stmt_select4->fetch(PDO::FETCH_ASSOC)){ 

    if($form_points>=$row_select4['points']) { 

     $points = $row_select4['points']; 


     echo ' 

      <div> 
      <div class="feed-activity-list"><div style="border: 0.5px solid green; border-right-style:none;" class="input-group m-b"><span class="input-group-addon"> 
      <input type="checkbox" onclick="enable_form();" id="checkbox" name="opt[]" value="'.$points.'"></span> 
      <input type="hidden" name="opt2[]" value="'.$row_select4['id'].'"> 


      <div class="feed-element"> 
      <a href="profile.html" class="pull-left"> 
      <img alt="image" class="img-circle" src="'. $row_select4['image_url']. '" 
      </a>'; 
    ?> 


    <button type="submit" id="submit" name="eksasrgirwsh" class="btn btn-w-m btn-primary">ΕΞΑΡΓΥΡΩΣΗ</button> 
      </form> 

插入之前爆:

if(isset($_POST['opt2'])){ 



     foreach ($_POST['opt2'] as $value) { 
      $gift = $_POST['opt2']; 

      $sliced = array_slice($gift, 0, -1); 
      $gift_id = implode(", ", $sliced); 
      } 

我存儲在表$ gift_id ..

檢查:

if(isset($_POST['opt'])){ 

     $total_points = 0; 
     $points = array_values($_POST['opt']); 



      foreach ($points as $value) { 
       $total_points += $value; 
           } 
      echo $total_points; 




       $gift_ids = ''; 
       $gift = array_keys($_POST['opt']); 

       foreach ($gift as $key => $value) { 
       $gift_ids = $value; 
       $gift_ids2 = implode(", ", $gift_ids); 
           } 
        echo $gift_ids2; 

    } 
+0

那麼,你會得到什麼輸出/什麼是錯誤? – Epodax

+0

我想存儲ID的取決於用戶選擇哪個複選框。現在我存儲'1,2,3,4',即使我只選擇ID = 1的複選框.. – platanas20

+1

'opt2'是一個隱藏字段的數組與與複選框相同的值,但它們始終發送,您確定不應該在PHP中使用'opt'嗎? –

回答

1

代替使用單獨的隱藏控制s到存儲的ID,使用複選框的name屬性做到這一點:

'... 
<input type="checkbox" onclick="enable_form();" id="checkbox" name="opt['. $row_select4['id'].']" value="'.$points.'"></span> 
...'; 

複選框的名字會像name="opt[3]"的ID 3記錄。

在php腳本處理中,表單提交array_keys($_POST['opt'])會給你禮物id,而array_values($_POST['opt'])會返回積分。您將知道哪個點與哪個禮物ID相關聯,因爲$ _POST ['opt']的鍵是禮物ID。

請注意,在單個字段中以逗號分隔的字符串存儲多個值並不是一個很好的做法。您應該規範化數據結構並將單獨的值存儲在單獨的記錄中。

+0

我需要'foreach'來獲取鍵和值..我正確嗎? – platanas20

+0

在您的代碼中,我看不到您是否更新了複選框生成代碼。這是你以前用過的那個。如果你不更新那部分,那麼你不能指望結果有任何變化,你能嗎? – Shadow