Jump to content
Fórum Script Brasil
  • 0

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


blx32
 Share

Question

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: [email protected]
*/

// 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???

Edited by blx32
Complementado.
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 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.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...