PHP Form Validation ???

j4mes_bond25

New Member
I wonder if anyone around could possibly enlighten me a little (or indeed, a LOT) towards "Contact Us" form validation in PHP.

Basically, I've created the form & then typed in the validation related codes from 3 different books along with differerent websites so far, but ONLY, if I understood it.

However, there are only couple things that's beyond me, which can be seen from the comment around the code that I didn't understand i.e. comment typed after "//"

Much of the code is still missing bearing in mind my expectation from this form and my lack of knowledge in how to go about doing it.

This is what I'm aiming for:

>> Users MUST fill in all the fields (including radio button field and drop-down menu field)
>> If they don't then they should get a message saying so
>> If they don't fill any certain field then they should get a message saying "Please fill in your E-mail" (for example) OR if they don't select appropriate "radio button" option or "drop-down" menu option then they should get an error message saying "please select the appropriate "Title" from the drop-down list", etc. OR "please choose the means of contacting you" (by choosing appropriate radio button)
>> The "blanked" or "incorrect data entry" field should turn to "red" making it easier for user to realise what's missing

>> After user fills everything & when they click "Preview" they should get some sort of "message" (ONLY if the data is valid and ALL required fields filled) saying "Following are the details you filled in" and then underneath it, CONFIRM their title, name, e-mail, telephone number, message, ways of contacting back to them, etc. (basically, ALL the field) with "Submit" and "Edit" button. Selecting "Edit" will take them back to the form, with all the data they filled in STILL there (rather than making the re-type everything)
>> If they simply click on submit (after filling the required & valid data) then they should get a message saying "Thanks for your message, we'll be in touch shortly".

The codes that I've created as yet are as follows:

Code:
<?php include("menu.inc");?>

<div id="centerContent">

<p class="first-letter">Please fill the following form in for any enquiries that you may have:</p>
<p>

<?php

