Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

StephanieLima

Problema ao gerar relatório especifico com variáveis passadas via POST

Recommended Posts

Olá galera!

 

 

Estou fazendo um código para gerar um relatório usando FPDF, porém estou com um problema:

 

É um formulario de consulta. O relatório gera os dados de toda a consulta, mas quando é uma busca especifica, ele não traz, dá erro. Pois não reconhece as variáveis que estão sendo passadas no select do mySQL. Aqui ó código(O PROBLEMA SE ENCONTRA NAS VARIAVEIS PASSADAS NO $_POST, ELE NÃO RECONHECE):

 

<?php


 //conexão com o banco de dados


require('../conexao.php');


$por_pagina = 49; 
$num_pagina = 0;



$sql  ="SELECT f.nome, f.codigo, f.ramal, f.id_unidade,f.matricula,f.id_tipo_funcionario, u.sigla, t.id, t.descricao, f.status FROM siscest.funcionario f INNER JOIN protocolo.unidade u ON u.id = f.id_unidade INNER JOIN tipo_funcionario  t ON t.id = f.id_tipo_funcionario WHERE f.status = 1 AND f.nome= '".$_POST['nome']."' OR f.id_unidade = '".$_POST['id_unidade']."' ORDER BY f.id"; 


$listagem = mysql_query($sql) or die (mysql_error());


$row = mysql_num_rows($listagem);


$paginas = ceil($row/$por_pagina);


//incluir a classe do fpdf 
define('FPDF_FONTPATH', 'font/');
require_once "fpdf.php";
$pdf = new FPDF(); 




//INICIALIZA AS VARIÁVEIS
$linha_atual = 0;
$inicio = 0;


//PÁGINAS
for($x=1; $x<=$paginas; $x++) {


//VERIFICA
$inicio = $linha_atual;
$fim = $linha_atual + $por_pagina;
if($fim > $row){ 
$fim = $row;
    }
 $num_pagina= $num_pagina + 1; 
//define a orientação e o tipo da página
$pdf->addpage('P','A4');


//imprimi o cabeçalho do relatório 
$pdf->setFont('Arial','B','10');
$titulo = utf8_decode('RELATÓRIO DE FUNCIONÁRIOS ATIVOS QUE POSSUEM VEÍCULOS .');
$pdf->Cell(0, 0, $titulo, 0, 5, 'C');


$pdf->ln(5);


 //define o a fonte e o tamanho, sem essa definição os resultados não serão impressos
 $pdf->setFont('times','B','10');


 //variaveis para configurar a margem e pular linha
 $pulalinha=10;
 $margintop=10;




$titulo2 = utf8_decode('  Código                  Setor                                        Nome                                    Ramal             Matrícula                  Cargo');
  $pdf->cell(0, 14, $titulo2);
$pdf->setFont('times','','10');




//imprimi o rodapé do relatório  


$pdf->setxy(180,270);
$varpag = utf8_decode('Pág.: ');
$pdf->cell(0,6,$varpag.$num_pagina,0,0,'L');




for($i=$inicio; $i<$fim; $i++) {
    
$pulalinha+=5;  


$pdf->setxy(10,$pulalinha+$margintop);
$pdf->cell(0,5, mysql_result($listagem, $i,"Codigo"),1,5);


$pdf->setxy(30,$pulalinha+$margintop);
$pdf->cell(0,5, mysql_result($listagem, $i, "u.sigla"),1,5);


$pdf->setxy(60,$pulalinha+$margintop);
$pdf->cell(0,5, mysql_result($listagem, $i,"Nome"),1,5);


$pdf->setxy(120,$pulalinha+$margintop);
$pdf->cell(0,5, mysql_result($listagem, $i,"Ramal"),1,5);


$pdf->setxy(140,$pulalinha+$margintop);
$pdf->cell(0,5, mysql_result($listagem, $i,"Matricula"),1,5);


     $llista=utf8_decode( mysql_result($listagem, $i,"descricao"));
$pdf->setxy(170,$pulalinha+$margintop);
$pdf->cell(0,5,$llista,1,5);


$linha_atual++;
} 
}




 //saida da impressão do relatório


 $pdf->output("relatorio_consulta_funcionario.pdf","I");




?>
Alguem me dá uma luz?? ja tem dias que estou parada nisso!
Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá StephanieLima, não sei se estou usando as palavras corretas mas espero ajudar. Tenta definir as variáveis que vai receber os dados do $_POST e coloca o a variável no select.

EX:

$nome = $_POST['nome'];
 
