Ir ao conteúdo

Posts recomendados

Postado

     Bom dia, estou desenvolvendo um formulário de contato, ele esta funcionando perfeitamente, porém, eu quero fazer a validação dos campos em PHP e não sei como fazer.

 

     Eu pensei em fazer as validações e apresentar abaixo do campo do formulário a informação  * Este campo é obrigatório! se o campo estiver vazio, esta com uma mascara que só permite números nos campos de telefone com javascript, eu também quero fazer a mesma função com o PHP, pois, se a Pessoa desativar o javascript o formulário continuará a funcionar perfeitamente acredito eu, rsrsrsrsrs

<form method="post" action="" id="form_contact" name="cadastro" method="post" enctype="multipart/form-data">
<?php /*apenas dispara o envio da mensagem caso houver/existir $_POST['enviar']*/
if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){

$url = 'https://www.google.com/recaptcha/api/siteverify';
$secret = "Sua senha Secreta";

$response = file_get_contents($url."?secret=".$secret."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']);
$data = json_decode($response);
	
if(isset($data -> success) AND $data->success == true){//inicia a verificação do Google recaptcha

//Se for validado ele executa o envio do formulário
$To = 'e-mail1';
$cc = 'e-mail2';
$bcc = 'e-mail3';

$nomeTo = utf8_decode('Contato via Site');//Aparecerá quando você receber os e-mails
$usuario = '[email protected]'; 
$senha = 'sua senha'; 

/*abaixo as veriaveis principais, que devem conter em seu formulario*/ 
$nomeRemetente = utf8_decode($_POST['nome']);//Recupera o campo nome do formulário
$emailRemetente = utf8_decode($_POST['email']);//Recupera o campo email do formulário
$tel_fixo = utf8_decode($_POST['fone-fixo']);//Recupera o campo telefone fixo do formulário
$tel_cel = utf8_decode($_POST['fone-cel']);//Recupera o campo telefone celular do formulário
$assunto = utf8_decode($_POST['assunto']);//Recupera o campo Assunto do formulário

$mensagem = wordwrap ($mensagem, 78, "<br />", true);
$mensagem .= "<strong>Nome: </strong>".$nomeRemetente;
$mensagem .= "<br>  <strong>Email: </strong>".$emailRemetente;
$mensagem .= "<br>  <strong>Telefone Fixo: </strong>".$tel_fixo;
$mensagem .= "<br>  <strong>Telefone Celular: </strong>".$tel_cel;
$mensagem .= "<br>  <strong>Assunto: </strong>".$assunto;
$mensagem .= "<br>  <strong>Mensagem: </strong>".utf8_decode($_POST['mensagem']);//Recupera o campo Mensagem do formulário

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; utf-8' . "\r\n";
$headers .= 'SetFrom: '.$nome.' <'.$email.'>' . "\r\n";

/*********************************** A PARTIR DAQUI NAO ALTERAR ************************************/ 

require_once("phpmailer/PHPMailerAutoload.php");//Recupera o arquivo principal da classe phpMailer

$Subject = $assunto;
$Message = $mensagem;
$Host = 'mail.'.substr(strstr($usuario, '@'), 1);
$Username = $usuario;
$Password = $senha;
$Port = "587"; //Portande envio

$mail = new PHPMailer();
$body = $Message;
$mail-> WordWrap = 78;
$mail-> IsSMTP(); // telling the class to use SMTP
$mail-> Host = $Host; // SMTP server 

$mail-> SMTPDebug = 0; // enables SMTP debug information (for testing) 
// 1 = errors and messages 
// 2 = messages only 

$mail-> SMTPAuth = true; // enable SMTP authentication 
$mail-> Port = $Port; // set the SMTP port for the service server 
$mail-> Username = $Username; // account username 
$mail-> Password = $Password; // account password 
$mail-> SetFrom($usuario, $nomeTo); 
$mail-> Subject = $Subject;
$mail-> MsgHTML($body);								

$mail-> addAddress($To, utf8_decode('Nome que sera atribuido ao e-mail1'));
$mail-> addCC($cc, utf8_decode('Acrescentar o nome do email 1'));
$mail-> addBCC($bcc, utf8_decode('Acrescentar o nome do email 2'));
$mail-> addReplyTo($cc, utf8_decode('Acrescentar o nome do email 3'));

if($mail-> Send()){//Apresenta a mensagem de sucesso no envio substituindo o cabeçalho padrão do formulário e redireciona o usuário para index do site em 3 segundos
echo '<div class="success" role="alert">
<strong> Recebemos a sua mensagem</strong>, logo entraremos em contato!
<i class="fa fa-check f-r" aria-hidden="true"></i>
</div>';
echo '<script language="javascript">window.setTimeout("location.href=\'index.php\'",3000)</script>';

}elseif (!$mail-> Send()) {//Se não enviar a mensagem apresenta essa mensagem de erro substituindo o cabeçalho padrão do formulário e redireciona para index do site ou pra a página que você quiser em 8 segundos
echo '<div class="error" role="alert">
<strong> Mensagem não enviada</strong>, envie um e-mail para
<strong>[email protected]</strong>
<i class="fa fa-times f-r" aria-hidden="true"></i>
</div>';
echo '<script language="javascript">window.setTimeout("location.href=\'index.php\'",8000)</script>';
}

//Termina a validação do google
}else{//Aqui termina a validação do google, se a Pessoa não clicou no formulário vai apresentar essa mensagem de erro que vai substituir o cabelalho padrão do formulário
echo '<div class="error" role="alert">
<strong> Mensagem não enviada, clique no botão: Não sou um robô</strong>
<i class="fa fa-times f-r" aria-hidden="true"></i>
</div>';
echo '<script language="javascript">window.setTimeout("location.href=history.back();",5000)</script>';//Apresenta o erro e o usuário é redirecionado para página anterior em 5 segundos e guarda os dados que já foram digitados 
}

//Termina o envio do e-mail if isset
}else {//Esta div aparece a todo momento assim que o usuário entra na página ela já aparece, note que é o cabeçalho do meu formulário, ele fica sempre visivel, e as mensagens de erro aparecem aqui também, se houver erro esse cabeçalho é substituido pelo cabeçalho de erro
echo '<div class="padrão text-center" role="alert"><strong>Formulário de contato</strong></div>';
}
?>

<input required type="text" name="nome" placeholder="* Nome"/>
<p>Este campo é obrigatório</p>

<input required type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" placeholder="* Email"/>

<input required type="tel" autocomplete="off" name="fone-fixo" pattern=".{14,14}" maxlength="14" onkeypress="mascara(this,fixo)" placeholder="* Telefone fixo"/>

<input required type="tel" autocomplete="off" name="fone-cel" maxlength="15" onkeypress="mascara(this,telefone)" placeholder="Telefone Celular" />

<input required type="text" name="assunto" placeholder="* Assunto"/>

<textarea required name="mensagem" rows="3" placeholder="* Mensagem"></textarea>

<div class="col-12">
<div class="g-recaptcha" data-theme="light" data-sitekey="sua chave do google" <!-- Já deixa o formulário um pouco menor para se adequar aos celulares pequenos -->
style="transform:scale(0.77);-webkit-transform:scale(0.77);transform-origin:0 0;-webkit-transform-origin:0 0;"></div>
</div>

<input type="hidden" name="acao" value="enviar"/>
<input type="submit" class="btn" name="envia" value="Enviar Contato" />
</form>

 

  • Moderador
Postado

@carecazn

Existem N formas de resolver isso.

 

1)Usar o Noscript  e verificar se o javascript está habilitado ou não. Se estiver você mostra o formulário, se não estiver, você mostra o formulário desabilitado e com uma mensagem "por favor ative seu javascript"

 

