Após a atualização com os códigos dessa aula recebo o erro:
Produto ebook não foi adicionado com sucesso: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' true, '12121212', 'Ebook', '', '')' at line 1
E o nome a categoria também não estão aparecendo.
adiciona-produto.php
<?php
require_once("includes/cabecalho.php");
require_once("conexao.php");
require_once("logica-usuario.php");
verificaUsuario();
$tipoProduto = $_POST["tipoProduto"];
$categoria = new Categoria;
$categoria->setId($_POST["categoria_id"]);
if (array_key_exists("usado", $_POST)) {
$usado = "true";
}else{
$usado = "false";
}
$factory = new ProdutoFactory();
$produto = $factory->criaPor($tipoProduto, $_POST);
$produto->atualizaBaseadoEm($_POST);
$dao = new ProdutoDAO($conexao);
if($dao->insereProduto($produto)){ ?>
<h3 class="text-success">Produto <?=$produto->getNome()?>, R$<?=$produto->getPreco()?> adicionado com sucesso!</h3>
<?php
} else {
$msg = mysqli_error($conexao);
?>
<h3 class="text-danger">Produto <?=$produto->getNome()?> não foi adicionado com sucesso: <?=$msg?></h3>
<?php
}
?>
<?php include("includes/rodape.php"); ?>
ProdutoDAO.php
<?php
class ProdutoDAO{
private $conexao;
function __construct($conexao) {
$this->conexao = $conexao;
}
function listaProdutos() {
$produtos = array();
$query = "select p.*, c.nome as categoria_nome from produtos as p join categorias as c on p.categoria_id = c.id";
$resultado = mysqli_query($this->conexao,$query);
while($produto_atual = mysqli_fetch_assoc($resultado)){
$categoria = new Categoria();
$categoria->setNome($produto_atual['categoria_nome']);
$tipoProduto = $produto_atual['tipoProduto'];
$factory = new ProdutoFactory();
$produto = $factory->criaPor($tipoProduto, $produto_atual);
$produto->atualizaBaseadoEm($produto_atual);
$produto->setId($produto_atual['id']);
array_push($produtos, $produto);
}
return $produtos;
}
function insereProduto(Produto $produto){
$produto->setNome(mysqli_real_escape_string($this->conexao, $produto->getNome()));
$produto->setDescricao(mysqli_real_escape_string($this->conexao, $produto->getDescricao()));
$isbn = "";
if($produto->temIsbn()) {
$isbn = $produto->getIsbn();
}
$waterMark = "";
if($produto->temMarkWater()) {
$waterMark = $produto->getMarkWater();
}
$taxaImpressao = "";
if($produto->temTaxaImpressao()) {
$taxaImpressao = $produto->getTaxaImpressao();
}
$tipoProduto = get_class($produto);
$query = "insert into produtos (nome, preco, descricao, categoria_id, usado, isbn, tipoProduto, markWater, taxaImpressao) values ('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}', {$produto->getCategoria()->getId()}, {$produto->getUsado()}, '{$isbn}', '{$tipoProduto}', '{$markWater}', '{$taxaImpressao}')";
echo $query;
return mysqli_query($this->conexao, $query);
}
function buscaProduto($id) {
$query = "select * from produtos where id = {$id}";
$resultado = mysqli_query($this->conexao, $query);
return mysqli_fetch_assoc($resultado);
}
function alteraProduto(Produto $produto) {
$produto->setNome(mysqli_real_escape_string($this->conexao, $produto->getNome()));
$produto->setDescricao(mysqli_real_escape_string($this->conexao, $produto->getDescricao()));
$isbn = "";
if($produto->temIsbn()) {
$isbn = $produto->getIsbn();
}
$waterMark = "";
if($produto->temMarkWater()) {
$waterMark = $produto->getMarkWater();
}
$taxaImpressao = "";
if($produto->temTaxaImpressao()) {
$taxaImpressao = $produto->getTaxaImpressao();
}
$tipoProduto = get_class($produto);
$query = "update produtos set nome = '{$produto->getNome()}', preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}', categoria_id = {$produto->getCategoria()->getId()}, usado = {$produto->getUsado()}, isbn = '{$isbn}', tipoProduto = '{$tipoProduto}', markWater = '{$markWater}', taxaImpressao = '{$taxaImpressao}' where id = '{$produto->getId()}'";
return mysqli_query($this->conexao, $query);
}
function removeProduto($id) {
$query = "delete from produtos where id = {$id}";
return mysqli_query($this->conexao, $query);
}
}
?>