Breeze
Breeze

Reputation: 29

PHP contact form keep input fields if error, otherwise clear

I want my contact form input fields to save the user's inputs if there's an error, otherwise have them cleared if the email goes through. Right now it works except when the email is sent the fields are still filled in. I could refresh the page but then it doesn't show the 'Your email has been sent' message.

Here's my form:

<form class="contact-form" action="" method="post">
<input type="text" name="name" value="<?php if(isset($_POST["name"])) echo $_POST["name"]; ?>" />
</form>

I tried adding something to my php code that handles the email business - if the message was sent, unset($_POST["name"]), and also adding to this form input's php else echo ''; but that didn't seem to work. It seems the variable was still set.

Upvotes: 1

Views: 131

Answers (2)

Robert
Robert

Reputation: 360

Let's assume that your page is contact.php.

You php code should be something like this:

// we will keep here error message
$error = '';

// if request is get and isset sent
if ($_SERVER["REQUEST_METHOD"] === "GET" and isset($_GET["sent"]))
    echo '<p id="output-area">Message has been sent.</p>';
else {
    // if request is post
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        // then verify input data
        if (!empty($_POST['msg'])) {
            // if mail was sent, redirect to contact.php?sent
            if (mail("[email protected]", "My subject", $_POST['msg'])){
                header('Location: contact.php?sent');
                exit;
            } else
                $error = "Mail does not sent.";
        } else
            $error = 'Please fill in all inputs.';
    }
}

if ($error != '')
   echo '<p class="error">Error: ' . $error . '</p>';

// here goes your form
echo '<form class="contact-form" action="contact.php" method="post">
    <textarea name="msg">' . (!empty($_POST["msg"]) ? $_POST["msg"] : '') . '</textarea>
    <input type="submit" value="send">
</form>';

Upvotes: 2

Manendra
Manendra

Reputation: 1

You should set error flag while error occurred. try this

$error=false; if(isset($_POST['submit'])){

$msg =  $_POST['msg'];

if(mail("[email protected]","My subject",$msg)){

    
}else{
    
    $error = "mail does not sent";
}

}

" />

Upvotes: 0

Related Questions