【问题标题】:Implode function doesn't store data as expected内爆函数未按预期存储数据
【发布时间】:2016-10-08 12:40:04
【问题描述】:

我已经发布了这个,但最后我没有弄清楚。我有一个带有一些复选框的 php 表单(其中一些被启用,一些被禁用)。其中每一个都有一个来自数据库的 id (id1=1, id2=2, id3=3, ...)。

所以当我提交表单时,我想将这些 id 存储在这样的数据库表中:如果我只选择第一个 id=1 的复选框,我应该在我的表上存储“1”,如果我选择第一个和第三个我应该存储'1、3'。问题是我只选择了第一个并且存储的数据是“1、2、3、4”,因为我有 4 个复选框已启用。

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> 

插入前的IMPLODE:

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;

    } 

【问题讨论】:

  • 那么,你得到什么输出/错误是什么?
  • 我想根据用户选择的复选框存储 id。现在我存储 1, 2, 3, 4,即使我只选择 id=1 的复选框..
  • opt2 是一个隐藏字段数组,其值与复选框的值相同,但它们总是被发送,您确定不应该在 PHP 中使用 opt 吗?跨度>
  • 不,但我使用opt[] 进行另一个插入..这不是问题吗?
  • 那么我完全不知道你的问题实际上是在问什么......

标签: php mysql implode


【解决方案1】:

不要使用单独的隐藏控件来存储 id,而是使用复选框的 name 属性来执行此操作:

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

对于 id 3 记录,复选框的名称将类似于 name="opt[3]"

在处理表单提交的 php 脚本中,array_keys($_POST['opt']) 将为您提供礼物 ID,而array_values($_POST['opt']) 将返回积分。您将知道哪个点与哪个礼物 ID 相关联,因为 $_POST['opt'] 的键是礼物 ID。

还请注意,在单个字段中以逗号分隔的字符串存储多个值并不是真正的好习惯。您应该标准化您的数据结构并将单独的值存储在单独的记录中。

【讨论】:

  • 我需要foreach 来获取键和值..我说的对吗?
  • 在您的代码中,我看不到您是否更新了复选框生成代码。是你以前用的那个。如果您不更新该部分,那么您不能期望结果有任何变化,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多