1
resposta

Adiciona e Altera produto não funcionam

Caro, Em algum ponto da alteração para setter e getter não tenho sucesso.

banco-produto.php
    function insereProduto($conexao, $produto) {
        $nome = mysqli_real_escape_string($conexao, $nome);
        $descricao = mysqli_real_escape_string($conexao, $descricao);
        $query = "insert into produtos (nome, preco, descricao, categoria_id, usado)
                values ('{$produto->setNome()}', {$produto->setPreco()}, '{$produto->setDescricao()}',
                {$produto->categoria->setId()}, {$produto->setUsado()})";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;
    }

    function alteraProduto($conexao, $produto) {
        $nome = mysqli_real_escape_string($conexao, $nome);
        $descricao = mysqli_real_escape_string($conexao, $descricao);
        $query = "update produtos set nome = '{$produto->setNome()}', preco = {$produto->setPreco()},
            descricao = '{$produto->setDescricao()}', categoria_id= {$produto->setCategoria()->setId()},
            usado = {$produto->setUsado()} where id = '{$produto->setId()}'";
        return mysqli_query($conexao, $query);
    }

adiciona-produto.php
<?php
$categoria = new Categoria();
$categoria->setId($_POST['categoria_id']);

$produto = new Produto();
$produto->setNome($_POST["nome"]);
$produto->setPreco($_POST["preco"]);
$produto->setDescricao($_POST["descricao"]);
$produto->setCategoria($categoria);
if(array_key_exists('usado', $_POST)) {
    $produto->setUsado() = "true";
} else {
    $produto->setUsado() = "false";
}


    if(insereProduto($conexao, $produto)) { ?>
        <p class="text-success">Produto <?= $produto->getNome(); ?>, <?= $produto->getPreco(); ?> adicionado com sucesso!</p>
    <?php
    } else {
        $msg = mysqli_error($conexao);
    ?>
        <p class="text-danger">Produto <?= $produto->getNome(); ?> não foi adicionado! <?= $msg ?></p>
<?php
}
mysqli_close($conexao);
?>

altera-produto.php
<?php
$categoria = new Categoria();
$categoria->setId($_POST['categoria_id']);

$produto = new Produto();
$produto->setId($_POST['id']);
$produto->setNome($_POST["nome"]);
$produto->setPreco($_POST["preco"]);
$produto->setDescricao($_POST["descricao"]);
$produto->setCategoria($categoria);
if(array_key_exists('usado', $_POST)) {
    $produto->usado = "true";
} else {
    $produto->usado = "false";
}

    if(alteraProduto($conexao, $produto)) { ?>
        <p class="text-success">Produto <?= $produto->getNome(); ?>, <?= $produto->getPreco(); ?> foi alterado!</p>
    <?php
    } else {
        $msg = mysqli_error($conexao);
    ?>
        <p class="text-danger">Produto <?= $produto->getNome(); ?> não foi alterado! <?= $msg ?></p>
<?php
}
mysqli_close($conexao);
?>

Onde está o erro?

1 resposta

Oi Airton tudo bom?

Vamos dar uma olhada nessa parte do seu código:

function insereProduto($conexao, $produto) {
        $nome = mysqli_real_escape_string($conexao, $nome);
        $descricao = mysqli_real_escape_string($conexao, $descricao);
        $query = "insert into produtos (nome, preco, descricao, categoria_id, usado)
                values ('{$produto->setNome()}', {$produto->setPreco()}, '{$produto->setDescricao()}',
                {$produto->categoria->setId()}, {$produto->setUsado()})";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;
    }

Aqui estamos realizando uma query para inserir um produto no banco. Este produto recebemos como parametro $produto. Entretanto, na query estamos utilizando setters! Aqui, precisamos apenas pegar os dados do produto que recebemos e colocar no banco. Algo como:

function insereProduto($conexao, $produto) {
        $nome = mysqli_real_escape_string($conexao, $nome); // repare que não precisamos mais desta linha
        $descricao = mysqli_real_escape_string($conexao, $descricao); // nem desta pois estes dados estão sendo resgatados do $produto =)
        $query = "insert into produtos (nome, preco, descricao, categoria_id, usado)
                values ('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}',
                {$produto->categoria->getId()}, {$produto->getUsado()})";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;
    }

A mesma ideia se repete para o método alteraProduto! Lembre-se que, os setters são para definir e os getters para pegar os atributos do nosso objeto =)

Qualquer dificuldade, compartilhe com a gente! Bons estudos =)