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 mark1978
      Boa noite srs, tem o código abaixo e esta funcionando normal e carregando o Qrcode no HTML na soma.
      Porém gostaria de alterar e que fosse da seguinte forma:
      Se "totalServico" for menor que "totalProdutos" e diferente de zero então carregue o Qr Code com esse valor
      Se não o valor for "0,00" carregue o valor "totalProdutos". Essa finalidade é para ter uma opção de desconto.
       
      <?php use Piggly\Pix\StaticPayload; class Os_model extends CI_Model { public function getProdutos($id = null) { $this->db->select('produtos_os.*, produtos.*'); $this->db->from('produtos_os'); $this->db->join('produtos', 'produtos.idProdutos = produtos_os.produtos_id'); $this->db->where('os_id', $id); return $this->db->get()->result(); } public function getServicos($id = null) { $this->db->select('servicos_os.*, servicos.nome, servicos.preco as precoVenda'); $this->db->from('servicos_os'); $this->db->join('servicos', 'servicos.idServicos = servicos_os.servicos_id'); $this->db->where('os_id', $id); return $this->db->get()->result(); } public function valorTotalOS($id = null) { $totalServico = 0; $totalProdutos = 0; if ($servicos = $this->getServicos($id)) { foreach ($servicos as $s) { $totalServico = $totalServico + $s->preco; } } if ($produtos = $this->getProdutos($id)) { foreach ($produtos as $p) { $totalProdutos = $totalProdutos + $p->subTotal; } } return ['totalServico' => $totalServico, 'totalProdutos' => $totalProdutos]; } public function getQrCode($id, $pixKey, $emitente) { if (empty($id) || empty($pixKey) || empty($emitente)) { return; } $result = $this->valorTotalOS($id); $amount = round(floatval($result['totalServico'] + $result['totalProdutos']), 2); if ($amount <= 0) { return; } $pix = (new StaticPayload()) ->applyValidCharacters() ->applyUppercase() ->setPixKey(getPixKeyType($pixKey), $pixKey) ->setMerchantName($emitente->nome, true) ->setMerchantCity($emitente->cidade, true) ->setAmount($amount) ->setTid($id) ->setDescription(sprintf("%s OS %s", $emitente->nome, $id), true); return $pix->getQRCode(); } }  

    • By AndersonWS
      Meu site está caindo muito nos últimos dias. Basicamente acessa e não aparece nada, uma tela em branco. O pessoal da hospedagem falou que tenho que otimizar o banco de dados e que o problema é esse. Acho estranho pois o mesmo site não caia e agora "do nada" tem esse problema. Fiz um teste de tracert no cmd para ver as rotas e deu a mensagem: Esgotado o tempo limite do pedido. Isso me parece o problema e não o banco de dados.
      Otimização do banco tem alguma coisa a ver com essa mensagem?
      Poderia o site por não estar muito otimizado simplesmente não mostrar nada na tela? Não deveria carregar ao menos o html?
      Se não for o local certo da pergunta me perdoem mas como falaram que o problema era o banco de dados postei aqui.
      Grato.
    • By mm_edilson
      Olá. Tenho uma página de login, que salvei como index.php. Quando o usuário entra com login e senha corretos, a página redireciona para outra página, a index2.php. É uma página independente, não sendo viável no meu projeto colocá-la como um include na página principal.
      Tudo funciona. Exceto que, se o usuário, sem logar, digitar o endereço completo da página, ou seja, www.meusite.com.br/index2.php, ela abre normalmente. Como fazer para que ela não abra, se não passar antes pela página de login?
      Esta é minha página index.php:
      </style> <?php include('app/connection.php'); ?> </head> <body> <div id="corpo"> <center><img src="app/img/logo.png" width="500" height="210"></center></div><BR> <div id="paginas"> <?php @session_start(); include('valida_user.php'); ?> </div> Esta é a página valida_user.php
      <?php @session_start(); if(isset($_POST['enviar'])){ $usuario = $_POST['usuario']; $senha = $_POST['senha']; if($usuario ==''){echo "<h4>Por favor, insira um nome de usuário válido</h4>"; }else if($senha ==''){echo "<h4>Por favor, insira sua senha</h4>"; }else{ $sql = "SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '$senha' "; $result = mysqli_query($conexao, $sql); if(mysqli_num_rows($result) > 0){ while($res = mysqli_fetch_array($result)){ $ativo = $res['ativo']; $nivel = $res['nivel']; $usuario = $res['usuario']; $senha = $res['senha']; $email = $res['email']; $nome = $res['nome']; $cadastro = $res['cadastro']; header("Location: index2.php"); exit; } }else{ echo "<center><h3>Usuário ou senha inválidos</h3></center>"; } } } ?>  
    • By Xicara
      Olá boa tarde!
       Eu tenho um jogo e um site para cadastro de contas. E agora estou querendo implementar um sistema VIP de preferencia com dias para acabar! No meu  banco de dados do jogo, tenho a tabela: contas com os campos: id / senha / ip / e agora adicionei o campo vip, o valor é de 1 a 5 e já esta funcional no jogo porém esse beneficio está permanente para os jogadores, minha duvida é: o valor do campo vip tem como eu programar para cada 30 dias zerar novamente automático? Não zerar de todos, mais sim daquele que atingiu os 30 dias, eu estava pensando em adicionar mais um campo: data de inicio, será que tem possibilidade por exemplo o site identificar a data e excluir o valor do campo quando atingir os 30 dias?
      Obrigado pela atenção!
    • By BrunoMga07
      Pessoal alguém pode me ajudar em meu projeto, não sei muito de php e mysql mais estou com uma ideia e queria colocar em pratica, se alguém conseguir fazer e quiser combinar um valor me só mandar mensagem.
       
      Quero criar um sistema em que terá as seguintes informações:
      1° Criar conta / logar
       - Tela usuário: Perfil, Trocar Senha, Saldo da conta, recarregar saldo, sacar saldo.
       - Historico de transações.
      2° Menu Horizontal: Inicio , PPP , APOSTA , CONTATO
       - Inicio: Informações que posso adicionar.
       - PPP: pix para pix: aparece um menu vertical mostrando as opção ex:
      1 para 4 - APARECE UMA TABELA EM QUE MOSTRA O PRIMEIRO USUARIO, COM 4 ENVIOS QUE SERÁ EFETUADO POR OUTRAS PESSOAS.
      2 para 8
      3 para 12
      4 para 16
      EXEMPLO
          USUARIO 1
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          USUARIO 2
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          USUARIO 3
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
          ENVIAR  1 PONTO
      Quando o usuario enviar 1 ponto para o usuario 1 ele será adicionado em usuario 2 esperando a vez dele para receber pontos.
      se já tiver um usuario 2 ele será incluido no usuario 3, quando o usuario 1 estiver completo ele será removido da lista
      e podera participar novamento. Só será possivel 1 envio de ponto por usuario.
      algumas regras: se o usuario 1 não estiver completo com 4 envios de 4 usuarios diferente não passa para o usuario 2. e quando algum usuario envia um ponto será removido 1 ponto dele e enviado para o usuario que ele enviou.
×

Important Information

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