Jump to content
odenilson marques

condição para mostrar valores em uma combobox

Recommended Posts

Boa noite!

 

Pessoal tou desenvolvendo uma aplicação, no entanto empaquei numa parte, se alguém poder da uma ajuda ficaria muito grato!

 

É  o seguinte tenho um banco de dados e nesse banco tenho duas tabelas, a tabela empreendimento e a tabela processo, na minha regra de negocio tenho uma relação de 1:N onde cada empreendimento se relaciona com uma ou mais linha da tabela processo, dessa forma sempre cadastro um empreendimento primeiro para depois cadastrar um processo, até ai tudo bem,

esse cadastro é feito através dos seguintes formulários, formulário de cadastro de  empreendimento e formulário de cadastro de processo. O fluxo das paginas funcionam da seguinte forma, sempre que finalizar um cadastro de empreendimento o formulário de processo é chamado para efetuar o cadastro do mesmo. no entanto, no formulário de processo tenho uma combobox que puxa todos os dados da tabela empreendimento, pois alem de preencher os campos referentes ao processo preciso informar o empreendimento por isso a necessidade da combobox. ate aí tudo bem, porém o usuário responsável pelo cadastro pode começar um cadastro direto pelo formulário de processo caso o empreendimento já esteja cadastrado, para isso basta o usuário preencher os campo referentes ao processo e selecionar o empreendimento na combo, dessa forma todos os empreendimento  aparecem na combo, no entanto se o cadastro começar pela tela de empreendimento assim que fosse chamado o formulário de processo na combo apareceria somente o empreendimento que acabou de ser cadastrado. 

 

Desculpa pelo textão pessoal, mais foi a forma que encontrei de pedi um força

 

 

Share this post


Link to post
Share on other sites

Bom dia Odenilson,

 

Se entendi esta parte:

"no entanto se o cadastro começar pela tela de empreendimento assim que fosse chamado o formulário de processo na combo apareceria somente o empreendimento que acabou de ser cadastrado."

 

Para resolver basta fazer com que no carregamento do combo, sejam lidos todos os itens da tabela empreendimento, algo como:

<select name="empreendimento" id="empreendimento" >
  <option> Selecione uma opção </option>
  <?php
    $qry_empreendimento = "SELECT * FROM empreendimento";
    $result_empreendimento = mysqli_query($conn, $qry_empreendimento);
    while($reg_empreendimento = mysqli_fetch_assoc($result_empreendimento) ) {
      echo '<option value="'.$reg_empreendimento['empreendimento_ID'].'">'.$reg_empreendimento['empreedimento_Nome'].'</option>';
  }
  ?>
</select><br>

Naturalmente que neste meu código você deve observar os seguintes itens:

  • Não estou usando estilização;
  • Os nomes de campos e tabelas são fictícios;
  • Deduzi que vamos guardar no banco o ID do empreendimento e vamos mostrar no combo o nome dele.

Abraço e espero ter contribuído com algo.

Share this post


Link to post
Share on other sites
2 horas atrás, Josemir Dias disse:

Bom dia Odenilson,

 

Se entendi esta parte:

"no entanto se o cadastro começar pela tela de empreendimento assim que fosse chamado o formulário de processo na combo apareceria somente o empreendimento que acabou de ser cadastrado."

 

Para resolver basta fazer com que no carregamento do combo, sejam lidos todos os itens da tabela empreendimento, algo como:


<select name="empreendimento" id="empreendimento" >
  <option> Selecione uma opção </option>
  <?php
    $qry_empreendimento = "SELECT * FROM empreendimento";
    $result_empreendimento = mysqli_query($conn, $qry_empreendimento);
    while($reg_empreendimento = mysqli_fetch_assoc($result_empreendimento) ) {
      echo '<option value="'.$reg_empreendimento['empreendimento_ID'].'">'.$reg_empreendimento['empreedimento_Nome'].'</option>';
  }
  ?>
</select><br>

Naturalmente que neste meu código você deve observar os seguintes itens:

  • Não estou usando estilização;
  • Os nomes de campos e tabelas são fictícios;
  • Deduzi que vamos guardar no banco o ID do empreendimento e vamos mostrar no combo o nome dele.

