Reputation: 33
I am trying make a contact form with php mailer, validate it and submit it on the same page. My site is a one page, so I would not want another page for processing this data form.
I can send form mail e receive it in my inbox. But when I let it empty or in a wrong way, I can see the error message and it SENDS the form anyway!
So, I want my validation prevent the form from submit in cases of it not pass in validation.
Here is my code (all in the same page):
<?php
if (isset($_POST['enviarFormulario'])) {
$enviaFormularioParaNome = 'Gilberto Junior';
$enviaFormularioParaEmail = '[email protected]';
$caixaPostalServidorEmail = '[email protected]';
$caixaPostalServidorSenha = 'password';
$remetenteNome = $_POST['remetenteNome'];
$remetenteEmail = $_POST['remetenteEmail'];
$telefone1 = $_POST['telefone1'];
$telefone2 = $_POST['telefone2'];
$mensagem = $_POST['mensagem'];
$mensagemConcatenada = 'Formulário gerado via website'.'< br/>';
$mensagemConcatenada .= '-------------------------------< br/>< br/>';
$mensagemConcatenada .= 'Nome: '.$remetenteNome.'< br/>';
$mensagemConcatenada .= 'E-mail: '.$remetenteEmail.'< br/>';
$mensagemConcatenada .= 'telefone 1: '.$telefone1.'< br/>';
$mensagemConcatenada .= 'telefone 2: '.$telefone2.'< br/>';
$mensagemConcatenada .= '-------------------------------< br/>< br/>';
$mensagemConcatenada .= 'Mensagem: "'.$mensagem.'"< br/>';
require_once('php-mailer/PHPMailerAutoload.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Charset = 'utf8_decode()';
$mail->Host = 'smtp.'.substr(strstr($caixaPostalServidorEmail, '@'), 1);
$mail->Port = '587';
$mail->Username = $caixaPostalServidorEmail;
$mail->Password = $caixaPostalServidorSenha;
$mail->From = $caixaPostalServidorEmail;
$mail->FromName = utf8_decode($caixaPostalServidorNome);
$mail->IsHTML(true);
$mail->Subject = utf8_decode('Contato');
$mail->Body = utf8_decode($mensagemConcatenada);
$mail->AddAddress($enviaFormularioParaEmail,utf8_decode($enviaFormularioParaNome));
if(!$mail->Send()){
$mensagemRetorno = 'Erro ao enviar formulário: '. print($mail->ErrorInfo);
}else{
$mensagemRetorno = 'Formulário enviado com sucesso!';
}
}
?>
<?php
// Initialize variables and set to empty strings
$remetenteNome=$remetenteEmail="";
$remetenteNomeErr=$remetenteEmailErr="";
// Validate input and sanitize
if ($_SERVER['REQUEST_METHOD']== "POST") {
if (empty($_POST["remetenteNome"])) {
$remetenteNomeErr = "First name is required";
}
else {
$remetenteNome = test_input($_POST["remetenteNome"]);
}
if (empty($_POST["remetenteEmail"])) {
$remetenteEmailErr = "Last name is required";
}
else {
$remetenteEmail = test_input($_POST["remetenteEmail"]);
}
}
// Sanitize data
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form class="pl-md-5" id="form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<p><input name="remetenteNome" value="<?php echo $remetenteNome;?>" class="w-100" type="text" placeholder="Nome"></p>
<span class="error">* <?php echo $remetenteNomeErr;?></span>
<p><input name="remetenteEmail" class="w-100" type="email" placeholder="E-mail"></p>
<span class="error">* <?php echo $remetenteEmailErr;?></span>
<p class="flex-row d-flex">
<input name="telefone1" class="w-50 mr-4" type="tel" placeholder="Telefone 1">
<input name="telefone2" class="w-50" type="tel" placeholder="Telefone 2">
</p>
<p><textarea name="mensagem" class="w-100" placeholder="Mensagem"></textarea></p>
<p>
<button type="submit" name="enviarFormulario" class="btn btn-yellow g-recaptcha" data-sitekey="6LcNJnEUAAAAAI1fcViM6ZWuZF0AI2e4CEEU1zyG" data-callback="OnSubmit">Enviar</button>
<?php
if(isset($mensagemRetorno)){
echo $mensagemRetorno;
}
?>
</p>
</form>
Upvotes: 0
Views: 195
Reputation: 4901
You are sending the email and then validating it. Change the order and add some logic:
// Validate input and sanitize
$valid = true;
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (empty($_POST["remetenteNome"])) {
$remetenteNomeErr = "First name is required";
$valid = false;
}
else {
$remetenteNome = test_input($_POST["remetenteNome"]);
}
if (empty($_POST["remetenteEmail"])) {
$remetenteEmailErr = "Last name is required";
$valid = false;
}
else {
$remetenteEmail = test_input($_POST["remetenteEmail"]);
}
}
if (isset($_POST['enviarFormulario']) && $valid) {
// The rest of the code
}
Upvotes: 1