Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Gente poderia me ajudar?
estou com esse erro
Fatal error: Call to a member function query() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/ewallet/reportClient.class.php on line 85.
Segue a linha abaixo
private function getTabela(){
$color = false;
$retorno = "";
$retorno .= "<h2 style=\"text-align:center\">{$this->titulo}</h2>";
$retorno .= "<table border='1' width='1000' align='center'>
<tr class='header'>
<th>Descrição</td>
<th>Tipo</td>
<th>Saldo Inicial</td>
</tr>";
$sql = "SELECT * FROM conta WHERE idUsuario = 14 ";
foreach ($this->pdo->query($sql) as $reg):
$retorno .= ($color) ? "<tr>" : "<tr class=\"zebra\">";
$retorno .= "<td class='destaque'>{$reg['descricao']}</td>";
$retorno .= "<td>{$reg['tipo']}</td>";
$retorno .= "<td>{$reg['saldoInicial']}</td>";
//$retorno .= "<td>{$reg['limite']}</td>";
//$retorno .= "<td>{$reg['email']}</td>";
//$retorno .= "<td>{$reg['endereco']}</td>";
//$retorno .= "<td>{$reg['cidade']}</td>";
//$retorno .= "<td>{$reg['uf']}</td>";
$retorno .= "<tr>";
$color = !$color;
endforeach;
$retorno .= "</table>";
return $retorno;
}
o erro ele dá no foreach
foreach ($this->pdo->query($sql) as $reg):
alguem pode me ajudar ?
>
É exatamente o que o erro diz, está tentando chamar o método query em um "não-objeto".
Ou seja, sua variável não possui um objeto (pode ser outro valor ou não foi atribuído nada).
O problema é que tento mudar como está na minha classe e ele continua com o mesmo erro, teria como me ajudar com isso, to com uma dor de cabeça, porque é a parte pra gerar o arquivo do MPDF
Você deve verificar como está incluindo a PDO nessa classe. Ai que está o problema.
Eu criei um PDO separado numa pasta chamada Model, está como Conexao.php, eu to totalmente perdido com essa parte :/
e faço um require_once chamando ele.
Poste a parte do script que você chama a PDO e também aonde você cria a classe que contêm o método acima que está resultando no erro.
Bem vamos Lá
Esse é o meu PDO
<?php
class Conexao{
function __construct(){
$this->conectar();
}
public $conexaoMysql;
public function conectar(){
$teste = false;
if($_SERVER['REMOTE_ADDR'] == "::1"){
$teste = true;
}
$dsn = 'mysql:host=localhost;dbname=zero_ewallet';
$user = 'root';
$password = '';
if($teste){
$dsn = 'mysql:host=localhost;dbname=zero_ewallet';
$user = 'root';
$password = '';
}
try {
$conn = new PDO($dsn, $user, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
$this->conexaoMysql = $conn;
} catch (PDOException $e) {
echo $e->getMessage();
}
}
}
?>
onde está dando o erro
<?php
require_once "Model/Conexao.php";
require_once "MPDF/mpdf.php";
class reportCliente extends mpdf{
// Atributos da classe
private $pdo = null;
private $pdf = null;
private $css = null;
private $titulo = null;
/*
* Construtor da classe
* @param $css - Arquivo CSS
* @param $titulo - Título do relatório
*/
public function __construct($css, $titulo) {
$this->titulo = $titulo;
$this->setarCSS($css);
}
/*
* Método para setar o conteúdo do arquivo CSS para o atributo css
* @param $file - Caminho para arquivo CSS
*/
public function setarCSS($file){
if (file_exists($file)):
$this->css = file_get_contents($file);
else:
echo 'Arquivo inexistente!';
endif;
}
/*
* Método para montar o Cabeçalho do relatório em PDF
*/
protected function getHeader(){
$data = date('j/m/Y');
$retorno = "<table class=\"tbl_header\" width=\"1000\">
<tr>
<td align=\"left\">ewallet contas </td>
<td align=\"right\">Gerado em: $data</td>
</tr>
</table>";
return $retorno;
}
/*
* Método para montar o Rodapé do relatório em PDF
*/
protected function getFooter(){
$retorno = "<table class=\"tbl_footer\" width=\"1000\">
<tr>
<td align=\"left\"><a href=''>ewallet.com.br</a></td>
<td align=\"right\">Página: {PAGENO}</td>
</tr>
</table>";
return $retorno;
}
/*
* Método para construir a tabela em HTML com todos os dados
* Esse método também gera o conteúdo para o arquivo PDF
*/
private function getTabela(){
$color = false;
$retorno = "";
$retorno .= "<h2 style=\"text-align:center\">{$this->titulo}</h2>";
$retorno .= "<table border='1' width='1000' align='center'>
<tr class='header'>
<th>Descrição</td>
<th>Tipo</td>
<th>Saldo Inicial</td>
</tr>";
$sql = "SELECT * FROM conta WHERE idUsuario = 14 ";
foreach ($this->pdo->query($sql) as $reg):
$retorno .= ($color) ? "<tr>" : "<tr class=\"zebra\">";
$retorno .= "<td class='destaque'>{$reg['descricao']}</td>";
$retorno .= "<td>{$reg['tipo']}</td>";
$retorno .= "<td>{$reg['saldoInicial']}</td>";
//$retorno .= "<td>{$reg['limite']}</td>";
//$retorno .= "<td>{$reg['email']}</td>";
//$retorno .= "<td>{$reg['endereco']}</td>";
//$retorno .= "<td>{$reg['cidade']}</td>";
//$retorno .= "<td>{$reg['uf']}</td>";
$retorno .= "<tr>";
$color = !$color;
endforeach;
$retorno .= "</table>";
return $retorno;
}
/*
* Método para construir o arquivo PDF
*/
public function BuildPDF(){
$this->pdf = new mPDF('utf-8', 'A4-L');
$this->pdf->WriteHTML($this->css, 1);
$this->pdf->SetHTMLHeader($this->getHeader());
$this->pdf->SetHTMLFooter($this->getFooter());
$this->pdf->WriteHTML($this->getTabela());
}
/*
* Método para exibir o arquivo PDF
* @param $name - Nome do arquivo se necessário grava-lo
*/
public function Exibir($name = null) {
$this->pdf->Output($name, 'I');
}
}
está em negrito onde está o erro
eu estou usando o MPDF para criar o relatorio e fui fazendo passo a passo, só que esse deu esse problemão e ta dificil, eu criei um Controller tambem
case 'relatorio':
$idUsuario = strip_tags($_REQUEST['idUsuario']);
$listarSaldo = $Conta->listar($idUsuario);
include_once("#");
break;Linha 167 está dando o erro
Nesse caso eu fiz da mesma maneira como explicado, mas ele acaba não funfando tambem, ele da outros erros, injetei a dependência e ele permanece tambem naquele mesmo erro :/
$this->getTabela = ($pdo);
fiz um desse na function __construct dele, e mesmo erros tambem
O que você tentou fazer agora não existe no seu código. getTabela é uma função e não uma variável.
Sua classe reportCliente extendendo da classe mPDF, o que por si só já está errado, e, após, está criando uma nova instância de mpdf?
public function BuildPDF(){
$this->pdf = new mPDF('utf-8', 'A4-L');
$this->pdf->WriteHTML($this->css, 1);
$this->pdf->SetHTMLHeader($this->getHeader());
$this->pdf->SetHTMLFooter($this->getFooter());
$this->pdf->WriteHTML($this->getTabela());
}
Primeiro, você deve criar a injeção da dependência que é a PDO. Não existe nenhum método que é usado para o qual, logo deve ser criado ou alterado algum existente.
A injeção tem como intuito remover o acoplamento entre objetos e permitir que mais de um objeto possa ser utilizado em conjunto em determinada operação em tempo de execução.
No link abaixo você encontra a definição e exemplos de injeção de dependência:
Perai, mas eu tenho um PDO criado, ele é estabelecido como Conexao, eu só quero compreender isso porque tá complicado fazer a integração do PDF nunca fiz e estou debatendo.
Com o PDO criado eu teria que executar e ele rodar, mas acaba nao rodando :/
Sim, você tem o PDO criado, mas não há referência alguma a variável que você está utilizando.
Basicamente você está criando a PDO, "colocando-a" em uma variável, mas está utilizando outra variável. Além de estarem em escopos diferentes.
Qual é o seu conhecimento de programação? Pois uma questão assim é um pouco além do iniciante de programação estruturada, mas é básica da orientação à objetos.
É exatamente o que o erro diz, está tentando chamar o método query em um "não-objeto".
Ou seja, sua variável não possui um objeto (pode ser outro valor ou não foi atribuído nada).