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

Notice: Undefined index: categoria_id in C:\wamp64\www\loja\adiciona-produto.php on line 10

Olá, estou com problemas na execução deste código, de acordo com o que o professor ensinou era pra funcionar. Mas, acho que alguma coisa relacionada a sintaxe do PHP foi alterada desde a criação do curso.

Até esse momento o código funcionava normalmente:

adiciona-produto.php

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

<?php

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

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

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

banco-produto.php

<?php

function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao, "select * from produtos");

    while($produto = mysqli_fetch_assoc($resultado)) {
        array_push($produtos, $produto);
    }

    return $produtos;
}

function insereProduto($conexao, $nome, $preco, $descricao) {
    $query = "insert into produtos (nome, preco, descricao)
        values ('{$nome}', {$preco}, '{$descricao}')";
    return mysqli_query($conexao, $query);
}

function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query($conexao, $query);
}

com as modificações que o professor executou: adiciona-produto.php

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

<?php

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

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

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

banco-produto.php

<?php

function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao, "select * from produtos");

    while($produto = mysqli_fetch_assoc($resultado)) {
        array_push($produtos, $produto);
    }

    return $produtos;
}

function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id) {
    $query = "insert into produtos (nome, preco, descricao, categoria_id)
        values ('{$nome}', {$preco}, '{$descricao}', {$categoria_id})";
    return mysqli_query($conexao, $query);
}

function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query($conexao, $query);
}

dai agora não funciona mais. Nem mesmo arquivo baixado no próprio curso funciona. ;(

Alguém ai sabe a solução? :D

3 respostas
solução!

Aparentemente há um index faltando no array $_POST, provavelmente porque na área do formulário o mesmo não foi adicionado.

Dei uma olhada nessa parte do curso e esse seria o trecho de código que está faltando:

<tr>

    <td>Categoria</td>
    <td>
        <input type="radio" name="categoria_id" value="1">Esporte</br>
        <input type="radio" name="categoria_id" value="2">Escolar</br>
        <input type="radio" name="categoria_id" value="3">Mobilidade</br>
    </td>
</tr>

O Undefined index: categoria_id exibido no erro refere-se aos inputs com o nome categoria_id.

       <input type="radio" name="categoria_id" value="1">Esporte</br>
        <input type="radio" name="categoria_id" value="2">Escolar</br>
        <input type="radio" name="categoria_id" value="3">Mobilidade</br>

Ao efetuar o envio do formulário o campo com o nome categoria_id (também sendo o index do array $_POST) não é encontrado e isso acarreta nesse erro.

hmm, não sei bem se entendi, mas essa parte ai que supostamente estaria faltando já foi modifica para que as categorias apareçam automaticamente ao serem adicionadas no Mysql e o código ficou assim:

                <tr>
                <td>Categoria</td>
                <td>
                    <?php foreach($categorias as $categoria) : ?>
                        <input type="radio" name="cagegoria_id"
                                value="<?=$categoria['id']?>">
                                <?=$categoria['nome']?><br/>
                    <?php endforeach ?>
                </td>
            </tr>

Achei o problema. Foi justamente onde você indicou que poderia ser o erro. Olhando agora o código que postei acima, percebi que errei ao escrever o nome "categoria_id".

VLW!