Проверка контактной формы PHP и отправка на той же странице - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь создать контактную форму с php mailer, проверить ее и отправить на той же странице.Мой сайт - это одна страница, поэтому мне не нужна другая страница для обработки этой формы данных.

Я могу отправить письмо по электронной почте и получить его в своем почтовом ящике.Но когда я опускаю или ошибаюсь, я вижу сообщение об ошибке, и оно в любом случае ОТПРАВЛЯЕТ форму!

Итак, я хочу, чтобы моя проверка не позволяла отправлять форму в случаяхэто не проходит проверку.

Вот мой код (все на одной странице):

<?php

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


$enviaFormularioParaNome = 'Gilberto Junior';
$enviaFormularioParaEmail = 'mail@example.com';

$caixaPostalServidorEmail = 'mail@example.com';
$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>

1 Ответ

0 голосов
/ 22 сентября 2018

Вы отправляете письмо и затем подтверждаете его.Измените порядок и добавьте немного логики:

// 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
}
...