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

Ajuda com construtor e mysqli_escape_string

Então pessoal, sei que é bom criar construtores, porque ele faz com que alguns atributos sejam obrigatórios, e após cria-los podemos descartar alguns setters da nossa classe, mas no meu caso, por causa da minha função insereProduto (vou compartilhar o código) vocês acham que eu deveria manter os setters da minha classe ou modificar a função ?

class Produto {
        private $id;
        private $nome;
        private $preco;
        private $descricao;
        private $categoria;
        private $usado;


    function __construct($nome, $preco, $descricao, Categoria $categoria, $usado){
        $this->nome = $nome;
        $this->preco = $preco;
        $this->descricao = $descricao;
        $this->categoria = $categoria;
        $this->usado = $usado;
    }

    function __toString() {
    return $this->nome.": R$ ".$this->preco;
    }


    public function precoComDesconto($valor = 0.1){
        if ($valor > 0 && $valor <= 0.5) {
            $this->preco -= $this->preco * $valor;
            return $this->preco;
        }

    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }


    public function getPreco() {
        return $this->preco;
    }


    public function getDescricao() {
        return $this->descricao;
    }


    public function getCategoria() {
        return $this->categoria;
    }


    public function isUsado() {
        return $this->usado;
    }

    public function setUsado($usado) {
        $this->usado = $usado;
    }

    }
unction listaProdutos($conexao){
        $produtos = array(); 
        $resultado = mysqli_query($conexao, "select p.*, c.nome as categoria_nome from produtos as p join categoria as c on c.id=p.categoria_id"); 
        while($produto_array = mysqli_fetch_assoc($resultado)){
            $categoria = new Categoria();
            $categoria->setNome($produto_array['categoria_nome']);

            $nome = $produto_array['nome'];
            $preco = $produto_array['preco'];
            $descricao = $produto_array['descricao'];
            $usado = $produto_array['usado'];
            array_push($produtos, $produto); 
            $produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
            $produto->setId($produto_array['id']);
        }

        return $produtos;
    } 


    function insereProduto($conexao, Produto $produto){
        $produto->setNome(mysqli_escape_string($conexao, $produto->getNome()));
        $produto->setPreco(mysqli_escape_string($conexao, $produto->getPreco()));
        $produto->setDescricao(mysqli_escape_string($conexao, $produto->getDescricao()));
        $produto->getCategoria()->setId(mysqli_escape_string($conexao, $produto->getCategoria()->getId()));

        $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) 
        values ('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}', 
            {$produto->getCategoria()->getId()}, {$produto->isUsado()})";

            echo $query;
        return mysqli_query($conexao, $query);
    }

Repare que estou usando $produto->setAlgumacoisa() para usar a função mysqli_escape_string().

Desde já agradeço

1 resposta
solução!

Oi Vinícius,

Eu não colocaria os setters. Por que você não coloca a função mysqli_escape_string() direto no insert? Ou ainda em variáveis separadas?

Abraço!