2

This is my registration form I am using both javascript and php for validating form, javascript code works well in showing validation error messages however somethings wrong with php code,when javascript is disabled php code should show form validation error messages by refrshing page on form submit,but no error messages appear and no data is inserted. On clicking submit, page is reloaded but even form does not appear.

<?php
 error_reporting('E_ALL ^ E_NOTICE');
 if(isset($_POST['reg'])){
 $fn = ucfirst($_POST['fname']);
 $ln = ucfirst($_POST['lname']);
 $un = $_POST['username'];
 $em = $_POST['email'];
 $pswd = $_POST['password'];
 $d= date("Y-m-d");
if (strlen($fn) < 2 || strlen($fn) > 15) {
$error =  "First name must be 2 to 15 characters long";
 }
elseif (strlen($ln) < 2 || strlen($ln) > 15) {
$error =  "Last name must be 2 to 15 characters long";
}
elseif($em==""){
$error =  "Email cannot be empty";
}
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$er = "Invalid email format";
}
elseif($pswd==""){
$error =  "Fill your password";
}
elseif($pswd!=$pswd2){
$error =  "Password and Confirm password do no match";
}
else{

$pswd = password_hash($pswd, PASSWORD_DEFAULT);
$stmt = $db->prepare("INSERT INTO table1 (username,firstname,lastname,email,password) VALUES (:username,:firstname,:lastname,:email,:password)");  
$stmt->execute(array(':username'=>$un,':firstname'=>$fn,':lastname'=>$ln,':email'=>$em,':password'=>$pswd));
}
if ($stmt->rowCount() == 1) {
 header("Location:login.php");
} 
else {
echo "Error occured please try again.";
}
}
?>

<form action="" method="post">
<input type="text" name="fname" id="fn" placeholder="First Name"/><br />
<input type="text" name="lname" id="ln"  placeholder="Last Name"/><br />
<input type="text" name="username" id="un" placeholder="Username" class="username" /><br />
<input type="email" name="email" id="em" placeholder="Email"/> <br />
<input type="password" name="password" id="pswd" placeholder="Password"/><br />
<input type="password" name="password2" id="pswd2" placeholder="Confirm Password"/><br />
<input type="submit" id="submit" name="reg" value="Create an Account">
<center><div id="er"><?php echo $error ?></div></center>
</form>
4
  • Where is your database connection code?? Commented Nov 19, 2015 at 11:39
  • Change your error reporting stuff to ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);, then you'll be able to see what's happening. Commented Nov 19, 2015 at 11:40
  • Have you turned on PHP Errors? Commented Nov 19, 2015 at 11:40
  • @Styphon I am using xampp I think error are on by default? Commented Nov 19, 2015 at 13:12

3 Answers 3

3

You should echo $error not $er

<center><div id="er"><?php echo $error; ?></div></center>
Sign up to request clarification or add additional context in comments.

Comments

1

You are doing a mistake:

$stmt->execute(array(':username'=>$un,':firstname'=>$fn,':lastname'=>$ln,':email'=>$em,':password'=>$pswd));

You should use 'username' instead of ':username'. like this:

$stmt->execute(array('username'=>$un,'firstname'=>$fn,'lastname'=>$ln,'email'=>$em,'password'=>$pswd));

Comments

0

There are a few inconsistencies in your code.

At the beginnig you assign $_POST['email'] to $em, but later you validate against a variable named $email, which doesn't exist at this point.

$em = $_POST['email'];
.
.
.
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $er = "Invalid email format"; //should maybe be $error
}

Then there is the password-validation:

elseif($pswd!=$pswd2){
    $error =  "Password and Confirm password do no match";
}

$pswd2 has never been defined in your code.

$stmt ist defined in the else-block of your validation, but you use it for getting the row-count after the validation. So, if any of your if-statements is true, this will cause an error.

It would be better if you change that part of your code to this:

else{
    $pswd = password_hash($pswd, PASSWORD_DEFAULT);
    $stmt = $db->prepare("INSERT INTO table1 (username,firstname,lastname,email,password) VALUES (:username,:firstname,:lastname,:email,:password)");
    $stmt->execute(array(':username'=>$un,':firstname'=>$fn,':lastname'=>$ln,':email'=>$em,':password'=>$pswd));

    if ($stmt->rowCount() == 1) {
        header("Location:login.php");
    }
    else {
        echo "Error occured please try again.";
    }
}

After all it seems like you haven't error reporting activatet.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.