Jump to content
novoAquiNoForum

Como selecionar uma Option quando outra for alterada em PHP

Recommended Posts

Olá,

Tenho uma dúvida.

Tenho um select, que recebe dados vindos do banco Mysql, como abaixo:

<tr>
  <td style="font-size:14px;">Empresa:</td>
  <td>
  <select class="choiceChosen" id="empresa" style="width:220px;">
     <?php					         	
        $result = $conn->query("SELECT id_empresa, nome_empresa FROM empresa");
	while($empresa = mysqli_fetch_object($result)) { ?>
	<option value="<?php echo $empresa->id_empresa?>"><?php echo $empresa->nome_empresa?></option>
      <?php } ?>
  </select>
 <td>
</tr>

<tr>
  <td style="font-size:14px;">Área:</td>
  <td>
  <select class="choiceChosen" id="area" style="width:220px;">
  <option value="0">Todas</option>
     <?php					         	
        $result = $conn->query("SELECT * FROM areas");
	while($arquivo = mysqli_fetch_object($result)) { ?>
	<option value="<?php echo $arquivo->id_area?>"><?php echo $arquivo->nomearea?></option>
     <?php } ?>
  </select>
 </td>
</tr>

Abaixo minha tabela areas:

id_area  id_empresa nomearea

5	 4	    Financeiro
6	 5	    Financeiro
7	 4	    Fiscal
8	 5	    Fiscal

Abaixo minha tabela empresas:

id_empresa  nome_empresa

4	    google /*exemplo*/
5	    Apple /*exemplo*/

Seguinte, o que preciso fazer é o seguinte:

Quando eu alterar a empresa, preciso que área também seja alterada, onde o id_empresa da area for igual ao id_empresa da empresa, como faço isso usando PHP?

Share this post


Link to post
Share on other sites

Você não faz, você precisa fazer esta chamada em javascript mesmo.

Crie uma função que leia o select "empresa" quando ele for alterado e use ajax pra atualizar o segundo select. Tente fazer primeiro desta forma.

Share this post


Link to post
Share on other sites

Olá pessoal, consegui fazer aqui :)

Para quem está com a mesma dificuldade segue o código abaixo:

o html fica assim:

<tr>
  <td style="font-size:14px;">Empresa:</td>
  <td>
  <select id="empresa" style="width:220px;">
     <?php					         	
        $result = $conn->query("SELECT id_empresa, nome_empresa FROM empresa");
	while($empresa = mysqli_fetch_object($result)) { ?>
	<option value="<?php echo $empresa->id_empresa?>"><?php echo $empresa->nome_empresa?></option>
      <?php } ?>
  </select>
 <td>
</tr>

<tr>
  <td style="font-size:14px;">Área:</td>
  <td>
  <select id="area" style="width:220px;">
  
  </select>
 </td>
</tr>

Jquery fica assim:


$('#empresa').change(function(){
           $.ajax({            
            url:"selects.php",            
            type:"get",                
            data: "empresa="+$(this).val(),   
            success: function (result){         
                $("#area").html(result);                 
            }
      })
})

PHP:

<?php
include("conexao.php");
 
$id_empresa = $_GET['empresa'];
 
$result = $conn->query("SELECT * FROM areas WHERE id_empresa = '$id_empresa'");


while($area = mysqli_fetch_object($result)){
    echo "<option value='$area->id_area'>$area->nomearea</option>";
}

?>

Explicando:

A segunda combo área, aguarda o resultado da primeira combo empresa, trazendo somente as áreas pertencentes a empresa selecionada. Na combo empresa, uso o PHP para preenche-la, para a segunda não ficar vazia quando carregar a pagina, chame uma função de consulta com ajax ao carregar o documento. Pode fazer assim:

$(document).ready(function(){
 $.ajax({            
            url:"selects.php",            
            type:"get",                
            data: "empresa="+$("#empresa").val(),   
            success: function (result){         
                $("#area").html(result);                 
            }
       })
})

Assim no carregar a pagina ,a segunda já vem selecionada.

Quando é alterada a option ,o evento é disparado, passando para o PHP o id da option selecionada com o ajax.

