0

i have a registration form that should insert data but im always getting this error after submitting my form

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'first_name' cannot be null

HTML under sign-up.php

<div class="form-group">
                <label>Complete Name:</label>
                <input type="text" class="form-control" name="fname" placeholder="First Name"><br>
                <input type="text" class="form-control" name="mname" placeholder="Middle Name"><br>
                <input type="text" class="form-control" name="lname" placeholder="Last Name (this will be your username)" 
                value="<?php if(isset($error)){echo $uname;}?>"><br>
            </div>
            <div class="form-group">
                <input type="password" class="form-control" name="txt_upass" placeholder="Password (more than 6 characters)"><br>
            </div>

PHP under sign-up.php

if(isset($_POST['btn-signup']))
{   
    $fName = strip_tags($_POST['fname']);
    $mName = strip_tags($_POST['mname']);
    $uname = strip_tags($_POST['lname']);
    $upass = strip_tags($_POST['txt_upass']);

    if($uname=="")  {
        $error[] = "provide username !";    
    }
    else if($upass=="") {
        $error[] = "provide password !";
    }
    else if(strlen($upass) < 6){
        $error[] = "Password must be atleast 6 characters"; 
    }
    else
    {
        try
        {
            $stmt = $user->runQuery("SELECT last_name FROM users WHERE last_name=:uname");
            $stmt->execute(array(':uname'=>$uname));
            $row=$stmt->fetch(PDO::FETCH_ASSOC);

            if($row['last_name']==$uname) {
                $error[] = "Username already taken !";
            }
            else
            {
                if($user->register($fName,$mName,$uname,$upass)){   
                    $user->redirect('sign-up.php?joined');
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }   
}

PHP function under class.user.php

public function register($fName,$mName,$uname,$upass)
    {
        try
        {
            $new_password = password_hash($upass, PASSWORD_DEFAULT);

            $stmt = $this->conn->prepare("INSERT INTO users(first_name,middle_name,last_name,user_pass) 
                                                       VALUES(:fName,:mName,:uname,:upass)");

            $stmt->bindparam(":fName", $first_name);
            $stmt->bindparam(":mName", $middle_name);                                    
            $stmt->bindparam(":uname", $last_name);
            $stmt->bindparam(":upass", $new_password);                                            

            $stmt->execute();   

            return $stmt;   
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }               
    }
Kent Abrio
  • 445
  • 2
  • 9
  • 27

3 Answers3

2

Variable names are differ, change here

        $stmt->bindparam(":fName", $fName);
        $stmt->bindparam(":mName", $mName);                                    
        $stmt->bindparam(":uname", $uname);
        $stmt->bindparam(":upass", $upass);                                            
Niklesh Raut
  • 34,013
  • 16
  • 75
  • 109
1

Make sure, you are binding the all the variable names, you used in the register($fName,$mName,$uname,$upass) function.

Instead of: $stmt->bindparam(":fName", $first_name)
it should be: $stmt->bindparam(":fName", $fname).

... the error means, that first_name cannot be empty im the database.

Maurice Meyer
  • 17,279
  • 4
  • 30
  • 47
0

i got it, i used wrong parameters in my bindparam, the second parameter should be $fName rather than $first_name.

Kent Abrio
  • 445
  • 2
  • 9
  • 27