homepage Welcome to WebmasterWorld Guest from 54.198.46.115
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member

Home / Forums Index / Code, Content, and Presentation / PHP Server Side Scripting
Forum Library, Charter, Moderators: coopster & jatar k

PHP Server Side Scripting Forum

    
PHP Email Script - Help Needed
Help with small issue needed before it's ready
TurboCoder3000




msg:4558790
 3:41 am on Mar 27, 2013 (gmt 0)

Hi everyone,

I am trying to create a new PHP 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?


<?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");
}
}
?>

 

adder




msg:4559168
 11:47 am on Mar 28, 2013 (gmt 0)

If you're just checking for syntax (and not for the validity of the email address) then why not use the built-in validation of HTML5?
[html5rocks.com...]

If, however, you insist you want to do this in PHP, I can say that you have overcomplicated things, and put your figurals in the wrong places. You really want to simplify it. Something like this:



<?php
if ((functionCheckName()==true) && (functionCheckEmail()==true)){
mail($receiver, "Somewebsite.com Inquiry", $email_body, $extra);
header("Location: thank-you.php");
}
else {
header("Location: back-to-the-form.php?varible1=$var1toTransfer&variable2=$var2toTransfer");
}
?>


obviously you will have to define the functions and the variables you wish to transfer back to the original form but you get my drift :)

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / PHP Server Side Scripting
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved