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

Erro no mysql na aula 8

Depois de passar a categoria_id como parâmetro das funções, fui adicionar a barra de chocolate como guloseima e deu esse erro:

"O produto chocolate, 1 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 'on)' at line 1"

O que fazer?

3 respostas

Como vai Ítalo? A mensagem é que tem um erro de sintaxe na linha 1, você pode ter esquecido algo ou digitado errado algum comando. Posta seu código, assim fica mais fácil analisar. Abraço.

Bom, o código está muito dividido, mas só mexi em três:

banco-produto.php:

<?php
function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao, "select * from produtos");
    while($produto = mysqli_fetch_assoc($resultado)){
    array_push($produtos, $produto);
    }
    return $produtos;
}

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

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");

$categorias = listaCategorias($conexao);
?>
<h1>Formulário de produto</h1>
<form action="adiciona-produto.php" method="post">
    <table class="table">
        <tr>
            <td>
                Nome
            </td>
            <td>
                <input class="form-control" type="text" name="nome">
            </td>
        </tr>
        <tr>
            <td>
                Preco
            </td>
            <td>
                <input class="form-control" type="number" name="preco">
            </td>
        </tr>
        <tr>
            <td>
                Descrição
            </td>
            <td>
                <textarea class="form-control" name="descricao"></textarea>
            </td>
        </tr>
        <tr>
            <td>
                Categoria
            </td>
            <td>
                <?php foreach($categorias as $categoria) : ?>
                    <input type="radio" name="categoria_id" values="<?=$categoria['id']?>">
                        <?=$categoria['nome']?></br>
                <?php endforeach ?>
            </td>
        </tr>
        <tr>
            <td>
                <button class= "btn btn-primary" type="submit">Cadastrar</button>
            </td>
        </tr>
    </table>
</form>
<?php include("rodape.php");?>

adicionar-produto.php:

<?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(insereProduto($conexao, $nome, $preco, $descricao, $categoria_id))  { ?>
    <p class="text-success">    O produto <?= $nome; ?>, <?= $preco; ?> foi adicionado.</p>
<?php } else {
    $msg = mysqli_error($conexao);


?>
    <p class="text-danger">    O produto <?= $nome; ?>, <?= $preco; ?> não foi adicionado: <?= $msg?></p>
<?php
}
?>
<?php include("rodape.php");?>
solução!

Acabei de resolver. Baixei o código da aula e no arquivo "banco-produto.php" o query está diferente do usado em vídeo:

select p.*, c.nome as categoria_nome from produtos as p join categorias as c on p.categoria_id = c.id

depois disso só refiz todos os códigos sql e agora está funcionando.