$id_unidade = $_POST['id_unidade'];
 
$sql  ="SELECT f.nome, f.codigo, f.ramal, f.id_unidade,f.matricula,f.id_tipo_funcionario, u.sigla, t.id, t.descricao, f.status FROM siscest.funcionario f INNER JOIN protocolo.unidade u ON u.id = f.id_unidade INNER JOIN tipo_funcionario  t ON t.id = f.id_tipo_funcionario WHERE f.status = 1 AND f.nome= '$nome' OR f.id_unidade = '$id_unidade' ORDER BY f.id"; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

allex_carvalho

 

oi alex!

 

Coloquei no inicio do código, como voce falou, mas ele continua não trazendo nada. diz esse erro:

 

Array () Notice : Undefined index: nome em C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ siscesteste \ fpdf \ relatorio_consulta_funcionario.php na linha 31 Aviso : Undefined index: id_unidade em C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ siscesteste \ fpdf \ relatorio_consulta_funcionario.php na linha 31 erro FPDF: Alguns dados já tem sido de saída, não é possível enviar arquivos PDF

 

Aqui está o form que deveria gerar o relatório

 

<?php require("../islogged.php"); if(!check_logged())header("Location:".$url_index); 


require('../crud/funcoes.php'); 


$sql  ="SELECT f.id, f.nome, f.codigo, f.ramal, f.id_unidade,f.matricula,f.id_tipo_funcionario, u.sigla, t.id, t.descricao, f.status FROM siscest.funcionario f"; 
$sql .=" INNER JOIN protocolo.unidade u ON u.id = f.id_unidade";
$sql .=" INNER JOIN tipo_funcionario  t ON t.id = f.id_tipo_funcionario";
$sql .=" WHERE f.status = 1 ";


foreach($_POST as $key=>$value){
$dados[$key] = mysql_real_escape_string(html_entity_decode($value));
}


if(isset($dados["nome"]) && $dados["nome"] != ""){
$sql .= " AND f.nome ='".$dados["nome"]."'";
}
if(isset($dados["id_unidade"]) && $dados["id_unidade"] != ""){
$sql .= " AND f.id_unidade ='".$dados["id_unidade"]."'";
}
$sql.=" ORDER BY f.id";
$listagem = mysql_query($sql) or die (mysql_error());
ob_clean();


?>
<fieldset class="formulario" style="width:750px">
<legend>Consulta de Funcionários</legend> 
<form name="form_editar_funcionario" id="form_editar_funcionario">
<table align="left" id="funcionario1">
<thead class="fixedHeader">
      <tr>  
<th width="45"><label for="nome">Nome:</label></th>
<th width="45"><input  type="text" name="nome" id="nome" style="border:1px solid #aaa;padding:5px;-moz-border-radius:3px;-webkit-border-radius:3px;width:180px" /> <!--onkeyup="maiuscula(this)"-->
<th width="60"><label for="id_unidade">Setor:</label></th>
<th width="60"><select id="id_unidade" name="id_unidade" style="border:1px solid #aaa;padding:5px;-moz-border-radius:3px;-webkit-border-radius:3px;width:150px;"><option value=""></option>


<?php
require('../conexao.php');
$result = mysql_query("SELECT * FROM protocolo.unidade ORDER BY sigla");
while($row =(mysql_fetch_array($result))){
echo '<option value="'.$row['id'].'">'.$row['sigla'].'</option>';
}
mysql_close($conexao);
?> 
</select></th>
  <th ><input style="margin-right:10px;"  class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Buscar" name="Buscar" onclick="listDataFuncionario()"/></th>
  <th ><input style="margin-right:10px;" class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Novo" name="Novo" onclick="getHTMLFromPage('forms/form_funcionario')"/></th>
  <th ><input style="margin-right:10px;" class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Limpar" name="Limpar" onclick="resetForm()"/></th>
   </tr> 
