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

Notice: Undefined index: usado in C:\xampp\htdocs\loja\adiciona-produto.php on line 11

Boa noite,

Esta dando o seguinte erro: Notice: Undefined index: usado in C:\xampp\htdocs\loja\adiciona-produto.php on line 11

Acontece somente quando eu coloco um produto que não é usado.

adiciona-produto.php

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


    $nome=$_POST["nome"];
    $preco=$_POST["preco"];
    $descricao=$_POST["descricao"];
    $categoria_id=$_POST["categoria_id"];
    $usado=$_POST["usado"];
    echo 'teste';
    echo $usado;
    if(array_key_exists('usado', $_POST)) {
        $usado = "true";
    } else {
        $usado = "false";
    }
?>
<?php
    if(insereProduto($conexao, $nome, $preco,$descricao,$categoria_id,$usado))
    {
?>
    <p class="text-success">Produto <?= $nome ?> adicionado com sucesso! Valor de <?= $preco ?>R$.</p>
<?php
    }else
    {
        $msg = mysqli_error($conexao);
?>
    <p class="alert-danger">Erro ao adicionar. Erro: <?= $msg ?> </p>
<?php
    }

mysqli_close($conexao);

?>

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

banco-produto.php

<?php

function insereProduto($conexao, $nome, $preco,$descricao,$categoria_id,$usado) {

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


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

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

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

produto-formulario.php

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

    $vetor_categoria = listaCategoria($conexao);

?>
<h1>Formulário de cadastro</h1>
<form action="adiciona-produto.php" method="POST">
        <table class="table">
            <tr>
                <td>Nome</td>
                <td><input type="text" class="form-control" name="nome" /></td>
            </tr>

            <tr>
                <td>Preço</td>
                <td><input type="number" class="form-control" name="preco" /></td>
            </tr>
            <tr>
                <td>Descrição</td>
                <td><textarea name="descricao" class="form-control"></textarea></td>
            </tr>            
            <tr>

                <td>Categoria</td>
                <td>
                    <select name="categoria_id" class="form-control">
                        <?php foreach ($vetor_categoria as $categoria) :?>                    
                            <option value=<?= $categoria['id'] ?> ><?= $categoria['nome'] ?></br>
                        <?php endforeach ?>        
                    </select>           
                </td>
            </tr>
            <tr>
                <td></td>
                <td><input type="checkbox" name="usado" value="true" > Usado</td>                    
            </tr>
            <tr>            
                <td></td>
                <td><input type="submit" value="Cadastrar" class="btn btn-primary" /></td>
            </tr>
        </table>

    </form>
<?php include("rodape.php") ?>

Desde Já.

Obrigado.

2 respostas
solução!

No código você esta atribuindo um valor à variável usado

$usado=$_POST["usado"];

Porém esse valor não existe quando você não seleciona o usado. Por isso você utiliza o if usado exite o parâmetro usado atribui valor à variável, se não, não atribui

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

Desta forma é só excluir o $usado=$_POST["usado"];, e funcionará.

Obrigado !!!!! É isso mesmo !!!