首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:如果没有重复1次以上的复选框,我就无法显示处于选中状态的复选框。

错误:如果没有重复1次以上的复选框,我就无法显示处于选中状态的复选框。
EN

Stack Overflow用户
提问于 2022-05-26 08:16:03
回答 1查看 35关注 0票数 -2

表结构

代码语言:javascript
复制
<?php
//the grupo_usuarios table contains the database user groups

CREATE TABLE `grupo_usuarios` (
  `id` int(11) NOT NULL AUTOINCREMENT,
  `nombre` varchar(20) COLLATE utf8_spanish_ci NOT NULL,
  `descripcion` varchar(150) COLLATE utf8_spanish_ci NOT NULL
);

//the permisos table contains the permissions 

CREATE TABLE `permisos` (
  `id` int(11) PRIMARY KEY NOT NULL AUTOINCREMENT,
  `nombre` varchar(20) COLLATE utf8_spanish_ci NOT NULL
);

// the table tiene_asignado is the result of the many-to-many relationship between the grupo_usuarios table and permisos

CREATE TABLE `tiene_asignado` (
  `id` int(11) PRIMARY KEY NOT NULL AUTOINCREMENT,
  `id_grupo` int(11) NOT NULL,
  `id_permisos` int(11) NOT NULL,
FOREIGN KEY(id_grupo) REFERENCES grupo_usuarios(id),
FOREIGN KEY(id_permisos) REFERENCES permisos(id),
ON DELETE CASCADE ON UPDATE CASCADE
);

?>
代码语言:javascript
复制
<?php include('php/verificarSesion.php');?>
<?php    

//Storing the id of the user group received through GET from the groups.php page

if(isset($_GET['id_grupo_usuarios']) && (!empty($_GET['id_grupo_usuarios']))  && is_numeric($_GET['id_grupo_usuarios']) == 1){

   $id_grupo_usuarios = $_GET['id_grupo_usuarios'];

}else{
   
    echo "<script>
        window.location.href='verGrupo.php';
    </script>";}

?>


<?php include("plantillas/header.php"); ?>

<!-- PAGE CONTENT (permisosChex.php)-->
<section class="listadoPacientes">
<div class="container mt-3">
      <div class="row">
         <div class="col-6 col-md-5">
            <h2>Assign permissions to the group <?php echo $id_grupo_usuarios;?></h2>
            <p>Here you can check the permissions belonging to this group</p>
         </div>
  
         <div class="col-4" id="tabla">  
            <table id="tablaPacientes" class="table table-bordered table-striped" style="width:100%">  
               <thead>
                  <tr>
                   
                     <th>Permissions</th>

                         
                  </tr>
               </thead>
                    <tbody>

                     <!--START OF THE DATA SUBMISSION FORM-->

                          <form class="row formularioCrearPaciente" action="php/asignarPermisos.php" method="post" id="FormularioActualizarPaciente">
                        <input type="text" value="<?php   echo $id_grupo_usuarios; ?>" name="id_grupo_usuarios">  
<?php include("php/conexion.php")?>


<?php

//query to display all permissions
$sql = "SELECT * FROM permisos ORDER BY id DESC";

$resultado = $conexion->query($sql);

$listadoPermisos = array('data' => array());


     
   if($resultado->num_rows > 0) { 

//we will show a numbering in the table>>>>numbering: 1, 2, 3....

$numeracion = 0;
 while($fila = $resultado->fetch_array()) { 

    $numeracion = $numeracion + 1;
   
   //the permit id is stored here

   $id_permiso = $fila[0];
    $nombre = $fila['nombre'];

在第二个查询中,我获得分配给一组用户的权限。

代码语言:javascript
复制
$consulta2 = "SELECT id_permisos FROM tiene_asignado where id_grupo = $id_grupo_usuarios";

                  $resultados = $conexion->query($consulta2);

                  while( $asignados = $resultados->fetch_array()){

                         //here I store the permissions of the selected checkboxes
         
         $datos=array();

    if (is_array($asignados) == true) {

      //I assign a variable for each selected checkbox in the array
         foreach($asignados as $asignado)

      {

我将从复选框中选择的权限与表的id_permisos字段(tiene_asignado)关联起来。

代码语言:javascript
复制
$datos[$asignados['id_permisos']] = true;

         } 
         }else{//END OF is_array($asignados) 

            //this is just a test
               echo "nothing";
            }

   ?>
   
   <tr>
   
      <td>  
       <?php echo $numeracion;?>
       
        <input title='create sheet of <?php echo $id_grupo_usuarios?>' type="checkbox" name="permisos[]" value="<?php echo $id_permiso;?>" class="delete-checkbox" <?php echo isset($datos[$fila[0]]) ? 'checked' : '';?> >
     
  

      
    </tr

只有在第二个输入复选框中包含输入复选框时,我才能看到分配给组的权限,而如果不这样做,问题是输入也是重复的,也就是说,如果一个组分配了3个权限,则每个输入重复三次,但它显示给该组分配的3个权限。

代码语言:javascript
复制
 <?php   } //END OF THE SECOND WHILE?>

 <?php   } //END OF THE FIRST WHILE?>
          <?php     

             } //END OF IF?>

<?php  ?>
<div class="col-md-6 form-group">
<button type="submit"id="ActualizarPaciente" class="btn btn-primary">Asignar Permisos</button>
</div>
      </form>
<?php


?>
      
    </div>
  </div>
</div>

               

                    </tbody>
            </table> 
        </div>
      </div>
   </div>
</section>

<!-- END OF PAGE CONTENT -->
<!-- Including the footer of the page  -->
<?php include('plantillas/footer.php'); ?>
<!-- script js which contains the functionalities of the permission list page  -->
<!--<script src="js/verpermisosChex.js"></script>-->
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-26 08:41:44

您正在从permisos中选择所有记录,对于每条记录,您从tiene_asignado中选择所有记录,这些记录位于匹配值的id_grupo中。但是,很明显,permisos表通过id_permisos字段在逻辑上与tiene_asignado相关。

因此,让我们看一下您的第二个查询:它只从tiene_asignado加载tiene_asignado,并且可以安全地假定您的permisos表有一个id,可能名为id_permisos,可能有不同的名称,并且已经使用第一个查询加载了id_permisos值。

因此,您的第二个查询似乎没有必要,因此,您需要删除第二个查询和第二个while (当然,您需要第二个while的内容,但它不需要是一个循环)。如果由于某种原因需要从tiene_asignado加载,那么可以修改第一个查询,使其成为一个join。但是,如果需要帮助修改第一个查询,则需要提供有关表的信息,至少是它们的字段。

编辑

根据自最初编写此答案以来发现的后续信息,我建议使用以下查询:

代码语言:javascript
复制
$sql = "SELECT * FROM permisos p LEFT JOIN tiene_asignado ta ON p.id = ta.id_permisos AND id_grupo='".$id_grupo_usuarios."' ";)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72388782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档