Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida para comparar dados entre 2 tabelas - MySQL


ThiagoAS

Pergunta

Bom dia pessoal.

Estou desenvolvendo um sistema de gerenciamento de TI e travei em um momento.

Vou tentar deixar bem explicado para que facilite o entendimento e, talvez, na solução do problema.

A ideia é a seguinte: listar todos os softwares que possuo cadastrado em uma tabela no banco MySQL, e mostrar quais destes softwares estão instalados em determinado pc, através de um checkbox.

Todos os softwares estão em uma tabela chamada "software", e os softwares instalados no pc estão gravados em outra tabela chamada "lista_sf". Assim que puxar a ficha de determinado pc, deve ser mostrado todos os softwares cadastrados, e os que estiverem nesta ficha devem estar com o checkbox marcado.

Abaixo segue código dessa parte citada.

Obs: caso tenham outra sugestão para aplicar essa ideia, e que não seja através de checkbox, estou aceitando também.

Agradeço desde já.

function listaSoftwares(){
  
      $query = "SELECT nome FROM software";
      $result = mysql_query($query);
      $query2 = "SELECT sf.nome FROM software sf INNER JOIN ficha_manut_sf lista_sf ON (sf.nome = lista_sf.nome_software) WHERE lista_sf.id_pc = 36 GROUP BY nome ";
      $result2 = mysql_query($query2);
   
      while ($soft = mysql_fetch_array($result)){
          while ($lista_sf = mysql_fetch_array($result2)){
          
            if ($lista_sf == $soft){
                $check = "checked = true";
            } else {
                $check = "";
            }
          
          }   
          
          ?>
        <input type="hidden" name="id_pc" value="<?php echo $_GET['id'] ?>" />
            <table>
                <tr>
                    <td><label><input type="checkbox" name="softwares[]" value="<?php echo $soft['nome'] ?>" <?php echo $check ?>  ><span id="grid_comp_txt"><?php echo $soft['nome'] ?></span></label></td>
                </tr>          
            </table>                    
          <?php      
      }
  }

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

O que acontece é que não funciona...

ele não marca nenhum checkbox...

creio que no momento de comparar a lista de softwares intalados com a lista de todos os softwares, está se perdendo e não compara corretamente.

Pesquisando sobre o assunto, encontrei o in_array, mas não consegui aplicá-lo também

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, tenta isso aqui:

<?php
function listaSoftwares(){
     
      $query = "SELECT nome FROM software";
      $result = mysql_query($query);
      
      $query2 = "Select nome_software From ficha_manut_sf Where id_pc = 36";
      $result2 = mysql_query($query2);
        
      while($soft = mysql_fetch_array($result)):
          while($lista_sf = mysql_fetch_array($result2)):
              $query3 = "Select nome From software Where nome = '".$lista_sf['nome_software']."' Group By nome ";
              $result3 = mysql_query($query3);
              
              if($soft2 = mysql_fetch_array($result3)){          
                if($lista_sf['nome'] == $soft2['nome']){
                    $check = "checked = true";
                    break;
                }
              }
          endwhile;      
              
              ?>
            <input type="hidden" name="id_pc" value="<?php echo $_GET['id'] ?>" />
                <table>
                    <tr>
                        <td><label><input type="checkbox" name="softwares[]" value="<?php echo $soft['nome'] ?>" <?php echo $check ?>  ><span id="grid_comp_txt"><?php echo $soft['nome'] ?></span></label></td>
                    </tr>          
                </table>                    
              <?php      
      endwhile;
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, tenta isso agora:

<?php
function listaSoftwares(){
    
      $query = "SELECT nome FROM software";
      $result = mysql_query($query);
      
      $query2 = "Select nome_software From ficha_manut_sf Where id_pc = 36";
      $result2 = mysql_query($query2);
        
      while($soft = mysql_fetch_array($result)):
            $check = "";//Aqui é a alteração
          while($lista_sf = mysql_fetch_array($result2)):
              $query3 = "Select nome From software Where nome = '".$lista_sf['nome_software']."' Group By nome ";
              $result3 = mysql_query($query3);
              
              if($soft2 = mysql_fetch_array($result3)){          
                if($lista_sf['nome'] == $soft2['nome']){
                    $check = "checked = true";
                    break;
                }
              }
          endwhile;      
              
              ?>
                <input type="hidden" name="id_pc" value="<?php echo $_GET['id'] ?>" />
                <table>
                    <tr>
                        <td>
                            <label>
                                <input type="checkbox" name="softwares[]" value="<?php echo $soft['nome'] ?>" <?php echo $check ?>  ><span id="grid_comp_txt"><?php echo $soft['nome'] ?></span>
                            </label>
                        </td>
                    </tr>          
                </table>                    
              <?php      
      endwhile;
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde,

agora ele está pegando corretamente a quantidade de checkbox marcadas, mas não marca corretamente.

Por exempo:

( ) amarelo

( ) azul

(X) branco

( ) preto

(X) vermelho

( ) verde

Ao buscar do banco ele mostra:

(X) amarelo

(X) azul

( ) branco

( ) preto

( ) vermelho

( ) verde

Ele puxa corretamente a quantidade de checkbox marcadas, mas ao atribuir novamente, ele marca a partir do primeiro item até completar o total de checkbox marcadas.

Mas agradeço mesmo assim pois já foi uma grande ajuda..

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, eu to meio confuso... To tentando entender novamente a lógica kkkkkkkkk Mas pelo que eu entendi, o erro ta aqui:

if($lista_sf['nome'] == $soft2['nome']){
    $check = "checked = true";
    break;
}
Então, deixa só isso e vê no que da:
$check = "checked = true";
break;

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, kkkkkkkkk consegui descobrir o maldito erro no script que eu postei :P Esse aqui vai prestar:

Obs: Se liga que agora tem 2 funções, onde a função listaSoftwares() chama a função selecionaSoftware() para verificar se o checkbox foi marcado ou não.

function selecionaSoftware($valor){
    $query2 = "Select nome_software From ficha_manut_sf Where id_pc = 36";
    $result2 = mysql_query($query2);    
    
    $check = "";
    while($lista_sf = mysql_fetch_array($result2)):
        $query3 = "Select nome From software Where nome = '".$lista_sf['nome_software']."' Group By nome ";
        $result3 = mysql_query($query3);
        $soft2 = mysql_fetch_array($result3);
        
        if($lista_sf['nome_software'] == $valor){
            $check = "checked = true";
            return $check;
            break;
        }
    endwhile;          
}    
    
function listaSoftwares(){    
    $query = "SELECT nome FROM software";
    $result = mysql_query($query);
    
    while($soft = mysql_fetch_array($result)):      
          ?>
            <input type="hidden" name="id_pc" value="<?php echo $_GET['id'] ?>" />
            <table>
                <tr>
                    <td>
                        <label>
                            <input type="checkbox" name="softwares[]" value="<?php echo $soft['nome'] ?>" <?php echo selecionaSoftware($soft['nome']); ?>><span id="grid_comp_txt"><?php echo $soft['nome'] ?></span>
                        </label>
                    </td>
                </tr>          
            </table>                    
          <?php      
    endwhile;
}

listaSoftwares();

Qualquer dúvida, posta ai.

Editado por dedas
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...