Reputation: 29
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
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
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