Abraço e espero ter contribuído com algo.

 

Bom dia Josemir, desde já agradeço pelo feedback

 

Dessa forma que você mencionou acima ele mostra na combo todos os empreendimentos salvos na tabela empreendimento no formulário de processo, pois preciso selecionar um empreendimento e cadastrar o restante dos dados do processo, no entanto o que estou precisando é que ao finalizar o cadastro de empreendimento e for chamado o formulário de processo na combo  aparecesse somente o empreendimento que acabou de ser cadastrado.caso contrario aparecesse todos os empreendimentos na combo.

Share this post


Link to post
Share on other sites

Odenilson, 

 

"o que estou precisando é que ao finalizar o cadastro de empreendimento e for chamado o formulário de processo na combo  aparecesse somente o empreendimento que acabou de ser cadastrado.caso contrario aparecesse todos os empreendimentos na combo."

 

Em outras palavras, se a página de processos estiver sendo aberta através de uma página de empreendimento, ele carrega apenas o empreendimento, senão, todos os registros da tabela empreendimento. É isso que precisa?

 

Uma pergunta, existe algum caso em que o usuário passe pela página de empreendimento sem cadastrar nenhum empreendimento e depois chame a página de processo?

 

Aguardo para concluir meu raciocínio.

Share this post


Link to post
Share on other sites
2 horas atrás, Josemir Dias disse:

Odenilson, 

 

"o que estou precisando é que ao finalizar o cadastro de empreendimento e for chamado o formulário de processo na combo  aparecesse somente o empreendimento que acabou de ser cadastrado.caso contrario aparecesse todos os empreendimentos na combo."

 

Em outras palavras, se a página de processos estiver sendo aberta através de uma página de empreendimento, ele carrega apenas o empreendimento, senão, todos os registros da tabela empreendimento. É isso que precisa?

 

Uma pergunta, existe algum caso em que o usuário passe pela página de empreendimento sem cadastrar nenhum empreendimento e depois chame a página de processo?

 

Aguardo para concluir meu raciocínio.

Josemir,

 

Em outras palavras, se a página de processos estiver sendo aberta através de uma página de empreendimento, ele carrega apenas o empreendimento, senão, todos os registros da tabela empreendimento. É isso que precisa?

 

isso mesmo, Josemir

 

Uma pergunta, existe algum caso em que o usuário passe pela página de empreendimento sem cadastrar nenhum empreendimento e depois chame a página de processo?

 

Não sempre que chamar a pagina de empreendimento tem que realizar um cadastro

Share this post


Link to post
Share on other sites

Bom dia Odenilson,

 

Excelente, então, temos dois parâmetros claros para elaborar a lógica. Uma possível solução (existem várias para este caso), é que você pode marcar a página de empreendimento através de uma flag e obtê-la pelo $_GET e, para carregar apenas o empreendimento cadastrado envia-lo via $_SESSION (acho arriscado enviar o ID do processo via $_GET também). Neste caso teríamos algo como:

 

Na página de empreendimento, ao levar os dados para página de processo, uma marcação indicando que o cadastro foi feito:

<form method = 'POST' action = 'processos.php?empreendimento=1'>

Antes da rotina de inserção dos dados (que pode ser uma função, estar na mesma página ou em outra), você avalia qual será o ID inserido e grava ele numa $_SESSION:

<?php 
	$qry_empreendimento = mysqli_query($conn,"SELECT AUTO_INCREMENT FROM information_schema.tables WHERE  table_name = 'empreendimento' AND table_schema = 'BANCODEDADOS'");
	$result_empreend_ID = mysqli_query($conn, $qry_empreendimento);
	
	$_SESSION['empreend_ID'] = $result_empreend_ID;
?>

Na página de processos a recepção dos dados de empreendimento cadastrados com a validação para sabermos se a página de processos foi aberta através da página de empreendimento ou não:

