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

Criação de uma Classe - arquivo "CategoriaDao.php"

Bom dia,

Segue abaixo o meu código fonte:

<?php 

class CategoriaDao {

    private $conexao;

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

    function listaCategorias() {

        $categorias = array();
        $query = "select * from categorias";
        $resultado = mysqli_query($this->conexao, $query);

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

            $categoria = new Categoria();
            $categoria->setId($categoria_array['id']);
            $categoria->setNome($categoria_array['nome']);

            array_push($categorias, $categoria);
        }

        return $categorias;
    }
}

?>

Porém, ao inserir um novo produto no sistema "loja", ainda continua a ocorrer o bug abaixo:

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($conexao, 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($conexao, $query); } function alteraProduto($conexao, 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($conexao, $query); } function buscaProduto($conexao, $id) { $query = "select * from produtos where id = {$id}"; $resultado = mysqli_query($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($conexao, $id) { $query = "delete from produtos where id = {$id}"; return mysqli_query($conexao, $query); } } ?>

Fico no aguardo da solução técnica para prosseguir nos estudos, grato!

8 respostas

Oi Marcello, essa mensagem aparece pra você no navegador? Cola aqui o arquivo que recebe os dados do formulário por favor?

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

verificaUsuario();

$categoria = new Categoria();
$categoria->setId(1);

$produto = new Produto("", "", "", $categoria, "");

$categoriaDao = new CategoriaDao($conexao);

$categorias = $categoriaDao->listaCategorias();

?>    

<h1>Formulário de produto</h1>
<form action="adiciona-produto.php" method="post">
    <table class="table">

        <?php include("produto-formulario-base.php"); ?>

        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Cadastrar</button>
            </td>
        </tr>
    </table>
</form>

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

Marcelo provavelmente a linha

$categoria = new Categoria();

de algum erro se a classe Categoria não estiver declarada ou for declarada de forma incorreta, se estiver com os erros do PHP desligado ele pode simplemente quebrar a execução sem parar, resumo, virar um texto, por que no erro pode vir um

... alguma coisa erro ?> (o simbolo de terminador pode criar um mega bug)

comenta esse trecho

         $categoria = new Categoria();
            $categoria->setId($categoria_array['id']);
            $categoria->setNome($categoria_array['nome']);

            array_push($categorias, $categoria);

se der erro é pq deu erro na conexão, ou driver errado ou senha errada

Bom dia, Pablo!

Provavelmente deu problema na conexão, pois a senha tá beleza. Obrigado pela atenção e apoio, vou checar aqui. Abs,

Marcello.

Oi Marcello, você não respondeu minha pergunta acima. Me parece que o código que aparece na página é o código do banco-produto.php, cola o código do adiciona-produto.php aqui pra gente ver?

Eu não acho que seja o problema que o Pablo falou acima, por que neste ponto, talvez você já tenha a função de autoload criada e carregada pelo cabecalho.php, essa função já carrega todas as classes que um arquivo precisa de forma automática.

Bom dia, Wanderson!

Segue abaixo o meu código fonte do arquivo "adiciona-produto.php", para análise. Grato!

<?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'];
$isbn = $_POST['isbn'];
$tipoProduto = $_POST['tipoProduto'];

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

if ($tipoProduto == "Livro") {
    $produto = new Livro($nome, $preco, $descricao, $categoria, $usado);
    $produto->setIsbn($isbn);
} else {
    $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"); ?>

Marcello, esse problema está mais complicadinho de encontrar do que eu esperava, você pode disponibilizar seu projeto no github? sabe usar o github? Se não souber, não tem problema, compacta seu projeto completo em um zip e compartilha comigo em um desses servidos de hospedagem de arquivos como dropbox, google drive ou mesmo no https://wetransfer.com

solução!

Bom dia,

Obrigado pela atenção, mas eu tive que concluir o curso. Sendo assim, eu já baixei o projeto final e o sistema "loja" está funcionando perfeitamente. Abs,

Marcello.