Phrase "E-mail sent successfully" on the same page as the Form. How to configure?

0

I have seen forms with the "E-mail sent successfully" notice on the same page of the form after it has been sent. my form worked fine when I made the php file separate and the form called it: action="send.php".

But I find it more interesting that the user is not white screens or additional screens without precision. Then I tried to direct my action to the same page: action="#". But then I had all the variables as defined. I tried to solve it and I could not, Where is the error? I imagine it should be something simple.

The code is a functional comment system, but I have tried adaptations to transfer the phrase to the same page, then it stopped working.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Classificdos</title>
</head>
<style>
    div#container{
        width: 50%;
        text-align: justify;
        background: blue;
        margin:0 auto;
        font-family: helvetica;
        padding: 3%;
    }
</style>
<body>
    <div id="container">
        <h1>NOTICIA DO DIA</h1>

        <hr/>


        <h3>Deixe seu comentário</h3>

        <?php 
        //error_reporting(0);
    if(isset($_POST['comentar'])){
        $nome =         $_POST['nome'];
        $email =        $_POST['email'];
        $site =         $_POST['site'];
        $comentario =   $_POST['comentario'];
        $identificacao= $_POST['identificacao'];
        $moderacao =    $_POST['moderar'];
    }
        if(isset($_FILES['avatar']))
   {
      date_default_timezone_set("Brazil/East"); //Definindo timezone padrão

      $ext = strtolower(substr($_FILES['avatar']['name'],-4)); //Pegando extensão do arquivo
      $new_name = date("Y.m.d-H.i.s") . $ext; //Definindo um novo nome para o arquivo
      $dir = 'uploads/'; //Diretório para uploads

      move_uploaded_file($_FILES['avatar']['tmp_name'], $dir.$new_name); //Fazer upload do arquivo
  }


        $headers = "Content-type:text/html; charset=UTF-8";
        $headers = "From: $email";
        $para    = "[email protected]";
            $mensagem = "De: $nome";
            $mensagem .= "E-mail: $email";
            $mensagem .= "Site: $site";
            $mensagem .= "Comentario: $comentario";



        $envia = mail($para, "Comentário Efetuado no site", $mensagem, $headers);


        $insere = ("INSERT INTO comentarios (id, nome, email, site, comentario, identificacao, moderacao, avatar ) VALUES ('NULL', '$nome', '$email', '$site', '$comentario', '$identificacao', '$moderacao', '$new_name')"); //new_name e o novo nome da $avatar defidido por horas.

        $insereBanco = mysql_query($insere);

            echo "<p><strong>$nome</strong>, seu comentário foi efetuado com sucesso e aguarda liberação. Obrigado!";
            echo "<p><a href='Sistema_comentarios.php'>Voltar</a></p>";

        ?>

        <form id="" action="" method="post" enctype="multipart/form-data">
            <fieldset>
                <legend>Preencha os Campos Abaixo:</legend>

                    <label for="nome">NOME: </label>
                        <input type="text" required id="nome" name="nome">
                            <div class="clear"></div>

                    <label for="email">E-MAIL: </label>
                        <input type="text" id="email" name="email">
                            <div class="clear"></div>

                    <label for="site">SITE (Opcional): </label>
                        <input type="text" id="site" name="site">
                            <div class="clear"></div>
                    <label for="comentario">Deixe seu Comentário</label><br/>
                        <textarea name="comentario" id="comentario" cols="60" rows="10"></textarea>

                    <label id="escolher_foto" for="foto">Escolher uma Foto</label>
                     <input type="file" name="avatar" id="avatar" required="">

                    <input type="submit" value="Comentar"><br/>
                    <input type="hidden" name="identificacao" value="1"/>
                    <input type="hidden" name="moderar" value="nao"/>
            </fieldset>
        </form>
    </div>


</body>
</html>
    
asked by anonymous 28.02.2016 / 18:08

2 answers

2

You just need to encapsulate your PHP code that tries to get the POST parameters and save it to the bank and send the email within the following IF:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // seu código vai aqui
}

So if your user just enters your page through the URL, $_SERVER['REQUEST_METHOD'] will be equal to "GET" , you will not perform any operations in PHP and only display the comment page for it, the HTML.

And when your user submits the comments form, $_SERVER['REQUEST_METHOD'] will be equal to "POST" and then yes your PHP code of sending email + save in DB + message that the comment was saved

