Jump to content
Fórum Script Brasil
  • 0

Dúvida para comparar dados entre 2 tabelas - MySQL


ThiagoAS
 Share

Question

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 to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

Edited by dedas
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.5k
×
×
  • Create New...