Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Quando adiciono e altero recebo mensagem You have an error in your SQL syntax....

Estou recebendo mensagem quando adiciono produto e quando altero :

echo $query;
update produtos set nome = 'Raquete de tenis', preco = 280.00, descricao = 'produto alterado', categoria_id = , usado = where id = '3'
O produto nome: Raquete  não foi alterado: 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 ' usado = where id = '3'' at line 1

e quando adiciono o produto apresenta o mesmo erro:

echo $query;
insert into produtos (nome,preco,descricao,categoria_id,usado) values ('telefone', 1, 'xxxxxxx', 1, )
O produto nome: telefone 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 ')' at line 1

produto-altera-formulario.php

<?php 
require_once 'class/Categoria.php';
require_once 'class/Produto.php';
require_once 'cabecalho.php';
require_once 'conecta.php';
require_once 'banco-produto.php';
require_once 'logica-usuario.php';

verificaUsuario();
$produto = new Produto();
$categoria = new Categoria();
$categoria->id = (!empty($_POST['categoria_id']) ? $_POST['categoria_id'] : "");

$produto->setNome(!empty($_POST['nome']) ? $_POST['nome'] : "");
$produto->setPreco(!empty($_POST['preco']) ? $_POST['preco'] : "");
$produto->setDescricao(!empty($_POST['descricao']) ? $_POST['descricao'] : "");
$produto->setCategoria($categoria);

if (array_key_exists('usado', $_POST)) {
    $produto->setUsado("true");
} else {
    $produto->setUsado("false");
}
$produto->setUsado($usado);
?>
<?php
if(insereProduto($conexao,$produto)) { ?>    
    <p class="text-alert">
        O produto nome: <?= $produto->getNome();?>, preço: <?= $produto->getPreco();?> adicionado com sucesso!
    </p>
<?php } else { 
    $msg = mysqli_error($conexao) 
    ?>
    <p class="text-danger">
        O produto nome: <?=$produto->getNome();?> não foi adicionado: <?=$msg;?>
    </p>
<?php } ?>


<?php require_once 'rodape.php'; ?>

banco produto.php

<?php 
require_once 'class/Categoria.php';
require_once 'class/Produto.php';
require_once 'conecta.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_atual = mysqli_fetch_assoc($resultado)) {
            $produto = new Produto();
            $categoria = new Categoria();
            $categoria->nome = $produto_atual['categoria_nome'];
            $produto->setId($produto_atual['id']);
            $produto->setNome($produto_atual['nome']);
            $produto->setPreco($produto_atual['preco']);
            $produto->setDescricao($produto_atual['descricao']);
            $produto->setCategoria($categoria);
            $produto->setUsado($produto_atual['usado']);            
            array_push($produtos, $produto);
        }
        return $produtos;
    }

function insereProduto($conexao,Produto $produto) {
    if(array_key_exists('usado', $_POST)) {
        $produto->getUsado("true");
    } else {
        $produto->getUsado("false");
    }

    $query = "insert into produtos (nome,preco,descricao,categoria_id,usado) values ('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}', {$produto->getCategoria()->id}, {$produto->getUsado()})";    
    echo($query);
    return mysqli_query($conexao, $query);     
}

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

function buscaProduto($conexao, $id) {
    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);
    return mysqli_fetch_assoc($resultado);
}

function alteraProduto($conexao,Produto $produto) {
    $query = "update produtos set nome = '{$produto->getNome()}', preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}', categoria_id = {$produto->getCategoria()}, usado = {$produto->getUsado()} where id = '{$produto->getId()}'";
    echo $query;    
    return mysqli_query($conexao, $query);     
}

altera-formulario.php

<?php 
require_once 'class/Produto.php';
require_once 'cabecalho.php';
require_once 'conecta.php';
require_once 'banco-produto.php';

$produto = new Produto();

$produto->setId((!empty($_POST['id']) ? $_POST['id'] : ""));
$produto->setNome((!empty($_POST['nome']) ? $_POST['nome'] : ""));
$produto->setPreco(!empty($_POST['preco']) ? $_POST['preco'] : "");
$produto->setDescricao(!empty($_POST['descricao']) ? $_POST['descricao'] : "");
$produto->setCategoria($categoria);

if (array_key_exists('usado', $_POST)) {
    $produto->setUsado("true");
} else {
    $produto->setUsado("false");
}
$produto->setUsado($usado);
?>
<?php
if(alteraProduto($conexao, $produto)) { ?>    
    <p class="text-success">
        O produto nome: <?= $produto->getNome();?>, preço: <?= $produto->getPreco();?> foi alterado!
    </p>
<?php } else { 
    $msg = mysqli_error($conexao) 
    ?>
    <p class="text-danger">
        O produto nome: <?=$produto->getNome();?> não foi alterado: <?=$msg;?>
    </p>
<?php } ?>


<?php require_once 'rodape.php'; ?>

produto-formulario-base.php

<tr>
    <td>Nome:</td>
    <td><input class="form-control" type="text" name="nome" value="<?=$produto->getNome() ?>"></td>
</tr>
<tr>
    <td>Preço:</td>
    <td><input class="form-control" type="number" name="preco" value="<?=$produto->getPreco() ?>"></td>
</tr>
<tr>
    <td>Descrição</td>
    <td><textarea name="descricao" class="form-control"><?=$produto->getDescricao() ?></textarea></td>
</tr>
<tr>    
    <td></td>        
    <td class="text-left"><input type="checkbox" name="usado" <?=$produto->getUsado()?> value="true"> Usado</td>
</tr>
<tr>
    <td>Categoria</td>
    <td>
        <select name="categoria_id" class="form-control">
        <?php                     
            foreach ($categorias as $categoria) :
                $essaEhACategoria = $produto->categoria_id == $categoria->id;
            $selecao = $essaEhACategoria ? "selected='selected'" : "";                    
        ?>
            <option value="<?=$categoria->id?>"<?=$selecao?>> <?=$categoria->nome?>                    
            </option>
        <?php 
            endforeach ?>        
        </select>        
    </td>
</tr>
1 resposta
solução!

Na mensagem abaixo o interpretador informa que o valor para o campo USADO não foi passado. Verifique se o valor está sendo passado.

echo $query;
update produtos set nome = 'Raquete de tenis', preco = 280.00, descricao = 'produto alterado', categoria_id = , usado = where id = '3'

Na segunda mensagem, o interpretador informa que falta um valor na SELECT. Note que há cinco campos e somente quatro valores após o VALUES.

insert into produtos (nome,preco,descricao,categoria_id,usado) values ('telefone', 1, 'xxxxxxx', 1, )