Fatal error - Site Receitas

Tópicos para discussões de PHP no geral.
Vinicius_Boschi
Mensagens: 4
Registrado em: Ter Mai 25, 2021 3:39 pm

Fatal error - Site Receitas

Mensagem por Vinicius_Boschi »

Na hora que eu clico em criar receitas ou pesquisar receitas aparece o seguinte erro:

Fatal error: Uncaught Error: Call to a member function ExecuteQuery() on null in C:\MAMP\htdocs\Receitas\DAL\receitaDAO
Fatal error: Uncaught Error: Call to a member function ExecuteNonQuery() on null in C:\MAMP\htdocs\Receitas\DAL\receitaDAO

Diz que o erro está no ExecuteNonQuery e ExecuteQuery do receitaDAO, só que eu não consigo fazer ele funcionar.
gunnercorrea
Site Admin
Mensagens: 14
Registrado em: Dom Mar 28, 2021 10:21 am

Re: Fatal error - Site Receitas

Mensagem por gunnercorrea »

Boa tarde, Vinicius.

Tomei a liberdade de alterar o título do tópico para manter a organização no fórum.

Por favor, mostre-me o código do seu método de consulta para que eu possa analisar e te ajudar.

Fico no aguardo.
Olá! :D
Vinicius_Boschi
Mensagens: 4
Registrado em: Ter Mai 25, 2021 3:39 pm

Fatal Error Código

Mensagem por Vinicius_Boschi »

Não sei se era isso, mas ai está o código do receitaDAO

Código: Selecionar todos

<?php 

error_reporting(E_ALL);
ini_set('display_errors', 'On');

require_once("banco.php");
require_once("Model/receita.php");

class receitaDAO {
    private $banco;
    private $debug;

    public function _construct() {
        $this->banco = new banco();
        $this->debug = true;
    }

    public function __destruct() {
        $this->banco->Disconnect();
    }

    public function Cadastrar(Receita $receita) {
        try {    
            $sql = "INSERT INTO receita (titulo, ingredientes, modopreparo, data) VALUES (:titulo, :ingredientes, 
            :preparo, :data)";

            $param = array( 
                ":titulo" => $receita->getTitulo(),
                ":ingredientes" => $receita->getIngredientes(),
                ":preparo" => $receita->getModoPreparo(),
                ":data" => $receita->getData()
            );

            return $this->banco->ExecuteNonQuery($sql, $param);

            } catch (PDOException $ex) {
            if ($this->debug) {
                echo "Erro: {$ex->getMessage() }";
            }
        }
    }

    public function RetornaTudo() {
        try {
            $sql = "SELECT cod, titulo, data FROM receita ORDER BY titulo ASC";
            $dtReceitas = [];

            $retornobanco = $this->banco->ExecuteQuery($sql);

            foreach($retornobanco as $ln) {
                $receita = new Receita();
                
                $receita->setCod($ln["cod"]);
                $receita->setTitulo($ln["titulo"]);
                $receita->setData($ln["data"]);

                $dtReceitas[] = $receita;
            }

            return $dtReceitas;


        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "Erro: {$ex->getMessage()}";
            }
        }
    }

    public function RetornaReceita($cod) {
        try {
            $sql = "SELECT cod, titulo, ingredientes, modopreparo, data FROM receita WHERE cod = :cod";
            
            $param = array(
                ":cod" => $cod
            );

            $retornobanco = $this->banco->ExecuteQueryOneRow($sql, $param);

                $receita = new Receita();
                
                $receita->setCod($retornobanco["cod"]);
                $receita->setTitulo($retornobanco["titulo"]);
                $receita->setIngredientes($retornobanco["ingredientes"]);
                $receita->setModoPreparo($retornobanco["modopreparo"]);
                $receita->setData($retornobanco["data"]);


            return $receita;

        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "Erro: {$ex->getMessage()}";
            }
        }
    }

    public function Alterar(Receita $receita) {
        try {
            $sql = "UPDATE receita SET titulo = :titulo, ingredientes = :ingredientes, modopreparo = :preparo WHERE cod = :cod ";

            $param = array( 
                ":titulo" => $receita->getTitulo(),
                ":ingredientes" => $receita->getIngredientes(),
                ":preparo" => $receita->getModoPreparo(),
                ":cod" => $receita->getCod()
            );

            return $this->banco->ExecuteNonQuery($sql, $param);

        }catch (PDOException $ex) {
            if ($this->debug) {
                echo "Erro: {$ex->getMessage()}";
            }
        }
    }

    public function Deletar($cod) {
        try {

            $sql = "DELETE FROM receita WHERE cod = :cod";
            
            $param = array(
                ":cod" => $cod
            );

            return $this->banco->ExecuteNonQuery($sql, $param);
                

        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "Erro: {$ex->getMessage()}";
            }
        }
    }

}

?>
gunnercorrea
Site Admin
Mensagens: 14
Registrado em: Dom Mar 28, 2021 10:21 am

Re: Fatal error - Site Receitas

Mensagem por gunnercorrea »

Olhando seu código está certinho.

Duas perguntas, você está rodando o projeto no Windows?

Esse caminho do banco realmente está certo? O erro acontece pois o método não existe.
Olá! :D
Vinicius_Boschi
Mensagens: 4
Registrado em: Ter Mai 25, 2021 3:39 pm

Re: Fatal error - Site Receitas

Mensagem por Vinicius_Boschi »

Estou rodando o projeto no Windows com o VScode, e o caminho do banco está certo, até seu eu tirar a ligação com o banco ele continua com o mesmo erro.
gunnercorrea
Site Admin
Mensagens: 14
Registrado em: Dom Mar 28, 2021 10:21 am

Re: Fatal error - Site Receitas

Mensagem por gunnercorrea »

Ahh legal, nesse caso realmente é o caminho.

Qual a sua estrutura de pastas? ex:

receitas
DAO/
MODEL/

Tenta dar o include voltando alguns diretórios para testar, como nos exemplos abaixo.

Código: Selecionar todos

require_once("/Model/receita.php");

require_once("../Model/receita.php");

require_once("../../Model/receita.php");
Depois da uma olhada na nossa série de Blog com PHP, lá estamos utilizando o Composer e Namespaces, nunca mais você vai precisar se preocupar com o caminho do projeto.
Olá! :D
Vinicius_Boschi
Mensagens: 4
Registrado em: Ter Mai 25, 2021 3:39 pm

Re: Fatal error - Site Receitas

Mensagem por Vinicius_Boschi »

Teria como você disponibilizar o download do seu código pra eu comparar com o meu?
gunnercorrea
Site Admin
Mensagens: 14
Registrado em: Dom Mar 28, 2021 10:21 am

Re: Fatal error - Site Receitas

Mensagem por gunnercorrea »

Da uma olhada nesse projeto, tem quase a mesma proposta: https://github.com/satellasoft/my-receitas
Olá! :D
Responder