</thead>
</table> 
</form> 
<?php if(mysql_num_rows($listagem) > 0){ ?> 
<form id="form_listagem_consulta"> 
<div id="tableContainer" class="tableContainer">
<table align="center">
<thead class="fixedHeader">
   <th width="100">Código</th>
<th width="100">Matrícula</th>
<th width="130">Nome</th>
<th width="100" align="center">Ramal</th>
<th width="100">Setor</th>
<th width="130">Cargo</th>
<th width="*"></th>
</thead>
<tbody class="scrollContent">
<?php while($row = mysql_fetch_array($listagem)){?>
<tr align="center" id="linha_<?php echo $row['id']; ?>">
   <td width="100" align="center"><?php echo $row['codigo'] ?></td>
<td width="100" align="center"><?php echo $row['matricula'] ?></td>
<td width="150"><?php echo $row['nome']?></td>
<td width="100"><?php echo $row['ramal']?></td>
<td width="100"><?php echo $row['sigla']?></td>
<td width="130"><?php echo $row['descricao']?></td>
<td width="*"  align="center" title="Editar"><img src="img/edit.png" style="cursor: pointer;" onclick="modalEditFuncionario(<?php echo $row['id']?>)"></td>
<td width="*"  align="center" title="Remover"><img src="img/delete.png" onclick="confirmRemove('dao_delete_funcionario',<?php echo $row['id'] ?>, updateDataTableFuncionario)"></td> 
<input type="hidden" name="id" id="id" value="<?php echo $row['id'];?>"/>
<input type="hidden" name="codigo" id="codigo" value="<?php echo $row['codigo'];?>"/>
<input type="hidden" name="matricula" id="matricula" value="<?php echo $row['matricula'];?>"/>
<input type="hidden" name="nome" id="nome"  value="<?php echo $row['nome'];?>"/>
<input type="hidden" name="ramal" id="ramal" value="<?php echo $row['ramal'];?>"/>
<input type="hidden" name="codigo" id="codigo" value="<?php echo $row['id_unidade'];?>"/>
<input type="hidden" name="id_unidade" id="id_unidade" value="<?php echo $row['id_tipo_funcionario'];?>"/>
<input type="hidden" name="observacao" id="observacao" value="<?php echo $row['observacao'];?>"/>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</form> 
<?php }else{ ?>
<p class='msg_nao_encontrado'>Não existem dados para essa consulta.</p>
<?php } ?> 


<input style="margin-right:10px;" class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Voltar" name="voltar" onclick="getHTMLFromPage('forms/form_editar_funcionario')"/>
<input class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Gerar Relatório" onclick="location.href = 'fpdf/relatorio_consulta_funcionario.php'" />
</fieldset>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que falei para colocar no topo do arquivo seria aqui:

<?php
//conexão com o banco de dados
require('../conexao.php');
$por_pagina = 49; 
$num_pagina = 0;

echo '<pre>';
print_r($_POST);
echo '</pre>';

Acredito que seu problema esteja aqui:

<form name="form_editar_funcionario" id="form_editar_funcionario">

Faltou o method e o action:

<form name="form_editar_funcionario" id="form_editar_funcionario" method="post" action="CAMINHO-PARA-AÇÃO">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seja no formulário ou no jquery você precisa informar o method. Insira o method="post" no seu form. Insira também o print_r conforme orientei no post acima para ver se retorna algum valor no $_POST.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se o problema está no js, troque isso:

<input style="margin-right:10px;" class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Novo" name="Novo" onclick="getHTMLFromPage('forms/form_funcionario')"/>

Por isso:

<input style="margin-right:10px;" class="botao ui-button ui-widget ui-state-default ui-corner-all" type="submit" value="Novo" name="Novo" />

E coloque o method e action no seu form.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, se está usando jQuery para enviar via $.post os dados, não precisa dos atributos method / action na tag form, mas você precisa garantir que os dados estão chegando.

 

O print_r indicado pelo Alex é justamente para saber se os dados do formulário estão sendo enviados, e, ao que tudo indica pela sua resposta no post #4, não estão.

 

Sugiro revisar seu método javascript que faz este post para saber se eles estão sendo enviados corretamente em uma página mais simples para testes.

 

Poste os códigos em JavaScript que estão sendo usados aqui no fórum - assim ficará mais fácil a descoberta de problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites
//aqui envia os dados para o banco de dados




function sendPost(form, action, callback) {
ajaxRequest == null ? ajaxRequest = null : ajaxRequest.abort();
if (validateForm($("#" + form))) {
ajaxRequest = $.post("crud/" + action + ".php", $("#" + form).serialize(), // crud é o diretorio em que está o codigo de inserir
function (data) {
dataFromAjaxRequest($.parseJSON(data), callback);
});
} else {
$("#dialog_modal_mensagem").dialog("open");
}
}




//esta função usa o comando switch para retornar as mensagens de acordo com algumas ações do usuário


function dataFromAjaxRequest(json, callback) {
msg = "";
switch(json.cod){

case 0:
msg = "Dados incluídos com sucesso!Seu código é: "+json.info;
callback(json.info,resetForm);
break;
case 9:
msg = "Dados incluídos com sucesso!";
callback();
break;
case 1:
msg = "Erro na operação!" + json.info;
break;
case 2:
msg = "Nº de Processo já cadastrado!";
break;
case 3:
msg = "Dados atualizados com sucesso!";
callback();
break;
case 4:
msg = "Dados removidos com sucesso!";
callback();
break;
case 5:
msg = "Chamado não encontrado!";
break;
case 6:
msg = "Usuário já cadastrado!";
break;
case 7:
msg = "Este usuário não pode ser removido pois está sendo usado!";
break;
case 8:
msg = "Não se pode remover o único usuário do sistema!";
break;
default:
msg = "Erro desconhecido: " + json.info;
break;
}
$("#dialog_modal_mensagem").dialog("option", "title", "Mensagem:");
if(json.modal)
modalMessage(msg);


}




//esta função lista os dados quando na consulta não é passado nenhum valor especifico, então traz todos os dados!


function listDataFuncionario() {
var nome = $.trim($('#form_editar_funcionario #nome').val());
var id_unidade = $.trim($('select#id_unidade').val());
if ((nome == "")&& (id_unidade == "")){
$.post('crud/dao_select_funcionario_all.php', $("#form_editar_funcionario").serialize(),function (data) {
$('#main').html("");
$('#main').html(data);
executeAfterLoad();
});
} else {
searchDataFuncionario();
}
}




// esta função passa os dados para o "dao_select_funcionario "(código de busca), se o nome for diferente de "vazio"


function searchDataFuncionario() {
var nome = $.trim($('#form_editar_funcionario #nome').val());
var id_unidade = $('select#id_unidade').val();
if (nome != ""){
$.post('crud/dao_select_funcionario.php', {nome:nome}, function (data) {
$('#main').hide();
$('#main').html(data);
executeAfterLoad();
$('#main').slideDown();
});
} else{
if(id_unidade != ""){
$.post('crud/dao_select_funcionario.php', {id_unidade:id_unidade}, function (data) {
$('#main').hide();
$('#main').html(data);
executeAfterLoad();
$('#main').slideDown();
});
}
}


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está acessando a página que gera o relatório via GET, e não POST.

 

Olha este código:

<input class="botao ui-button ui-widget ui-state-default ui-corner-all" type="button" value="Gerar Relatório" onclick="location.href = 'fpdf/relatorio_consulta_funcionario.php'" />

Isto aí é a mesma coisa que acessar pelo navegador, digitando o endereço na barra de endereços.

Para certificar, veja o que vem no conteúdo da variável:

$_SERVER['REQUEST_METHOD']

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

hufersil

 

 

Realmente, usando o $_SERVER vi que está sendo passado por GET, mas como vc percebeu isso no primeiro código que voce postou?? foi no location.href??? porque não sei onde mudar. Mudo de S_POST pra GET??? fiz mas ficou na mesma...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Allex,

Não, só colocar o que você indicou no post #15 não vai resolver, porque no onclick dela não estão sendo passados os parâmetros do formulário. Então, mudar de $_POST pra $_GET não resolve. O que resolveria seria sua primeira sugestão, mas com algumas mudanças.

 

@Stephanie,

Para minimizar o impacto, o melhor seria você criar uma função em JavaScript, que alterasse os atributos da tag form para sua necessidade, submeta o formulário e volte ao original

 

Exemplo:

function gerarPdfConsulta(idForm) {
	var form = $('#' + idForm);
	var urlGeracao = 'fpdf/relatorio_consulta_funcionario.php';
	var actionOriginal = form.attr('action');
	var methodOriginal = form.attr('method');
	var targetOriginal = form.attr('target');

	form.attr('action', urlGeracao)
		.attr('method', 'post')
		.attr('target', '_blank')
		.submit();

	form.attr('action', actionOriginal)
		.attr('method', methodOriginal)
		.attr('target', targetOriginal);
}

E no botão de gerar relátorio, coloque isso:

<input class="botao ui-button ui-widget ui-state-default ui-corner-all" 
       type="button" 
       value="Gerar Relatório"
       onclick="gerarPdfConsulta('form_editar_funcionario')" /> 

Caso o nome do formulário seja diferente, mude na chamada do método.

 

Esta sugestão é apenas um exemplo.

Particularmente, eu aplicaria uma refatoração no código para deixar mais limpo e conciso.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem você colocar o que fez fica dificil te ajudar.

Outra, se você conseguir colocar os dados em algum lugar para analisarmos (tipo uma area de testes) também auxilia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.