Boa noite!
Acabei de criar a classe que faz toda gestão dos dados enviados via $_POST. O tratamento é feito com AJAX e gostaria de saber a opinião de vocês quando a melhorias no código. Eu fazia manualmente um a um e durante algumas semanas fiquei pensando em como automatizar todo esse processo. Ainda estou aprendendo e tenho me esforçado ao máximo pra poder entender todo o conceito do POO. Sei que é muita coisa mas um dia chego lá. Então lá vai
<?php /** * UpdateData.class [ Helper ] * Responsável por verificar os dados enviado via $_POST e inserir ou atualizar essas informações * no banco de dados * */ class UpdateData { /** A data e hora atual */ private $DataCadastro; /** A tabela que receberá a ação */ private $Table; /** Os campos que serão validados e salvos na tabela */ private $Fields; /** Os dados que serão utilizados para realizar a ação na tabela */ private $DataObj; /** A mensagem de erro */ private $Errors; /** A mensagem de sucesso */ private $Success; /** Itens para checar se o registro já existe */ private $Itens; /** Construct */ function __construct($Table, array $Fields, $Itens = null) { $this->Table = $Table; $this->Fields = $Fields; $this->Itens = $Itens; $this->DataCadastro = date('Y-m-d H:i:s'); // Execute methods $this->CheckFields(); $this->SetAction(); } /** * <b>CheckFields: </b> Método responsável por verificar se o campo está vazio e retornar a mensagem * de erro em formato de json * * @return json */ public function CheckFields(){ if(is_array($this->Fields)): /** Define os dados que serão utilizados para manipular a tabela */ $this->DataObj = $this->Fields; /** Trata alguns campos removendo caracteres da máscara jQuery */ foreach($this->DataObj as $IndiceObj): if($IndiceObj=='cnpj' || $IndiceObj=='cpf' || $IndiceObj=='cep' || $IndiceObj=='telefone'): $this->DataObj = str_replace(['_', '-', '.', '/'], '', $this->DataObj); endif; endforeach; /** Passwords => For change | Encoding sha1() */ if(isset($this->Fields['senha']) && !empty($this->Fields['senha'])): foreach($this->Fields as $Indice => $Val): if($Indice == 'senha'): $this->Fields['senha'] = sha1($this->Fields['senha']); endif; endforeach; endif; /** Passwords => For check if it's correctly */ if(isset($this->Fields['atual_pass']) && !empty($this->Fields['atual_pass'])): foreach($this->Fields as $Indice => $Val): if($Indice == 'atual_pass'): $this->Fields['atual_pass'] = sha1($this->Fields['atual_pass']); endif; endforeach; $ReadPass = new Read; $ReadPass->ExeRead('rio_clientes', 'senha,id,email', 'WHERE senha = :senha_atual', "senha_atual={$this->Fields['atual_pass']}"); if(!$ReadPass->getResult() && empty($this->Success)): $this->Errors=['erros' => "A senha atual está incorreta#exibir_erros"]; echo json_encode($this->Errors); exit; endif; endif; /** Validação para tela de alteração de dados */ if($this->CheckAction()==1): $this->Errors=['erros' => "Preencha ou o campo com o novo e-mail ou o campo com a nova senha. E informe a senha atual para concluir.#exibir_erros"]; echo json_encode($this->Errors); exit; elseif($this->CheckAction()==2): $this->Errors=['erros' => "Tudo certo. Basta informar sua senha atual.#exibir_erros"]; echo json_encode($this->Errors); exit; elseif($this->DataObj['action']!='validate_data_access'): /** Faz a validação dos campos */ foreach($this->Fields as $Indice => $Val): if($Indice != 'action' && $Indice != 'id' && empty($Val)): $this->Errors=['erros' => "Campo obrigatório#{$Indice}"]; echo json_encode($this->Errors); exit; endif; endforeach; endif; endif; } /** PRIVATES METHODS */ /** * <b>CheckDuplicidade: </b> Método responsável por verificar se o registro já existe na tabela * * @return boolean */ private function CheckDuplicidade() { if(!empty($this->Itens) && !empty($this->Fields[$this->Itens])): $ReadItens = new Read; $ReadItens->ExeRead($this->Table, $this->Itens, "WHERE {$this->Itens} = :itens AND id != :id", "itens={$this->Fields[$this->Itens]}&id={$this->Fields['id']}"); if($ReadItens->getResult()): return false; else: return true; endif; else: return true; endif; } /** * */ private function CheckAction() { if($this->DataObj['action']=='validate_data_access'): if(empty($this->DataObj['email']) && empty($this->DataObj['senha'])): return 1; elseif(!empty($this->DataObj['email']) && empty($this->DataObj['senha']) && empty($this->DataObj['atual_pass'])): return 2; elseif(empty($this->DataObj['email']) && !empty($this->DataObj['senha']) && empty($this->DataObj['atual_pass'])): return 2; endif; endif; } /** * <b>SetAction: </b> Método privado responsável por realizar a ação na tabela * * @return boolean */ private function SetAction() { /** Remove alguns índices do array, por padrão todos os campos que não estão na tabela */ unset($this->DataObj['id']); unset($this->DataObj['action']); unset($this->DataObj['atual_pass']); // Elimina o e-mail do update, se ele estiver vazio if(empty($this->DataObj['email'])): unset($this->DataObj['email']); endif; // Elimina a senha do update, se ela estiver vazia if(empty($this->DataObj['senha'])): unset($this->DataObj['senha']); endif; // Realiza o insert if(!isset($this->Fields['id']) || empty($this->Fields['id'])): if($this->CheckDuplicidade()===true): $InsertData = new Create; $InsertData->ExeCreate($this->Table, $this->DataObj); if($InsertData->getResult()): $this->Success=['sucesso' => "Registro inserido com sucesso#sucesso"]; echo json_encode($this->Success); endif; else: $this->Errors=['erros' => "Esse registro já existe. Não será possível realizar essa ação com essa informações.#exibir_erros"]; echo json_encode($this->Errors); exit; endif; // Realiza o update else: if($this->CheckDuplicidade()===true): // Salva a data de alteração da senha if(!empty($this->DataObj['senha'])): $this->DataObj['data_alteracao_senha'] = $this->DataCadastro; endif; // Realiza o update $UpdateData = new Update; $UpdateData->ExeUpdate($this->Table,$this->DataObj, "WHERE id=:id", "id={$this->Fields['id']}"); // Atualiza a sessão com o novo e-mail if(!empty($this->DataObj['email'])): $sessao = new Session; $_SESSION['logado'] = $this->DataObj['email']; endif; // Mensagem de sucesso if($UpdateData->getResult()): $this->Success=['sucesso' => "Dados atualizados com sucesso#sucesso"]; echo json_encode($this->Success); endif; else: $this->Errors=['erros' => "Esse registro já existe. Não será possível realizar essa ação com essa informações.#exibir_erros"]; echo json_encode($this->Errors); exit; endif; endif; } }
Usage
/** Post form */ $Post=filter_input_array(INPUT_POST); /** Define as variáveis utilizadas pela classe */ switch($Post['action']): // Meus dados case "validate_meus_dados": $Table = 'clientes'; $Iten = ''; // Quando existir, irá verificar se o registro é duplicado ou não break; endswitch; /** Objeto da classe */ $updData=new UpdateData($Table, $Post, $Iten);