Ir para conteúdo

POWERED BY:

Arquivado

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

Guilherme_90

[Resolvido] Evitar repetição de Dados

Recommended Posts

Boa noite pessoal, estou com um probleminha xarope!

Como que eu faço pra evitar dados repetidos, quando são inseridos no banco MySQL? Por exemplo, na tela de cadastro tem o campo E-mail, Nome, eu preciso fazer um esquema que quando o cara digitar, eu verifico se esse nome existe na tabela, mas eu não estou conseguindo.

 

Ah, outra dúvida. Eu tenho um arquivo chamado cadastrar.php (que é o código para inserir os dados no banco), e tenho o código de verificar os campos do formulário. Onde eu coloco o código de validação do form? Porque no action já está o cadastrar.php, já tentei dar include no arquivo validacoes.php na pagina do form e nada, tambem coloquei o codigo junto com de inserir os dados, e nada.

 

Alguém pode me ajudar, por favor? Fico muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer isso com ajax (quando o cara digitar) ou quando submeter o formulario com mysql_num_rows ..

 

Um exemplo que crei aqui rapidinho ..

 

Tabela

CREATE TABLE  `storage`.`t_user` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 100 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`senha` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM ;

 

Um Registro

 

INSERT INTO `storage`.`t_user` (`id`, `nome`, `email`, `senha`) VALUES (NULL, 'Andrey', 'vital_andrey@hotmail.com', '123');

E então o ajax + php

 

<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function(){
  var email = $("#email").val();
  $("#email").keyup(function(){
     $.ajax({
        type:"POST",
        url: "auth_email.php",
        data: "email="+email,
        success:function(data){
            $("div").html(data);
        }
     });
  });
});
</script>
   Email:<input type="text" id="email" size="27">
<div></div>

 

Pagina auth_email.php

 

