Jump to content

Php Form Validation


TecNik

Recommended Posts

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>

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by Zane
Link to comment
Share on other sites

  • 2 weeks later...

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.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.