SitePoint Sponsor

User Tag List

Results 1 to 4 of 4
  1. #1
    SitePoint Enthusiast
    Join Date
    Mar 2011
    Posts
    32
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question PHP Email Form Problems

    Hi everyone,

    I am trying to create a new PHP form email script. It should contain email validation functions that then 1. send the user to a page that lets them know there is an error with their email, and to please fill it out again. 2. If the email is blank or does not conform to the format, the email shouldn't be sent.

    There is one major problem with the script below: even though the script redirects the user to the page telling them there is a problem with the form, the email still sends.

    I would like the email to NOT send, but instead only redirect the user to that page telling them they need to fill out the form again.

    What's wrong with the script that causes it to do this?


    Code:
    <?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $comments = $_POST['comments'];
    
    if( $name == true )
    {
    $sender = $email;
    $receiver = "someemail@somewebsite.com";
    $client_ip = $_SERVER['REMOTE_ADDR'];
    $email_body = "Name: $name \n\nEmail: $email \n\nPhone: $phone \n\nComments: \n\n$comments \n\nIP: $client_ip \n\nContact Sent from http://somewebsite.com/";
    $newmessage = "Hi $name, \n\nThank you for your inquiry. We will be in touch with you as quickly as possible. \n\nPlease let us know if you have any further questions. Thank you.\n\nPhone: (800) 555-5555 \nWebsite:http://www.somewebsite.com/ \n\nYour inquiry has been copied below. \n\n --------------------- \n\nName: $name \nEmail: $email \n\nPhone: $phone \n\nCase Information: \n\n$comments \n\nIP: $client_ip";
    header( 'Location: http://somewebsite.com/contact-form-thank-you.html' ) ;
    $extra = "From: $sender\r\n" . "Reply-To: $sender \r\n" . "X-Mailer: PHP/" . phpversion();
    $extra2 = "From: $receiver\r\n" . "Reply-To: $receiver \r\n";
    
    function check_email_address($email) {
    // check that there's one @ symbol, and that the lengths are right
    if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
    // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
    return false;
    }
    // Split it into sections to make life easier
    $email_array = explode("@", $email);
    $local_array = explode(".", $email_array[0]);
    for ($i = 0; $i < sizeof($local_array); $i++) {
    if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
    return false;
    }
    }
    if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
    return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
    if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
    return false;
    }
    }
    }
    
    return true;
    }
    
    if( mail( $receiver, "Somewebsite.com Inquiry", $email_body, $extra ) && mail( $sender, "Somewebsite.com Site Inquiry Has Been Received", $newmessage, $extra2 ) )
    
    {
    echo header("Location: contact-form-thank-you.html");
    }
    else
    {
    echo header("Location: contact-form-decline.html");
    }
    }
    ?>

  2. #2
    dooby dooby doo silver trophybronze trophy
    spikeZ's Avatar
    Join Date
    Aug 2004
    Location
    Manchester UK
    Posts
    13,806
    Mentioned
    158 Post(s)
    Tagged
    3 Thread(s)
    You are not actually calling the check_email_address function anywhere!
    There are some comments in the code below too.

    Also try and indent code with either 4 spaces or TAB, it makes it easier to read, follow and track { }'s

    Code PHP:
    <?php
    /*
    * Functions outside of the if() block
    **/
    function check_email_address($email) {
    // check that there's one @ symbol, and that the lengths are right
        if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {    
    // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
            return false;
        }
    // Split it into sections to make life easier
        $email_array = explode("@", $email);
        $local_array = explode(".", $email_array[0]);
     
     
        for ($i = 0; $i < sizeof($local_array); $i++) {
            if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
                return false;
            }
        }
        if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
            $domain_array = explode(".", $email_array[1]);
                if (sizeof($domain_array) < 2) {
                    return false; // Not enough parts to domain
                }
            for ($i = 0; $i < sizeof($domain_array); $i++) {
                if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
                    return false;
                }
            }
        }
     
     
        return true;
    }
     
     
     
     
     
     
     
     
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $comments = $_POST['comments'];
     
     
    if( $name == true ) // consider using isset() or check the length of $name variable.
    {
        $sender = $email;
        $receiver = "someemail@somewebsite.com";
        $client_ip = $_SERVER['REMOTE_ADDR'];
        $email_body = "Name: $name \n\nEmail: $email \n\nPhone: $phone \n\nComments: \n\n$comments \n\nIP: $client_ip \n\nContact Sent from http://somewebsite.com/";
        $newmessage = "Hi $name, \n\nThank you for your inquiry. We will be in touch with you as quickly as possible. \n\nPlease let us know if you have any further questions. Thank     you.\n\nPhone: (800) 555-5555 \nWebsite:[url]http://www.somewebsite.com/[/url] \n\nYour inquiry has been copied below. \n\n --------------------- \n\nName: $name \nEmail: $email \n    \nPhone: $phone \n\nCase Information: \n\n$comments \n\nIP: $client_ip";
     
        header( 'Location: [url]http://somewebsite.com/contact-form-thank-you.html[/url]' ) ;
        $extra = "From: $sender\r\n" . "Reply-To: $sender \r\n" . "X-Mailer: PHP/" . phpversion();
        $extra2 = "From: $receiver\r\n" . "Reply-To: $receiver \r\n";
     
     
        /*
        * Now you check if the email address is valid or not 
        */
        if(check_email_address($email) == true) {
            if( mail( $receiver, "Somewebsite.com Inquiry", $email_body, $extra ) && mail( $sender, "Somewebsite.com Site Inquiry Has Been Received", $newmessage, $extra2 ) )
            {
                echo header("Location: contact-form-thank-you.html");
            }
            else
            {
                echo header("Location: contact-form-decline.html");
            }
        } else {
            // do soemthing with it if it fails.
        }
    }
    ?>
    Mike Swiffin - Community Team Advisor
    Only a woman can read between the lines of a one word answer.....

  3. #3
    SitePoint Enthusiast
    Join Date
    Mar 2011
    Posts
    32
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    AWESOMENESS!! Thank you so much Mike. I've been buried pretty deep into this project and it's nice to have a second pair of eyes.

    Muchas gracias sir.

  4. #4
    dooby dooby doo silver trophybronze trophy
    spikeZ's Avatar
    Join Date
    Aug 2004
    Location
    Manchester UK
    Posts
    13,806
    Mentioned
    158 Post(s)
    Tagged
    3 Thread(s)
    De nada amigo
    Mike Swiffin - Community Team Advisor
    Only a woman can read between the lines of a one word answer.....


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •