Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou estudando php Orientado a Objetos, porém me deparei com uma duvida aqui, não consigo salvar as informações no banco de dados, alguem pode me ajudar?
classe conexão
<?php
try{
$conexao = new PDO('mysql:host=localhost;dbname=nomedobanco', 'root', 'senha');
$conexao ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo'ERROR: ' . $erro->getMessage();
}
?>
classe Pessoa
<?php
include_once 'conexao.php';
class Pessoa {
private $nome;
private $email;
private $usuario;
private $senha;
function __construct($nome, $email, $usuario, $senha) {
$this->setNome($nome);
$this->setEmail($email);
$this->setUsuario($usuario);
$this->setSenha($senha);
}
function getNome() {
return $this->nome;
}
function getEmail() {
return $this->email;
}
function getUsuario() {
return $this->usuario;
}
function getSenha() {
return $this->senha;
}
function setNome($nome) {
if((strlen($nome)<5) || (strlen($nome) > 40))
throw new Exception ('Nome Inválido');
else
$this->nome = $nome;
}
function setEmail($email) {
$this->email = $email;
}
function setUsuario($usuario) {
$this->usuario = $usuario;
}
function setSenha($senha) {
$this->senha = $senha;
}
public function salvar(){
$query = " INSERT INTO login (nome, email, usuario, senha)
VALUES ('". addslashes($this->nome)."', '". addslashes($this->email)."', '". addslashes($this->usuario)."', '". addslashes($this->senha)."')";
}
}
?>
pagina cadastro-pessoa.php
<?php
include"classes/Pessoa.php";
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="?go=cadastrar" method="post" enctype="multipart/form-data">
<input type="text" name="nome" id="nome" class="inputFormulario" placeholder="Seu nome"/>
<input type="text" name="email" id="email" class="inputFormulario3" placeholder="email"/>
<input type="text" name="usuario" id="usuario" class="inputFormulario3" placeholder="login"/>
<input type="text" name="senha" id="senha" class="inputFormulario3" placeholder="senha"/>
<input type="hidden" name="nivel" id="nivel" value="sim"/>
<input type="submit" value="cadastrar" name="cadastrar" class="btnFormulario"/>
</form>
</body>
</html>
<?php
if(@$_GET['go'] == 'cadastrar'){
$nome = $_POST['nome'];
$email = $_POST['email'];
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$pessoa = new Pessoa($nome, $email, $usuario, $senha);
try {
$pessoa->setNome($nome);
$pessoa->setEmail($email);
$pessoa->setUsuario($usuario);
$pessoa->setSenha($senha);
$pessoa->salvar();
} catch (Exception $erro) {
echo'<script> alert("'.$erro->getMessage().'")</script>';
}
}
?>Você esta alterando as informações de acesso ao banco de dados?
<?php
try{
$conexao = new PDO('mysql:host=localhost;dbname=nomedobanco', 'root', 'senha');
$conexao ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo'ERROR: ' . $erro->getMessage();
}
?>>
O método Pessoa::salvar() não faz absolutamente nada. Apenas atribui uma consulta query (que é apenas uma string) em uma variável. Nada mais.
Código abaixo é redundância, está fazendo duas vezes a mesma coisa.
$pessoa = new Pessoa($nome, $email, $usuario, $senha);
try {
$pessoa->setNome($nome);
$pessoa->setEmail($email);
$pessoa->setUsuario($usuario);
$pessoa->setSenha($senha);
Ygor, quando você diz redundância, quer dizer que posso tanto ter ...pessoa($nome,...);
quanto try{
$pessoa->setNome();...
}?
>
Você esta alterando as informações de acesso ao banco de dados?
<?php
try{
$conexao = new PDO('mysql:host=localhost;dbname=nomedobanco', 'root', 'senha');
$conexao ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo'ERROR: ' . $erro->getMessage();
}
?>
Sim, estou alterando aí sim, eu conecto ao banco de dados normal, tanto que faço login e acesso o sistema, o meu problema é cadastrar as informações do formulario no banco de dados.
>
Ygor, quando você diz redundância, quer dizer que posso tanto ter ...pessoa($nome,...);
quanto try{
$pessoa->setNome();...
}?
Isso mesmo.
você não esta conseguindo Salvar porque quando chama $pessoa->salvar(); ele só cria uma variavel com a query, só implementar esse método pra enviar pro banco as informações.
>
Isso mesmo.
você não esta conseguindo Salvar porque quando chama $pessoa->salvar(); ele só cria uma variavel com a query, só implementar esse método pra enviar pro banco as informações.
Desculpe, não consegui entender, estou estudando e tentando fazer sozinho, por isso tantas duvidas
Este código esta cheio de problemas, um deles é o que Gabriel Heming disse, redundância.
Pra que usar o __construct se voce ja esta enviando os dados via Setters, outro detalhe pra que esses metodos Getters, se esta usando as propriedades.
O Detalhe que mais me chamou atenção foi este:
Tratamento de String diretamente nas entidades
function setNome($nome) {
if((strlen($nome)<5) || (strlen($nome) > 40))
throw new Exception ('Nome Inválido');
else
$this->nome = $nome;
}
E a PDO onde entra neste objeto para salvar do dados?
public function salvar(){
$query = " INSERT INTO login (nome, email, usuario, senha)
VALUES ('". addslashes($this->nome)."', '". addslashes($this->email)."', '". addslashes($this->usuario)."', '". addslashes($this->senha)."')";
}
Programe para interface, siga os princípios básicos do SOLID
>
Este código esta cheio de problemas, um deles é o que Gabriel Heming disse, redundância.
Pra que usar o __construct se voce ja esta enviando os dados via Setters, outro detalhe pra que esses metodos Getters, se esta usando as propriedades.
O Detalhe que mais me chamou atenção foi este:
Tratamento de String diretamente nas entidades
function setNome($nome) {
if((strlen($nome)<5) || (strlen($nome) > 40))
throw new Exception ('Nome Inválido');
else
$this->nome = $nome;
}
Programe para interface, siga os princípios básicos do SOLID
O problema é esse, alguns artigos ensinam que é a forma mais segura, ja outros conceitos dizem que está errado, por isso a dificuldade de aprender, um codigo que achei q seria simples de aprender, me deparo com tamanhos problemas
Corrigindo o __construct()
O codigo fica assim?
<?php
include_once 'classes/conexao.php';
class Pessoa {
private $nome;
private $email;
private $usuario;
private $senha;
function getNome() {
return $this->nome;
}
function getEmail() {
return $this->email;
}
function getUsuario() {
return $this->usuario;
}
function getSenha() {
return $this->senha;
}
function setNome($nome) {
if((strlen($nome)<5) || (strlen($nome) > 40))
throw new Exception ('Nome Inválido');
else
$this->nome = $nome;
}
function setEmail($email) {
$this->email = $email;
}
function setUsuario($usuario) {
$this->usuario = $usuario;
}
function setSenha($senha) {
$this->senha = $senha;
}
public function salvar(){
$query = " INSERT INTO login (nome, email, usuario, senha)
VALUES ('". addslashes($this->nome)."', '". addslashes($this->email)."', '". addslashes($this->usuario)."', '". addslashes($this->senha)."')";
}
}
Não dá erro, mas ainda não cadastra no banco, essa função salvar ta errada?
Não dá erro, mas ainda não cadastra no banco, essa função salvar ta errada?
Falta os dados da PDO para salvar, assim como o parâmetro de conexão.
[...]O problema é esse, alguns artigos ensinam que é a forma mais segura, ja outros conceitos dizem que está errado[...]
Na realidade, getters/setters, visibilidade, entre outros, entram em um grande "ecossistema" denominado encapsulamento.
Só que a forma que o encapsulamento é ensinado, em alguns momentos, induz a entender de forma errada.
Encapsulamento é basicamente transformar um "emaranhado" de dados em algo que faça sentido. Não é um "problemão" ter um construct que aceita dados e setters. Entretanto, usar os dois ao mesmo tempo é desnecessário, como você fez é definir os mesmos valores duas vezes.
O método Pessoa::salvar() não faz absolutamente nada. Apenas atribui uma consulta query (que é apenas uma string) em uma variável. Nada mais.
Código abaixo é redundância, está fazendo duas vezes a mesma coisa.