Jump to content
Rodrigo5468

Validação

Recommended Posts

Olá, boa noite à todos!

 

Estou tendo algumas dificuldades em achar a melhor forma possível de validar um formulário, um cadastro...

Irei deixar aqui logo abaixo o exemplo de como estou usando em teste, está funcionando mas não tenho certeza se é o método certo.

<?php
public function insert() {
	if(isset($usuario) && isset($nomesobrenome) && isset($email) && isset($senha)) {
		if(empty($usuario) OR empty($nomesobrenome) OR empty($email) OR empty($senha)) {
			echo 'Há campos vazios.';
		}
	}else {
		$verifica = DB::prepare("SELECT * FROM {$this->table} WHERE usuario=:usuario OR nomesobrenome=:nomesobrenome OR email=:email");
		$verifica->bindValue(':usuario',$this->usuario,PDO::PARAM_STR);
		$verifica->bindValue(':nomesobrenome',$this->nomesobrenome,PDO::PARAM_STR);
		$verifica->bindValue(':email',$this->email,PDO::PARAM_STR);
		$verifica->execute();
	
		if($verifica->rowCount() == 0) {
			$sql  = "INSERT INTO $this->table (usuario, nomesobrenome, email, senha) VALUES (:usuario, :nomesobrenome, :email, :senha)";
			$stmt = DB::prepare($sql);
			$stmt->bindParam(':usuario', $this->usuario);
			$stmt->bindParam(':nomesobrenome', $this->nomesobrenome);
			$stmt->bindParam(':email', $this->email);
			$stmt->bindParam(':senha', $this->senha);
			return $stmt->execute();
		}else {
			return false;
		}
	}
}

Estou estudando OO e PDO. Neste formulário existe 4 campos e, um adicional que é os termos, um checkbox.

Eu quero verificar os seguintes campos.

Usuário, Nome, E-mail

Se não existir dados iguais em cada campo ele concede a permissão para enviar ao banco de dados, se não o script mostra os erros na tela do usuário. Li alguns artigos no Google, encontrei um que entendi melhor, ele pediu para criar uma variável.

//Cria uma variável que terá os dados do erro
$erro = false;

//Verifica se o POST tem algum valor
if(!isset($_POST) || empty($_POST )) {
	$erro = 'Nada foi postado.';
}

//Cria as variáveis dinamicamente
foreach($_POST as $chave => $valor) {
	//Remove todas as tags HTML
	//Remove os espaços em branco do valor
	$$chave = trim(strip_tags($valor));
	
	//Verifica se tem algum valor nulo
	if(empty($valor)) {
		$erro = 'Existem campos em branco.';
	}
}

