Authentication system is the most important part for the developers to implement in a web application. It is necessary if you want to provide limited access of your application for anonymous user. If you want to create a web application with secure admin area or a user signup and signin with php and mysql this post will help you.
Here are the steps to create a simple application that allow user to signup and signin and view secure page.
Database : First we need to create a database for example simpledb now create a table users that has two fields username and password with auto incremented field id.
CREATE TABLE `simpledb`.`users` ( `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 20 ) NOT NULL , `password` VARCHAR( 64 ) NOT NULL );
Now for database queries we will use PDO(PHP Data Object). If you are not familiar with PDO I recommend to read this before go ahead.
function connectDb() { global $pdo; try { $pdo = new PDO('mysql:host=localhost;dbname=simpledb', 'root', ''); } catch (PDOException $e) { die('MySQL connection fail! ' . $e->getMessage()); } }
connectDb function will establish the database connection.
Signup: Now we will create a signup page for new users to create their account. To create a signup form use following HTML code and place it in signup.php file.
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Sign Up</title> </head> <body> <h1>Create Account</h1> <p>Already have an account? <a href="signin.php">Login</a></p> <!-- to display error or success message --> <?php if (!empty($message)): ?> <p><?php echo $message?></p> <?php endif ?> <!-- signup form --> <form action="" method="post"> <input type="text" name="username" placeholder="username"> <input type="password" name="password" placeholder="password"> <input type="submit" value="Sign Up"> </form> </body> </html>
The create_user function will add user information to users table.
function create_user($username, $password) { # check if username is already exists if (username_exists($username)) return false; # add new user global $pdo; $stmt = $pdo->prepare(' INSERT INTO users (username, password) values (:username, :password)'); $stmt->execute( array(':username' => $username, ':password' => md5($password)) ); if ($pdo->lastInsertId()) return true; else return false; }
To call create_user function you need to add following code above signup.php file.
$message = ""; if(!empty($_POST["username"]) && !empty($_POST["password"])){ if(create_user($_POST["username"], $_POST["password"])){ $message = "User account created successfully."; } else { $message = "Username already exists."; } }
Sign In: Now we are going to create a sign in form. this form is almost similar to sign up form. You need to add this code to signin.php file.
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Sign In</title> </head> <body> <h1>Sign In</h1> <!-- to display error or success message --> <?php if (!empty($message)): ?> <p><?php echo $message?></p> <?php endif ?> <form action="" method="post"> <input type="text" name="username" placeholder="username"> <input type="password" name="password" placeholder="password"> <input type="submit" value="Sign In"> </form> </body> </html>
The login function will check user input into the database if entered username and password found in database it sets the session variable and returns true.
function login($username, $password){ global $pdo; $stmt = $pdo->prepare(' SELECT id, username FROM users WHERE username = :username AND password = :password LIMIT 1'); $stmt->execute(array(':username' => $username, 'password' => md5($password))); if ($data = $stmt->fetch( PDO::FETCH_OBJ )) { # set session $_SESSION['username'] = $data->username; return true; } else { return false; } }
To call login function you need to add below code on top of the signin.php file.
$message = ""; if(!empty($_POST["username"]) && !empty($_POST["password"])){ if(login($_POST["username"], $_POST["password"])){ $message = "You are logged in successfully."; } else { $message = "Username and password not matched"; } }
This is a sample login system to understand how user signup and signin with php and mysql works. You need to add a proper validation methods with user inputs.