<select name="id_empreendimento" id="id_empreendimento">
	<option value="Nenhum"> Selecione uma opção </option>
	<?php
		if(!isset($_GET['empreendimento'])){
			$qry_empreendimento = mysqli_query($conn,"SELECT * FROM empreendimento");
		}else{
			$qry_empreendimento = mysqli_query($conn,"SELECT empreendimento_ID, empreendimento_Nome FROM empreendimento WHERE empreendimento_ID = ".$_SESSION['empreend_ID']);
		}
		$result_empreendimento = mysqli_query($conn, $qry_empreendimento);
		while($registro = mysqli_fetch_assoc($result_empreendimento) ) {
			echo '<option value="'.$registro['ID'].'">'.$row_user['empreendimento_Nome'].'</option>';
		}
	?>
</select>

Nos exemplos citados acima, estamos indicando para página de processos que, se a página estiver sendo aberta através da página de empreendimento, ele deve carregar no combo, apenas o empreendimento cadastrado, do contrário deve carregar todos.

 

A partir dai, imagino que seja só escrever as rotinas de captura dos dados e gravação.

 

Espero ter conseguido ajudar, forte abraço e bom trabalho.

Share this post


Link to post
Share on other sites
Em 14/09/2018 at 08:34, Josemir Dias disse:

Bom dia Odenilson,

 

Excelente, então, temos dois parâmetros claros para elaborar a lógica. Uma possível solução (existem várias para este caso), é que você pode marcar a página de empreendimento através de uma flag e obtê-la pelo $_GET e, para carregar apenas o empreendimento cadastrado envia-lo via $_SESSION (acho arriscado enviar o ID do processo via $_GET também). Neste caso teríamos algo como:

 

Na página de empreendimento, ao levar os dados para página de processo, uma marcação indicando que o cadastro foi feito:


<form method = 'POST' action = 'processos.php?empreendimento=1'>

Antes da rotina de inserção dos dados (que pode ser uma função, estar na mesma página ou em outra), você avalia qual será o ID inserido e grava ele numa $_SESSION:


<?php 
	$qry_empreendimento = mysqli_query($conn,"SELECT AUTO_INCREMENT FROM information_schema.tables WHERE  table_name = 'empreendimento' AND table_schema = 'BANCODEDADOS'");
	$result_empreend_ID = mysqli_query($conn, $qry_empreendimento);
	
	$_SESSION['empreend_ID'] = $result_empreend_ID;
?>

Na página de processos a recepção dos dados de empreendimento cadastrados com a validação para sabermos se a página de processos foi aberta através da página de empreendimento ou não:


<select name="id_empreendimento" id="id_empreendimento">
	<option value="Nenhum"> Selecione uma opção </option>
	<?php
		if(!isset($_GET['empreendimento'])){
			$qry_empreendimento = mysqli_query($conn,"SELECT * FROM empreendimento");
		}else{
			$qry_empreendimento = mysqli_query($conn,"SELECT empreendimento_ID, empreendimento_Nome FROM empreendimento WHERE empreendimento_ID = ".$_SESSION['empreend_ID']);
		}
		$result_empreendimento = mysqli_query($conn, $qry_empreendimento);
		while($registro = mysqli_fetch_assoc($result_empreendimento) ) {
			echo '<option value="'.$registro['ID'].'">'.$row_user['empreendimento_Nome'].'</option>';
		}
	?>
</select>

Nos exemplos citados acima, estamos indicando para página de processos que, se a página estiver sendo aberta através da página de empreendimento, ele deve carregar no combo, apenas o empreendimento cadastrado, do contrário deve carregar todos.

 

A partir dai, imagino que seja só escrever as rotinas de captura dos dados e gravação.

 

Espero ter conseguido ajudar, forte abraço e bom trabalho.

 

Boa noite Josemir, obg pela força, deixa eu lhe perguntar essa parte  é referente ao formulário  de empreendimento?

<form method = 'POST' action = 'processos.php?empreendimento=1'>

Share this post


Link to post
Share on other sites
2 minutos atrás, odenilson marques disse:

 

Boa noite Josemir, obg pela força, deixa eu lhe perguntar essa parte  é referente ao formulário  de empreendimento?


<form method = 'POST' action = 'processos.php?empreendimento=1'>

Boa noite Odenilson,

 

É sempre um prazer ajudar. Sim, esta parte é no form de empreendimento. Ali, estamos dizendo que quando clicarmos no botão para cadastrar o empreendimento, ele deve enviar os dados cadastrados via $_POST.

 

Também estamos dizendo para página de processos que um empreendimento foi cadastrado nesta parte:

