Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal, tudo tranquilo, então, to começando a programar php orientado a objetos, mas to com um probleminha na hora de gravar os dados do usuário no banco.
Tenho um arquivo onde executo esta função, neste arquivo eu estou criando uma classe usuário e extendendo ela da classe principal que é onde esta a função de conexão com o banco, até ai tudo OK, dentro desta classe usuário eu precisaria que ele gravasse em 2 tabelas, na usuarios e na permissões, se eu colocar pra gravar em só uma tabela, grava certinho, mas como eu coloco pra gravar as permissões, vou por o código do arquivo ae
class Usuarios extends Loja {
public function __construct($campos=array()) {
parent::__construct();
// Aqui vou gravar os dados do usuário
$this->tabela = "usuarios";
$this->campoPK = "id";
if(sizeof($campos) <= 0) {
$this->campos_valores = array(
"nome" => NULL,
"sobrenome" => NULL,
"email" => NULL,
"telefone" => NULL,
"imagem" => NULL,
"login" => NULL,
"senha" => NULL,
"data_cadastro" => NULL,
"status" => NULL
);
}else{
$this->campos_valores = $campos;
}
// Aqui as permissões que este usuário vai ter
$this->tabela = "permissoes";
$this->campoPK = "id";
if(sizeof($campos) <= 0) {
$this->campos_valores = array(
"id_menu" => NULL,
"id_usuario" => NULL
);
}else{
$this->campos_valores = $campos;
}
}
}
$usuario = new Usuarios();
// Gravando a imagem, caso ela exista
$imagem = $_FILES['imagem'];
if(count($imagem) != 0) {
if ($imagem['error'] == 0 ) {
$ex = explode(".", $imagem['name']);
$imgNome = $usuario->limpaTexto($ex[0]);
$imagemNome = $usuario->gravarImagem($imagem, "usuarios", 350, 90, 'V', $imgNome);
if($imagemNome == '') {
$imagemNome == 'Sem_Foto.jpg';
}
}
}
$usuario->setValor('nome', $_POST['nome']);
$usuario->setValor('sobrenome', $_POST['sobrenome']);
$usuario->setValor('email', $_POST['email']);
$usuario->setValor('telefone', $_POST['telefone']);
$usuario->setValor('imagem', $imagemNome);
$usuario->setValor('login', $_POST['nome']);
$usuario->setValor('senha', md5($_POST['nome']));
$usuario->setValor('data_cadastro', date('d/m/Y'));
$usuario->setValor('status', 1);
// Grava o usuário
$grava = $usuario->gravar($usuario);
if($grava > 0) {
$last_id = $grava;
}else{
echo "Ocorreu um erro ao gravar o usuário";
}
Bom, era isso, espero que alguém gaste 5 minutinhos pra tentar me ajudar
Abraço a todos e bom fim de semana
Opa, então, aquela parte la em cima, dentro da class ela sobrepõe os dados do usuário como vc falou, ali eu tem fazer algo mais ou menos assim
class Usuarios extends Loja {
function grava_usuario($campos=array()) {
// código que vai gravar o usuário
}
function grava_usuario_permissoes($campos=array()) {
// código que vai gravar as permissões
}
}
// Aqui que está o problema
// pois não sei como chamar setValor();
// este setValor() eu fiz ele na class principal, junto com as de mais clesses que não estão neste arquivo
$usuario = new Usuarios();
// como eu faria pra setar o valor do usuario agora, antes era assim $usuario->setValor('nome', $_POST['nome']);Sobre o __construct( $campos=array() ), se eu fizer uma função ali, não sei chamar ela depois
Sobre o last_id, está certo, na função gravar() eu retorno o mysql_insert_id();
Obrigado por estar me ajudando, este aqui é o video de qual estou aprendendo a fazer este CRUD em OOP
http://www.upinside.com.br/video-aulas/php/crud-generico-com-php-e-oop-insert-dinamico
Abs
Como você esta começando, você ainda não deve conhecer bem sobre heranças, é uma coisa meio complicada mesmo, mas pensa da seguinte forma qual a dependência que a classe Usuários terá da Classe Loja, são duas classes diferentes, se é por causa da conexão com o banco de dados crie uma classe somente para o banco de dados, mas não trate ela como herança, instancie ela.
Crie uma classe somente para tratar os dados da Loja e uma somente para os Usuarios, e assim por diante somente quando você perceber que uma classe depende mesmo da outra que você utiliza herança.
Para te mostrar abaixo fiz um modelo de classe Usuario
<?php
class Usuario{
private $id;
private $name;
public function setId( $id ){
$this->id = $id;
}
public function setName( $name){
$this->name = $name;
}
public function gravar(){
$db = Connect(); /* Você deverá criar nesta classe todos os atributos e métodos usados abaixo */
$sql = 'Insert usuarios (id, name) Values ($this->id, $this->name);
$db->insert();
/* O grava permissão pode ser uma nova classe ou um método da classe Usuario */
$this->gravaPermissao( $db->lastId() );
}
}
Dá uma olhada neste Hangout é bacana http://imasters.com.br/linguagens/php/hangout-sobre-php-e-orientacao-a-objetos/
Olha só Wesley, vou fazer assim, criar duas clesses
class Usuarios extends Loja {
function grava_usuario($campos=array()) {
// código que vai gravar o usuário
}
}
class UsuariosPermissoes extends Loja {
function grava_usuario_permissoes($campos=array()) {
// código que vai gravar as permissões
}
}
Mas vlw pela ajuda ae, abrçosss
Você violou 2 regras básicas vendo de cara:
Responsabilidade única do objeto, e o conceito de Herança.
no exemplo do amigo também acho desnecessário o método grava no objeto usuário já que quem grava é o banco e não o usuário.
deve existir um objeto que faça qualquer inserção para o sistema (Conceito de Reutilização do código.)
no exemplo do amigo também acho desnecessário o método grava no objeto usuário já que quem grava é o banco e não o usuário.
Colega, no exemplo que citei quem grava é o banco de dados $db->insert(); , só informo a SQL e chamo o método para gravar os dados,
o método gravar() dentro da classe Usuários será usado somente para informar qual ação realizar
Método gravar() -> Monta a SQL
Método setValor() -> 1° Nome da coluna na tabela, 2° Valor que vai ser inserido nesta coluna
Tudo que vai para montar o SQL no método gravar(), vai em um array()
$this->campos_valores = array( "nome" => NULL, "sobrenome" => NULL, "email" => NULL, "telefone" => NULL, "imagem" => NULL, "login" => NULL, "senha" => NULL, "data_cadastro" => NULL, "status" => NULL );>
Colega, no exemplo que citei quem grava é o banco de dados $db->insert(); , só informo a SQL e chamo o método para gravar os dados,
o método gravar() dentro da classe Usuários será usado somente para informar qual ação realizar
Realmente não tinha terminado de ler pois ficou tudo verde e achei que era comentário.
Alex
é seguir esse caminho então.
Blz, colega
Primeiro não entendi direito o __construct( $campos=array() ), ok vamos supor que ele será usado para consultas onde você passa os dados do usuário, mas repara que ao passar os dados da permissão você sobrepõe os dados do usuário.
O $this->campos_valores recebe os dados do usuário e logo abaixo recebe os dados da permissão.
Agora vamos ao problema principal, você deseja criar um usuário e logo em seguida gravar suas permissões, correto?
Como você informou o usuário esta sendo gravado de forma correta, então utilize last_insert_id() do mysql para pegar o ID do último usuário cadastrado e logo em seguida grave as permissões do usuário ;)