I'm making a basic user registration for a mailing list form for a website i'm working on. I've made the form and implemented basic error checking functionality, however i want this to be amended. At the moment when an error occurs, through a user failing to complete a field, it is added to an array of errors called errorList, when this has any content these errrors are echoed bqack to the user. It would be preferable however if any errors on behalf of the user mirror back the form they have submitted with correct values retained and incorrect form fields highlighted by adding a red outline to the input boxes and the label for the input box to also be highlighed. When these inputs are checked, rather than just checking if they are completed i would like to perform checks related to the particular inputs, e.g. checking if the email address is of a valid construct, and checking if the postcode (UK equivalent to ZIP code) is valid and contains only letters and numbers.
I'm using css to style my site and i know that the best way to add color to the error input boxes would be by adding an error class, i just dont know how i would implement this.
I'm using a functions page for my site as a template for the design, this is called functions.php and is called at the top of the script, pagetop() and pagebottom() are the functions that display the top and bottom half of the page. db.php is used to call my database connection to my mysql database where the correct data will be inputted.
This is what i've got so far:
<?php
require 'functions.php';
include 'db.php';
$pagename = "SUBSCRIBE";
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$house_number = $_POST['house_number'];
$street = $_POST['street'];
$town = $_POST['town'];
$postcode = $_POST['postcode'];
$county = $_POST['county'];
$submit = $_POST['submit'];
pagetop($pagename);
if (!$submit)
{
echo '
If you are interested in further details please complete this form</a>
';
?>
<br><br>
<form method="post" action="<? echo $PHP_SELF; ?>">
<table width="75%" cellpadding="4">
<tr>
<td>Name:</td>
<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="email" id="email"></td>
</tr>
<tr>
<td>Telephone Number:</td>
<td><input type="text" name="phone" id="phone"></td>
</tr>
<tr>
<td>House Name/Number:</td>
<td><input type="text" name="house_number" id="house_number"></td>
</tr>
<tr>
<td>Street:</td>
<td><input type="text" name="street" id="street"></td>
</tr>
<tr>
<td>Town:</td>
<td><input type="text" name="town" id="town"></td>
</tr>
<tr>
<td>Postocde:</td>
<td><input type="text" name="postcode" id="postcode"></td>
</tr>
<tr>
<td>County:</td>
<td><input type="text" name="county" id="county"></td>
</tr>
<tr>
<td> </td>
<td><input type="Submit" name="submit" value="Add"></td>
</tr>
</table>
</form>
<?
}
else
{
// set up error list array
$errorList = array();
$count = 0;
// validate text input fields
if (!$name) {
$errorList[$count] = "Invalid entry: Name"; $count++;
}
if (!$email) {
$errorList[$count] = "Invalid entry: Email"; $count++;
}
if (!$phone)
{
$errorList[$count] = "Invalid entry: phone"; $count++;
}
if (!$house_number)
{
$errorList[$count] = "Invalid entry: House Number"; $count++;
}
if (!$street)
{
$errorList[$count] = "Invalid entry: Street"; $count++;
}
if (!$town)
{
$errorList[$count] = "Invalid entry: Town"; $count++;
}
if (!$postcode)
{
$errorList[$count] = "Invalid entry: postcode"; $count++;
}
if (!$county)
{
$errorList[$count] = "Invalid entry: county"; $count++;
}
// check for errors
// if none found...
if (sizeof($errorList) == 0)
{
// generate and execute query
$query = "INSERT INTO subscription(name, email, phone, house_number, street, town, postcode, county) VALUES('$name', '$email', '$phone', '$house_number', '$street', '$town', '$postcode', '$county' )";
$result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
// print result
echo "<font size=-1>Insert Successful. <a href=index.php>Go back to the main menu</a>.</font>";
}
else
{
// errors found
// print as list
echo "<font size=-1>The following errors were encountered: <br>";
echo "<ul>";
for ($x=0; $x<sizeof($errorList); $x++)
{
echo "<li>$errorList[$x]";
}
echo "</ul></font>";
echo '<a href="javascript:history.back()">Return to subscription page</a>';
}
}
?>
<?
pagebottom()
?>
Thanks a lot.
by: shmertPosted on 2003-10-30 at 10:52:55ID: 9652353
Try this, assign each <tr> a class with the name of the field, making this class name the same as the input name. Also, have your inputs echo the value from the previous form data, if it is available. Example:
d> T['postcod e']); ?>"></td> T['county' ]); ?>"></td>
); $invalidFields[] = $field;
<tr class="postcode">
<td class="label">Postocde:</t
<td><input type="text" name="postcode" value="<?php echo @htmlspecialchars($_REQUES
</tr>
<tr class="county">
<td class="label">County:</td>
<td><input type="text" name="county" value="<?php echo @htmlspecialchars($_REQUES
</tr>
Then in your form validation code, iterate through the required fields and echo a CSS rule for any missing items. This code should go before the form gets generated.
<?php
$requiredFields = array('postcode','country'
$invalidFields = array();
foreach($requiredFields AS $field) {
if (empty($_REQUEST[$field]))
}
if ($invalidFields) {
echo '<style type="text/css">';
foreach($invalidFields AS $field) {
echo "tr.$field td.label { color: red; }\n";
echo "tr.$field td input { border: 1px solid red; }\n";
}
echo '</style>';
} else {
// no invalid fields means the form was successful
header("Location: done.php");
}
?>