// if the form has been posted, analyse it: 
if ($_POST) {
foreach ($_POST as $field => $value) {
$value = trim($value);
}

// creating variables
$inquiry=$_POST['inquiry'];
$title=$_POST['title'];
$first_name=$_POST['first_name'];
$last_name=$_POST['last_name'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$message=$_POST['message'];
$reply=$_POST['reply'];
$contact=$_POST['contact'];

// create empty error variable
$error = ""; 

// check for data in required fields
if (($inquiry == "") || ($title == "") || ($first_name == "") || ($last_name == "") || ($email == "") || ($phone == "") || ($message == "") || ($reply == "") || ($contact == "")) {
$error = "Please fill in all the required fields!";
}

// validate first_name
if ((ctype_alpha($first_name) == FALSE 
	$error = "Please enter a valid name (Alphabets only)<br/>";
}

// validate surname
if ((ctype_alpha($last_name) == FALSE {
	$error = "Please enter a valid last name (Alphabets only)<br/>";
}

// validate e-mail
if ((strpos($email, "@") === FALSE || 
	(strpos($email, ".") === FALSE ||
	(strpos($email, " ") != FALSE || // DON'T KNOW WHY USING "!=" SIGN
	(strpos($email, "@") === FALSE || // DON'T KNOW WHY USING 3 "=" SIGN
	(strpos($email, "@") > strrpos($email, "."))) {
	$error = "Please enter a valid e-mail address<br/>";
}

// validate phone
if (is_numeric($phone) == FALSE {
	$error = "Please enter a valid contact number (must contain numbers only)<br/>";
}

//If everything is OK then Confirmation of each field's data as filled by the user
else {
echo "<p><b>Nature of Inquiry:</b> $inquiry<br/>";
echo "<p><b>Title:</b> $title<br/>";
echo "<p><b>First Name:</b> $first_name<br/>";
echo "<p><b>Last Name:</b> $last_name<br/>";
echo "<p><b>E-mail:</b> $email<br/>";
echo "<p><b>Contact No.:</b> $phone<br/>";
echo "<p><b>Message:</b> $message<br/>";
echo "<p><b>Reply:</b> $reply<br/>";
echo "<p><b>Contact Method:</b> $contact<br/>";

echo "Thanks for contacting us. We will get back to you shortly!";
}
}
?>
</p>

<table class="table">

<tr class="tr">
<td class="td"><form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Nature of Enquiry:</td>
<td class="td"><select name="inquiry" value="<?php echo $inquiry ?>">
<option></option>
<option>General Inquiry</option>
<option>Price Quotation</option>
<option>Comments</option>
<option>Other</option>
</select></td>
</tr>

<tr class="tr">
<td class="td">Title:</td>
<td class="td"><select name="title" value="<?php echo $title ?>">
<option></option>
<option>Mr</option>
<option>Miss</option>
<option>Mrs</option>
<option>Other</option>
</select></td>
</tr>

<tr class="tr">
<td class="td">First Name:</td>
<td class="td"><input type="text" size="30" maxlength="30" name="first_name" value="<?php echo $first_name ?>"/></td>
</tr>

<tr class="tr">
<td class="td">Last Name:</td>
<td class="td"><input type="text" size="30" maxlength="30" name="last_name" value="<?php echo $last_name ?>"/></td>
</tr>

<tr class="tr">
<td class="td">E-mail:</td>
<td class="td"><input type="text" size="30" maxlength="30" name="email" value="<?php echo $email ?>"/></td>
</tr>

<tr class="tr">
<td class="td">Contact No.:</td>
<td class="td"><input type="text" size="30" maxlength="20" name="phone" value="<?php echo $phone ?>"/></td>
</tr>

<tr class="tr">
<td class="td">Message:</td>
<td class="td"><textarea rows="10" cols="50" wrap="physical" name="message" value="<?php echo $message ?>">
</textarea></td>
</tr>

<tr class="tr">
<td class="td">Reply Required:</td>
<td class="td"><input type="radio" name="reply" value="<?php echo $reply ?>"/>Yes
<input name="reply" type="radio"/>No
<input name="reply" type="radio"/>Maybe</td>
</tr>

<tr class="tr">
<td class="td">How would you like to be contacted (if required)?<br/><br/></td>
<td class="td"><input type="radio" name="contact" value="<?php echo $contact ?>"/>E-mail
<input type="radio" name="contact"/>Telephone</td>
</tr>

<tr class="tr">
<td class="td"></td>
<td class="td"><input type="reset" name="reset" value="Reset"/>
<input type="preview" name="preview" value="Preview"/></td>
<input type="submit" name="submit" value="Submit"/></td>
</form>
</tr>
</table>
</div>
 

dqhendricks

New Member
Your code uses ifs instead of else ifs, which causes the form to validate even if it does not match any of the criteria, except for the last criteria. See edits below.

Code:
<?php
// if the form has been posted, analyse it: 
if ($_POST) {
    foreach ($_POST as $field => $value) {
        $value = trim($value);
    }

    // creating variables
    $inquiry=$_POST['inquiry'];
    $title=$_POST['title'];
    $first_name=$_POST['first_name'];
    $last_name=$_POST['last_name'];
    $email=$_POST['email'];
    $phone=$_POST['phone'];
    $message=$_POST['message'];
    $reply=$_POST['reply'];
    $contact=$_POST['contact'];

    // create empty error variable
    $error = ""; 

    // check for data in required fields
    if (($inquiry == "") || ($title == "") || ($first_name == "") || ($last_name == "") || ($email == "") || ($phone == "") || ($message == "") || ($reply == "") || ($contact == "")) {
        $error = "Please fill in all the required fields!";
    }

    // validate first_name
    else if ((ctype_alpha($first_name) == FALSE 
        $error = "Please enter a valid name (Alphabets only)<br/>";
    }

    // validate surname
    else if ((ctype_alpha($last_name) == FALSE {
        $error = "Please enter a valid last name (Alphabets only)<br/>";
    }

    // validate e-mail
    else if ((strpos($email, "@") === FALSE || (strpos($email, ".") === FALSE || (strpos($email, " ") !== FALSE || (strpos($email, "@") === FALSE || (strpos($email, "@") > strrpos($email, "."))) {
        $error = "Please enter a valid e-mail address<br/>";
    }

    // validate phone
    else if (is_numeric($phone) == FALSE {
        $error = "Please enter a valid contact number (must contain numbers only)<br/>";
    }

    //If everything is OK then Confirmation of each field's data as filled by the user
    else {
        echo "<p><b>Nature of Inquiry:</b> $inquiry<br/>";
        echo "<p><b>Title:</b> $title<br/>";
        echo "<p><b>First Name:</b> $first_name<br/>";
        echo "<p><b>Last Name:</b> $last_name<br/>";
        echo "<p><b>E-mail:</b> $email<br/>";
        echo "<p><b>Contact No.:</b> $phone<br/>";
        echo "<p><b>Message:</b> $message<br/>";
        echo "<p><b>Reply:</b> $reply<br/>";
        echo "<p><b>Contact Method:</b> $contact<br/>";

        echo "Thanks for contacting us. We will get back to you shortly!";
    }
}
?>

Also, the === and !== mean they are testing strict equality. If you do not use strict equality with strpos(), if the character is the first character, it will return a character position of 0, which will equate to false if using non strict == or !=. Hope that makes sense.

If you want to learn more about PHP, there is a good development blog at http://www.spotlesswebdesign.com/blog.php
 

Denno

New Member
Your code uses ifs instead of else ifs, which causes the form to validate even if it does not match any of the criteria, except for the last criteria.

I don't believe the else if's are the right way to go. From looking at that code, the OP wants to check every field for validity, however using else if's as you have suggested will mean that as soon as one error is found, no others will be checked for.

j4mes_bond25: Leave the code as if's as you have it in the original post, with multiple if's. I would suggest you look into using javascript for your form validation though. Using php means that the user will have to go through a page refresh to be able to see their errors (unless you're using AJAX of course). Using javascript will alert the user to the incorrectly filled out form fields once they click the button, but before the form is sent, and therefore before the page is refreshed.

Denno
 

Dorky

New Member
idk why this was in new posts or why it was dug up. pulled my comment when i looked at the original date :|
 
Last edited:

che09

New Member
idk why this was in new posts or why it was dug up. pulled my comment when i looked at the original date :|

I was about to post my comment too,when I read your message and looked at the date myself. Cool.. but,the replies were just recently! :D
 
Top