processos.php?empreendimento=1

 

Forte abraço

Share this post


Link to post
Share on other sites
17 minutos atrás, Josemir Dias disse:

Boa noite Odenilson,

 

É sempre um prazer ajudar. Sim, esta parte é no form de empreendimento. Ali, estamos dizendo que quando clicarmos no botão para cadastrar o empreendimento, ele deve enviar os dados cadastrados via $_POST.

 

Também estamos dizendo para página de processos que um empreendimento foi cadastrado nesta parte:

processos.php?empreendimento=1

 

Forte abraço

 ta certo!

 

A minha duvida está no action, tipo: como o meu form é de empreendimento, no action no meu caso tinha colocado action="recebe_empreendimento.php" para receber os dados inseridos no form de empreendimento, daria para deixar mais explicito essa parte?

Share this post


Link to post
Share on other sites
1 minuto atrás, odenilson marques disse:

 ta certo!

 

A minha duvida está no action, tipo: como o meu form é de empreendimento, no action no meu caso tinha colocado action="recebe_empreendimento.php" para receber os dados inseridos no form de empreendimento, daria para deixar mais explicito essa parte?

Sim, vamos lá:

Como exemplo, eu chamei a página onde serão cadastrados os processos, de "processos.php", mas, pelo que entendi, ela chama "recebe_empreendimento.php". Se for isso, teremos:

action = 'recebe_empreendimento.php?empreendimento=1'

Neste caso, quando clicar no botão para cadastrar o empreendimento, serão enviados via $_POST os dados cadastrados do empreendimento e via $_GET estamos informando 1 para dizer que foi cadastrado um empreendimento (empreendimento=1).

 

Espero ter conseguido esclarecer a dúvida.

Share this post


Link to post
Share on other sites
4 minutos atrás, Josemir Dias disse:

Sim, vamos lá:

Como exemplo, eu chamei a página onde serão cadastrados os processos, de "processos.php", mas, pelo que entendi, ela chama "recebe_empreendimento.php". Se for isso, teremos:


action = 'recebe_empreendimento.php?empreendimento=1'

Neste caso, quando clicar no botão para cadastrar o empreendimento, serão enviados via $_POST os dados cadastrados do empreendimento e via $_GET estamos informando 1 para dizer que foi cadastrado um empreendimento (empreendimento=1).

 

Espero ter conseguido esclarecer a dúvida.

 

Belaza meu amigo, essa parte compreendi

 

ja lhe incomodando novamente, em relação a parte baixo, essa inserção seria na tabela empreendimento certo? caso for, você está se referindo a capturar o ultimo código inserido?

Antes da rotina de inserção dos dados (que pode ser uma função, estar na mesma página ou em outra), você avalia qual será o ID inserido e grava ele numa $_SESSION:

<?php 
	$qry_empreendimento = mysqli_query($conn,"SELECT AUTO_INCREMENT FROM information_schema.tables WHERE  table_name = 'empreendimento' AND table_schema = 'BANCODEDADOS'");
	$result_empreend_ID = mysqli_query($conn, $qry_empreendimento);
	
	$_SESSION['empreend_ID'] = $result_empreend_ID;
?

Share this post


Link to post
Share on other sites

Sim, 

 

Neste código estamos avaliando todos os IDs da tabela empreendimento e pegando qual será o último ID, já que não temos no post a forma que você está usando para cadastrar os dados na tabela.

 

Com a previsão de qual será o último ID, podemos gravar uma $_SESSION que será levada para página "recebe_empreendimento" com a ID do empreendimento que foi cadastrado e, com isso, conseguimos gerar a consulta para trazer apenas o último empreendimento.

Share this post


Link to post
Share on other sites
22 minutos atrás, Josemir Dias disse:

Sim, 

 

Neste código estamos avaliando todos os IDs da tabela empreendimento e pegando qual será o último ID, já que não temos no post a forma que você está usando para cadastrar os dados na tabela.

 

