postonoh Posted September 29, 2011 Share Posted September 29, 2011 I have this in a file called mailform.php. It check for valid email and phone number. If wrong it echo error but it still send the mail to me. I need for it if error not to send then redirect to same page with problems. no error redirect to main page. I can get to redirect with no problem. I can't figure out how to make it not send if errors. I hope I am explaining this right. $fname = $_POST['firstName']; $lname = $_POST['lastName']; $degree = $_POST['Degree_Certificate']; $company = $_POST['companyName']; $address = $_POST['street']; $city = $_POST['city']; $state = $_POST['stateProvReg']; $phone = $_POST['phone']; $email = $_POST['email']; $message = $_POST['description']; $receive = "we receive your Affiliate information"; $formcontent=" Thank you $receive \n First Name: $fname \n Last Name: $lname \n Degree: $degree \n Company: $company \n Address: $address \n City: $city \n State: $state \n Phone: $phone \n Email: $email \n Description: $message"; $recipient = "webtechnician@brainmaster.com, $email"; $subject = "Affiliate List"; $mailheader = "From: $email \r\n"; if (validatePhone($phone)) { echo $phone . ' is a valid phone number.'; } else { echo $phone . ' is not valid phone number.'; } if (check_email_address($email)) { echo $email . ' is a valid email address.'; } else { echo $email . ' is not a valid email address, please hit the back button.'; } function check_email_address($email) { // First, we check that there's one @ symbol, and that the lengths are right if (!ereg("^[^@]{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 (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) { return false; } } if (!ereg("^\[?[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 (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) { return false; die("hit the back button"); } } } return true; } function validatePhone($phone) { $numbersOnly = ereg_replace("[^0-9]", "", $string); $numberOfDigits = strlen($numbersOnly); if ($numberOfDigits == 7 or $numberOfDigits == 10) { echo $numbersOnly; } else { echo 'Invalid Phone Number'; } } function valIP($string) { if (preg_match( '^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$^', $string)) { echo $string; } else { echo 'Invalid IP Address'; } } mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); echo "Thank You!"; header('Location: http://#'); Quote Link to comment https://forums.phpfreaks.com/topic/248134-need-help-with-mail-form/ Share on other sites More sharing options...
Howlin1 Posted September 29, 2011 Share Posted September 29, 2011 What I am seeing is that you haven't set it so the email won't send if one or both of your requirements aren't met. So you need it like if (validatePhone($phone)) { if (check_email_address($email)) { send email } else { invalid email } } else { invalid phone number } So in that case the email will only send if both the phone and email are valid. Quote Link to comment https://forums.phpfreaks.com/topic/248134-need-help-with-mail-form/#findComment-1274175 Share on other sites More sharing options...
mikesta707 Posted September 29, 2011 Share Posted September 29, 2011 In addition to howlin's example, you can also accomplish what you want with the following: simply use exit to stop executing once you find an error. For example, your if statement for phone validation would become if (validatePhone($phone)) { echo $phone . ' is a valid phone number.'; } else { echo $phone . ' is not valid phone number.'; //not valid so exit exit("Email not sent"); } you would obviously have to change your other validation if statements in a similar manner. Some do not like this method, as if you exit execution at this point, other parts of the page will not load (including scripts you may need somewhere below this point. So you can simply set a flag variable to true or false depending on the error. The change to your if statements would be similar. $errors = false;//no errors. put this at top of page ... .. if (validatePhone($phone)) { echo $phone . ' is a valid phone number.'; } else { echo $phone . ' is not valid phone number.'; $errors = true;//there was an error. set the flag } ... make same change for rest of validation functions if (!$errors){//if theres no errors mail (... your arguments here ...); } .. rest of script Hope this helps Quote Link to comment https://forums.phpfreaks.com/topic/248134-need-help-with-mail-form/#findComment-1274190 Share on other sites More sharing options...
postonoh Posted October 5, 2011 Author Share Posted October 5, 2011 thanks! Quote Link to comment https://forums.phpfreaks.com/topic/248134-need-help-with-mail-form/#findComment-1276219 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.