TecNik Posted November 18, 2012 Share Posted November 18, 2012 Hi there, I'm a newbie to PHP but am gradually implementing it more into sites and learning as I go. I recently found an article regarding PHP contact forms, the code for this is below. So far so good, I've managed to get the example to work. Please can someone explain why it is that the Spam check validation seems to take place before everything else? If the field is left blank or the total is wrong the error message seems to take priority even though one of the other fields before it is blank? Is it something to do with this being numerical? Thanks in advance. Nick <div id="contentForm" align="center"> <!-- The contact form starts from here--> <?php $error = ''; // error message $name = ''; // sender's name $email = ''; // sender's email address $subject = ''; // subject $message = ''; // the message itself $spamcheck = ''; // Spam check if(isset($_POST['send'])) { $name = $_POST['name']; $email = $_POST['email']; $subject = $_POST['subject']; $message = $_POST['message']; $spamcheck = $_POST['spamcheck']; if(trim($name) == '') { $error = '<div class="errormsg">Please enter your name!</div>'; } else if(trim($email) == '') { $error = '<div class="errormsg">Please enter your email address!</div>'; } else if(!isEmail($email)) { $error = '<div class="errormsg">You have enter an invalid e-mail address. Please, try again!</div>'; } if(trim($subject) == '') { $error = '<div class="errormsg">Please enter a subject!</div>'; } else if(trim($message) == '') { $error = '<div class="errormsg">Please enter your message!</div>'; } else if(trim($spamcheck) == '') { $error = '<div class="errormsg">Please enter the number for Spam Check!</div>'; } else if(trim($spamcheck) != '5') { $error = '<div class="errormsg">Spam Check: The number you entered is not correct! 2 + 3 = ???</div>'; } if($error == '') { if(get_magic_quotes_gpc()) { $message = stripslashes($message); } // the email will be sent here // make sure to change this to be your e-mail $to = "this@emailaddress.co.uk"; // the email subject // '[Contact Form] :' will appear automatically in the subject. // You can change it as you want $subject = '[Website Contact Form] : ' . $subject; // the mail message ( add any additional information if you want ) $msg = "From : $name \r\ne-Mail : $email \r\nSubject : $subject \r\n\n" . "Message : \r\n$message"; mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n"); ?> <!-- Message sent! (change the text below as you wish)--> <div style="text-align:center;"> <p class="grey">Thank you for your enquiry.<br><br> Your message has been sent. </p> </div> <!--End Message Sent--> <?php } } if(!isset($_POST['send']) || $error != '') { ?> <!--Error Message--> <?=$error;?> <form method="post" name="contactform" id="contactform" class="rounded" action=""> <div class="field"> <label for="name"><span class="required">*</span> Full Name:</label> <input name="name" type="text" class="input" id="name" value="<?=$name;?>" /> </div> <div class="field"> <label for="email"><span class="required">*</span> Email: </label> <input name="email" type="text" class="input" id="email" value="<?=$email;?>" /> </div> <div class="field"> <label for="subject"><span class="required">*</span> Subject: </label> <input name="subject" type="text" class="input" id="subject" value="<?=$subject;?>" /> </div> <div class="field"> <label><span class="required">*</span> Message: </label> <textarea name="message" class="input textarea" id="message"><?=$message;?></textarea> </div> <div class="field"> <label><span class="required">*</span> Spam Check: <b>2+3=</b></label> <input name="spamcheck" type="text" class="input" id="spamcheck" size="4" value="<?=$spamcheck;?>" /><br /><br /> </div> <!-- Submit Button--> <input name="send" type="submit" class="button" id="send" value="Submit" /> </form> <!-- E-mail verification. Do not edit --> <?php } function isEmail($email) { return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i" ,$email)); } ?> <!--End of Contact Form--> </div> Quote Link to comment https://forums.phpfreaks.com/topic/270880-php-form-validation/ Share on other sites More sharing options...
mostafatalebi Posted November 18, 2012 Share Posted November 18, 2012 You haven't explained your problem clearly. Please go deeper, highlight regions which is suspicious and ... so it let's the visitors to understand the question first. Quote Link to comment https://forums.phpfreaks.com/topic/270880-php-form-validation/#findComment-1393447 Share on other sites More sharing options...
TecNik Posted November 18, 2012 Author Share Posted November 18, 2012 Thanks for the reply. As for the clarification... When the validation of the form data takes place the code below... else if(trim($spamcheck) == '') { $error = '<div class="errormsg">Please enter the number for Spam Check!</div>'; } else if(trim($spamcheck) != '5') { $error = '<div class="errormsg">Spam Check: The number you entered is not correct! 2 + 3 = ???</div>'; } takes precedence over this... if(trim($name) == '') { $error = '<div class="errormsg">Please enter your name!</div>'; } else if(trim($email) == '') { $error = '<div class="errormsg">Please enter your email address!</div>'; } else if(!isEmail($email)) { $error = '<div class="errormsg">You have enter an invalid e-mail address. Please, try again!</div>'; } if(trim($subject) == '') { $error = '<div class="errormsg">Please enter a subject!</div>'; } else if(trim($message) == '') { $error = '<div class="errormsg">Please enter your message!</div>'; } If there a way to stop this happening? I'd like the validation to take place as per the order of the form fields i.e. name, email, subject message, spam check. At present it's executing in this order - spam check, name, email, subject, message Thanks again, Nick Quote Link to comment https://forums.phpfreaks.com/topic/270880-php-form-validation/#findComment-1393454 Share on other sites More sharing options...
MDCode Posted November 19, 2012 Share Posted November 19, 2012 Php goes line by line, by using echo $error it will always go to the last one set. If you wish to change it move it to the top Quote Link to comment https://forums.phpfreaks.com/topic/270880-php-form-validation/#findComment-1393463 Share on other sites More sharing options...
Zane Posted November 19, 2012 Share Posted November 19, 2012 (edited) A much better approach to this would be to use an array instead of having a billion ifs and if elses.. if(trim($name) == '') $error[] = '<div class="errormsg">Please enter your name!'; if(trim($email) == '') $error[] = '<div class="errormsg">Please enter your email address!</div>'; if(!isEmail($email)) $error[] = '<div class="errormsg">You have enter an invalid e-mail address. Please, try again!</div>'; if(trim($subject) == '') $error[] = '<div class="errormsg">Please enter a subject!</div>'; //etcetera etcetera.. Then you can use the implode function in the end to echo them...as well as check for errors. if(count($error) != 0) echo implode("\n", $errors); else { Execute code for success.... } Edited November 19, 2012 by Zane Quote Link to comment https://forums.phpfreaks.com/topic/270880-php-form-validation/#findComment-1393483 Share on other sites More sharing options...
TecNik Posted December 3, 2012 Author Share Posted December 3, 2012 Hi Guys, Thanks for the help with the query, it was a big help. I managed to get the implode error handling working, really liked the method, just had trouble getting the mailing of the form data working. In the end I changed the code as per SocialCloud's suggestion and that solved it. Thanks once again to both of you for taking the time to help out. Quote Link to comment https://forums.phpfreaks.com/topic/270880-php-form-validation/#findComment-1397096 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.