Ir para conteúdo

POWERED BY:

Arquivado

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

RR08

Como Criar CRUD

Recommended Posts

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

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

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

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

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
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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

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