user2279169
user2279169

Reputation: 31

Putting php form errors on the same page

Sorry I've been trying to figure this out for weeks searching everywhere. Can you please help me?! I just need to post my PHP errors from the form. For example, if you don't post your first name it will say 'The First Name you entered does not appear to be valid.' I want it on the page they input their data. Any help is appreciated!

HTML CODE!

<form name="contactform" method="post" action="send_form_email.php">
<table width="450px">
<tr>
 <td valign="top">
  <label for="first_name">First Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="first_name" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top"">
  <label for="last_name">Last Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="last_name" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="email">Email Address *</label>
 </td>
 <td valign="top">
  <input  type="text" name="email" maxlength="80" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="comments">Comments *</label>
 </td>
 <td valign="top">
  <textarea  name="comments" maxlength="1000" cols="25" rows="6"></textarea>
 </td>
</tr>
<tr>
 <td colspan="2" style="text-align:center">
  <input type="submit" value="Submit">   <a href="http://www.freecontactform.com/email_form.php">Email Form</a>
 </td>
</tr>
</table>
</form>

PHP CODE!

<?php
if(isset($_POST['email'])) {

    // EDIT THE 2 LINES BELOW AS REQUIRED
    $email_to = "[email protected]";
    $email_subject = "Support";


    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. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }

    // validation expected data exists
    if(!isset($_POST['first_name']) ||
        !isset($_POST['last_name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['comments'])) {
        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
    $comments = $_POST['comments']; // 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(strlen($comments) < 2) {
    $error_message .= 'The Comments 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 .= "Telephone: ".clean_string($telephone)."\n";
    $email_message .= "Comments: ".clean_string($comments)."\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);  
?>

<!-- include your own success html here -->

Thank you for contacting us. We will be in touch with you very soon.

<?php
}
?>

Upvotes: 0

Views: 5523

Answers (2)

erichert
erichert

Reputation: 150

Use php sessions to send the error messages back to the form page.

First make sure you initiate sessions on each page by adding:

<?php session_start() ?>

at the beginning of each page, (make sure it is the first code)

Then, on the form processing page when you check whether there are error messages, you assign the error message to a session variable and redirect:

if(strlen($error_message) > 0) {
    $_SESSION['errors'] = $error_message;
    header("Location:<--path to form file-->");

}

On the Form page you can add a section that will check for error messages and display them if they do:

<?php if(isset($_SESSION['error'])){
          echo $_SESSION['error'];
      }

You will also want to unset $_SESSION['error'] at the beginning of your form processing file so that it is cleared out for revalidation:

if(isset($_SESSION['error']){
    unset($_SESSION['error']);
}

This is a very simple way to do it and could be improved but hopefully it gets you started.

Upvotes: 0

aynber
aynber

Reputation: 23001

You don't want to die on the errors. I'd suggest putting each error message into an array, then if the array is not empty, put the array into a session variable and redirect back to the form page. Make sure you put session_start() at the top of both pages.

$errors = array();
if(!preg_match($email_exp,$email_from)) {
    $errors['email'] =  'The Email Address you entered does not appear to be valid.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$first_name)) {
    $errors['first_name'] =  'The First Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$last_name)) {
    $errors['last_name'] =  'The Last Name you entered does not appear to be valid.<br />';
}
if(strlen($comments) < 2) {
    $errors['comments'] =  .= 'The Comments you entered do not appear to be valid.<br />';
}
if(!empty($errors)) {
    $_SESSION['errors'] = $errors;
    header('Location: form_page.php');
    exit;
}

You can then check for errors on the form page with

if(!empty($_SESSION['errors']['email'])){
   echo $_SESSION['errors']['email'];
}

Upvotes: 2

Related Questions