Jump to content
Roberto Levy

Relacionamento entre Select options com 3 selects 3 tabelas e 2 filtros

Recommended Posts

Bom noite pessoal.

Sou novo no forum

Estou com um "pequeno" problema:

Tenho 3 selects que vão buscar dados do bd, a lógica é a seguinte:

escolho uma unidade esportiva, e ele carrega para mim no outro select todas as atividades esportivas da referida unidade.

Até aí tudo bem, porem, uma atividade esportiva pode ter vários horários diferentes.

O que eu quero fazer...

Abro o select Unidade esportiva:  

 Flamengo

 Fluminense

 Cruzeiro

 Atlético

Escolho  Flamengo.

Vem as modalidades que ele oferece:

Futsal

Volei

Natação

Corrida

Escolho Futsal.

Vem os horários:

07:00 às 08:30

08:45 às 10:15

10:30 às 12:00

Ou seja:

O último select (Horário) tem que receber dados só do Flamengo, só do Futsal e os horários disponíveis.

Segue abaixo BD e o meu código.

PS. Este código foi tirado da internet no site da devmedia criado por Willian, ele da um exemplo com país, estado e cidade e eu estou tentando adaptar para o referido acima. 

*** BANCO DE DADOS ***	
CREATE TABLE `unidades` (  `id` int(5) NOT NULL,
`unidade` int(5) NOT NULL,
`nome` varchar(100) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------
---- 
Estrutura para tabela `atividades`
--
CREATE TABLE `atividades` (
`id` int(5) NOT NULL,
`unidade` int(5) NOT NULL,
`cod_atividade` int(5) NOT NULL,
`atividade` varchar(150) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------
---- 
Estrutura para tabela `horarios`
--
CREATE TABLE `horarios`(
`id` int(4) NOT NULL,
`unidade` int(5) NOT NULL,
`cod_atividade` int(5) NOT NULL,
`horario` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


*** CONEXAO.PHP
<?php
	function Conectar(){
  		try
		{
          $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
          $con = new PDO("mysql:host=localhost; dbname=esportes;", "esportista", "competidor2019", $opcoes);
          return $con;    
        }
        catch (Exception $e)
        {
            echo 'Erro: '.$e->getMessage();        return null;
        }
	}
?>

*** INDEX.PHP ***

<link rel="stylesheet" type="text/css" href="estilo.css">
<script type="text/javascript" src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
     
    <!-- Carrega as Unidades esportivas -->
    $('#btnUnidades').click(function(e){
        $('#btnUnidades').hide();
        $('#mensagem').html('<span class="mensagem">Aguarde, carregando ...</span>');  
         
        $.getJSON('consulta.php?opcao=unidades', function (dados){
             
           if (dados.length > 0){    
              var option = '<option>Selecione a Unidade</option>';
              $.each(dados, function(i, obj){
                  option += '<option value="'+obj.unidade+'">'+obj.nome+'</option>';
              })
              $('#mensagem').html('<span class="mensagem">Total de Unidades encontradas.: '+dados.length+'</span>'); 
              $('#cmbUnidades').html(option).show();
           }else{
               Reset();
               $('#mensagem').html('<span class="mensagem">Não foram encontradas Unidades!</span>');
           }
        })
    })
     
    <!-- Carrega as Modalidades Esportivas -->
    $('#cmbUnidades').change(function(e){
        var unidades = $('#cmbUnidades').val();
        $('#mensagem').html('<span class="mensagem">Aguarde, carregando ...</span>');  
         
        $.getJSON('consulta.php?opcao=atividades&valor='+unidades, 
        function (dados){ 
         
           if (dados.length > 0){    
              var option = '<option>Selecione a atividade esportiva</option>';
              $.each(dados, function(i, obj){
                  option += '<option value="'+obj.unidade+'">'+obj.atividade+'</option>';
              })
              $('#mensagem').html('<span class="mensagem">Total de atividades encontradas.: '+dados.length+'</span>'); 
           }else{
              Reset();
              $('#mensagem').html('<span class="mensagem">Não foram encontradas atividades para essa unidade!</span>');  
           }
           $('#cmbAtividades').html(option).show(); 
        })
    })
     
    <!-- Carrega os Horarios -->
    $('#cmbAtividades').change(function(e){
        var atividades = $('#cmbAtividades').val();
        $('#mensagem').html('<span class="mensagem">Aguarde, carregando ...</span>');  
         
        $.getJSON('consulta.php?opcao=horarios&valor='+atividades, 
        function (dados){
             
            if (dados.length > 0){   
                var option = '<option>Selecione o Horário</option>';
                $.each(dados, function(i, obj){
                    option += '<option>'+obj.horario+'</option>';
                })
                $('#mensagem').html('<span class="mensagem">Total de Horários encontrados.: '+dados.length+'</span>');
            }else{
//                Reset();
//                $('#mensagem').html('<span class="mensagem">Unidade.: '+unidade+' .. Codigo da Atividade.: '+cod_atividade+' .. Horário.: '+horario+' </span>');  
                $('#mensagem').html('<span class="mensagem">Não foram encontrados Horários para essa Atividade!</span>');  
            }
            $('#cmbHorarios').html(option).show();
        })
    })
     
    <!-- Resetar Selects -->
    function Reset(){
//        $('#cmbUnidades').empty().append('<option>Carregar Unidades</option>>');
//        $('#cmbAtividades').empty().append('<option>Carregar Atividades</option>>');
//        $('#cmbHorarios').empty().append('<option>Carregar Horários</option>');
    }
});
</script>

<body>
   <div id="conteudo">
        <p><span class="destaque">Populando selects 
        usando AJAX + JSON + PHP.</span></p>
        <hr />
        <br/>
         
        <div id="unidades">
          <label>Selecione a Unidade:</label>
          <select id="cmbUnidades">
              <option>Carregar Unidades</option>
          </select>
          <input type="button" value="Carregar Unidades"
          id="btnUnidades" class="botao"/>
        </div>
 
        <div id="atividades">
          <label>Selecione a Atividade:</label>
          <select id="cmbAtividades">
              <option>Carregar Atividades</option>
          </select>
        </div>
         
        <div id="horarios">
          <label>Selecione o Horário:</label>
          <select id="cmbHorarios">
              <option>Carregar Horários</option>
          </select>
        </div>
         
        <hr />
        <p><span class="destaque">Mensagens:
        </span></p>
        <div id="mensagem">
             
        </div>
   </div>
</body>

*** CONSULTA.PHP ***
<?php
require_once('conexao.php');
$opcao = isset($_GET['opcao']) ? $_GET['opcao'] : '';
$valor = isset($_GET['valor']) ? $_GET['valor'] : ''; 
if (! empty($opcao)){   
    switch ($opcao)
    {
        case 'unidades':
            {
                echo getAllUnidades();
                break;
            }
        case 'atividades':
            {
                echo getFilterAtividades($valor);
                break;
            }
        case 'horarios':
            {
                echo getFilterHorarios($valor);
                break;
            }
    }
}
 
function getAllUnidades(){
    $pdo = Conectar();
    $sql = 'SELECT unidade, nome FROM unidades';
    $stm = $pdo->prepare($sql);
    $stm->execute();
    sleep(1);
    echo json_encode($stm->fetchAll(PDO::FETCH_ASSOC));
$pdo = null;    
}
 
function getFilterAtividades($unidades){
    $pdo = Conectar();
    $sql = 'SELECT unidade, cod_atividade, atividade FROM atividades WHERE unidade = ?';
    $stm = $pdo->prepare($sql);
    $stm->bindValue(1, $unidades);
    $stm->execute();
    sleep(1);
    echo json_encode($stm->fetchAll(PDO::FETCH_ASSOC));
$pdo = null;    
}
 
function getFilterHorarios($atividades){
    $pdo = Conectar();
    $sql = 'SELECT unidade, cod_atividade, horario FROM horarios WHERE unidade = ?';
    $stm = $pdo->prepare($sql);
    $stm->bindValue(1, $horarios);
    $stm->execute();
    sleep(1);
    echo json_encode($stm->fetchAll(PDO::FETCH_ASSOC));
$pdo = null;        
}
?>

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By violin101
      Caros amigos, saudações...
       
      Estou usando Codeigniter e estou com uma pequena dúvida.
       
      Tenho um Form com os seguintes campos:
      Data Início..... <input type="date" /> Hora Início.... <input type="time" /> Data Final..... <input type="date" /> Hora Final.... <input type="time" /> até aqui tudo bem
       
      Gostaria de fazer uma VERIFICAÇÃO para impedir que o usuário GRAVE no MySql uma data menor que a data atual.
      ou seja:
      Data Início nunca poderá ser menor que a Data Atual.
      e a
      Data Final só poder ser igual ou maior que a Data Início.
       
      Grato,
       
      Cesar
       
    • By Salvatore
      Galerinha Boa, alguém pode me explicar como eu faço pra editar isso abaixo usando php
       
       
       <div class="nome-vip">
              <p class="text-center"><span>1</span> CASH</p>             <---------------essa parte eu queria saber como eu edito clicando por cima(tentei usando contenteditable), mas n deu do jeito que eu queria,preciso que o valor editado fique em uma variavel PHP
            </div>
            <p class="text-center" style="color: #888; font-size: 15px;">por apenas</p>
            <div class="preco-vip">
              <p class="text-center">R$ 1</p> <------------------- e aqui iria ter a variável preço que ja estaria definida como um, e quando la em cima fosse adicionado um valor int, somasse os 2 e gerasse a variavel valor e exibindo ela
            </div>
       
      Alguém ajuda eu, to caçando em mts sites algo assim mas n consigo
       
    • By drx
      Olá pessoal!
      Estou com um probleminha aqui. Estou me embrenhando pelos ajax e jquery. Muito interessante. 
      Eu peguei um exemplo e é bem simples. Só que não retorna a mensagem para a div.
       
      Eu tenho uma div em pagina1.php onde o usuário entra com um número identificador em um campo textfield.
      Após entrar com o número identificador, solicito a verificação em uma outra página.php onde tenho uma consulta no mysql.
      O echo da consulta é: Existente ou Inexistente. A consulta é feita pelo número identificador. Fiz a verificação e retorna perfeitamente,
      Porém eu quero que ao verificar, a mensagem retorne para minha outra div logo abaixo na pagina1.php
      Vou passar o código para facilitar....
       
      <html>
      <head>
       
      <script src="js/jquery.js"></script>
      <script>
      $(function(){
        $('#form').submit(function(){
           $.ajax({
             url: 'x_consultar_patro.php',
             type: 'POST',
             data: $('#form').serialize(),
             success:function ( data ) {
                 if (data != '') {
                     $('#frm_cadastro').html( data );
                 }
               }
             });
           return false;
         });
      });
      </script>
       
      </head>
       
      <body>

      <div id="frm_cadastro"></div>

      <form id="form" method="post" action="">
        <input type="text" name="codpatro" id="codpatro"/>
        <input type="submit" name="btn_procurar" id="btn_procurar" value="Procurar"/>
      </form>
       
      </body>
      <html>
       
       

    • By Claudia França
      prezados como eu altero de loked para unloked do arro para não carregar o java e seguir com o procedimento. 
       
       
      ?Veja nesse link https://drive.google.com/drive/u/0/folders/1h0EbUoz3UOL8j9orWirUAPILt7cg7q-p 
      minhas imagens não estao subindindo aqui, não sei porque, acho que tenho limitação. 
       
       
    • By Claudia França
      prezados qdo removo o require colocado antes do doctype o botão desaparece como na imagem . Alguem pode me explicar porque??    dentro do setting tem apenas informações key do cliente e configurações da conta de email. 
       


×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.