2)Verificar com php os campos digitados.

Para verificar se é número no campo  use a função ctype_digit()

Para verificar se o campo é vazio, use o empty()

Postado
4 horas atrás, DiF disse:

@carecazn

Existem N formas de resolver isso.

 

1)Usar o Noscript  e verificar se o javascript está habilitado ou não. Se estiver você mostra o formulário, se não estiver, você mostra o formulário desabilitado e com uma mensagem "por favor ative seu javascript"

 

2)Verificar com php os campos digitados.

Para verificar se é número no campo  use a função ctype_digit()

Para verificar se o campo é vazio, use o empty()

 

Essas funções eu uso diretamente no campo?

Eu tentei usar função preg_match, ela verifica tudo certo, aparece a informação de erro, porém o formulário é enviado, mesmo com os campos vazios, eu não estou sabendo onde colocar a função de forma correta, ou fazer uma outra condição, o problema seria onde fazer essa condição, se eu coloco ela antes da validação do recaptcha ou depois dela, eu criei uma condição antes do recaptcha, e ela parou de funcionar. 

adicionado 2 minutos depois
agora, carecazn disse:

 

Essas funções eu uso diretamente no campo?

Eu tentei usar função preg_match, ela verifica tudo certo, aparece a informação de erro, porém o formulário é enviado, mesmo com os campos vazios, eu não estou sabendo onde colocar a função de forma correta, ou fazer uma outra condição, o problema seria onde fazer essa condição, se eu coloco ela antes da validação do recaptcha ou depois dela, eu criei uma condição antes do recaptcha, e ela parou de funcionar. 

 

