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

Formulário em PHP+MySQL, validando com o CPF.


blx32

Pergunta

Meus amigos, estou com uma dúvida cruel. Achei um pedaço aqui outro ali e montei esse script, mas não sei o que há de errado. E também quero compartilhar com a comunidade. Pode ajudar aos outros também.

 

Script:

<?php
/*
@autor: Gabriel Rodrigues de Moura
@email: blx32@srmoura.com.br
*/

// Função que valida o CPF
function validaCPF($cpf)
{    // Verifiva se o número digitado contém todos os digitos
    $cpf = str_pad(ereg_replace('[^0-9]', '', $cpf), 11, '0', STR_PAD_LEFT);
    
    // Verifica se nenhuma das sequências abaixo foi digitada, caso seja, retorna falso
    if (strlen($cpf) != 11 || $cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999')
    {
    return false;
    }
    else
    {   // Calcula os números para verificar se o CPF é verdadeiro
        for ($t = 9; $t < 11; $t++) {
            for ($d = 0, $c = 0; $c < $t; $c++) {
                $d += $cpf{$c} * (($t + 1) - $c);
            }

            $d = ((10 * $d) % 11) % 10;

            if ($cpf{$c} != $d) {
                return false;
            }
        }

        return true;
    }
}
// Verifica se o botão de validação foi acionado
if(isset($_POST['btvalidar']))
    {// Adiciona o numero enviado na variavel $cpf_enviado, poderia ser outro nome, e executa a função acima
    $cpf_enviado = validaCPF($_POST['cpf']);
    // Verifica a resposta da função e exibe na tela
    if($cpf_enviado == true)
        
// Script para enviar ao BD se CPF True.

$host= 'localhost';
 $bd= 'pedidos';
 $senhabd= 'hackme';
   $userbd = 'root' ;
    // RECEBENDO OS DADOS PREENCHIDOS DO FORMULÁRIO !
 $nome    = $_POST ["nome"];    //atribuição do campo "nome" vindo do formulário para variavel     
$email    = $_POST ["email"];    //atribuição do campo "email" vindo do formulário para variavel 
$cpf= $_POST ["cpf"];    //atribuição do campo "cpf" vindo do formulário para variavel 
$pedido    = $_POST ["pedido"];

$tel= $_POST ["tel"]
    //atribuição do campo "telefone" vindo do formulário para variavel 
$cep    = $_POST ["cep"];    


//Gravando no banco de dados !   
//conectando com o localhost - mysql 
$conexao = mysql_connect($host,$bd, $senhabd); if (!$conexao)     die ("Erro de conexão com localhost, o seguinte erro ocorreu -> ".mysql_error());
 //conectando com a tabela do banco de dados $banco = mysql_select_db($bd,$conexao); if (!$banco)     die ("Erro de conexão com banco de dados, o seguinte erro ocorreu -> ".mysql_error());
  
$query = "INSERT INTO `pedidos` ( `nome` , `email` , `cpf` , `pedido` , `telefone` , `cep` , `id` ) VALUES ('$nome', '$email', '$cpf', '$pedido', '$tel', '$cep', '')";   mysql_query($query,$conexao);  
 echo "Seu pedido foi realizado com sucesso!<br> Entraremos em contato.";

    elseif($cpf_enviado == false)
        echo "Por favor, insira um CPF valido.";
    }
?>

 

E uma outra página em HTML enviando os dados para essa:

 

<html>
<head>
</head>
<body>
<form action="valida_cpf.php" method="post" name="cpf" id="cpf">
  CPF: 
  <label>
  <input name="cpf" type="text" id="cpf" size="11" maxlength="11">
  </label><br>
Nome:
 <label>
  <input name="nome" type="text" id="nome" size="" maxlength="">
  </label><br>
Email:
<label>
  <input name="email" type="text" id="email" size="" maxlength="">
  </label><br>
Pedido:
<label>
  <input name="pedido" type="text" id="pedido" size="" maxlength="">
  </label>
<br>
Cep:
<label>
  <input name="cep" type="text" id="cep" size="11" maxlength="11">
  </label>

  <label>
  <input name="btvalidar" type="submit" id="btvalidar" value="  Enviar  ">
  </label>
</form>
</body>
</html>

 

Como posso fazer funcionar???

Editado por blx32
Complementado.
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá! Observei seu script e segue algumas percepções:

1) O seu form tem o mesmo name e id do seu primeiro input. Corrija.

2) Campos de entrada de número podem ser do type='number'. Veja em: http://www.w3schools.com/tags/att_input_type.asp

