PHP - fazer duas consultas por um único button
Caros, não estou sabendo implementar duas consultas quando o usuário clicar no (button). É uma proposta de apresentar a folha, mostrar os funcionários pelo SELECT . Atualmente, consigo fazer com que ele veja se existe a referencia e se não existir apresenta um span de não encontrado. Preciso que faça de imediato uma sub-consulta trazendo os dados do select abaixo e se possivel implementar um exemplo calculando por exemplo um desconto de inss, por exemplo.: Salário: 1200,00 * 8% = 96,00.
$consulta=pg_query($db,"SELECT funcionario.nome, funcionario.cargo, cargo.salario from funcionario INNER JOIN cargo ON funcionario.cargo = cargo.descricao ORDER BY funcionario.nome");
Segue primeiro o consulta folha:
<!DOCTYPE html>
<html>
<head>
<title>Consultar Folha</title>
<link rel="stylesheet" type="text/css" href="style.css" >
<!--
Por comodidade, eu estou usando jquery direto do site deles, isso é mto comum e recomendado inclusive.
-->
<script src="https://code.jquery.com/jquery-3.4.0.min.js" type="text/javascript"></script>
<script src="js/jquery.mask.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#cpf").mask("000.000.000-00");
$("#rg").mask("0.000.000");
$("#horario").mask("00:00");
$("#Mesano").mask("00/0000");
});
/**
* Este aqui é o nosso método Javascript que irá fazer a requisição assincrona
*/
function pesquisarMesano(codigoMes) {
document.getElementById('mensagem_erro').innerText = '';
/**
* Este é o método do Jquery que nos ajuda com o assincrono
* Aqui ele faz uma request para http://nome_do_nosso_servidor/FOLHAPAGAMENTO/obtemFuncionarioPorCodigo.php
* e passa como query string o parametro codigoFuncionario no final a url fica assim:
* http://nome_do_nosso_servidor/FOLHAPAGAMENTO/obtemFuncionarioPorCodigo.php?codigoFuncionario=VALOR
*
* O valor da matricula do funcionario é passado pelo botao lá no form, ele obtem o valor do campo e passa para o método
*/
$.get(
'/FOLHADEPAGAMENTO/RECIBOFOLHA/obtemFolhaPorCodigo.php',
{ codigoMes: codigoMes },
/**
* Esse método aqui será chamado pelo Jquery assim que o script obtemFuncionarioPorCodigo.php
* imprimir qualquer coisa.
* Isso é chamado 'callback' e como parametro recebemos a resposta devolvida pelo script php
*/
function (response) {
/**
* Para entender os valores de response, de uma olhada no script obtemFunncionarioPorCodigo primeiro.
* Tudo que está aqui (response.erro, response.descricao e response.salario) foi ele quem devolveu.
*/
if (response.erro === 404) {
/**
* Eu nao estou usando o Jquery para obter os elementos, isso pq na versao do Javascript dos navegadores modernos, nao é mais necessario o jquery para isso
*/
document.getElementById('formFolhamesano').reset();
document.getElementById('mensagem_erro').innerText = 'Folhamesano #'+codigoMes+' não encontrado!';
return;
}
document.getElementById('mesano').value = response.mesano;
document.getElementById('nome').value = response.nome;
document.getElementById('cargo').value = response.cargo;
document.getElementById('salario').value = response.salario;
document.getElementById('descricao').value = response.descricao;
document.getElementById('horario').value = response.horario;
},
'json'
);
}
</script>
<style type="text/css">
#corposistema{
width: 1200px auto;
height: 500px auto;
}
#corpocadastro{
border: solid gray 5px;
width: 300px;
height: 210px;
border-radius: 5px;
margin: 120px auto;
background: white;
padding: 50px;
}
#botao{
color: #fff;
margin-left: 370px;
margin-top: -170px;
background: #337ab7;
border-radius: 85%;
background: #337ab7;
text-align: center;
padding-top: 0 auto;
}
#botaocancelar{
height: 70%;
color: #fff;
margin-left: 370px;
margin-top: -5px;
padding-top: 0 auto;
background: #337ab7;
text-align: center;
border-radius: 85%;
}
</style>
</head>
<?php
include "banco_de_dados.php";
if(!empty($_GET['codigoMes'])){
$codigoMes = (int) $_GET['codigoMes'];
/** Comentários do Adriano
* Aqui simpliquei o uso do banco deixando apenas o que me importa. Conectar ao banco toda hora copiando aquele código
* só vai sujar o seu script e te atrapalhar a encontrar possiveis problemas no futuro.
*
* O ideial seria desacoplar tudo, PHP no seu canto (E desacoplar o script PHP - código importante para um lado, código de banco para outro)
* HTML esperando apenas valores e sem logico de PHP.
*
* Mas isso é para o futuro mas é bom ter em mente.
*/
$row = consultaBanco("SELECT folhamesano.mesano FROM folhamesano WHERE folhamesano.mesano='{$codigoMes}'");
$codigoMes = $row['codigoMes'];
} else $codigoMes = null;
?>
<body>
<div id="corposistema">
<div id="corpocadastro">
<form id="formFolhamesano" action="/FOLHADEPAGAMENTO/RECIBOFOLHA/CADASTROFOLHA.php" method="POST">
<p>
<label>Competência </label>
<input name="codigoMes" id="Mesano" type="text" style="width: 20%" value="<?=$codigoMes?>" required/>
<button type="button" onclick="pesquisarMesano(this.form.elements['codigoMes'].value)">Pesquisar</button>
<span style="color: red" id="mensagem_erro"></span><br/>
</p>
</form>
<form action="/FOLHADEPAGAMENTO/RECIBOFOLHA/FOLHACADASTRADOS.php" method="POST">
<div id="botaocancelar">
<p>
<input type="submit" id="btn" value=" Cancelar " />
</p>
</div>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------------
Segue o script que irá responder a requisição:
<?php
require "banco_de_dados.php";
function obtemfolhamesanoPorId($codigoMes) {
return consultaBanco("SELECT folhamesano.mesano FROM folhamesano WHERE folhamesano.mesano='{$codigoMes}'");
}
/**
* Esse é o script que irá responder a requisição assincrona que criamos no Javascript
*
* Aqui eu espero que a query string codigoFuncionario esteja definida (Pode estar vazia, mas precisa estar definida, por exemplo, codigoCargo= ) por isso usei isset
*
*
*/
if (isset($_GET['codigoMes'])) {
$codigoMes = $_GET['codigoMes'];
/** Novamente encapsulando em métodos para adicionar contexto ao código */
$folhamesano = obtemfolhamesanoPorId($codigoMes);
if (empty($folhamesano)) {
/** Como este é um código bem simples, usei o die para escrever o valor de saida
* isso pq eu quero neste caso o texto seja escrito e a aplicação pare aqui
* Eu poderia user um echo seguido de um return, mas para adicionar contexto
* eu usei um método que deixe claro a intenção. Morre aqui e escreve o que eu estou pedindo.
*/
die(json_encode([
'erro' => 404,
]));
}
/** Neste caso eu quero escrever e sair (Se nada acontecer depois, ele irá sair sozinho), poderia usar o die, sim. Mas nao é um ponto onde precisa morrer, apenas sair um texto */
echo json_encode($folhamesano);
} else {
die(json_encode([
'erro' => 404,
]));
$tabela = '<table border="1" border: solid gray 5px;>';//abre table
$tabela .='<thead>';//abre cabeçalho
$tabela .= '<tr>';//abre uma linha
$tabela .= '<th width="410px">Nome</th>';
$tabela .= '<th width="300px">cargo</th>';
$tabela .= '<th width="140px">salario</th>';
$tabela .= '</tr>';//fecha linha
$tabela .='</thead>'; //fecha cabeçalho
$tabela .='<tbody>';//abre corpo da tabela
$db = pg_connect("port=55432 dbname=folha user=fortesrh password=1234");
$consulta=pg_query($db,"SELECT funcionario.nome, funcionario.cargo, cargo.salario from funcionario INNER JOIN cargo ON funcionario.cargo = cargo.descricao ORDER BY funcionario.nome");
while ($linha = pg_fetch_array($consulta)) {//declaração da variável linha trazendo o resultado da query
$tabela .= '<tr>'; // abre uma linha
$tabela .= '<td>'.$linha['nome'].'</td>'; // coluna nome do funcionario
$tabela .= '<td align="center">'.$linha['cargo'].'</td>'; // coluna cargo
$tabela .= '<td align="center">'.$linha['salario'].'</td>'; // coluna salario
$tabela .= '</tr>'; // fecha linha
}
$tabela .='</tbody>'; //fecha corpo
$tabela .= '</table>';//fecha tabela
echo $tabela; // imprime
}Discussão (0)
Carregando comentários...