Com a previsão de qual será o último ID, podemos gravar uma $_SESSION que será levada para página "recebe_empreendimento" com a ID do empreendimento que foi cadastrado e, com isso, conseguimos gerar a consulta para trazer apenas o último empreendimento.

 josemir para capturar o ultimo id tou usando esse codigo:, no entanto quando faço um teste na pagina de processo tanto chamando a pagina de processo depois de cadastrar um empreendimento ou não a combo nao aparece nada na combo, será que o bug ta nessa parte do codigo?

 

$ultimo_cod = mysqli_insert_id($con);
     echo $ultimo_cod;
 $_SESSION['ultimo_cod'] = $ultimo_cod;

 

porque observei que tu utilizou  essa linha de codigo 

 

$qry_empreendimento = mysqli_query($conn,"SELECT AUTO_INCREMENT FROM information_schema.tables WHERE  table_name = 'empreendimento' AND table_schema = 'BANCODEDADOS'");

Share this post


Link to post
Share on other sites

@odenilson marques,

 

Depende muito de como está seu código no arquivo que cria a combo.

Quando você roda este código acima, ele chega a retornar o valor de  $ultimo_cod neste echo?

Se sim, o problema não está neste código e sim na criação do combo e na obtenção dos dados que provem da página empreendimentos.

Share this post


Link to post
Share on other sites
2 minutos atrás, Josemir Dias disse:

@odenilson marques,

 

Depende muito de como está seu código no arquivo que cria a combo.

Quando você roda este código acima, ele chega a retornar o valor de  $ultimo_cod neste echo?

Se sim, o problema não está neste código e sim na criação do combo e na obtenção dos dados que provem da página empreendimentos.

é verdade, ele retorna sim

Share this post


Link to post
Share on other sites

Então já temos um parâmetro claro.

 

Se ele retorna no echo o valor de $ultimo_cod e a variável $_SESSION, está sendo preenchida corretamente, temos algumas possibilidades:

  • A variável $_SESSION está sendo apagada ao carregar a página de processos;
  • A variável $_SESSION não está sendo inserida na página de processos;

Posta o código da página de processos pra gente dar uma olhada.

 

Talvez o problema esteja em como você está executando a consulta para popular o combo. 

Share this post


Link to post
Share on other sites
18 minutos atrás, Josemir Dias disse:

Então já temos um parâmetro claro.

 

Se ele retorna no echo o valor de $ultimo_cod e a variável $_SESSION, está sendo preenchida corretamente, temos algumas possibilidades:

  • A variável $_SESSION está sendo apagada ao carregar a página de processos;
  • A variável $_SESSION não está sendo inserida na página de processos;

Posta o código da página de processos pra gente dar uma olhada.

 

Talvez o problema esteja em como você está executando a consulta para popular o combo. 

 

<form  action="recebe_cad_processo.php"  method="POST" name="frmprocesso" id="frmprocesso">
                        
      <div class="row">
          <div class="col-sm-12">
               <div class="form-group">
                    <label for="empreendimento"><strong>Empreendimento*</strong></label><br/>
                         <select name="empreendimento" id="empreendimento" class="form-control" autofocus="">
                                                    
                            <?php 
                               if(!isset($_GET['empreendimento'])){
                                  $qry_empreendimento = mysqli_query($con,"SELECT * FROM tb_empreendimento");
                               }else{
                                  $qry_empreendimento = mysqli_query($con,"SELECT codigo_empreendimento, nome_empreendimento FROM tb_empreendimento WHERE codigo_empreendimento = ".$_SESSION['ultimo_cod']);
                                    }
                                    $result_empreendimento = mysqli_query($con, $qry_empreendimento);
                                     while($regidtro = mysqli_fetch_assoc($result_empreendimento) ) {
                                         echo '<option value="'.$registro['codigo_empreendimento'].'">'.$row_user['nome_empreendimento'].'</option>';                           
                                     }                                                       
                                ?>                                    
                            </select>
                      </div>                                            
                  </div>
               </div>                                    
            </div>
        </div>
     </div>
     <div class="panel panel-default">
       <div class="panel-title" style="text-align: center;"><br/>
          <input type="submit" value="REALIZAR CADASTRO" class="btn btn-success" style="font-size: 17px; font-weight: bold;"/>
          <button  class="btn btn-danger"><a href="home.php"  style="font-size: 17px; font-weight: bold; color: #fff;text-decoration: none;">CANCELAR CADASTRO</a></button><br/><br/>
        </div>   
   </div>
 </form>

 