in> will be executed. Here's how your PHP should stay inside the file:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //error_reporting(0);
    if(isset($_POST['comentar'])){
        $nome =         $_POST['nome'];
        $email =        $_POST['email'];
        $site =         $_POST['site'];
        $comentario =   $_POST['comentario'];
        $identificacao= $_POST['identificacao'];
        $moderacao =    $_POST['moderar'];
    }

    if(isset($_FILES['avatar'])) {
        date_default_timezone_set("Brazil/East"); //Definindo timezone padrão

        $ext = strtolower(substr($_FILES['avatar']['name'],-4)); //Pegando extensão do arquivo
        $new_name = date("Y.m.d-H.i.s") . $ext; //Definindo um novo nome para o arquivo
        $dir = 'uploads/'; //Diretório para uploads

        move_uploaded_file($_FILES['avatar']['tmp_name'], $dir.$new_name); //Fazer upload do arquivo
    }

    $headers = "Content-type:text/html; charset=UTF-8";
    $headers = "From: $email";
    $para    = "[email protected]";
    $mensagem = "De: $nome";
    $mensagem .= "E-mail: $email";
    $mensagem .= "Site: $site";
    $mensagem .= "Comentario: $comentario";

    $envia = mail($para, "Comentário Efetuado no site", $mensagem, $headers);

    $insere = ("INSERT INTO comentarios (id, nome, email, site, comentario, identificacao, moderacao, avatar ) VALUES ('NULL', '$nome', '$email', '$site', '$comentario', '$identificacao', '$moderacao', '$new_name')"); //new_name e o novo nome da $avatar defidido por horas.

    $insereBanco = mysql_query($insere);

    echo "<p><strong>$nome</strong>, seu comentário foi efetuado com sucesso e aguarda liberação. Obrigado!";
    echo "<p><a href='Sistema_comentarios.php'>Voltar</a></p>";
}
?>
    
28.02.2016 / 18:22
2

The use of if ($_SERVER['REQUEST_METHOD'] === 'POST') { is not a guarantee, there may be faults in the script if you use it or just it, as somehow the html form fails or some field is missing and still can be sent, but missing inputs, I recommend that you use isset or empty , as I explained in this response link

A way to use isset

<?php
//Inicia o IF
if (isset($_POST['nome'], $_POST['email'], $_POST['site'], $_POST['comentario'], $_POST['identificacao'], $_POST['moderar'], $_POST['comentar']))
{

    $nome =         $_POST['nome'];
    $email =        $_POST['email'];
    $site =         $_POST['site'];
    $comentario =   $_POST['comentario'];
    $identificacao= $_POST['identificacao'];
    $moderacao =    $_POST['moderar'];

    if(isset($_FILES['avatar']))
    {
        date_default_timezone_set("Brazil/East"); //Definindo timezone padrão

        $ext = strtolower(substr($_FILES['avatar']['name'],-4)); //Pegando extensão do arquivo
        $new_name = date("Y.m.d-H.i.s") . $ext; //Definindo um novo nome para o arquivo
        $dir = 'uploads/'; //Diretório para uploads

        move_uploaded_file($_FILES['avatar']['tmp_name'], $dir.$new_name); //Fazer upload do arquivo
    }


        $headers = "Content-type:text/html; charset=UTF-8";
        $headers = "From: $email";
        $para    = "[email protected]";
            $mensagem = "De: $nome";
            $mensagem .= "E-mail: $email";
            $mensagem .= "Site: $site";
            $mensagem .= "Comentario: $comentario";



        $envia = mail($para, "Comentário Efetuado no site", $mensagem, $headers);


        $insere = ("INSERT INTO comentarios (id, nome, email, site, comentario, identificacao, moderacao, avatar ) VALUES ('NULL', '$nome', '$email', '$site', '$comentario', '$identificacao', '$moderacao', '$new_name')"); //new_name e o novo nome da $avatar defidido por horas.

        $insereBanco = mysql_query($insere);

            echo "<p><strong>$nome</strong>, seu comentário foi efetuado com sucesso e aguarda liberação. Obrigado!";
            echo "<p><a href='Sistema_comentarios.php'>Voltar</a></p>";

} //Termina o IF
?>

I recommend you read the documentation: link

    
28.02.2016 / 18:52