Tem como fazer uma função que aplique diretamente no input?

Para que ela funciona independente?

e tem outra coisa, precisa parar o script, pois, ele esta apresentando o erro, porém, ainda envia o formulário.

  • Moderador
Postado

@carecazn Você põe a validação no arquivo php que recebe os dados.

Pode colocar logo abaixo de onde recebe os valores do formulário.

 

Em tempo, vejo que seu código está bastante "sujo" você poderia retirar algumas coisas dali se quiser. 

 

exemplo de validação de campo vazio:

$nome = $_POST["nome"];
$email = $_POST["email"];


if(empty($nome)  OR empty($email)):
   echo "Há um campo que não foi preenchido";
 exit;
endif;

O preg_match() é um validador que analisa a expressão regular pode ser usada para verificar se é numérico ou não.. mas você pode fazer a verificação desta forma também:

$telefone = $_POST["telefone"];


if(!ctype_digit($telefone)):
  echo "O campo de telefone só deve conter números";
exit;
endif;

Ou seja a função ctype_digit()  retorna TRUE se a variável contiver um valor numérico.

Na validação usei a negação.. com  o sinal de ! 

Então em palavras fica:   IF NOT ctype_digit($telefone)....  retorna false, isso quer dizer que a pessoa digitou um caractere não numérico.

 

É interessante você validar por javascript para não permitir a entrada de dados não numéricos!

 

Postado
2 minutos atrás, DiF disse:

@carecazn Você põe a validação no arquivo php que recebe os dados.

Pode colocar logo abaixo de onde recebe os valores do formulário.

 

Em tempo, vejo que seu código está bastante "sujo" você poderia retirar algumas coisas dali se quiser. 

 

exemplo de validação de campo vazio:


$nome = $_POST["nome"];
$email = $_POST["email"];


if(empty($nome)  OR empty($email)):
   echo "Há um campo que não foi preenchido";
 exit;
endif;

O preg_match() é um validador que analisa a expressão regular pode ser usada para verificar se é numérico ou não.. mas você pode fazer a verificação desta forma também:


$telefone = $_POST["telefone"];


if(!ctype_digit($telefone)):
  echo "O campo de telefone só deve conter números";
exit;
endif;

Ou seja a função ctype_digit()  retorna TRUE se a variável contiver um valor numérico.

Na validação usei a negação.. com  o sinal de ! 

Então em palavras fica:   IF NOT ctype_digit($telefone)....  retorna false, isso quer dizer que a pessoa digitou um caractere não numérico.

 

É interessante você validar por javascript para não permitir a entrada de dados não numéricos!

 

Como esta sujo?

O que eu posso retirar?

  • Moderador
Postado

Por exemplo,  você pode usar o action do formulário para requisitar o arquivo php   e retirar aquelas verificações de isset por exemplo(o primeiro.   já o segundo pode deixar porque é a verificação do recaptcha)

 

Algumas linhas do phpmailer por exemplo não for usar, não precisa colocar.

Exemplos:

$mail-> addCC($cc, utf8_decode('Acrescentar o nome do email 1'));
$mail-> addBCC($bcc, utf8_decode('Acrescentar o nome do email 2'));
$mail-> addReplyTo($cc, utf8_decode('Acrescentar o nome do email 3'));

Só coloque se vocÊ pretende enviar cópias ocultas e resposta a outros e-mails.

 

A função

$mail-> MsgHTML($body);

Eu não reconheço...  mas sim   

$mail->Body = $body

 

O atributo

 $mail-> SMTPDebug = 0;

Pode retirar se quiser, ele é só usado para debugar o envio.

 

enfim... você pode reduzir um pouco as linhas e deixar  só as coisas que de fato está utilizando!

 

Sobre o que falei antes de usar o action para requisitar o arquivo eu quis dizer algo assim:

<form method="POST" action="processaDados.php">
   
</form>  

Este processaDados.php seria o arquivo que contém toda aquela parte do php de validação e envio do e-mail.

Desta forma você pode eliminar os usos excessivos do isset! 

Postado
27 minutos atrás, dif disse:

por exemplo,  você pode usar o action do formulário para requisitar o arquivo php   e retirar aquelas verificações de isset por exemplo(o primeiro.   já o segundo pode deixar porque é a verificação do recaptcha)

 

algumas linhas do phpmailer por exemplo não for usar, não precisa colocar.

exemplos:


$mail-> addcc($cc, utf8_decode('acrescentar o nome do email 1'));
$mail-> addbcc($bcc, utf8_decode('acrescentar o nome do email 2'));
$mail-> addreplyto($cc, utf8_decode('acrescentar o nome do email 3'));

só coloque se você pretende enviar cópias ocultas e resposta a outros e-mails.

 

a função


$mail-> msghtml($body);

eu não reconheço...  mas sim   


$mail->body = $body

 

o atributo


 $mail-> smtpdebug = 0;

pode retirar se quiser, ele é só usado para debugar o envio.

 

enfim... você pode reduzir um pouco as linhas e deixar  só as coisas que de fato está utilizando!

 

sobre o que falei antes de usar o action para requisitar o arquivo eu quis dizer algo assim:


<form method="post" action="processadados.php">
   
</form>  

este processadados.php seria o arquivo que contém toda aquela parte do php de validação e envio do e-mail.

desta forma você pode eliminar os usos excessivos do isset! 

os e-mails eu utilizo os 3, a função $mail-> msghtml($body);, tem na documentação da classe, no site abaixo da função diz que serve para criar uma mensagem a partir de uma cadeia html, ainda não sei formatar em html, porém, estou pesquisando para aprender a enviar formatado, a pessoa que enviou o contato também receberá uma cópia e eu gostaria de enviar como os e-mail marketing, acho que fica visivelmente melhor, este $mail-> smtpdebug = 0;, vou tirar realmente não utilizo pra nada, ainda insisto que você deve gravar vídeo aulas e disponibilizar no youtube, você vê o que muita gente procura aqui no fórum e com certeza o que buscam aqui já procuraram em muitos lugares e não encontraram, acredito que você fazendo as vídeo aulas e monetizando além de ajudar muita gente ainda tem um retorno financeiro, rsrsrsrsrs.

 

vejo bastante programadores que fazer vários cursos gratuitos e também tem os cursos pagos, então, quem vê os cursos grátis e se identificam com a sua didática no ensino com certeza compram os cursos pagos, só acho, rsrsrsrsrsrs  

adicionado 22 minutos depois

@dif, estou pesquisando para utilizar o noscript que você mencionou, porém, só achei vídeo aulas em inglês, rsrsrsrs, como eu faço para utiliza-lo?

  • Curtir 1
Postado

     Bom dia a todos, estive fazendo mais alguns testes e este formulário já tem a validação em php, pois, se eu desativar o javascript do navegador o Google recapcha não aparece e se não houver a resposta do Google ele não envia o formulário, pois, é preciso escolher as figuras apresentadas para serem enviadas ao Google e então ele retorna success, e então o php continua o processo de envio do formulário.

 

     No caso estou falando desta condição.

if(isset($data -> success) AND $data->success == true)

     Ela vai até o Google com as imagens clicadas pelo usuário e precisa retornar success para o php prosseguir com o envio do formulário.

 

     Obrigado a todos! 

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!