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

As categorias não são renderizadas na tela

Coloquei o código em produto-formulário.php, porém as opções de categoria não são impressas na tela. Logo, não posso selecionar elas.

<?php include("cabecalho.php"); 
    include("conecta.php");
    include("banco-categoria.php");

    $categorias = listaCategorias($conexao);
?>
<h1>Formulário</h1>
    <form action="adiciona-produto.php" method="post">
        <table class="table">
            <tr>
                <td>Nome</td>
                <td><input class="form-control" type="text" name="nome"></td>
            </tr>
            <tr>
                <td>Preco</td>
                <td><input class="form-control" type="number" name="preco"></td>
            </tr>
            <tr>
                <td>Descrição</td>
                <td><input class="form-control" type="textarea" name="descricao"></td>
            </tr>
            <tr>
                <td>Categoria</td>
                <td>
                    <?php foreach($categorias as $categoria) : ?>
                        <input type="radio" name="categoria_id" value="<?=$categoria['id']?>"><?=$categoria['nome']?></br>
                    <?php endforeach ?>
                </td>
            </tr>
            <tr>
                <td>
                    <button class="btn btn-primary" type="submit">Cadastrar</button>
                </td>
            </tr>
        </table>
    </form>
<?php include("rodape.php"); ?>
8 respostas

Olhei o código e não consegui identificar o que está errado ai.

Acho que o problema está em outro lugar. Tenta dar um print_r ou var_dump na variável $categorias conforme abaixo e veja se alguma coisa está sendo retornada dai.

$categorias = listaCategorias($conexao);
echo '<pre>';
var_dump( $categorias); //poderia ser print_r
echo '</pre>;

Se retornar um array vazio, certifique-se que o cadastro de categorias foi feito adequadamente no banco de dados e respectivas tabelas.

Cola o resultado aqui pra gente tentar te ajudar mais.

Tarcísio, fiz o teste que vc indicou e foi esse o resultado:

<pre>array(0){
}
</pre> == $0

Eu dei uma olhada no BD também, revi o vídeo e aparentemente está tudo ok. Se houver alguma forma de fazer um teste, ou pelo menos me dizer uma direção do que fazer. Vou dar uma pesquisada na internet tb.

Cola o código do seu arquivo include("banco-categoria.php"); pra gente dar uma olhada. Nada está sendo retornado do banco de dados por algum motivo.

Eu fiz algumas modificações e consegui renderizar as categorias na tela, porém agora não consigo salvar no banco. Mas meu código está assim:

banco-categoria.php

<?php 

    function listaCategorias($conexao){
        $categorias = array();
        $query = "select * from  categoria";
        $resultado = mysqli_query($conexao, $query);
        while ($categoria = mysqli_fetch_assoc($resultado)) {
            array_push($categorias, $categoria);
        }
        return $categorias;
    }

E o código de adiciona produto:

adiciona-produto.php

<?php include("cabecalho.php");
    include("conecta.php");
    include("banco-produto.php"); ?>
<?php 

    $nome = $_POST["nome"];
    $preco = $_POST["preco"];
    $descricao = $_POST["descricao"];
    $categorias = $_POST["categoria_id"];

    if(insereProduto($conexao, $nome, $preco, $descricao, $categoria_id)) { ?>
        <p class="text-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>
    <?php } else { 
        $msg = mysqli_error($conexao);
    ?>
        <p class="text-danger">Produto <?= $nome; ?>, não foi adicionado: <?= $msg?></p>
    <?php
        }
    ?>

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

Quando você envia o formulário, qual o erro ta mostrando ai na tela?

Essa é a mensagem de erro!

Notice: Undefined variable: categoria_id in D:\xampp\htdocs\Alura\PHP\adiciona-produto.php on line 11
Produto Chocolate, não foi adicionado: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
solução!

Achei um erro, da um olhada no código

$categorias = $_POST["categoria_id"];

deveria ser

$categoria_id = $_POST["categoria_id"];

Já que é a variável $catergoria_id que você usa na função abaixo:

insereProduto($conexao, $nome, $preco, $descricao, $categoria_id)

Verifique se resolve o problema e nos de um retorno.

MUITO obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software