O PHP recebe esse id e faz a consulta no banco, trazendo somente as áreas referentes aquela empresa. O retorno da consulta é inserido na combo área.

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 Marcos PP
      Tenho uma tabela onde pego todos pedidos realizados no dia, porem mostro todos em uma tabela, ate ai tudo bem, mas o cliente precisa que seja agrupado por quem pediu, vou dar um exemplo,

      Na minha tabela tenho 

      ID_PEDIDO  |  ID_USER_PEDIDO |  PEDIDO
      1                   |   20                           |   524
      5                   |   52                           |   258
      2                   |   35                           |   525
      6                   |   52                           |   253
      3                   |   20                           |   658
      4                   |   20                           |   358

      No resultado me aparece conforme consulta e me mostra todos os pedidos em ordem de pedido
      SELECT * FROM pedidos  ORDER BY ID_PEDIDO ASC
       
      Se eu colocar um GROUP BY ID_USER_PEDIDO vai agrupar os pedidos de acordo com o usuário e mo mostrar apenas 1


      Eu preciso que seja mostrado todos eles porem agrupados na mesma linha da tabela
       
      <table id="datatable1" class="table display responsive "> <thead> <tr> <th class="">ID</th> <th class="">ID do usuario</th> <th class="">Pedido</th> </tr> </thead> <tbody> <?php $sql = "SELECT * FROM pedidos  ORDER BY ID_PEDIDO ASC"; $result = $conn->query($sql); while($row = $result->fetch_assoc()) { ?> <tr> <td><?php echo $row["ID_PEDIDO"];?></td> <td><?php echo $row["ID_USER_PEDIDO"];?></td> <td><?php echo $row["PEDIDO"];?></td> </tr> <?php } ?> </tbody> </table> E que seja exibido conforme esta imagem
       

    • By gersonab
      Bom dia, tenho 2 tabelas editáveis em uma div, estas funcionam normalmente, o problema é que o loop não acontece , só carrega sobre 1 item, sendo que este eu posso ter mais itens.
       na página principal tenho:
      <div class="carregadados"></div> function fetch_data() { $.ajax({ url:"../lista/finan.php", method:"POST", success:function(data){ $('.carregadados').html(data); } }); } fetch_data(); a página a ser carregada esta assim:
      <?php session_start(); require_once('config.php'); $output = ''; $idc1=$_SESSION['idc']; $sql01 = "SELECT * FROM porcent WHERE idfcli='$idc1'"; $result = mysqli_query($con, $sql01); while($user41 = mysqli_fetch_array($result)){ // primeiro while onde seleciono os itens da pessoa podendo ter vários $output .= ' <div class="table-responsive mb-4 mt-4"> Aqui vem os dados da pessoa '; $id1= $user41["idproc"]; $sqladv = "SELECT * FROM poradv WHERE procav='$id1'"; $resulta = mysqli_query($con, $sqladv); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> </tr> </thead> <tbody>'; if(mysqli_num_rows($resulta) > 0) { while($usera = mysqli_fetch_array($resulta)){ //segundo while onde tenho os dados de venda em uma tabela editavel $output .= ' <tr> </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table>'; $id2= $user41["idproc"]; $sql = "SELECT * FROM parcelas WHERE procid='$id2' ORDER BY datapar, idpar ASC"; $result = mysqli_query($con, $sql); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> // tabela de pagamentos editavel </tr> </thead> <tbody>'; if(mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_array($result)) { //terceiro while , tabela referente a pagamentos $output .= ' <tr> // tabela pagamentos </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table> </div> '; } echo $output; ?> só esta carregando uma vez , tudo dentro da parte editável esta funcionando, porém no primeiro while só faz 1 loop, os demais estão funcionando perfeitamente.
      desde já agradeço qualquer ajuda.
    • By diagphp
      Olá amigos, sou muito novo no assunto de consultar APIs em PHP, então gostaria por gentileza de uma ajuda.
       
      Tem uma api externa que devemos consultar, mas está retornando o erro: PHP Fatal error: Uncaught Error: Class 'GuzzleHttp\Client' not found in /home1/

      A hospedagem é Hostgator.
       
       
      A consulta é simples:
       
      <?php
      $client = new \GuzzleHttp\Client();
      $response = $client->get("https://api.centraldofrete.com/v1/cargo-type", [
          'headers' => [
                  'Authorization' => '{token do cliente}',
              ],
      ]);
      $body = $response->getBody();
      print_r(json_decode((string) $body));
      ?>
       
      Alguém poderia me ajudar a fazer este tipo de consulta e obter o retorno da API? Tem algum arquivo a mais que tenho que colocar no servidor?
       
      Agradeço a  ajuda!
    • By neto_celino
      Estou usando o seguinte código para somar um SELECT, mas cheguei em um determinado ponto que travei.
       
      Tenho 400 registros na DB e tenho que somar alguns registros somente. Ou seja, somar o (valortotal) de alguns ID's somente. 
      É possivel e por onde vou ? rs.
      <?php $subtotal = "SELECT SUM(valortotal) from tbl_compras WHERE id = VariosIdAqui"; $resultado = mysql_query($subtotal); $registro = mysql_fetch_row($resultado); echo number_format($registro[0], 2, ',', ' ') ;  ?>      
    • By Camilavip
      Oi, como consigo fazer uma página de erro ou redirecionamento ou aviso, caso alguém clique em um cadastro que já não existe ou não tenha?
      localhost/clientes/12/ricardo No exemplo acima eu clico no cliente com esse id 12 e abre os dados dele, mas se eu o excluir mas estiver com o link e colocar no navegador, ele abre a página, sem os dados dele, mas abre. Eu queria se caso não tivesse mais o id cadastrado, abrisse algo como nenhum cadastro encontrado ou existente.
×

Important Information

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