【问题标题】:check correctly checkboxes from mysql (php)从 mysql (php) 正确检查复选框
【发布时间】:2018-08-26 16:31:00
【问题描述】:

我对复选框有疑问。 我有一些项目,您可以按类别过滤它们。 所以问题是当你想要编辑一个自动检查正确类别的项目时。 here you see a project but the categories are empty

在我的数据库中,我使用的是一个组合表 - 一个用于插入我的类别,一个用于项目,我有一个组合表。

您在这里看到我的代码,用于显示 checkboxes 并选择进行编辑,所以现在我寻求帮助,以检查属于该项目的正确 checkbox

<div id="categoriefilter">
  <?php     
  $sql = "SELECT * FROM `categories` ORDER BY `id` ASC";
  $cats = DB::getResult($sql);
  foreach($cats as $cat){
  ?>
  <label>
      <input name="cat[]" type="checkbox" value="<?php echo $cat['id']; ?>" >
      <?php echo $cat['categorienaam']; ?>
  </label>
  <?php
  }
  ?>
</div>

【问题讨论】:

    标签: php html


    【解决方案1】:

    如果我正确理解您的问题。这里需要 3 张桌子

    表 1:projectsid, name, ...
    表2:categoriesid, name, ...
    表3:projects_categoriesproject_id, category_id, ...

    需要第三张表来存储项目选择的类别

    在您的项目页面内
    您需要执行以下操作:

    1. 按 id 选择您的项目
    2. 选择类别
    3. 选择与项目相关的类别(来自表3)

    这是一个例子(这不是一个工作代码,只是一个展示)

    //  your project
    $project = DB::getResult("SELECT * FROM project WHERE id = :id "); // <== id here
    
    // list of categories
    $categories = DB::getResult("SELECT * FROM categories ");
    
    // list of categories for this project
    $project_categories = DB::getResult("SELECT category_id FROM projects_categories WHERE project_id = :project_id ");
    $project_categories = (array) $project_categories; // in case DB::getResult is not array
    
    <?php
        foreach($categories as $category) :
    ?>
    <label>
        <input name="cat[]" 
            <?php if(in_array($category['id'], $project_categories)) echo 'checked="checked"'; ?>
            type="checkbox" value="<?= $category['id']; ?>" >
        <?php echo $category['name']; ?>
    </label>
    <?php endforeach; ?>
    

    【讨论】:

    • 现在我看到他只插入了一只猫,当我选择更多作为一只猫时,他将最后一只猫也显示出来
    • @jorik 我没听懂你所说的,但你必须为你的cat[] 输入循环并在数据库中插入所有 id。如果仍不清楚,请更新您的帖子以了解您所面临的具体问题
    【解决方案2】:

    我不是反对票。如果您知道您的问题,您可能不会发布问题。

    您没有包含详细信息代码。但是,据我了解的部分,

    您应该在foreach 循环内运行数据库UPDATE 查询。您无需将html input 保留在循环中。

      <?php    
      // check if checkbox is checked 
      if (!empty($_POST['cat'])){   
      foreach($_POST['cat'] as $cat){
      // run update query here
      $sql = "UPDATE `categories` SET `categorienaam` = $whatever WHERE `id` = $cat";
      $result = DB::getResult($sql);
      }
      }
      ?>
    

      <label>
          <input name="cat[]" type="checkbox" value="<?php echo $RowOfApplicableSelectQuery['id']; ?>" >
      </label>

    $RowOfApplicableSelectQuery 来自您主要用于获取和显示记录的查询。

    我希望它能让你知道你在寻找什么。

    【讨论】:

    • 在循环内部查询不是一个好主意。你可以使用 mysql in ( ids with comma separated ) 来抓取记录并循环遍历这些记录
    • @pars,刚刚向他展示了事情的基本方式。它可以通过多种方式完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2021-10-05
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多