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

Erro ao tentar adicionar produto

Bom, após fazer todas as alterações mandadas pelo instrutor recebo o seguinte erro ao tentar adicionar um produto em meu banco de dados:

insert into produtos (nome, preco, descricao) values ('Chocolate', 100, 'De caramelo', 1, true)
O produto Chocolate não foi adicionado: Column count doesn't match value count at row 1

Não faço ideia como resolver aqui :(

Pagina do formulário:

<?php include("cabecalho.php");
include ("banco-categoria.php");
include ("conecta.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">
                    <?php foreach($categorias as $categoria) : ?>
                        <option  value="<?=$categoria['id']?>"><?=$categoria['nome']?></option>
                    <?php endforeach ?>
                </select>
        </td>
        </tr>
        <tr>
            <td><input type="submit" value="Cadastrar" /></td>
        </tr>

    </table>

</form>

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

Página que adiciona os produtos ao banco:

<?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(array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "fals";
}



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

Função que conecta ao banco e envia os dados:

<?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) values ('{$nome}', {$preco}, '{$descricao}', {$categoria_id}, {$usado})";
    $resultadoDaInsercao = mysqli_query($conexao, $query);
    echo $query;
    return mysqli_query($conexao, $query);
}


function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query($conexao, $query);
}
2 respostas
solução!

Fala Luhan, o erro é seguinte, nesta query por exemplo:

insert into produtos (nome, preco, descricao) values ('Chocolate', 100, 'De caramelo', 1, true)

Você passou três campos, nome, preco e descrição, mas na hora de setar os valores, foram 5, tem o 1 e true ali... e por isso a mensagem de erro diz que o número de colunas não é o mesmo do número de valores.

Erro: Column count doesn't match value count at row 1

Tradução: A contagem de colunas não corresponde à contagem de valores na linha 1

Esse erro vem da função insereProduto, veja, você recebe três campos para inserção e em values, tenta inserir 5, ou seja, 2 valores que não existem.

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

Corrija essas coisas, os campos devem coincidir com seus valores correspondentes.

Luhan, seu problema esta na query responsável por realizar a inserção do produto no banco de dados, repare no erro:

O produto Chocolate não foi adicionado: Column count doesn't match value count at row 1

A quantidade de colunas não bate com a quantidade de valores passados, isso porque você pediu para inserir valores em três colunas: nome, preco, descricao, porém também esta inserindo a categoria e se esta ativado ou não, totalizando assim cinco colunas.

Para corrigir seu problema acerte a query que faz a inserção, adicionando os campos que estão faltando:

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

Isso deve resolver seu problema, abraçooos.