RR08 0 Denunciar post Postado Novembro 23, 2011 Bom pessoal estou com dificuldades na hora de criar a parte do CRUD do meu cadastro de cliente e veiculo. Aqui vai os arquivos que já criei. Minha Classe cliente com os Sets e Gets. Não mostrarei todos os sets e gets pra não ficar um arquivo muito grande class Cliente { private $codCliente; private $nome; private $cpf; private $rg; private $endereco; private $ddd; private $telefone; private $celular; private $bairro; private $cidade; private $observacaocli; public $veiculo; private $connectdb; function __construct() { $this->veiculo = new Veiculo(); $this->connectdb = new ConnectDB(); } function __destruct() { } /** * * @param codcliente */ public function setCodCliente($codcliente) { $this->codCliente = $codcliente; } /** * * @param nome */ public function setNome($nome) { $this->nome = $nome; } function save(){ $this->connectdb->setConsulta("INSERT INTO cliente SET nome = '{$this->nome}', cpf = '{$this->cpf}', rg = '{$this->rg}', endereco = '{$this->endereco}', cidade = '{$this->cidade}', ddd = '{$this->ddd}', bairro = '{$this->bairro}', telefone = '{$this->telefone}', celular = '{$this->celular}', observacaocli = '{$this->observacao}'"); $this->codcliente = $this->connectdb->retornaID(); } } ?> Minha Classe Veiculo com os Sets e Gets <meta charset=utf-8" /> <?php require_once 'ConnectDB.php'; /** * @author Master * @version 1.0 * @created 08-nov-2011 11:49:26 */ class Veiculo { private $codVeic; private $marca; private $modelo; private $anofabricacao; private $anomodelo; private $placa; private $cor; private $descricaoservico; private $valorservico; private $observacaovei; private $connectdb; function __construct() { $this->connectdb = new ConnectDB(); } function __destruct() { } /** * * @param codveic */ public function setCodVeic($codveic) { $this->codVeic = $codveic; } public function getCodVeic() { return $this->codVeic; } /** * Tirei os arquivos de Sets e Gets pra não ficar muito grande. /** * * @param observacao */ public function setObservacao($observacao) { $this->observacao = $observacao; } public function getObservacao() { return $this->observacao; } function save(){ $this->connectdb->setConsulta("INSERT INTO veiculo SET marca = '{$this->marca}', modelo = '{$this->modelo}', placa = '{$this->placa}', descricao_servico = '{$this->descricaoservico}', cor = '{$this->cor}', ano_modelo = '{$this->anomodelo}', observacaovei = '{$this->observacao}', valor_servico = '{$this->valorservico}', ano_fabricacao = '{$this->anofabricacao}'"); $this->codveiculo = $this->connectdb->retornaID(); } } ?> Classe de Conexão com o Banco de Dados <?php /** * Classe para realizar a conexão com o Base de dados automaticamente e executar Consultas na mesma. * @access public * @version 1.0 * @created 28-nov-2009 13:11:58 */ class ConnectDB { /** * Nome do banco de dados a ser utilizado * @var String */ private $db; /** * Host (Servidor) que executa o banco de dados * @var String */ private $host; /** * Senha do usuário para conexão ao banco de dados * @var String */ private $pass; /** * String da consulta SQL a ser executada * @var String */ private $sql; /** * Usuário que se conecta ao servidor de banco de dados * @var String */ private $user; /** * String para utilização do resultado da consulta. * @var String */ private $qry; /** * String para utilizado para Armazenar o ID do Usuario. * @var Boolean; */ private $ID; function __construct(){ $this->host = "localhost"; $this->db = "evolutio"; $this->user = "root"; $this->pass = ""; /* * Chamando método para conectar */ $this->conectar($this->host, $this->user, $this->pass); /* * Chamando método para selecionar o banco de dados */ $this->selecionarDB($this->db); } /** * Método para conexão com o banco de dados. * @param String $host * @param String $user * @param String $pass * @return Boolean */ private function conectar($host, $user, $pass){ $con = mysql_connect($this->host, $this->user, $this->pass) or die($this->erro(mysql_error())); return $con; } /** * Método para selecionar a base de dados usada. * @param String $db * @return boolea */ private function selecionarDB($db){ $sel = mysql_select_db($this->db) or die($this->erro(mysql_error())); if ($sel){ return true; } else { return false; } } /** * Método realiza a Query na base de dados. * @param Query $sql */ private function consulta($sql){ $this->qry = mysql_query($sql) or die ($this->erro(mysql_error())); $this->ID = true; } /** * Método faz com que o resultado da Query seja colocado em um array. * @return Array */ public function consultaArray(){ $sqlArray = mysql_fetch_array($this->qry); return $sqlArray; } /** * Método faz com que o resultado da Query seja dada em quantidade de linhas atingidas. * @return Int */ public function consultaRows(){ $sqlArray = mysql_num_rows($this->qry); return $sqlArray; } /** * Método para capturar a consulta para ser enviado para o banco de dados. * @param String $sql * @return void */ public function setConsulta($sql){ $this->consulta($sql); } /** * Método que retorna o erro do mysql. * @param String $erro */ private function erro($erro){ echo $erro; } /** * Método que retorna o valor do ID adicionado na última query. * @return boolean */ public function retornaID(){ return $this->ID; } function save(){ } } ?> E meu Cadastro <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php require_once 'classes/Cliente.php'; require_once 'classes/Veiculo.php'; $cliente = new Cliente(); $cliente->setNome($_POST['nome']); $cliente->setCPF($_POST['cpf']); $cliente->setRG($_POST['rg']); $cliente->setEndereco($_POST['endereco']); $cliente->setBairro($_POST ['bairro']); $cliente->setCidade($_POST ['cidade']); $cliente->setDDD($_POST ['ddd']); $cliente->setTelefone($_POST ['telefone']); $cliente->setCelular($_POST ['celular']); $cliente->setObservacao($_POST ['observacaocli']); $cliente->save(); $veiculo = new Veiculo(); $veiculo->setMarca($_POST['marca']); $veiculo->setModelo($_POST['modelo']); $veiculo->setPlaca($_POST['placa']); $veiculo->setCor($_POST['cor']); $veiculo->setAnoFabricacao($_POST['anofabricacao']); $veiculo->setAnoModelo($_POST['anomodelo']); $veiculo-> setDescricaoServico($_POST['descricaoservico']); $veiculo->setValorServico($_POST['valorservico']); $veiculo->setObservacao($_POST ['observacaovei']); $veiculo->save(); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Novembro 23, 2011 Qual a sua dificuldade? Aparece algum erro? Qual erro? Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Novembro 23, 2011 Primeiramente, essas meta-tags aí nos arquivos das classes são totalmente desnecessárias... Bom, se você não postar o erro, fica complicado analisarmos... E esses construtores estão ruins: function __construct() { $this->veiculo = new Veiculo(); $this->connectdb = new ConnectDB(); } Pesquise por Injeção de Dependências (Dependency Injection). O mais correto seria fazer assim: function __construct(ConectDb $conn, Veiculo $vehicle) { $this->veiculo = $vehicle; $this->connectdb = $conn; } Repita a mesma coisa para a classe Veiculo... Compartilhar este post Link para o post Compartilhar em outros sites
RR08 0 Denunciar post Postado Novembro 23, 2011 Qual a sua dificuldade? Aparece algum erro? Qual erro? Bom Carlos, meu principal problema é a parte do Crud msm, eu ja criei a parte de buscar e excluir, mas estou tendo dificuldade na hora de criar o UPDATE dos cadastros. se puder me ajudar desde ja agradeço flww Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 23, 2011 Você pode fazer tanto o INSERT como o UPDATE dentro do seu método save. Se o atributo $codVeic (no caso da classe Veiculo) for NULL você faz o INSERT, se não faz o UPDATE. Exemplo: public function save() { if ($this->codVeic === null) { $this->connectdb->setConsulta("INSERT INTO veiculo (...) VALUES (...)"); $this->codVeic = $this->connectdb->retornaID(); } else { $this->connectdb->setConsulta("UPDATE veiculo SET ... WHERE codVeic = {$this->codVeic}"); } } Agora na hora de inserir você continua fazendo como já está fazendo, e na hora de atualizar você seta o código do veículo que vem do formulário, por exemplo: $veiculo = new Veiculo(); $veiculo->setCodVeic($_POST['codVeic']); // aqui você seta os outros atributos $veiculo->save(); Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
RR08 0 Denunciar post Postado Novembro 23, 2011 Entendi sim Léo obrigado pela a ajuda vlww Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Primeiramente, essas meta-tags aí nos arquivos das classes são totalmente desnecessárias... Bom, se você não postar o erro, fica complicado analisarmos... E esses construtores estão ruins: function __construct() { $this->veiculo = new Veiculo(); $this->connectdb = new ConnectDB(); } Pesquise por Injeção de Dependências (Dependency Injection). O mais correto seria fazer assim: function __construct(ConectDb $conn, Veiculo $vehicle) { $this->veiculo = $vehicle; $this->connectdb = $conn; } Repita a mesma coisa para a classe Veiculo... Pode me explicar por favor, a diferença e por que fazer isso? Em qual motivo eu precisaria fazer isso, no caso quando quero criar um objeto de outro classe no construtor? Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 Pode me explicar por favor, a diferença e por que fazer isso? o primeiro eh a composicao, o segundo agregacao, dois principios da orpeintacao a objetos..., pq fazer? pq você precisara setar os dados do veiculo e do banco de dadados, depois você os agrega para que possa usa-los Em qual motivo eu precisaria fazer isso, no caso quando quero criar um objeto de outro classe no construtor? estude sobre composicao, agregacao e associacao... Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Muito obrigado Igor. Bom, pelo que li sobre composição (agora), eu posso fazer isso em todos os meus seters? <? class Usuario { private $connection; private $modelUsuario; private $nome; private $email; function __constructor(Connection $connection, ModelUsuario $modelUsuario) { $this->connecion = new Connection(); $this->modelUsuario = new ModelUsuario(); } function setNome(ModelUsuario $nome) { $this->nome = $nome; } function setEmail(ModelUsuario $email) { $this->email = $email; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 digamos q esteja no caminho certo... um outro principio da orientacao objetos encapsule o q varia <?php class Usuario { private $nome; private $email; public function setNome($nome) { $this->nome = $nome; } public function setEmail($email) { $this->email = $email; } public function getNome() { return $this->nome; } public function getEmail() { return $this->email; } } //este acima,eh o seu valueobject //este abaixo, eh o seu model q ira persistir o objeto class ModelUsuario { private $connection; function __constructor(Connection $connection) { $this->connecion = new Connection(); } public function save(Usuario $usuario) { $this->connection->query("INSERT INTO usuario (nome,email) VALUES ('{$usuario->getNome()}','{$usuario->getEmail()}')");//imaginando q você tem um metodo query } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Igor.php Tá, eu entendi, mas me tira uma dúvida. Se eu passo como parametro no save(), a classe "Usuario" pra garantir o objeto, eu não preciso incluir esta classe na classe ModelUsuario ? Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 um outro principio de orientacao a objetos encapsule o q varia existem diversos usuarios, com dados muito diversos, se colocar o objeto no como composicao, os dados serao sempre o mesmo toda vez q chamar o objeto que o tem composto, ou seja, se você colocao model usuario dentro do usuario, os dados serao sempre o mesmo, por isso a agregacao, outro principio cada objeto tem sua responsabilidade ali quando eu criei o usuario, ele eh responsavel por "pegar" os dados do usuario, e o model usuario por persistir ele no banco... Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Parece que eu entendi, porém vou ler mais a respeito. Tem algum PDF que realmente trata a Orientação a Objetos com PHP, onde este assunto é fortemente abordado? Eu to sempre pesquisando a respeito, porém muitos exemplos que acho por aí eu já tenho conhecimento. Eu quero realmente aplicar o conceito OO, mas não consigo muito. Essa idéia de composicao, agregacao e associacao me pareceu muito interessante, e alguns exemplos daqui do fórum é usado isto. Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 php orientado a objetos, com desing patterns, editora novatec, autor pablo dall'olgio php: projeto, orientacao a objetos, editora altabooks padroes de projeto, serie usa e acabeça, editora altabooks http://www.novatec.com.br/livros/phpobjetos2/ http://www.amazon.com/Objects-Patterns-Practice-Matt-Zandstra/dp/1590599098 http://www.submarino.com.br/produto/1/1138065/use+a+cabeca!:+padroes+de+projetos+%28design+patterns%29 os links sao paenas referenciais, pesquise e achara mais barato.. Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Eu tenho em PDF esse livro do Pablo, e eu detestei. Achei muito estranho a abordagem dele. Olharei os outros, obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 saiba q este eh o melhor livro no brasil ate hoje, e o pablo ja ganhou 2 premios, foi o meu primeiro libro sobre o assunto e ainda consegui criar meu mini framework com ele...provavelmente você nao abstraiu os exemplos...isso acontece muito...tente visualizar os exemplos dele...comecando do inicio...tem um outro q estou lendo q nao indiquei justamente pq o do pablo trata algumas coisas q pra esse q to lendo você ja ter nocao.. Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Vou analisar direito os exemplos dele então e vê no que dá. Baixei o PDF digital do PHP Objects, Patterns and Practice 3rd Edition, tem ótimos exemplos! Livros importados são os melhores, não tem jeito! Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 sim, esse use a cabeça, eh estranjeiro, mas você encontra ainda o traduzido...nao basta analisar os exemplos, tem de se ler o livroo...muitas vezes eu so vejo os exemplos e nao entendo, ae eu paro, respiro fundo e leio, ae eu entendo... Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Novembro 25, 2011 Não sei inglês, mas nada que o google translator não resolva. hhehe Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 25, 2011 cuidado pra ele nao traduzir o q ele nao deve traduzir...ele pode traduzir coisa errada... Compartilhar este post Link para o post Compartilhar em outros sites