1

When I submit the form I am receiving the last_name and the email fields but not hte first_name. Driving me crazy! If anyone can take a quick look at this and let me know why I would greatly appreciate it. I am a beginner with PHP. Thanks!!

HTML:

<form name="contactform" method="post" action="send_form_email.php">
        <div class="email_section_details"> <span class="msg_icon"><img src="common/images/msg_icon.png" alt="" /></span>
          <div class="row">
                          <div class="col">
            <label for="first_name"><strong>First</strong>NAME:</label>
              <span class="input_bg">
              <input name="first_name" type="text" value="" />
              </span> </div>
            <div class="col">
              <label for="email"><strong>EMAIL</strong>ADDRESS:</label>
              <span class="input_bg">
              <input name="email" type="text" value="" />
              </span> </div>
            <div class="col">
              <label for="last_name"><strong>LAST</strong>NAME:</label>
              <span class="input_bg">
              <input name="last_name" type="text" value="" />
              </span> </div>
            <input type="image" src="common/images/submit_btn.png" class="submit_btn" />
        </div>
          </form>

Here is the PHP:

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

    // EDIT THE 2 LINES BELOW AS REQUIRED
    $email_to = "#";
    $email_subject = "Email Update Sign-up Request from #";


    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']))


    $first_name = $_POST['first_name']; // required
    $last_name = $_POST['last_name']; // required
    $email_from = $_POST['email']; // 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 />';
  }

    $email_message = "Form details below.\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";



// 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. Please use your "Back Button" to return to the Home Page

<?php
}
?>
3
  • When you do print_r($_POST); what you get? Commented Jan 22, 2012 at 19:07
  • Sorry, total newb here. Where would I place that? Commented Jan 22, 2012 at 19:12
  • before: if(isset($_POST['email'])) Commented Jan 22, 2012 at 19:14

1 Answer 1

2

Your problem is this code:

// validation expected data exists
if(!isset($_POST['first_name']) ||
    !isset($_POST['last_name']) ||
    !isset($_POST['email']))


$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required

It's an if statement with no code following, so it's picking up the next line where you assign $first_name. So that never gets executed. It's equivalent to this:

// validation expected data exists
if(!isset($_POST['first_name']) ||
    !isset($_POST['last_name']) ||
    !isset($_POST['email']))
{
    $first_name = $_POST['first_name']; // required
}

$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required

On a related note, in general, this code is fairly messy with inconsistent levels of indents, etc. I know it seems trivial and pedantic, but if you spend a little more time writing cleaner code, you will find it easier to troubleshoot bugs like this (as will other people).

Sign up to request clarification or add additional context in comments.

1 Comment

Fantastic, that solved it. Thank you! I will definitely clean up the code in the future---in a huge rush today. Thanks Again

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.