?php
a
?php
a
Basta usar a concatenação.
Exemplo:
..... código omitido ...
// declaração de variáveis
$valor=19;
$datai ='10/5/2017';
$dataf='10/8/2017';
..... código omitido ...
where 1=1 and programa.codprograma = $valor
and (atendimentos.dtaatende between '$datai' and '$dataf')
Outra dica importante:
Você pode montar o SQL aos poucos com concatenação da variável:
$sql = " SELECT codtipoatendimento, nome, codpaciente, desctipoatendimento, qtd agendado, atendido, ";
$sql .= " qtd -atendido faltas, qtdproced FROM ( ";
$sql .= " SELECT qtd, codtipoatendimento, nome, codpaciente , desctipoatendimento";
$sql .= " ,(SELECT COUNT(*) FROM ( SELECT DISTINCT atendimentos.codatendimento from atendimentos ";
$sql .= " LEFT JOIN atendimentos1 a1 ON a1.codatendimento = atendimentos.codatendimento ";
// resto do código
O ideal é que os comandos SQL sejam escritos em maiúsculo e as demais partes em minúsculo. Isto facilita a leitura
MUito obrigado pelas dicas Gabriel, mas acho que vc nao entendeu eu quero passar os valores para as variáveis pelo html, segue uma imagem para exemplificar http://oi67.tinypic.com/2igdnj7.jpg eu quero passar os dados para o select por ai, poderia me ajudar por favor?
Para recuperar os valores do HTML, faz-se necessário algumas mudanças.
A primeira: cada elemento deve ter um nome exclusivo (só dele). Exemplo:
<input type="date" class="form-control" id="data_inicial" name="data_inicial">
<input type="date" class="form-control" id="data_final" name="data_final">
A segunda: os valores devem ser recuperados depois que o formulário for "submetido" ou enviado.
$data_inicial = $_POST['data_inicial'];
$data_final = $_POST['data_final'];
Por fim, as variáveis devem ser concatenadas no SQL conforme dica anterior.
No caso vou criar um arquivo para enviar pelo formulario com o codigo
$data_inicial = $_POST['data_inicial'];
$data_final = $_POST['data_final'];
?
Dá pra fazer no mesmo arquivo mas o ideal é que sejam dois arquivos.
Um com o formulário e outro que receberá os dados enviados pelo form e fará o processamento do SQL.
Mas, tudo depende do que se pretende fazer e da lógica da aplicação.
É uma boa prática separar tarefas diferentes em arquivos diferentes.
Grabriel muito obrigado pela ajuda, mas não sei bem como fazer, sou iniciante, no caso como eu faria pra ficar na mesma pagina ? eu só quero chegar lá escolher a data da um submit e esperar voltar os dados da pesquisa
Fiz uma alteração no teu código e publiquei. Dê uma olhada. O que precisa ser modificado está em vermelho.
https://docs.google.com/document/d/1rYJER9jia8iuQHf8KdUQS82iU4KaUb46XguqLCYbc7k/edit?usp=sharing
Oi Miquelysson, vou tentar te ajudar
Para passar dados a uma variável precisamos de um formulário, para isso fazemos da seguinte forma
<form action="" method="post">
(campos do formulário aqui)
</form>
O atributo action define para onde o formulário vai enviar os dados, se deixarmos em branco ele enviará para a própria pagina, o outro atributo method é de que jeito ele será enviado, os dois principais são get e post, se deixarmos em branco ele enviará como get. O get aparece as informações na URL da pagina, já o post é feito meio que por "debaixo dos panos". Para identificarmos cada campo e atribuir eles a uma variável precisamos de um nome, podemos fazer isso no input do formulário assim:
<form action="" method="post">
<input type="text" name="campo1">
<input type="text" name="campo2">
<input type="submit" name="enviar">
</form>
Nesse formulário temos 2 campos e um botão de enviar, como o action está vazio ele enviará para a própria pagina. Então para atribuir os valores desses campos a uma variável vamos fazer o seguinte:
if (isset($_POST['enviar'])) {
$campo1 = $_POST['campo1'];
$campo2 = $_POST['campos2'];
}
com esse código verificamos se o formulário foi enviado com: if (isset($_POST['enviar'])) ou seja, existe um método post chamado enviar? Se tiver ele entra dentro do IF atribuindo a eles o valor do campo no input. Se o método do formulário for get ai você terá que trocar de $_POST para $_GET. Você também pode (e deve) verificar se os campos do formulário estão vazios.
Daniel muito obrigado pela ajuda, ai no caso la dos valores SQL eu coloco as variaveis $data_inicial e $data_final?
Isso, mas elas devem estar entre aspas porque o SQL exige isso, então ficaria '$data_inicial' e '$data_final', outra coisa que você também tem que prestar atenção é que formato de data você vai passar no input e em que formato o banco de dados guarda essa informação. Por exemplo se você tem uma coluna no formato date do MySQL a data tem que vir ano, depois mes e dia assim: '2017-03-28'
As dicas do DANIEL estão excelentes. Mas, como você tá iniciando, talvez seja importante "dividir para conquistar".
Passo 1: Fazer o formulário para receber os dados. Passo 2: Enviar os dados do formulario para serem processados por outra página. Passo 3: Após o recebimento de dados, montar e executar o SQL, recuperar os dados e exibir na tabela.
Basicamente, dois arquivos: um para representar o formulário e outro para receber os dados, montar e executar o sql e exibir o resultado.
Exemplo da primeira página:
<form action="processa.php" method="post">
<!-- os demais campos e botão aqui -->
</form>
Na segunda página (processa.php):
$data_inicial = $_POST['data_incial'];
$data_final = $_POST['data_final'];
// em seguida a SQL com as datas inseridas
// por fim exibir os dados na tabela.
O problema de formatar a data pode ser resolvida com o uso de uma função, mas isto pode ser resolvido em outro momento.
eu to usando um banco bem antigo pra puxar os dados, ele aceita os parametros da seguinte forma mm/dd/yyyy como resolvo essa questão da data?
Você pode criar um função para tratar isto:
function datasql($str_data)
{
$data = explode('/',$str_data);
$str_dia= $data[0]; //substr($str_data,0,4);
$str_mes= $data[1];//substr($str_data,5,2);
$str_ano= $data[2]; //substr($str_data,8,2);
$str_data=$str_mes."/".$str_dia."/".$str_ano.;
if ($str_data=='00/00/0000') { return '';} else { return $str_data; }
}
E na hora de atribuir a data você altera o código para:
$data_inicial = datasql( $_POST['data_incial']) ;
A data será convertida antes de ser usada
Crie a pagina processa.php fiz o
<form action="processa.php" method="post">
aqui coloquei os campos do form
</form>
dentro do processa.php
fiz assim
$data_inicial = $_POST['data_incial'];
$data_final = $_POST['data_final'];
em seguida coloquei o sql
$sql = (" select codtipoat..... // resto do código
e aqui coloquei o html pra mostrar o resultado
Porém esta ocorrendo o seguinte erro:
Notice: Undefined variable: data_inicial in C:\xampp\htdocs\PacientesApp\views\teste.php on line 48
Notice: Undefined variable: data_final in C:\xampp\htdocs\PacientesApp\views\teste.php on line 80
Ah dentro do sql coloquei as variáveis de data
and (atendimentos.dtaatende between '$data_inicial' and '$data_final'
como resolver?
O erro indica que as variáveis não estão definidas dentro do script teste.php .
O que tem dentro do arquivo teste.php ?
teste.php é todo a pagina principal todo esse código que coloquei no primeiro post
Compartilhe, somente as duas linhas que apresentaram erro: linha 48 e linha 80. Fica mais fácil para verificar.
são as linhas onde estou passando as variáveis para dentro do SQL
and (atendimentos.dtatende btween '$data_inicial' and '$data_final'.... //resto do sql
Se você está passando o SQL dentro de teste.php as variáveis realmente não existem, porque o formulário mandou para processa.php e você atribuiu elas lá.
Daniel eu tentei do jeito que tu falou tbm
if (isset($_POST['enviar'])) {
$campo1 = $_POST['campo1'];
$campo2 = $_POST['campos2'];
}
dava o mesmo erro
Você colocou nome nos inputs??
Realmente, teste.php não pode ter variáveis que ainda serão enviadas pelo formulário. Por isto que o ideal é repartir o código e separar as funcionalidades da lógica em cada pedaço.
Exemplo: formulario.php (para conter o formulário)
processa.php (para receber os campos do form, fazer o processamento da SQL e exibir o resultado)
O script teste.php pode ser removido depois que esta mudança for realizada.
Daniel eu coloquei os inputs com os nomes certinhos.
Gabriel no teste.php é todo o projeto, criei a pagina processa.php e no inicio coloquei
$data_inicial = $_POST['data_incial'];
$data_final = $_POST['data_final'];
e deu esse erro ai que te mandei
Entendi, Miquell.
O erro ocorre porque as variáveis não são reconhecidas pela página teste.php .
As variáveis só podem ser usadas depois que são "postadas" pelo formulário.
Você consegue separar os arquivos conforme a sugestão abaixo:
1) em teste.php, mantenha somente o formulário sem fazer referência a nenhuma variável.
2) em processa.php, coloque a parte que recuperar as variáveis, que monta e executa a select e que exibe o resultado.
Vamos por parte.
Em teste.php deixe somente esta parte:
<div class="container">
<div class="row">
<div id="filter-panel">
<div class="panel panel-default">
<div class="panel-body">
<form class="form-inline" role="form" method="post" action="processa.php">
<div class="form-group">
<label class="filter-col" style="margin-right:0;" for="pref-perpage">Programa:</label>
<select id="pref-perpage" class="form-control">
<option selected="selected "value="19">19 CER III</option>
<option value="20">20 OPM</option>
<option value="21">21 OUVIDORIA</option>
<option value="22">22 INT JATIUCA</option>
<option value="23">23 INT FAROL</option>
<option value="24">24 INT PENEDO</option>
<option value="25">25 INT SANTANA</option>
</select>
</div>
<div class="form-group">
<label class="filter-col" style="margin-right:0;" for="pref-search">Procedimento:</label>
<input type="number" class="form-control input-sm" id="pref-search">
</div>
<div class="form-group">
<label for="date" class="col-sm-3 control-label">Data inicial</label>
<div class="col-sm-9">
<input type="date" class="form-control" id="dateInicial" name="dateInicial">
</div>
</div>
<div class="form-group">
<label for="date" class="col-sm-3 control-label">Data final</label>
<div class="col-sm-9">
<input type="date" class="form-control" id="dateFinal" name="dateFinal">
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-danger"> Buscar </button>
</div>
</form>
</div>
Em processa.php você coloca a outra parte do código (que foi omitida).
Vamos lá fiz da seguinte forma em teste.php deixei assim
<title>Dados dos Pacientes</title>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.13/css/dataTables.bootstrap.min.css">
<div class="container">
<div class="row">
<div id="filter-panel">
<div class="panel panel-default">
<div class="panel-body">
<form action="processa.php" method="post" class="form-inline" role="form">
<div class="form-group">
<label class="filter-col" style="margin-right:0;" for="pref-perpage">Programa:</label>
<select id="pref-perpage" class="form-control">
<option selected="selected "value="19">19 CER III</option>
<option value="20">20 OPM</option>
<option value="21">21 OUVIDORIA</option>
<option value="22">22 INT JATIUCA</option>
<option value="23">23 INT FAROL</option>
<option value="24">24 INT PENEDO</option>
<option value="25">25 INT SANTANA</option>
</select>
</div>
<div class="form-group">
<label class="filter-col" style="margin-right:0;" for="pref-search">Procedimento:</label>
<input type="number" class="form-control input-sm" id="pref-search">
</div>
<div class="form-group">
<label for="date" class="col-xs-3 control-label">Data inicial</label>
<div class="col-xs-9">
<input type="date" class="form-control" id="data_inicial" name="data_inicial">
</div>
</div>
<div class="form-group">
<label for="date" class="col-xs-3 control-label">Data final</label>
<div class="col-xs-9">
<input type="date" class="form-control" id="data_final" name="data_final">
</div>
</div>
<div class="form-group">
<button type="submit" name="enviar" class="btn btn-danger"> Buscar </button>
</div>
</form>
</div>
e em processa.php deixei assim
<?php
$data_inicial = $_POST['data_inicial'];
$data_final = $_POST['data_final'];
// <?php
// require_once ("sidebar.php");
// $host = "localhost:c:\SISHOSP\banco\banco.fdb";
$host = "192.168.0.14:c:\sishosp\Banco\banco.fdb";
$user = "SYSDBA"; //Usuario do banco de dados
$senha = "masterkey"; //senha do banco de dados
$sql_connect = ibase_connect($host,$user,$senha,'win1252',0,3)
or die('<h1>Erro ao conectar com o banco de dados </h1>: ' . ibase_errmsg());
// $data_inicial = '03/15/2017';
// $data_final = '03/28/2017';
$sql = (" select codtipoatendimento, nome, codpaciente, desctipoatendimento, qtd agendado,atendido,
qtd -atendido faltas, qtdproced from (
select qtd, codtipoatendimento, nome, codpaciente , desctipoatendimento
,
(
select count(*) from (
select distinct atendimentos.codatendimento from atendimentos
left join atendimentos1 a1 on a1.codatendimento = atendimentos.codatendimento
left join tipoatendimento ta on ta.cod = atendimentos.codtipoatendimento
left join proc p on p.codproc = a1.codprocedimento
inner join pacientes on atendimentos.codpaciente = pacientes.codpaciente
left join medicos on medicos.codmedico = a1.codprofissionalatendimento
join programa on programa.codprograma = atendimentos.codredeatende
left join convenio on convenio.codconvenio = atendimentos.codconvenio
where 1=1 and programa.codprograma = 19
and (atendimentos.dtaatende between '$data_inicial' and '$data_final')
and ((a1.situacao = 'ATENDIDO'))
-- and a1.codprocedimento= 0301010075
and atendimentos.codtipoatendimento= j.codtipoatendimento
and atendimentos.codpaciente= j.codpaciente
) b
) atendido,
( select count(*) from atendimentos
left join atendimentos1 a1 on a1.codatendimento = atendimentos.codatendimento
left join tipoatendimento ta on ta.cod = atendimentos.codtipoatendimento
left join proc p on p.codproc = a1.codprocedimento
inner join pacientes on atendimentos.codpaciente = pacientes.codpaciente
left join medicos on medicos.codmedico = a1.codprofissionalatendimento
join programa on programa.codprograma = atendimentos.codredeatende
left join convenio on convenio.codconvenio = atendimentos.codconvenio
where 1=1 and programa.codprograma = 19
and (atendimentos.dtaatende between '$data_inicial' and '$data_final')
and ((a1.situacao = 'ATENDIDO'))
-- and a1.codprocedimento= 0301010075
and atendimentos.codtipoatendimento= j.codtipoatendimento
and atendimentos.codpaciente= j.codpaciente
) qtdproced
from (
select
count(*) qtd, w.codtipoatendimento,w.desctipoatendimento, w.nome, w.codpaciente
from (
Select distinct a1.codatendimento, atendimentos.codtipoatendimento,ta.desctipoatendimento, pacientes.nome, pacientes.codpaciente from atendimentos
left join atendimentos1 a1 on a1.codatendimento = atendimentos.codatendimento
left join tipoatendimento ta on ta.cod = atendimentos.codtipoatendimento
left join proc p on p.codproc = a1.codprocedimento
inner join pacientes on atendimentos.codpaciente = pacientes.codpaciente
left join medicos on medicos.codmedico = a1.codprofissionalatendimento
join programa on programa.codprograma = atendimentos.codredeatende
left join convenio on convenio.codconvenio = atendimentos.codconvenio
where 1=1
and programa.codprograma = 19
and (atendimentos.dtaatende between '$data_inicial' and '$data_final')
-- and a1.codprocedimento= 0301010075
and atendimentos.codtipoatendimento in (select cod from tipoatendimento where desctipoatendimento like '%TERAP%')
)w group by w.codtipoatendimento,w.desctipoatendimento, w.nome , w.codpaciente
) j
)a where qtd -atendido >0");
$query= ibase_query ($sql_connect, $sql);
?>
<div class="table-responsive">
<table id="pacientes" class="table table-hover">
<thead>
<tr>
<th >Nome</th>
<th >Prontuario</th>
<th >Tipo de Atendimento</th>
<th >Agendado</th>
<th >Atendido</th>
<th >Faltas</th>
<th >Proc Realizados</th>
</tr>
</thead>
<tbody>
<?php
while ($row = ibase_fetch_object($query)) {
echo "<tr>";
echo "<td>" .$row->NOME."</td>";
echo "<td>" .$row->CODPACIENTE;"</td>";
echo "<td>" .$row->DESCTIPOATENDIMENTO;"</td>";
echo "<td>" .$row->AGENDADO;"</td>";
echo "<td>" .$row->ATENDIDO;"</td>";
echo "<td>" .$row->FALTAS;"</td>";
echo "<td>" .$row->QTDPROCED;"</td>";
}
echo "</tr>";
ibase_free_result($query);
ibase_close($sql_connect);
?>
</tbody>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.10/css/dataTables.bootstrap.min.css">
<script>
$(document).ready(function(){
$('#pacientes').DataTable({
"language": {
"lengthMenu": "Mostrando _MENU_ registros por página",
"zeroRecords": "Nada encontrado",
"info": "Mostrando página _PAGE_ de _PAGES_",
"infoEmpty": "Nenhum registro disponível",
"infoFiltered": "(filtrado de _MAX_ registros no total)",
"search": "Pesquisar"
}
});
});
</script>
<!-- /.row -->
</div>
<!-- /.container -->
ele carrega como se estive retornando algo, mas da timeout e nao retorna nada
Você consegue executar a QUERY direto no banco de dados para verificar se está correta e se está retornando dados ?
Você tá informando a data no form no "formato" aceito pelo banco ?
Você pode fazer o seguinte: usar o comando
echo $sql ;
para visualizar a SQL.
e usar
var_dump ($query);
para checar se está retornando algo do banco.
Gabriel, funcionou Obrigado! no caso se eu quiser também alterar o tipo de procedimento que estou passando direto no sql eu faço a mesma coisa?
Não entendi a expressão "tipo de procedimento". Você quer dizer INSERT, DELETE, UPDATE ? Se for isto, pode ser feito da mesma maneira, mas em PHP/MYSQL sempre há várias maneira de fazer a mesma tarefa.
Quanto mais cursos fizer com esta combinação, melhor.
Não me expressei bem, tipo de procedimento é um campo no sql que eu colo o codigo de atendimento ex: 301070075 no caso se eu quiser também alterar o tipo de procedimento pelo form que estou passando direto no sql eu faço a mesma coisa que fiz com a data??
SIM. Faz do mesmo jeito.