Alex.89 6 Denunciar post Postado Fevereiro 8, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Wesley David 20 Denunciar post Postado Fevereiro 8, 2013 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 ;) Compartilhar este post Link para o post Compartilhar em outros sites
Alex.89 6 Denunciar post Postado Fevereiro 8, 2013 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']); // agora ficaria como? 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 Compartilhar este post Link para o post Compartilhar em outros sites
Wesley David 20 Denunciar post Postado Fevereiro 8, 2013 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/ Compartilhar este post Link para o post Compartilhar em outros sites
Alex.89 6 Denunciar post Postado Fevereiro 8, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 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.) Compartilhar este post Link para o post Compartilhar em outros sites
Wesley David 20 Denunciar post Postado Fevereiro 8, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Alex.89 6 Denunciar post Postado Fevereiro 8, 2013 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 ); Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites