<?php
include "session.php";
include "Database.php";
class User{
private $db;
public function __construct(){
$this->db = new Database();
}
public function userRegistration($data){
$name = $data['name'];
$usnm = $data['usnm'];
$email = $data['email'];
$pass = md5($data['pass']);
$chk_email = $this->emailcheck($email);
if($name == "" OR $usnm == "" OR $email == "" OR $pass == ""){
$msg = "<div class='alert alert-denger'><strong>Error !</strong>Field must not be empty</div>";
return $msg;
}
if(strlen($usnm) < 3){
$msg = "<div class='alert alert-denger'>username too short!</div>";
return $msg;
}
elseif(preg_match('/[^a-z0-9_-]+/i' ,$usnm)){
$msg = "<div class='alert alert-denger'>Username must in alphanumeric!</div>";
return $msg;
}
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
$msg = "<div class='alert alert-denger'>Invalid Email Id!</div>";
return $msg;
}
if($chk_email == true){
$msg = "<div class='alert alert-denger'>Email Id Already Exist!</div>";
return $msg;
}
$sql = "insert into register (name,user_name,email_id,password) values (:name, :username, :email, :password)";
$query = $this->db->pdo->prepare($sql);
$query->bindValue(':name',$name);
$query->bindValue(':user_name',$usnm);
$query->bindValue(':email_id',$email);
$query->bindValue(':password',$pass);
$result = $query->execute();
if($result){
$msg = "<div class='alert alert-success'><strong>Success</strong>You have been Registered</div>";
return $msg;
}else{
$msg = "<div class='alert alert-denger'><strong>Error !</strong>Sorry, there has been problem inserting your details!</div>";
return $msg;
}
}
public function emailcheck($email){
$sql = "select email_id from register email_id = :email";
$query = $this->db->pdo->prepare($sql);
$query->bindparam(':email_id', $email);
$query->execute();
if($query->rowCount() > 0){
return true;
}else{
return false;
}
}
}
?>
and i got this error
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\xampp\htdocs\test\lib\user.php:71 Stack trace: #0 C:\xampp\htdocs\test\lib\user.php(71): PDOStatement->execute() #1 C:\xampp\htdocs\test\lib\user.php(19): User->emailcheck('jpjadeja24@gmai...') #2 C:\xampp\htdocs\testegister.php(7): User->userRegistration(Array) #3 {main} thrown in C:\xampp\htdocs\test\lib\user.php on line 71
The parameter names used in the bindValue()
call have to match those used in the query
So
$sql = "insert into register
(name,user_name,email_id,password)
values (:name, :username, :email, :password)";
$query = $this->db->pdo->prepare($sql);
$query->bindValue(':name',$name);
$query->bindValue(':user_name',$usnm);
// The FIX
//$query->bindValue(':email_id',$email);
$query->bindValue(':email',$email);
$query->bindValue(':password',$pass);
$result = $query->execute();
Alternatively, change the query param
$sql = "insert into register
(name,user_name,email_id,password)
values (:name, :username, :email_id, :password)";
// ^^^^^^^^^
$query = $this->db->pdo->prepare($sql);
$query->bindValue(':name',$name);
$query->bindValue(':user_name',$usnm);
$query->bindValue(':email_id',$email);
$query->bindValue(':password',$pass);
$result = $query->execute();
Also this will be your next problem, a missing WHERE and you have made the same mistake with the binding
public function emailcheck($email){
$sql = "select email_id from register WHERE email_id = :email";
// ^^^^^
$query = $this->db->pdo->prepare($sql);
// AND THE SAME FIX REQUIRED HERE
//$query->bindparam(':email_id', $email);
$query->bindValue(':email',$email);
$query->execute();
My be because of the typo while assigning the values to the parameters. This should work. Modify your query on line #47
$sql = "insert into register (name,user_name,email_id,password) values (:name, :user_name, :email_id, :password)";