Make php post the error/success message on the same page as the form - no need to direct to a different page

Hello,

so I’m a student and as a project for school I needed to build a website, my contact form on the website dierects to the following php file:

<?php
header( "refresh:10; url=#" );
if(isset($_POST['email'])) {
     
    // CHANGE THE TWO LINES BELOW
    $email_to = "e-mail";
     
    $email_subject = "Visitor E-mail";
     
     
    function died($error) {
        // your error code can go here
        echo "We are very sorry, but there were error(s) found with the form you submitted, please go back and fix those errors. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go wait for the browser to direct you back and then you can fix these errors.<br /><br />";
        die();
    }
     
    // validation expected data exists
    if(!isset($_POST['first_name']) ||
        !isset($_POST['last_name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['topic']) ||
        !isset($_POST['message'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }
     
    $first_name = $_POST['first_name']; // required
    $last_name = $_POST['last_name']; // required
    $email_from = $_POST['email']; // required
    $telephone = $_POST['topic']; // required
    $comments = $_POST['message']; // required
     
    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
    $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$first_name)) {
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  }
  if(!preg_match($string_exp,$last_name)) {
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />';
  }
  if(!preg_match($string_exp,$last_name)) {
    $error_message .= 'The Topic you entered does not appear to be valid.<br />';
  }
  if(strlen($message) < 2) {
    $error_message .= 'The Message you entered do not appear to be valid.<br />';
  }
  if(strlen($error_message) > 0) {
    died($error_message);
  }
    $email_message = "Form details below.\n\n";
     
    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }
     
    $email_message .= "First Name: ".clean_string($first_name)."\n";
    $email_message .= "Last Name: ".clean_string($last_name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "topic: ".clean_string($topic)."\n";
    $email_message .= "Message: ".clean_string($message)."\n";
     
     
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);  
?>
 
<!-- place your own success html below -->
 
Thank you for contacting us <?php echo $_GET["first_name"]; ?>. We will be in touch with you a soon as possible. Please wait for the browser to redirect you back!
 
<?php
}
die();
?>

so instead of directing to a new page stay on the page which the form is at and post the success/fail message. Thank you in advance :smile:

Take everything you’ve got here, except for the header and the last die. Put it into your form page. make the form page point to itself.

You also might want to remove the die() from died and the “Please go wait” line if you just want the form to be presented again.

By “instead of directing to a new page” do you mean to keep the code in the same file as StarLion suggests, or do you mean you want to use AJAX to handle the form submission so there is no page redraw in the browser?

Cool I will try that now and let you know how it goes. Thanks

I tried the whole form just disappears!!! I don’t see the form anymore! Actually everything below where the form is and the form too

So I would like the form to work on the page where it is! so the success/fail messages appear in the html file where the form is! and I want to customize it with CSS! right now the form just directs to contact.php

So, show us your complete new code so we can try to help.

Well, you can do that however you lay out the code and however many physical files it’s in on the server. Get it working first though.

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.