Jump to content
Fórum Script Brasil
  • 0

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


Lucas Moreira

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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

Edited by MTavares
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...