Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Aula 2 Data Access Object

Boa noite Pessoal

já refiz, assisti o video várias vezes mas não consegui achar onde está o erro. Estou fazendo extamente como o professor mostra no vídeo. Vou postar primeiro o erro e após como está meu arquivo ProdutoDao e adiciona-produto.

Ao instanciar o produtoDao após carregar a página e clicar em ADICIONAR ocorre o erro abaixo:

Parse error: syntax error, unexpected '?>', expecting function (T_FUNCTION) in C:\wamp64\www\loja\class\ProdutoDao.php on line 83

e abaixo em formato tabela mais informações:

    Time    Memory    Function    Location
1    0.0066    249528    {main}( )    ...\adiciona-produto.php:0
2    0.0277    291832    spl_autoload_call ( )    ...\adiciona-produto.php:23
3    0.0277    291864    carregaClasse( )    ...\adiciona-produto.php:23

A função Carregaclasse está OK como informado no vídeo.

Abaixo somente o ProdutoDao e o adiciona-produto , porém, deu os mesmos erros ao alterar o lista-produto.

<?php

class ProdutoDao {

    private $conexao;

    function __construct($conexao) {
        $this->conexao = $conexao;    
    }

    function listaProdutos() {

    $produtos = array();
    $resultado = mysqli_query($this->$conexao, "select p.*,c.nome as categoria_nome 
        from produtos as p join categorias as c on c.id=p.categoria_id");

    while($produto_array = mysqli_fetch_assoc($resultado)) {

        $categoria = new Categoria();
        $categoria->setNome($produto_array['categoria_nome']);

        $nome = $produto_array['nome'];
        $descricao = $produto_array['descricao'];
        $preco = $produto_array['preco'];
        $usado = $produto_array['usado'];

        $produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
        $produto->setId($produto_array['id']);

        array_push($produtos, $produto);
    }

    return $produtos;
}

function insereProduto(Produto $produto) {

    $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) 
        values ('{$produto->getNome()}', {$produto->getPreco()}, 
            '{$produto->getDescricao()}', {$produto->getCategoria()->getId()}, 
                {$produto->isUsado()})";

    return mysqli_query($this->$conexao, $query);
}

function alteraProduto(Produto $produto) {

    $query = "update produtos set nome = '{$produto->getNome()}', 
        preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}', 
            categoria_id= {$produto->getCategoria()->getId()}, 
                usado = {$produto->isUsado()} where id = '{$produto->getId()}'";

    return mysqli_query($this->$conexao, $query);
}

function buscaProduto($id) {

    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($this->$conexao, $query);
    $produto_buscado = mysqli_fetch_assoc($resultado);

    $categoria = new Categoria();
    $categoria->setId($produto_buscado['categoria_id']);

    $nome = $produto_buscado['nome'];
    $descricao = $produto_buscado['descricao'];
    $preco = $produto_buscado['preco'];
    $usado = $produto_buscado['usado'];

    $produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
    $produto->setId($produto_buscado['id']);

    return $produto;
}

function removeProduto($id) {

    $query = "delete from produtos where id = {$id}";

    return mysqli_query($this->$conexao, $query);
}

?>

o Adiciona Produto:

<?php 
require_once("cabecalho.php");
require_once("logica-usuario.php");

verificaUsuario();

$categoria = new Categoria();
$categoria->setId($_POST['categoria_id']);

$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];

if(array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "false";
}

$produto = new Produto($nome, $preco, $descricao, $categoria, $usado);

$produtoDao = new ProdutoDao($conexao);

if($produtoDao->insereProduto($produto)) { ?>
    <p class="text-success">O produto <?= $produto->getNome() ?>, <?= $produto->getPreco() ?> foi adicionado.</p>
<?php 
} else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $produto->getNome() ?> não foi adicionado: <?= $msg?></p>
<?php
}
?>

<?php include("rodape.php"); ?>

Obrigado.

4 respostas

Oi João,

Faltou fechar a chave do class ProdutoDao { no final do primeiro arquivo.

Oi Gabriel.. obrigado pelo retorno.

Acho que é coisa de novato amigo mas não consigo ver o erro. Olha só: voce disse faltou fechar a chave , pois eu fui no final da classe Produto dao e fechei mas agora ao tentar adicionar dá erro na linha 43 da ProdutoDao :

return mysqli_query($this->$conexao, $query);

e quando tento listar o produto mostra erro na ProdutoDao na linha 14:

$resultado = mysqli_query($this->$conexao, "select p.*,c.nome as categoria_nome 
        from produtos as p join categorias as c on c.id=p.categoria_id");

o que pode estar dando errado?

Opa João,

Para acessar o atributo conexao você não pode colocar o $. Deveria ser:

return mysqli_query($this->conexao, $query);

Isso vale para todas as linhas acessam esse atributo.

solução!

Ok... obrigado Gabriel.