Oi Allan, tudo bem?
O problema esta aqui:
update produtos set nome = 'bicicleta', preco = 12.00, descricao = '12.00', categoria_id = 3, usado = // aqui estamos sem valor
isso significa que precisamos validar nosso parametro $usado em algum momento... Acredito que se você a fizer essa validação no seu alteraProduto.php seu problema vai deixar de existir. Algo como:
<?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'];
// aqui validamos se a chave usado ja existe em $_POST
if(array_key_exists('usado', $_POST)) {
$usado = "true";
} else {
$usado = "false";
}
Caso a chave usado exista em $_POST vamos definir $usado como true. Caso contrario, significa que não selecionaram o checkbox então definimos como false =)
seu alteraProduto.php deve ficar algo parecido com:
<?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(alteraProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado)) { ?>
<p class="text-success">O produto <?= $nome ?>, <?= $preco ?> foi alterado.</p>
<?php } else {
$msg = mysqli_error($conexao);
?>
<p class="text-danger">O produto <?= $nome ?> não foi alterado: <?= $msg?></p>
<?php
}
?>
<?php include("rodape.php"); ?>
O código acima e algumas explicações mais aprofundadas, estão na transcrição do video:
https://cursos.alura.com.br/course/php-mysql-e-fundamentos-da-web/task/4091
Qualquer dificuldade, compartilha com a gente!
Abraço e bons estudos =)