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

Não consigo adicionar

Oi! Então, eu estou há algum tempo com problema para adicionar e alterar os produtos.

Quando eu tento adicionar, após clicar o botão, o resultado do var_dump é:

Erro: string(158) "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"

Tirando esse var_dump, não aparece nada na linha de comando.

A função insere produto tá assim:

    function insereProduto(Produto $produto) {

        $isbn = "";
        if($produto->hasIsbn()) {
            $isbn = $produto->getIsbn();
        }

        $taxaImpressao = "";
        if($produto->hasTaxaImpressao()) {
            $taxaImpressao = $produto->getTaxaImpressao();
        }

        $waterMark = "";
        if($produto->hasWaterMark()) {
            $waterMark = $produto->getWaterMark();
        }

        $tipoProduto = get_class($produto);

        $query = "INSERT INTO produtos (nome, preco, descricao, categoria_id, usado, isbn, tipoProduto, taxaImpressao, waterMark) VALUES('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}', {$produto->getCategoria()->getId()}, {$produto->isUsado()}, '{$isbn}', '{$tipoProduo}, '{$taxaImpressao}', '{$waterMark}')";

        return mysqli_query($this->conexao, $query);

    }

E o SQL de produtos tá assim:

CREATE TABLE produtos (
    id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
    nome VARCHAR(255) NOT NULL,
    preco DECIMAL(10,2) NOT NULL),
    descricao TEXT,
    categoria_id INTEGER NOT NULL,
    usado BOOLEAN DEFAULT FALSE,
    isbn VARCHAR(255),
    tipoProduto VARCHAR(255) NOT NULL
);

INSERT INTO produtos (nome, preco, descricao, categoria_id, usado, isbn)
VALUES('Livro Stephen King', 75, 'Um livro pelo grande autor Stephen King', 5, 0, '002589753', 'Livro');

INSERT INTO produtos

DELETE FROM produtos WHERE id=2;
DELETE FROM produtos WHERE id=8;

ALTER TABLE produtos ADD COLUMN taxaImpressao VARCHAR(255);
ALTER TABLE produtos DROP COLUMN taxaImpressao;

ALTER TABLE produtos ADD COLUMN waterMark VARCHAR(255);
ALTER TABLE produtos DROP COLUMN waterMark;

SELECT * FROM produtos;

E o arquivo adiciona produto, assim:

<?php 

require_once "conecta.php";
require_once "cabecalho.php";
require_once "logica-usuario.php";

// Verifica se o usuário está logado
verificaUsuario();

$tipoProduto = $_POST['tipoProduto'];
$categoria_id = $_POST['categoria_id'];

$factory = new ProdutoFactory();
$produto = $factory->criarProd($tipoProduto, $_POST);
$produto->atualizaBaseadoEm($_POST);

$produto->getCategoria()->setId($categoria_id);

array_key_exists('usado', $_POST) ? $produto->setUsado("true") : $produto->setUsado("false");

$produtoDAO = new ProdutoDAO($conexao);

if($produtoDAO->insereProduto($produto)) { ?>
    <form action="produto-formulario.php">

        <p class="text-success"> O produto <?php echo $produto->getNome()?>, R$<?php echo $produto->getPreco()?> adicionado com sucesso! </p>
        <button class="btn" type="submit">Voltar</button>

    </form>

<?php
 } else { 

     $msg = mysqli_error($conexao);

     ?>
    <form action="produto-formulario.php">

        <p class="text-danger"> O produto <?php echo $produto->getNome()?>, R$<?php echo $produto->getPreco()?> não foi adicionado
        <br><span>Erro: <?=var_dump($msg);?></span></p>
        <button class="btn" type="submit">Voltar</button>

    </form>

    <?php 
}

mysqli_close($conexao);

?>


<?php require_once "rodape.php" ?>

O restante do código atualizado tá no meu github https://github.com/analubarreto/ :).

Obrigada, desde já ^^

2 respostas
solução!

Na sua função insereProduto, você criou uma variável chamada "$tipoProduto", mas, na hora de inserir, informou o nome da variável como "$tipoProduo"

Parece que o resto do INSERT está correto, mas, apenas para conferir, printe a query para validar se os campos foram preenchidos.

$query = "INSERT INTO produtos (nome, preco, descricao, categoria_id, usado, isbn, tipoProduto, taxaImpressao, waterMark) VALUES('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}', {$produto->getCategoria()->getId()}, {$produto->isUsado()}, '{$isbn}', '{$tipoProduo}, '{$taxaImpressao}', '{$waterMark}')";
print_r($query); //TESTE!
return mysqli_query($this->conexao, $query);

Campos que podem dar este tipo de erro são campos núméricos ou booleanos, como categoria_id ou usado. Os campos textos, caso estejam vazios, não vão dar este erro.

Nossa, preciso ler com mais cuidado, acho que tava cansada. Muito, obrigada, Daniel :).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software