This is continuation and implementation of feedback found in this post: Basic user registration code
I just began to use the PDO object, I'm not sure if i'm using it efficiently. Are there any security issues? Is the myEncrypt function suitable enough or still a bit lacking?
initialise.php:
try {
$db = new PDO("mysql:host=$db_hostname;dbname=$db_database", $db_username, $db_password);
}
catch(PDOException $e)
{
echo "Failed to connect to server";
}
function myEncrypt($password){
$i = "$password"."$salt1";
$hash1 = md5($i);
$j = "$salt2"."$hash1";
$hash2 = md5($j);
return $hash2;
}
Registration.php:
require 'initialise.php';
//View - Leaving this as is for now. Haven't learnt css/html in depth yet.
echo <<<_REGFORM
<form align=center action="registration.php" method ="post"><pre>
Register an account:
Username <input type="text" name="regusername"/>
Password <input type="password" name="regpassword"/>
Retype Password <input type="password" name ="checkregpassword"/>
<input type="submit" value="Register"/>
</pre></form>
_REGFORM;
//Checks inputs for length requirements, if two passwords are the same, if filter was successful
if ($_SERVER['REQUEST_METHOD'] === "POST") {
filter_input(INPUT_POST, $_POST, FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE);
$usernameclean = $_POST['regusername'];
$password = $_POST['regpassword'];
$checkpassword = $_POST['checkregpassword'];
if (isset($username, $password, $checkpassword)) {
if (strlen($username) < 5) {
$errors['username'][] = "Usernames must be at least 5 characters in length.";
}
if (strlen($username) > 32) {
$errors['username'][] = "Usernames have a maximum limit of 32 characters.";
}
if (strlen($password) < 5) {
$errors['password'][] = "Passwords must be at least 5 characters in length.";
}
if ($password <> $checkpassword) {
$errors['password'][] = "Your passwords must be the same.";
}
}
if (!count($errors)) {
$hashedpassword = myEncrypt($password); //function defined in initialise.php
$checkUsername_query = "SELECT user_id FROM users WHERE username='$usernameclean'";
$checkUsername_result = $db->query($checkUsername_query)->fetch();
if (!$checkUsername_result)
{
//SETS UP USER ACCOUNTS, DEFINES 5 FILE SLOTS
try {
$db->beginTransaction();
$createUser_query = "INSERT INTO users(username,password) VALUES('$usernameclean','$hashedpassword')";
$createUser_result = $db->exec($createUser_query);
$getuserid_query = "SELECT user_id FROM users WHERE username='$usernameclean'";
$getuserid = $db->query($getuserid_query);
$user_id = $getuserid->fetch();
//ASSIGNS 5 File slots into "files" (File-information)
for ($i = 1; $i <= 5; $i++) {
$assignfileslots = "INSERT INTO files(user_id) VALUES('$user_id[0]')";
$db->exec($assignfileslots);
}
$db->commit();
echo "Thanks " . htmlspecialchars($usernameclean) . ", your account has been created! Please login.<br/>";
} catch (PDOException $e)
{
$db->rollback();
echo "Your account could not be created, please try again later.";
}
} else
{
echo "Username Unavailable, please try another username";
}
}
if (count($errors)) {
echo '<ul>';
foreach ($errors as $elements => $errs) {
foreach ($errs as $err) {
echo '<li>' . htmlspecialchars($err) . '</li>';
}
}
echo '<ul>';
}
}
?>