//Verifica se $email realmente existe e se é um email. 
//Também verifica se não existe nenhum erro anterior
if((!isset($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) && !$erro) {
	$erro = 'Envie um email válido.';
}

//Se existir algum erro, mostra o erro
if($erro) {
	echo $erro;
}else{
	//Se a variável erro continuar com valor falso
	//Você pode fazer o que preferir aqui, por exemplo, 
	//enviar para a base de dados, ou enviar um email
	//Tanto faz. Vou apenas exibir os dados na tela.
	echo "<h1>Veja os dados enviados</h1>";
		foreach($_POST as $chave => $valor) {
		echo '<b>' . $chave . '</b>: ' . $valor . '<br><br>';
	}
}

A partir disso eu preciso criar os famosos "if", até aí tudo bem, mas como eu coloco no meu script? Fiz algumas tentativas e não conseguir. Poderiam me auxiliar neste assunto?

 

Share this post


Link to post
Share on other sites

Correto é você estudar algum padrão de arquitetura para persistência de dados, que permite separar regras de negócio das regras de acesso ao DB. Pois a unica diferença entre o procedural e OO em seu códigos,  é que está você colocou os códigos procedurais dentro de classes e nada mais.

Alguns dos mais conhecido são:




https://pt.wikipedia.org/wiki/MVC

http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/
https://pt.wikipedia.org/wiki/Objeto_de_acesso_a_dados


Lista geral

https://pt.wikipedia.org/wiki/Categoria:Padrões_de_projeto_de_software

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By rafaelmoreira78
      Boa tarde!
      Estou querendo fazer um select a partir da seleção de um combobox. Nesse combobox o usuário escolhe o tipo de busca que ele quer. Se é por nome, por id, por data etc. E depois, exibe os dados nos campos. Porém, não estou conseguindo e não sei como resolver isso.
      public void consultar(){ String sql ="select * from tbcertificados where ?=?"; try{ pst=conexao.prepareStatement(sql); pst.setString(1,cbConsulta.getSelectedItem().toString()); pst.setString(2,txtBusca.getText()); rs=pst.executeQuery(); if (rs.next()){ lblID.setText(rs.getString(1)); txtNome.setText(rs.getString(2)); comboCursos.setSelectedItem(rs.getString(3)); txtData.setText(rs.getString(4)); txtCH.setText(rs.getString(5)); txtEmpresa.setText(rs.getString(6)); txtObs.setText(rs.getString(7)); }  
    • By danilo759
      Tenho uma tabelinha de programas para uma rádio... está da seguinte forma.

      titulo
      data (YYYY-MM-DD)
      hora (00:00:00)

      Minha consulta, mas não retorna o programa da hora corrente. O que eu fiz de errado?
      SELECT * FROM programas WHERE data = CURDATE() AND hora = CURTIME() LIMIT 1
    • By Ro_JnR
      Estou tentando a semanas resolver um problema, consumir uma API e verificar se o campo no banco está vazio, se estiver faz insert se não faz update.
      Até aí tudo bem, agora não consigo passar do meu select para o banco, ele da erro.
       
      Segue o código:
       
      <?php

          require_once("db.class.php");
          
          $url = "https://servicodados.ibge.gov.br/api/v1/localidades/distritos";
              $ch = curl_init($url);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              $resultado = json_decode(curl_exec($ch));
              foreach ($resultado as $cidades) {
                  $nome = $cidades->nome;
                  $stmt = $conn->prepare("SELECT name FROM cidades WHERE name=?");
                  $stmt->bind_Param(':name', $nome);
                  $stmt->execute();
                  $stmt->bind_result($resultSelect);
                  $stmt->fetch();
                  if(!$stmt->execute()){
                      print_r($stmt->errorInfo());
                  }
              } 

      ?>
       
      Código do banco:
       
      $conn = new PDO("mysql:host=localhost;dbname=exercicio", "root", "");
      //"sqlsrv:Database=dbphp7;server=localhost\SQLEXPRESS;ConnectionPooling=0", "sa", "root");
      $stmt = $conn->prepare("SELECT * FROM cidades ORDER BY nome");
      $stmt->execute();
      //fetchALL basicamente faço while do mysqli
      $results = $stmt->fetchALL(PDO::FETCH_ASSOC);
       
      Print do erro:

       
      Tenho um outro exercicio que fiz bem parecido, consumi a API de estados e inseri no banco de dados, esse funcionou normalmente.
      Alguém poderia me dar uma luz, não sei mais o que fazer.
      Era para ser simples rsrsrrs.
    • By osmarindy
      Boa noite Pessoal.
      Estou com o seguinte problema. Tenho duas tabelas principais "tblProjeto" e "tblItensProjeto", tenho que selecionar o projeto (tblProjeto) cujo o item 19 (tblItensProjeto) já esteja concluído (status 5) e que o item 15 (tblItensProjeto) não esteja concluído (status 5) e nem cancelado (status 4).
      Tenho o seguinte código:
      SELECT p.nmProjeto, l.nmLocalidade, f.usuario, r.nmRequisitante, p.dtSolicitacao,p.dtPrevisaoEntrega, s.nmStatus FROM tblProjeto as p inner join tblItensProjeto as i on i.idProjeto = p.idProjeto inner join tblLocalidade as l on l.idLocalidade = p.idLocalidade inner join tblFuncionario as f on f.idFuncionario = p.idFuncionario inner join tblRequisitante as r on r.idRequisitante = p.idRequisitante inner join tblStatusProj as s on s.idStatus = i.idStatus where (i.idAtividade = 19 and i.idStatus= 5 ) and (i.idAtividade = 15 and (i.idStatus <> 5 and i.idStatus <> 4))
      Se executo um  filtro de cada vez (where i.idAtividade = 19 and i.idStatus= 5 ) ou (i.idAtividade = 15 and (i.idStatus <> 5 and i.idStatus <> 4)) eles trazem resultados, mas quando deixo os dois filtros não funciona.
      Possuo 5 projetos que estão com a atividade 19 concluída e atividade 15 pendente. mas, não consigo com esse select trazer a informação. Alguém sabe como posso resolver?
    • By kania
      Olá pessoal,
      Estou tentando criar uma procedure no MySql para seja disparada sempre que um novo registro for cadastrado na tabela.
      Ela precisa atualizar um campo específico concatenando dois outros campos de outra tabela. Isto é possível?
       
      Preciso concatenar a coluna ID e ID_BANCO, da tabela empresa e atualizar a coluna CODIGO_OPERACAO da tabela proposta.
      Executando o que eu fiz funciona certinho, mais o que eu quero é que ela rode sozinha atualizando o campo CodigoOperacao do registro novo logo após este registro ser criado, isto porque preciso do novo ID criado, do Documento cadastrado e do Id_banco cadastrado para poder atualizar o mesmo registro.
       
      DELIMITER $$ CREATE PROCEDURE pr_codigo_operacao(IN _Id INT, IN _Documento VARCHAR(50), IN _IdBanco VARCHAR(50)) BEGIN UPDATE propostas SET CodigoOperacao = CONCAT(_Documento, "-", _IdBanco) WHERE Id = _Id; END $$ Criei um trigger para chamar a procedure, porém a mesma esta dando erro quando tento fazer um INSERT,
       
      ERRO
      #1442 - Can't update table 'propostas' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
       
      DELIMITER $$ CREATE TRIGGER tgr_atualiza_codigo_operacao AFTER INSERT ON propostas FOR EACH ROW BEGIN CALL pr_codigo_operacao (new.Id, new.DocumentoCliente, new.Id_banco); END $$  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.