Ir ao conteúdo
  • Cadastre-se

Inserir com pdo


Posts recomendados

Boa noite, estou tentando inserir dados no banco utilizando um form mas não funciona.

Só recebo a mensagem: Notice: Undefined variable: conn

A minha estrutura é:

/

/includes/ header.php

                footer.php

index.php

conexão.php

 

Abaixo é o index.php

<?php require_once ('includes/header.php');
	  require_once ('conexao.php'); ?>

<form action="" method="post">
    Descrição <input type="text" name="descricao"><br>
    Preço     <input type="text" name="preco"><br>
    Estoque   <input type="text" name="estoque"><br>
    Ativo     <input type="checkbox" name="ativo"><br>
    <button type="submit" name="add"> Cadastrar</button>
</form>

<?php require_once ('includes/footer.php') ?>

<?php 
if(isset($_POST['add'])) {
    $descricao = $_POST['descricao'];
    $preco     = $_POST['preco'];
    $estoque   = $_POST['estoque'];
    $ativo     = $_POST['ativo'];
$sql = ("INSERT INTO produtos (descricao, preco, estoque, ativo) VALUES (:descricao, :preco, :estoque, :ativo)");
$stmt = $conn->prepare($sql);
$stmt = $conn->execute(array(
                    "descricao" => $descricao,
                    "preco"     => $preco,
                    "estoque"   => $estoque,
                    "ativo"     => $ativo));
}
?>

 

Aqui é a conexão.php

<?php
class Conexao {
    private $host     = "localhost";
    private $db_name  = "project";
    private $username = "root";
    private $password = "";
    public     $conn;
    public function Connect() {
        try {
            
            $this->conn = new PDO ("mysql:host=" . $this->host . "dbname=" . $this->db_name . ";charset=utf8", $this->username, $this->password, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        }
        catch (PDOException $e) {
            echo "Erro ao conectar com o banco de dados " . $e->getMessage();
        }
        return $this->conn;
    }
}

Por algum motivo não está encontrando a variavel $conn quando eu chamo, mesmo eu adicionando no começo da pagina a classe conexao.php.

Se puderem me ajudar, agradeço.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Charlie Fox Creio que seja porque você não criou a conexão com o banco de dados.

 Ter a classe, não quer dizer que esteja conectada. Ainda mais quando se trata de orientação a objetos.

Você precisa instanciar o objeto da classe Conexao e usar a função Connect()

 

Tente assim:

<?php 
        require_once ('includes/header.php');
        require_once ('conexao.php'); 

        $conn = new Conexao;

        $conn->Connect();
?>

Não garanto que vá funcionar.. mas teste! :)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@dif Realmente não tinha me atentado a isso, obrigado.

 

Ficou assim agora e finalmente cadastrou. :aplausos:

<?php
	if(isset($_POST['add'])) {
            $descricao = $_POST['descricao'];
            $preco     = $_POST['preco'];
            $estoque   = $_POST['estoque'];
            $ativo     = isset($_POST['ativo']) ? $_POST['ativo'] : 'N';
            
            $db = new Conexao();
            $conn = $db->Connect();
            $sql = ("INSERT INTO produtos (descricao, preco, estoque, ativo) VALUES (:descricao, :preco, :estoque, :ativo)");
            $stmt = $conn->prepare($sql);
            $stmt -> execute(array(
                                "descricao" => $descricao,
                                "preco"     => $preco,
                                "estoque"   => $estoque,
                                "ativo"     => $ativo));

Mas eis que me surge outra dúvida, não sei se posso postar no mesmo tópico mas trata-se da mesma aplicação.

Como estou aprendendo PHP OO, nos cursos todos falam de criar uma classe para o que vou criar, exemplo: classe Pessoas.php, Usuarios.php, Produtos.php, etc...

Eu usaria essas classes (Produtos.php nesse caso) exatamente para que? Pois eu criei a classe Produtos.php e coloquei os setters e os getters, mas e ai? como relaciono com minha aplicação, qual a utilidade?

 

produtos.php:

<?php
    class Produtos {
        private $id;
        private $descricao;
        private $preco;
        private $estoque;
        private $ativo;
        private $data_cadastro;
        public function getId() {
            return $this->id;
        }
        public function setId($id) {
            $this->id = $id;
        }
        public function getDescricao() {
            return $this->descricao;
        }
        public function setDescricao($descricao) {
            $this->descricao = $descricao;
        }
        public function getPreco() {
            return $this->preco;
        }
        public function setPreco($preco) {
            $this->preco = $preco;
        }
        public function getEstoque() {
            return $this->estoque;
        }
        public function setEstoque($estoque) {
            $this->estoque = $estoque;
        }
        public function getAtivo() {
            return $this->ativo;
        }
        public function setAtivo($ativo) {
            $this->ativo = $ativo;
        }
        public function getDataCadastro() {
            return $this->data_cadastro;
        }
        public function setDataCadastro($data_cadastro) {
            $this->data_cadastro = $data_cadastro;
        }
}

 

Pensei em fazer o método inserir()  e fazer a conexão com o banco de dados e o INSERT INTO, mas falaram que dentro dessas classes não pode ter SQL, então onde eu colocaria? 

Pessoal, só falta saber onde coloca essas informações iniciais, então daqui pra frente vai ser tudo mais fácil e poderei criar sistemas diferentes. :)

 

Bom domingo e abraços.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Charlie Fox Basicamente, a classe vai servir para você criar o objeto que será inserido. No caso o que você tem ali é uma classe com os Getter e Setter para manipulação do objeto.

 

Você pode ter sim SQL em sua classe... mas você precisa fazer de uma forma que seja dinâmica, Ou seja, não setar valores de tabela campo ou value.

 

Se quiser aprender um pouco mais fundo e entender como funciona veja esta video aula 1

Siga os passos de todas as video aulas em sequencia que você aprende o uso de CRUD e orientação a objetos de forma bem fácil de entender.

 

Eu fiz os passos e gostei muito do método dele... então com base nisso implementei minha própria classe!

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...