Share this post


Link to post
Share on other sites

Vamos fazer algumas alterações no código PHP para popular o combo.

 

<?php 
if(!isset($_GET['empreendimento'])){
  $qry_empreendimento = mysqli_query($con,"SELECT * FROM tb_empreendimento");
}else{
  $qry_empreendimento = mysqli_query($con,"SELECT codigo_empreendimento, nome_empreendimento FROM tb_empreendimento WHERE codigo_empreendimento = ".$_SESSION['ultimo_cod']);
}
//$result_empreendimento = mysqli_query($con, $qry_empreendimento);
while($registro = mysqli_fetch_assoc($qry_empreendimento) ) {
  echo '<option value="'.$registro['codigo_empreendimento'].'">'.$registro['nome_empreendimento'].'</option>';                           
}                                                       
?>

Copia e cola este código e sem alterar nada, substitui o teu código atual por este.

Me diz o resultado.

Share this post


Link to post
Share on other sites
Em 16/09/2018 at 01:36, Josemir Dias disse:

Vamos fazer algumas alterações no código PHP para popular o combo.

 


<?php 
if(!isset($_GET['empreendimento'])){
  $qry_empreendimento = mysqli_query($con,"SELECT * FROM tb_empreendimento");
}else{
  $qry_empreendimento = mysqli_query($con,"SELECT codigo_empreendimento, nome_empreendimento FROM tb_empreendimento WHERE codigo_empreendimento = ".$_SESSION['ultimo_cod']);
}
//$result_empreendimento = mysqli_query($con, $qry_empreendimento);
while($registro = mysqli_fetch_assoc($qry_empreendimento) ) {
  echo '<option value="'.$registro['codigo_empreendimento'].'">'.$registro['nome_empreendimento'].'</option>';                           
}                                                       
?>

Copia e cola este código e sem alterar nada, substitui o teu código atual por este.

Me diz o resultado.

 Bom dia  Josemir, quero lhe agradecer pela força, suas dicas me ajudaram bastante, conseguir resolver, obg Deus lhe abençoe sempre. 

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 fabioamorais
      Ola pessoal, sou novo aqui no fórum e também no mundo da programação. 

      Estou criando um sistema de cadastro de clientes em PHP 7 e mysql
      para meu serviço para fins de organização, tenho ja pronto o sistema de cadastro e edição do cliente, tenho login por usuário e senha.
      preciso colocar nesse sistema uma forma que registre a ação e o usuário que fez a ação quando houver uma alteração no cadastro.
      exemplo;
      O usuario (jose) alterou o status de analise para concluído .
      o usuario (pedro) alterou a localização de mesa para armario.
      e que fosse exibido como um tipo de histórico de eventos no próprio cadastro do cliente.
      e nesse campo se ainda tiver como add cometários.
      Usuario (jose): Precisa entrar em contato com o cliente francisco. 
      Usuario (pedro): cliente foi avisado e está sabendo.
       
      quem souber uma forma de fazer isso, ficaria muito grato.

    • By proflupin
      Estou com a seguinte dificuldade, possuo um <a> que busca uma id numa tabela do banco de dados, conforme abaixo:
       
      <a href="self_service.php?id=<?php echo $row_produto['id_categoria_chamado']?>" class="btn btn-primary"data-toggle="collapse" data-target="#subcategoria" aria-expanded="false" aria-controls="collapseExample">Visitar</a> A consulta é realizada, pois vejo que um novo link é mostrado no rodapé da página:

       
      Esta página self_service.php mostrada acima, é minha página principal, onde tudo é trabalhado. Se por exemplo eu mudar para outro arquivo php, teste.php por exemplo, uma nova página é aberta e consigo exibir os resultados normalmente.
       
      O problema é: quero abrir este ID na mesma página, dentro de um collapse. Exemplo:
       
      Cliquei em visitar na categoria Totvs...
       
       
      Um collapse abre-se logo abaixo:

       
      O que não consigo fazer é resgatar o ID passado pelo botão VISITAR em meu collapse, se eu tenter o $_GET['id'], não vai retornar nenhum valor, pois a URL não muda quando trabalhamos com collapse.
×

Important Information

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