Reputation: 6196
I am designing a registration form in php. i want to add some validation in my form. validations are related to require field validation. this is my code.
<?php
include('connect.php');
if(isset($_REQUEST['Register']))
{
$error='';//initialize $error to blank
if(trim($_POST[userid])==''){
$error.="Please enter a username!<br />"; //concatenate the $error Message with a line break
}
if(trim($_POST[password])==''){
$error.="Please Enter password! <br />";//concatenate more to $error
}
if(trim($_POST[email])=='')
{
$error.="Please Enter email address !<br />";
}
else
{
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email])) {
$error="The e-mail you entered was not in the proper format!";
}
}
if(trim($_POST[regAs])=='NULL')
{
$error.="Please select Register As !<br />";
}
if($error!='')
{
echo "<span style=color:red>$error</span>";
//Hmmmm no text is in $error so do something else, the page has verified and the email was valid
// so uncomment the line below to send the user to your own success page or wherever (swap
//yourpage.php with your files location).
//echo "script type=\"text/javascript\">window.location=\yourpage.php\"<script>";
}
else
{
$userid=$_REQUEST['userid'];
$name=$_REQUEST['name'];
$password=$_REQUEST['password'];
$repassword=$_REQUEST['repassword'];
$email=$_REQUEST['email'];
$regAs=$_REQUEST['regAs'];
if($password!=$repassword)
{
echo "<script>alert('both are diferent password')</script>";
}
else
{
mysql_query("insert into login(userid,name,password,email,regAs) values('$userid','$name','$password','$email','$regAs')");
}
}
}
?>
<html>
<head></head>
<body>
<form action="" method="post" name="f">
<table align="center">
<tr>
<td>User ID :</td><td>
<input type="text" name="userid" value=""></td>
</tr>
<tr>
<td>Name :</td><td>
<input type="text" name="name" value=""></td>
</tr>
<tr>
<td>Password : </td>
<td><input type="password" name="password" value=""></td>
</tr>
<tr>
<td>Re-Enter Password : </td>
<td><input type="password" name="repassword" value=""></td>
</tr>
<tr>
<td>Email id :</td><td>
<input type="text" name="email" value=""></td>
</tr>
<tr>
<td>Register As :</td><td>
<select id="regAs" name="regAs">
<option value="NULL">SELECT</option>
<option value="Artist">Artist</option>
<option value="Buyer">Buyer</option>
</select></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="Register" value="Register"</td></tr>
</table>
</form>
</body>
</html>
and this is the out put screen to check validation. these error messages are coming at first line. But i want that error must come infrontof each line. for example if user does not enter email then error must show in front of email text box. please suggest me what should i do..?
Upvotes: 0
Views: 4175
Reputation: 3041
Well if you want the errors to be in front of the correct form field, you will somehow have to get the errors at the right place in your HTML. The simplest solution would be to create a variable or an array node for each possible form field and insert an error message into it if necessary. I'll give a short example:
<?php
include('connect.php');
if(isset($_REQUEST['Register'])) {
$errors = array(
'email' => '',
'username' => '',
//etc...
);
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email])) {
$error['email'] = "The e-mail you entered was not in the proper format!";
}
}
?>
and then in your HTML:
<tr>
<td>Email id :</td>
<td>
<input type="text" name="email" value="">
<?php echo $error['email']; ?>
</td>
</tr>
Furthermore don't user eregi, it is deprecatad. Use preg_match instead.
Upvotes: 1
Reputation: 102784
You can create an array with your errors as you validate each field...
// Might as well define them all so we don't have to use isset() later
// This isn't necessary, it just makes the echo logic easier
foreach ($_POST as $k => $v) {
$errors[$k] = array(); // No error yet
}
if ( ! valid_email($_POST['email'])) {
// Add an error to the array
$errors['email'][] = 'The email address is not valid.';
}
...then echo the errors in your HTML:
<tr>
<td>Email id :</td>
<td>
<input type="text" name="email" value="">
<?php echo implode(', ', $errors['email']); ?>
</td>
</tr>
I used implode()
to split the messages by a comma, do whatever works for you. I assumed you'll want to collect multiple errors for each field. If you only need one error per field, consider using a string rather than an array for each field.
Upvotes: 0