Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alex.89

orientado a objetos

Recommended Posts

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.