2016-06-08 24 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