4
respostas

Não salva como "Usado" no banco

Seguindo os passos da aula e fazendo as atividades, consegui fazer com que funcionasse corretamente sem mensagens de erro. Mas ao adicionar um produto com a checkbok "Usado" marcada, vejo que no banco o produto é inserido como zero independente da checkbox, ou seja, não enviou a informação.

Já verifiquei nas ferramentas de desenvolvedor, conforme o professor mostra na aula, e lá aparece que o valor enviado foi true.


banco-produto.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;
}

produto-formulario.php

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

adiciona-produto.php


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



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

Tardê Jean.

Você add a coluna no Banco?

Matheus, criei sim.

E quando cadastro o produto, independente do estado da checkbox, ele salva no banco com valor 0.

Então, eu testei aqui, o erro esta no insereProduto() da página banco-produto.php

Você colocou os values do insert dessa maneira:

values ('{$nome}', {$preco}, '{$descricao}', '{$categoria_id}', '{$usado}')";

Tente trocar para ficar assim:

values ('{$nome}', {$preco}, '{$descricao}', {$categoria_id}, {$usado} )";

(Sem aspas em categoria_id, e usado)

O banco na verdade vai gravar um 0 ou 1, então da forma que vc está fazendo '{$usado}' ele está recebendo o TEXTO "true", e não o true, a forma que o amigo já resolve (caso o valor esteja chegando como boolean e não como texto)