3) Não faz sentido usar input dentro de label. Compreenda a tag label em: http://www.w3schools.com/tags/tag_label.asp

4) Falta um ponto e vírgula na linha: $tel = $_POST["tel"]

5) Esse elseif não sabe de que else ele é: elseif($cpf_enviado == false)

6) Não use mais a função ereg_replace, pois foi declarada obsoleta desde 2009. E está completamente removida do php7:

ereg_replace.JPG.f3208d381c6345749ca9c28

7) No seu formulário não existe nenhum input com name='tel', então, não faz sentido ter: $tel = $_POST["tel"]

8) As funções mysql_* estão obsoletas e fortemente não recomendadas desde 2013 e foi completamente removida no php7:

mysql_.thumb.jpg.6e341f2068d2753158bc1dc

9) Segue sugestão de solução:

<?php
// trecho de script para conexão com o banco de dados:
// definição de variáveis para conexão com o banco de dados:
$host = 'localhost';  // endereço do banco de dados
$user = 'root';   // usuário do banco de dados
$senha = '';   // senha do banco de dados
$bd = 'pedidos';      // nome do banco de dados
//
// estabelecer conexão:
$sqli = new mysqli($host, $user, $senha);

// verificar se conectou de boas:
if ($sqli->connect_error) {
    // se houver alguma falha, exibe mensagem:
    die('<p class="error">Falha na conexão: ' . $sqli->connect_error . '</p>');
}

// selecionar/abrir o banco de dados para trabalhar
if (!$sqli->select_db($bd)) {
    // se o banco de dados não for encontrado
    die("<p class='error'>O banco de dados: <b>$bd</b>, não foi encontrado, chefe!</p>");
}

// fim do trecho de script para conexão com o banco de dados
// Função que valida o CPF
function validaCPF($cpf) {    // Verifiva se o número digitado contém todos os digitos
    $cpf = str_pad(preg_replace('/^[0-9]/', '', $cpf), 11, '0', STR_PAD_LEFT);

    // Verifica se nenhuma das sequências abaixo foi digitada, caso seja, retorna falso
    if (strlen($cpf) != 11 || $cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999') {
        return false;
    } else {   // Calcula os números para verificar se o CPF é verdadeiro
        for ($t = 9; $t < 11; $t++) {
            for ($d = 0, $c = 0; $c < $t; $c++) {
                $d += $cpf{$c} * (($t + 1) - $c);
            }
            $d = ((10 * $d) % 11) % 10;
            if ($cpf{$c} != $d) {
                return false;
            }
        }
        return true;
    }
}

// Verifica se o botão de validação foi acionado
if (isset($_POST['cpf'])) {// Adiciona o numero enviado na variavel $cpf_enviado, poderia ser outro nome, e executa a função acima
    // se o cpf for validado
    if (validaCPF($_POST['cpf'])) {
        // Passando OS DADOS PREENCHIDOS nO FORMULÁRIO para outras variáveis!
        $nome = $_POST["nome"];    //atribuição do campo "nome" vindo do formulário para variavel     
        $email = $_POST["email"];    //atribuição do campo "email" vindo do formulário para variavel
        $cpf = $_POST["cpf"];    //atribuição do campo "cpf" vindo do formulário para variavel
        $pedido = $_POST["pedido"];
        $cep = $_POST["cep"];

        // define a query para inserção:
        $query = "INSERT INTO pedidos (nome, email, cpf, pedido, cep) VALUES ('$nome', '$email', '$cpf', '$pedido', '$cep')";

        // executar a query de inserção:
        $sqli->query($query);

        // verificar se houve alguma falha na execução da query de inserção:
        if ($sqli->error) {
            echo '<p class="error">Falha durante a inserção, chefe!<br> ' . $sqli->error . '</p>';
        } else {
            echo '<p class="ok">Seu pedido foi realizado com sucesso!<br> Entraremos em contato.</p>';
        }
    } else { // se o cpf não for validado:
        echo "<p class='error'>Por favor, insira um CPF valido.</p>";
    }
}
?>

<html>
    <head>
    </head>
    <body>
        <form method="post">
            <label>CPF:</label>
            <input name="cpf" type="text" id="cpf" maxlength="11" autofocus required><br>

            <label>Nome:</label>
            <input name="nome" type="text" id="nome"><br>

            <label>Email:</label>
            <input name="email" type="text" id="email"><br>

            <label>Pedido:</label>
            <input name="pedido" type="text" id="pedido"><br>

            <label>Cep:</label>
            <input name="cep" type="text" id="cep"><br>

            <input type="submit" value="  Enviar  ">
        </form>
    </body>
</html>

 

 

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...