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

Problemas com checkbox true e false

Não estou conseguindo inserir nenhum produto, nem com o checkbox marcado e nem desmarcado. Veja que não está passando o campo categoria_id não sei porque

Retorna o seguinte erro: insert into produtos (nome, preco, descricao, categoria_id) values ('Audi', 20000, 'batido', , true)

O Produto 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 ', true)' at line 1

o código está assim. produto-formulario

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

$categorias = listaCategorias($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" name="nome" class="form-control"></td>
            </tr>

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

            <tr>
                <td>Descrição</td>
                <td><textarea name="descricao" class="form-control"></textarea></td>
            </tr>

            <tr>
                <td></td>
                <td><input type="checkbox" name="usado" value="true"> Usado
            </tr>

            <tr>
                <td>Categoria</td>
                <td>
                    <select name="categoria_id" class="form-control">
                        <?php foreach ($categorias as $categoria): ?>
                            <option value="<?$categoria['id']?>"><?=$categoria['nome']?></option>
                        <?php endforeach ?>
                    </select>    

                </td>
            </tr>

            <tr>
                <td><input type="submit" value="Cadastrar" class="btn btn-primary"></td>
            </tr>
        </table>



    </form>

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

adiciona-produto

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

$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];
if (array_key_exists('usado', $_POST)) {
    $usado = "true";
}else{
    $usado = "false";
}

if (insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado)) {    ?>
    <p class="text-success">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");?>

e banco-produto

<?php
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($produto = mysqli_fetch_assoc($resultado)){
        array_push($produtos, $produto);
    }
    return $produtos;
}

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

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

Olá Luciano,

na sua função insereProduto, a $query está assim "insert into produtos (nome, preco, descricao, categoria_id) values ('{$nome}', {$preco}, '{$descricao}', {$categoria_id}, {$usado})". Note que nos values você chega a passar o {$usado} depois do {$categoria_id}, mas não informou esta coluna na tabela produtos (nome, preco, descricao, categoria_id). Por isso que ele acaba dando erro com o checkbox marcado ou desmarcado, dado que ele não sabe qual a coluna que recebe o true ou false.

`

Corrgir aqui, mas ele continua dando erro não consegue pegar o categoria_id

insert into produtos (nome, preco, descricao, categoria_id, usado) values ('Audi', 20000, 'novo', , false)

O Produto 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 ', false)' at line 1

solução!

Faltou passar o = na hora de definir o id como value de cada option <option value="<?$categoria['id']?>

Funcionou obrigado.