Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com um script de Validação e envio de Formulário


Lucas Moreira

Pergunta

Estou tentando validar um formulário e depois gravar no banco de dados, mas ele valida somente até um ponto do formulário, que no caso seria "$em"(e-mail), após isso ele nem indica de está certo ou errado o que foi digitado.

Por fim, quando clico em enviar não aparece nada na tela, quando deveria aparecer "Cadastro efetuado com sucesso".

Veja o Script:

<?
    
    $nm            =$_POST['nm'];
    $snm        =$_POST['snm'];
    $dnt        =$_POST['dnt'];
    $sx            =$_POST['sx'];
    $em            =$_POST['em'];
    $cem        =$_POST['cem'];
    $ncn        =$_POST['ncn'];
    $pass        =$_POST['pass'];
    $cpass        =$_POST['cpass'];
    
    $em=str_replace(" ","",$em);
    $em=str_replace("/","",$em);
    $em=str_replace("@.","@",$em);
    $em=str_replace(".@","@",$em);
    $em=str_replace(",",".",$em);
    $em=str_replace(";",".",$em);
    
    $erro=0;
    
    if(empty($nm)){
        $erro=1;
        $msg="Informe o seu nome";
        }
        elseif(empty($snm)){
            $erro=1;
            $msg="Informe o seu sobrenome";
            }
        elseif(strlen($em)<8 || substr_count($em, "@") !=1 || substr_count($em, ".") ==0){
            $erro=1;
            $msg="E-mail não foi digitado corretamente";
            }
        elseif(strlen($ncn)<5 || strlen($ncn)>15){
            $erro=1;
            $msg="O apelido deve conter entre 5 e 15 caracteres";
            }
        elseif(strstr(pass, ' ') !=false){
            $erro=1;
            $msg="A senha não pode conter espaços em branco";
            }
        elseif($pass != $cpass){
            $erro=1;
            $msg="As senhas digitadas não conferem";
            }
    if($erro){
        echo"<div id='menuinfalert'>$msg. Clique <a href='java script:history.back()'>>AQUI<</a> para voltar.</div>";
        }
        else{
            include("enter_db.php");
            
            $query="intert into cadu values (null,'$nm','$snm','$dnt','$sx','$em','$cem','$ncn','$pass','$cpass');";
            
            $grava=mysql_query($query);
            $num_linhas=mysql_affected_rows() or die ("Não foi possivel concluir o cadastro");
            if($num_linhas == 1){
            
            echo"Cadastro efetuado com sucesso";
            }
            }
    ?>

Gostaria muito se alguém me ajudasse =)

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Há um erro na parte

elseif(strstr(pass, ' ') !=false){

$erro=1;

$msg="A senha não pode conter espaços em branco";

}

A variavel pass não está escrita como variavel deveria ser $pass e não somente pass o que torna um nome "comum".

Fiz este teste e ele me mostrou os dados como o esperado, validou e mostrou sem problemas.

<?php

$nm ='JIMMY';

$snm =' jimmy';

$em ='manoelps@live.com';

$ncn ='Jimmy';

$pass ='123456';

$cpass ='123456';

$em=str_replace(" ","",$em);

$em=str_replace("/","",$em);

$em=str_replace("@.","@",$em);

$em=str_replace(".@","@",$em);

$em=str_replace(",",".",$em);

$em=str_replace(";",".",$em);

$erro=0;

if(empty($nm)){

$erro=1;

$msg="Informe o seu nome";

}

elseif(empty($snm)){

$erro=1;

$msg="Informe o seu sobrenome";

}

elseif(strlen($em)<8 || substr_count($em, "@") !=1 || substr_count($em, ".") ==0){

$erro=1;

$msg="E-mail não foi digitado corretamente";

}

elseif(strlen($ncn)<5 || strlen($ncn)>15){

$erro=1;

$msg="O apelido deve conter entre 5 e 15 caracteres";

}

elseif(strstr($pass, ' ') !=false){

$erro=1;

$msg="A senha não pode conter espaços em branco";

}

elseif($pass != $cpass){

$erro=1;

$msg="As senhas digitadas não conferem";

}

if($erro){

echo"<div id='menuinfalert'>$msg. Clique <a href='java script:history.back()'>>AQUI<</a> para voltar.</div>";

}

else{

if (!empty($msg))

{

echo $msg, "<p>";

}

if ($erro!=0)

{

echo $erro=0;

}

echo "$nm ---- $snm ---- $em ---- $ncn ---- $pass ---- $cpass <p>";

}

?>

Dica:

-> Declare variaveis com nomes significativos isso irá facilitar futuras manutençoes no sistema e facilitar na hora que precisra solicitar ajuda.

-> Sempre mostre os dados antes de tentar inseri-los na base de dados para verificar se eles realmente estão sendo mostrados.

-> O ideal é utilizar <?php ao invés de este já está desatualizado faz tempo <?

-> Depende de gosto, mas eu prefiro fazer o insert desta maneira -

/*INSERI OS DADOS NO BANCO DE DADOS*/

$inserir = ("insert into <nome_tabela> (campo1, campo2) values ('$variavel1', '$variavel2')");

/*FIM INSERI OS DADOS NO BANCO DE DADOS */

/*VERIFICA SE REALMENTE FOI INSERIDO*/

$verifica = mysql_query ($inserir)or die ("<script>{alert('Houve um erro ao salvar os dados, tente novamente!!')} </script>");

/*FIM VERIFICA SE REALMENTE FOI INSERIDO*/

isso me permite colocar o valor da variavel independente da ordem dos campos que estejam na base de dados e ainda facilita está vendo o que estou colocando dentro de cada campo da tabela.

É isso ai espero que tenha ajudado, qualquer duvida estamos ai.....

Link para o comentário
Compartilhar em outros sites

  • 0

Uma outra dica é colocar por ex o TRIM() nas suas variáveis. Dessa forma evita com que a pessoa aperte o somente o espaço para enviar mensagens. Caso você esteja usando o servidor Linux, uma solução prática para validação de e-mails segue abaixo:

list($usuario, $dominio) = explode("@", $EmailCliente); 
       $resultado = checkdnsrr($dominio, 'MX');

Esse comando verifica se o servidor existe ou não. Depois dentro de uma condição você verificaria se é TRUE ou FALSE.

abs

Editado por MTavares
Link para o comentário
Compartilhar em outros sites

  • 0

Para uma validação mais consistente utilze expressões regulares.

Um ótimo exemplo de validação do framework Kohana:

public static function email($email, $strict = FALSE)
{
    if (UTF8::strlen($email) > 254)
    {
        return FALSE;
    }

    if ($strict === TRUE)
    {
        $qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
        $dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
        $atom  = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
        $pair  = '\\x5c[\\x00-\\x7f]';

        $domain_literal = "\\x5b($dtext|$pair)*\\x5d";
        $quoted_string  = "\\x22($qtext|$pair)*\\x22";
        $sub_domain     = "($atom|$domain_literal)";
        $word           = "($atom|$quoted_string)";
        $domain         = "$sub_domain(\\x2e$sub_domain)*";
        $local_part     = "$word(\\x2e$word)*";

        $expression     = "/^$local_part\\x40$domain$/D";
    }
    else
    {
        $expression = '/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})$/iD';
    }

    return (bool) preg_match($expression, (string) $email);
}

Um abraço.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...