Form recording the same data

1

Good afternoon guys. I have a problem that I can not find a solution for.

I made a form to save the registrations of a web site, but many times the same registration is saved several times (see print)

Ivalidatetheentireformsoasnottoriskgivingnone,butIcannotsolvethisproblem,belowisthecodetoregister

UPDATE---

Belowisthecodethatisalmostcomplete,Ijustremovedthecodefromtheformandpartofthecodethatmountsthebodyoftheemailsent,soitdoesnotgettoobig.

classcompra_onlineControllerextendsbaseController{publicfunctionindex(){$args=func_get_args();if(isset($args[0])&&$args[0]=='nobanner')$vars['arg']=$args[0];else$vars['arg']='banner';if(defined('CANONICAL'))$vars['canonical']=CANONICAL;$this->visitCheck();newLoad('index',$vars);}publicfunctionassinar(){$args=func_get_args();if(isset($args[0]))$vars['arg']=$args[0];$package=newPackageModel();$package->selectById((int)$vars['arg']);$vars['text']=$package->getHtml().'//aquificoocódigodoformulario/////fimformulario';if(isset($_POST['txtNome'])&&$_POST['txtNome']!=''&&isset($_POST['txtTel1'])&&$_POST['txtTel1']!=''&&isset($_POST['txtEmail'])&&$_POST['txtEmail']!=''){require_once(SITE_PATH.'inc/phpmailer/class.phpmailer.php');//codigoquemontacorpoemail$message_html.='<b>Nome:</b>'.$_POST['txtNome'].'<br>';$message_html.='<b>Sexo:</b>'.$_POST['txtSexo'].'<br>';$message_html.='<b>CPF:</b>'.$_POST['txtCpf'].'<br>';$message_html.='<b>RG:</b>'.$_POST['txtRg'].'<br>';..../*---------------------------------*///codigoquemontacorpoemail$message_txt.='<b>Nome:</b>'.$_POST['txtNome'].'<br>';$message_txt.='<b>Sexo:</b>'.$_POST['txtSexo'].'<br>';$message_txt.='<b>CPF:</b>'.$_POST['txtCpf'].'<br>';$message_txt.='<b>RG:</b>'.$_POST['txtRg'].'<br>';$message_txt.='Porfavor,nãorespondaestee-mail.'."\r\n";

            .......

            $mail = new PHPMailer();

            try {
                $mail->addAddress(EMAIL, 'Contato');
                $mail->Subject = $subject;
                $mail->msgHTML($message_html);
                $mail->AltBody = $message_txt;
                $mail->send();
                if($mail->send()){
                    $vars['script'] = "window.location.href='".SITE_HTTP.PREF_HOST.SELF_PATH."controllers/obrigado_2.html'; "; //Nessa pagina , obrigado_2.html , tem os códigos de conversão do GOOGLE ADWORDS  , Bing Ads e Facebook Ads , nela também é feito o redirecionamento.

                }

                $this->visitCheck(true);
            } catch (phpmailerException $e) {
                echo $e->errorMessage(); //Pretty error messages from PHPMailer
            } catch (Exception $e) {
                echo $e->getMessage(); //Boring error messages from anything else!
            }
        }
        else {

            $this->visitCheck();
        }

        if (defined('CANONICAL'))

            $vars['canonical'] = CANONICAL;

        new Load('compra_online', $vars);
    }


function inserir_contato($pdo,$corrige){

    try {

        $arr = array();

        $sql = 'INSERT INTO contatos(telefone)VALUES(:telefone)';
        $stmt = $pdo->prepare($sql);
        $dados = array(

                    ':telefone' => str_replace($corrige, "", $_POST['txtTel1'])
                );

        $stmt-> execute($dados);
        $linha = $stmt->rowCount();
            if($linha == 1){

                return $stmt = $pdo->lastInsertId();
                $pdo = null;

            }else{

               return 0;
            }



    } catch(Exception $e) {

        print 'Erro ao inserir os dados no banco: ' . $e->getMessage();

    }

}

function inserir_contato_nome($pdo,$id_contato){

    try {

            $arr = array();  
            $sql = 'INSERT INTO contato_dados_nome(id_contato,nome)VALUES(:id_contato,:nome)';
            $stmt = $pdo->prepare($sql);
            $dados = array(

                ':id_contato'=> $id_contato,
                ':nome' => $_POST['txtNome']
            );

            $stmt-> execute($dados);
            $linha = $stmt->rowCount();
                if($linha == 1){

                    $arr['retorno'] = 1;
                    $pdo = null;

                }else{

                    $arr['retorno'] = 0;
                }



        } catch(Exception $e) {

            print 'Erro ao inserir os dados no banco: ' . $e->getMessage();

        }

        return $arr;
}

function inserir_contato_dados($pdo,$id_contato,$corrige){

    try {

            $arr = array();

            $data = explode("/",$_POST['txtData_nasc']);

            $data_nasc = $data[2]."-".$data[1]."-".$data[0];


            $sql = 'INSERT INTO contato_dados_principal(id_contato,tipo_contato,data_nascimento,sexo,telefone_2)
                                VALUES
                                (:id_contato,:tipo,:data,:sexo,:telefone_2)';
            $stmt = $pdo->prepare($sql);
            $dados = array(
                ':id_contato' => $id_contato,
                ':tipo' => 'fisica',
                ':data'=> $data_nasc,
                ':sexo' => $_POST['txtSexo'],
                ':telefone_2' => str_replace($corrige, "", $_POST['txtTel2'])
            );

            $stmt-> execute($dados);
            $linha = $stmt->rowCount();
                if($linha == 1){

                    $arr['retorno'] = 1;
                    $pdo = null;

                }else{
                    $arr['retorno'] = 0;
                }


        } catch(Exception $e) {

            print 'Erro ao inserir os dados no banco: ' . $e->getMessage();

        }

        return $arr;
}


function inserir_contato_pessoa_fisica($pdo,$id_contato,$corrige){

    try {

            $arr = array();

            $sql = 'INSERT INTO contato_pessoa_fisica(id_contato,rg,cpf)VALUES(:id_contato,:rg,:cpf)';
            $stmt = $pdo->prepare($sql);
            $dados = array(
                ':id_contato' => $id_contato,
                ':rg' => str_replace($corrige, "", $_POST['txtRg']),
                ':cpf' => str_replace($corrige, "", $_POST['txtCpf'])
            );

            $stmt-> execute($dados);
            $linha = $stmt->rowCount();
                if($linha == 1){

                    $arr['retorno'] = 1;
                    $pdo = null;

                }else{

                    $arr['retorno'] = 0;
                }


        } catch(Exception $e) {

            print 'Erro ao inserir os dados no banco: ' . $e->getMessage();

        }

        return $arr;
}

function inserir_contato_endereco($pdo,$id_contato,$corrige){

    try {

            $arr = array();

            $sql = 'INSERT INTO contato_endereco(id_contato,tipo,cep,rua,numero,bairro,cidade,uf)
                                VALUES  (:id_contato,:tipo,:cep,:rua,:num,:bairro,:cidade,:uf)';

            $stmt = $pdo->prepare($sql);
            $dados = array(

                    ':id_contato' => $id_contato,
                    ':tipo' => $_POST['txtTipo_endereco'],
                    ':cep' => str_replace($corrige, "", $_POST['txtCep']),
                    ':rua' =>$_POST['txtRua'],
                    ':num' => $_POST['txtNumero'] ,
                    ':bairro' => $_POST['txtBairro'],
                    ':cidade' => $_POST['txtCidade'],
                    ':uf' => $_POST['txtEstado']
                );

            $stmt-> execute($dados);
            $linha = $stmt->rowCount();
                if($linha == 1){

                    $arr['retorno'] = 1;
                    $pdo = null;

                }else{
                    $arr['retorno'] = 0;
                }


        } catch(Exception $e) {

            print 'Erro ao inserir os dados no banco: ' . $e->getMessage();

        }

        return $arr;
}


if(isset($_POST['enviar'])){


    $corrigir = array(' ','-','(',')','.');

    $contato = new compra_onlineController();
    $conexao = $contato->fn_conexao();
    $id = $contato->inserir_contato($conexao,$corrigir);
    $contato->inserir_contato_nome($conexao,$id);
    $contato->inserir_contato_dados($conexao,$id,$corrigir);
    $contato->inserir_contato_pessoa_fisica($conexao,$id,$corrigir);
    $contato->inserir_contato_endereco($conexao,$id,$corrigir);
}

EDIT -

Page thank you_2.html

//codigo do adwords
//codigo bing

<body>
    <script>
        alert('Obrigado pelas informações.Qualquer dúvida ligue grátis ou fale conosco através de nosso chat.');
        window.location.href="http://site.com.br";
    </script>

</body>

Why is the insertion several times in the same register? I find it difficult to be the user because it happened several times.

Thank you in advance.

    
asked by anonymous 30.11.2015 / 18:06

2 answers

2

Make sure the user is not giving doubleclick on the button and it is firing several times the same action, I've seen a lot of it.

Make a test, create a script that after the first click disables the button, and see how it behaves.

    
30.11.2015 / 18:17
4

Hi. Change the telefone field to UNIQUE . So you will no longer have duplicate data.

ADD UNIQUE INDEX 'telefone'

Whenever you try to register another cell with the same digits, the query will fail.

Or, make a redirect, so when you register this value, you will not have to resubmit the same form twice.

header("Location: formulário.php");
exit;
    
30.11.2015 / 18:21