<?php
@mysql_connect("localhost","root","sua senha");
@mysql_select_db("seu banco");
$email = mysql_real_escape_string(strip_tags($_POST['email']));
$query = mysql_query("select * from `t_user` where `email` = '$email'");
if(mysql_num_rows($query) == 1)
{
   echo 'Email em uso';
   exit();
}else{
   echo 'Email Pode Ser Usado';
   exit();
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda amigo. Porque voce usou Ajax?

Coloquem como RESOLVIDO.

 

E mudando um pouco o título do tópico. Eu tenho uma Expressão Regular para validar e-mails, mas quando coloca algum e-mail ".br", ele não cadastra e fala que o e-mail está incorreto.

 

Você tem alguma validação que realmente valida o campo E-mail, mesmo para aqueles por exemplo: .com, .br, .net, .org, etc?

Preciso muito disso, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta a Expresão regular aqui .. Usei o ajax pra enviar as requisiçoes a cada tecla que o cara digitar .. :lol:

você pode trocar o keyup , por blur , ou seja , quando o cara for pro cambo de baixo (ou de cima) perder o focus .. ele envia a requisição ..

 

valide o email diretamente no php assim ..

 

   function mail_validate($email)
   {
    if (preg_match('^[a-z0-9_.-]+@[a-z0-9]+\.[a-z0-9]{1,5}(\.[a-z0-9]{1,5})?$^', $email))
    {
           return true;
    }else{
          return false;
         }
   }

$email = 'vital_andrey@hotmail.com';

if (mail_validate($email)) {
   echo 'Email válido';
} else {
   echo 'Email inválido';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas eu estou com uma dúvida aqui:

 

$email = 'vital_andrey@hotmail.com';

if (mail_validate($email)) {
   echo 'Email válido';
} else {
   echo 'Email inválido';
}

 

Beleza, mas e se o e-mail do camarada for ".com.br"?

 

Minha validação está assim (bem xumbrega) e tirei o ER que estava dando problema:

 

/*********************************
* SCRIPT QUE VALIDA O FORMULÁRIO *
**********************************/
if(empty($nome)){
          redirecionaErro('O campo <strong>nome</strong> deve ser preenchido');
       }

       else if(empty($senha)){
          redirecionaErro('O campo <strong>senha</strong> deve ser preenchido');
       }

       else if(var_dump(filter_var($email, FILTER_VALIDATE_EMAIL))){
           redirecionaErro('O campo <strong>e-mail</strong> deve ser preenchido');
       }

       else if(empty($curso)){
           redirecionaErro('O campo <strong>curso</strong> deve ser preenchido');
      }

 

Eu to querendo colocar uma ER no campo nome e curso apenas para String (ou seja, nao quero permitir números). E o campo e-mail, eu peguei no site php.net, mas não está funcionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha como está o o código todo:

 

cadastra.php

<?php

//Funcões de redirecionamento da página com mensagens de Erro e Sucesso
function redirecionaErro($msg){
	echo '<meta http-equiv="refresh" content="0; url=../cadastro.php?msg='.$msg.'">';
	exit;
}

function redirecionaSucesso($msg){
	echo '<meta http-equiv="refresh" content="0; url=../logar.php?msg='.$msg.'">';
	exit;
}

// Incluindo a conexão com o banco
include "conexao.php";


//Recupera os valores digitados do formulario
$nome  = $_POST['nome'];
$senha = $_POST['senha'];
$email = $_POST['email'];
$curso = $_POST['curso'];


/*********************************
* SCRIPT QUE VALIDA O FORMULÁRIO *
**********************************/
function validaFormulario($nome, $senha, $email, $curso){

	$email = "nome@dominio.com";

	if(empty($nome)){
        redirecionaErro('O campo <strong>nome</strong> deve ser preenchido');
    }

    if(empty($senha)){
       redirecionaErro('O campo <strong>senha</strong> deve ser preenchido');
    }

    if(preg_match('^[a-z0-9_.-]+@[a-z0-9]+\.[a-z0-9]{1,5}(\.[a-z0-9]{1,5})?$^', $email)){
    	return true;
    }
    else{
		return false;
	}

    if(validaFormulario($email)){
		redirecionaErro('O campo <strong>e-mail</strong> deve ser preenchido');
	}

    if(empty($curso)){
        redirecionaErro('O campo <strong>curso</strong> deve ser preenchido');
    }
}

/****************************************************************
* FAZ A CONSULTA E VERIFICA SE OS DADOS DIGITADOS JÁ EXISTEM ****
****************************************************************/

	$result = mysql_query("SELECT * FROM jogador WHERE nome='".$nome."'");
       if(mysql_num_rows($result) > 0){
       redirecionaErro('<strong>Nome</strong> digitado já está cadastrado!');
       }

       $result = mysql_query("SELECT * FROM jogador WHERE email='".$email."'");
       if(mysql_num_rows($result) > 0){
       redirecionaErro('<strong>E-mail</strong> digitado já está cadastrado!');
       }


	/******************************
	* INSERE OS DADOS NO BANCO ****
	******************************/
	$query = mysql_query("INSERT INTO jogador (nome, senha, email, curso) VALUES ('".$nome."','".$senha."','".$email."','".$curso."')") or die("Erro ao cadastrar usuário: " .mysql_error());

	if($query){
		redirecionaSucesso('Cadastro efetuado com sucesso');
	}

//Fecha a conexão com o banco de dados	
mysql_close($conexao);

?>

 

Me ajuda a colocar a validação do formulário nesse código, porque eu não to conseguindo organizar as coisas, entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim ..

      function validaFormulario($nome, $senha, $email, $curso){
          if(empty($nome)){
               redirecionaErro('O campo <strong>nome</strong> deve ser preenchido');
           }

           if(empty($senha)){
              redirecionaErro('O campo <strong>senha</strong> deve ser preenchido');
           }
           if(!preg_match('^[a-z0-9_.-]+@[a-z0-9]+\.[a-z0-9]{1,5}(\.[a-z0-9]{1,5})?$^', $email)){
              redirecionaErro('Email Invalido');
           }

           if(validaFormulario($email)){
             redirecionaErro('O campo <strong>e-mail</strong> deve ser preenchido');
           }

           if(empty($curso)){
               redirecionaErro('O campo <strong>curso</strong> deve ser preenchido');
           }
       }

Dica: eu faria cada funçao de validação separadamente ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu vou fazer uma função separadamente. Modifiquei, tá "bom" assim:

 

<?php

// Incluindo a conexão com o banco
include "conexao.php";

//Funcões de redirecionamento da página com mensagens de Erro e Sucesso
function redirecionaErro($msg){
	echo '<meta http-equiv="refresh" content="1; url=../cadastro.php?msg='.$msg.'">';
	exit;
}

function redirecionaSucesso($msg){
	echo '<meta http-equiv="refresh" content="1; url=../logar.php?msg='.$msg.'">';
	exit;
}


function validaFormulario($nome, $senha, $email, $curso){

//Recupera os valores digitados do formulario
$nome  = $_POST['nome'];
$login = $_POST['login'];
$senha = $_POST['senha'];
$email = $_POST['email'];
$curso = $_POST['curso'];

if(empty($nome)){
    redirecionaErro('O campo <strong>nome</strong> deve ser preenchido');
}

if(empty($login)){
    redirecionaErro('O campo <strong>login</strong> deve ser preenchido');
}

if(empty($senha)){
   redirecionaErro('O campo <strong>senha</strong> deve ser preenchido');
}
if(!preg_match('^[a-z0-9_.-]+@[a-z0-9]+\.[a-z0-9]{1,5}(\.[a-z0-9]{1,5})?$^', $email)){
   redirecionaErro('Email Invalido');
}

if(validaFormulario($email)){
  redirecionaErro('O campo <strong>e-mail</strong> deve ser preenchido');
}

if(empty($curso)){
    redirecionaErro('O campo <strong>curso</strong> deve ser preenchido');
}
}

function insereDados(){

//Recupera os valores digitados do formulario
$nome  = $_POST['nome'];
$login = $_POST['login'];
$senha = $_POST['senha'];
$email = $_POST['email'];
$curso = $_POST['curso'];


/****************************************************************
* FAZ A CONSULTA E VERIFICA SE OS DADOS DIGITADOS JÁ EXISTEM ****
****************************************************************/

$result = mysql_query("SELECT * FROM jogador WHERE nome='".$nome."'");
       if(mysql_num_rows($result) > 0){
       redirecionaErro('<strong>Nome</strong> digitado já está cadastrado!');
       }

       $result = mysql_query("SELECT * FROM jogador WHERE login='".$login."'");
       if(mysql_num_rows($result) > 0){
       redirecionaErro('<strong>E-mail</strong> digitado já está cadastrado!');
       }

       $result = mysql_query("SELECT * FROM jogador WHERE email='".$email."'");
       if(mysql_num_rows($result) > 0){
       redirecionaErro('<strong>E-mail</strong> digitado já está cadastrado!');
       }


	/******************************
	* INSERE OS DADOS NO BANCO ****
	******************************/
	$query = mysql_query("INSERT INTO jogador(nome, login, senha, email, curso) 
	VALUES('".$nome."','".$login."','".$senha."','".$email."','".$curso."')") or die("Erro ao cadastrar usuário: " .mysql_error());

	if($query){
		redirecionaSucesso('Cadastro efetuado com sucesso');
	}

//Fecha a conexão com o banco de dados	
mysql_close($conexao);

}
?>

 

Cada função de validação separadamente, mas por que? Separei cada coisa por função, mas quando eu cadastro, a página parada e não executa. Como resolver isso? E veja na função insereDados() que eu estou fazendo 3 consultas, do mesmo tipo. E eu acho isso bem desnecessário. Como que eu faço pra colocar $email, $nome e $login em apenas uma consulta? Tipo assim:

 

$result = mysql_query("SELECT * FROM jogador WHERE nome='".$nome."', '".$login."','".$email."'");
     if(mysql_num_rows($result) > 0){
    redirecionaErro('<strong>Nome, Login e E-mail</strong> digitado já está cadastrado!');
       }

 

Mas, eu já tentei desta forma e dá erro. Amigo, desculpa tanta pergunta, mas como estou aprendendo, eu necessito de ajuda. Muito oobrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei algo bem legal

http://forum.imasters.com.br/topic/164116-chamar-funcao-php-via-javascript/

 

Pronto, resolvido.

Muito obrigado pela ajuda cara. O seu código ER de e-mail está funcionando perfeitamente. Fico muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o que seria a função nativa, e por que não gosta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque nen sempre elas funcionam da maneira que você deseja , a funçao de validar email do php so valida o @ no string .. o resto ele deve constar como invalido ou não validar no caso o '.com' .. nativa = que e propia do php ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah entendi. Valeu cara, abraço.

 

=)

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.