ساخت فرم ورود با PHP

یک سیستم ثبت نام و فرم لاگین کاربران برای سیستم های تحت وبی که با کاربران زیادی سر و کار دارند بسیار مفید و لازم است.

به کمک سیستم ثبت نام و ورود کاربران خواهیم توانست برخی اطلاعات مفید از کاربران را نگهداری کرد و یا فرآیندهای کنترل دسترسی به بعضی از بخش های سایت اعمال کرد.

  • ممکن است در سایت های فروشگاهی نیاز به ذخیره سازی تاریخچه سفارشات و پرداخت های کاربران و امکان بررسی آنها توسط کاربر داشته باشیم.
  • و یا در سایت های آموزشی، دسترسی دانشجویان هر دوره به محتوای دوره هایی که در آنها ثبت نام کرده را کنترل کنیم.
  • همچنین برای بخش مدیریتی یک سایت داینامیک، نیاز به تایید هویت فرد جهت ارائه دسترسی مدیریتی خواهیم داشت.

همانطور که میبینید داشتن یک سیستم برای فرآیند ورود در سیستم های تحت وب تا حدود زیادی ضروری احساس میشود.

در این مقاله قصد داریم به صورت گام و به گام مراحل ساده ساخت فرم ورود به سایت برای ورود کاربران را طی کنیم.

ساخت فرم ورود سایت

در ابتدا باید فرمی برای دریافت اطلاعات ورود کاربر که در اینجا شامل نام کاربری و رمز عبور است ایجاد کنیم.

کدهای HTML یک فرم ورود ساده به صورت زیر نوشته شده است. این کدها را در فایلی با نام login.php قرار می‌دهم.

می‌توانید استایل دهی فرم را به سلیقه خود و با استفاده از کدهای CSS انجام دهید.

<html>
<header>
<title>صفحه ورود</title>
</header>
<body>

<form method="post" action="do-login.php">
    <div class="form-element">
        <label>نام کاربری</label>
        <input type="text" name="username" pattern="[a-zA-Z0-9|_]+" required />
    </div>

    <div class="form-element">
        <label>رمز عبور</label>
        <input type="password" name="password" required />
    </div>

    <button type="submit" name="login" value="login">ورود</button>
</form>

</body>
</html>

ارتباط با دیتابیس برای فرم ورود

فرض میکنیم اطلاعات کاربران در جدولی با نام users ذخیره شده است. برای هر کاربر یک نام کاربری یکتا و رمز عبور را نگهداری میکنیم.

این جدول میتواند اطلاعات دیگری را نیز ذخیره کند؛ به عنوان مثال، ایمیل، شماره تماس، آدرس، آخرین ورود و …

فایل تنظیمات ارتباط با دیتابیس

برای راحتی کار، اطلاعات مربوط به ارتباط با دیتابیس را درون یک فایل با نام config.php قرار میدهیم. هر جایی که نیاز به ارتباط با پایگاه داده داشته باشیم، این فایل را در ابتدای فایل مورد نظر اضافه (include) خواهیم کرد. (بیشتر بدانید: آموزش فراخوانی فایل در PHP)

در غیر اینصورت می بایست در تمام فایل هایی که با دیتابیس سر و کار دارند اطلاعات ارتباطی را نوشت. در صورتی که اطلاعات پایگاه داده تغییر کند، تغییر دادن تک تک این اطلاعات کار مشکلی خواهد بود.

خب، حال سر وقت تعریف تنظیمات ارتباط با دیتابیس میرویم و یک کانکشن اولیه ایجاد میکنیم.

<?php
define('DBUSER', 'root');
define('DBPASS', '');
define('DBHOST', 'localhost');
define('DBNAME', 'test');

try {
    $connection = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
} catch (PDOException $e) {
    exit("خطایی رخ داده  (" . $e->getMessage() . ")");
}
?>

در آموزش این اسکریپت از ارتباط PDO برای اتصال به دیتابیس استفاده کرده ایم. اگر با PDO آشنا نیستید، پیشنهاد می‌کنم آموزش PDO در PHP را ببنید. همچنین برای افزایش امنیت ارتباط با دیتابیس، می‌توانید مقاله آموزش جلوگیری از حملات sql injection با PDO در PHP را مطالعه کنید.

پیاده سازی فرآیند ورود به سایت

حال ب قسمت اصلی ماجرا یعنی کدنویسی فایل do-login.php میرسیم.

در این فایل نام کاربری و رمز عبور وارد شده توسط کاربر را گرفته و آنرا به اطلاعات موجود در دیتابیس مطابقت میدهیم.

در صورتی که یک نام کاربری و رمز عبور مشابه در ردیف های اطلاعاتی جدول users وجود داشت، کاربر با موفقیت وارد سیستم شده است، در غیر اینصورت خطایی به او نشان خواهیم داد.

<?php

session_start();
include('config.php');

if (isset($_POST['login'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];

    $query = $connection->prepare("SELECT * FROM users WHERE username=:username");
    $query->bindParam("username", $username, PDO::PARAM_STR);
    $query->execute();

    $result = $query->fetch(PDO::FETCH_ASSOC);

    if ( !$result ) {
        echo '<p class="error">نام کاربری یا رمزعبور وارد شده اشتباه است!</p>';
    } else {
                       
        if ( $password == $result["password"]) {

            $_SESSION["user"] = $result["email"];
            echo '<p class="success">شما با موفقیت وارد سایت شدید!</p>';

        } else {
            echo '<p class="error">نام کاربری یا رمزعبور وارد شده اشتباه است!</p>';
        }
    }
}
?>

همانطور که در کد بالا مشخص است، با یک دستور SQL اطلاعات کاربری با نام کاربری وارد شده را از جدول میگیریم.

اگر ردیفی با این نام کاربری وجود نداشت پیغام خطا نمایش میدهیم. (خط 17 و 18)

و اگر نام کاربری درست بود، رمز عبور وارد شده را با رمز عبور ثبت شده در دیتابیس مطابق میدهیم.

ورود موفقیت آمیز کاربر در فرم لاگین

در صورتی که ورود کاربر موفقیت آمیز بود، یک نشست یا سشن (session) با نامی دلخواه را برای ایجاد میکنیم.

مقدار این نشست هر چیزی میتواند باشد، اما پیشنهاد میکنیم اگر نیاز دارید بعداً اطلاعات کاربر را دوباره از دیتابیس واکشی کنید (مثلا شماره تماس کاربر و اسمش را به او نشان دهید) بهتر است مقداری مرتبط را در این سشن ذخیره کنید.

این مقدار میتواند نام کاربری، ایمیل و یا id منحصر به فرد او در جدول پایگاه داده باشد.

اگر میخواهید اطلاعات بیشتری در مورد نشست یا سشن کسب کنید، شما را به مطالعه مقاله سشن در PHP دعوت میکنیم.

کنترل دسترسی کاربر لاگین شده به صفحات سایت

بسیار خب، تا کنون توانستیم کاربر را شناسایی کنیم.

به این صورت که کاربر در فرم ورود اطلاعات خود را وارد کرده و در صورتی که این اطلاعات با اطلاعات دیتابیس مطابقت داشت، ورود تایید میشود.

بعضی صفحات در سیستم ما وجود دارند که نیازمند این است که کاربر در سیستم لاگین کرده باشد. (مثلاً نمایش پنل مدیریت)

ممکن است کاربری بدون لاگین کردن به سیستم، و از طریق وارد کردن مستقیم آدرس کنترل شده ما، قصد ورود به صفحه را داشته باشد.

ما باید در ابتدای صفحه مورد نظر، وضعیت ورود یا عدم ورود کاربر را بررسی کنیم و در صورتی که وارد نشده بود، او را به صفحه ورود هدایت کنیم.

برای این کار میتوانیم قطعه کد زیر را در فایل حفاظت شده قرار دهیم.

<?php

session_start();

if( !isset($_SESSION["user"]) ){

    header('Location: login.php');
    exit;
} else {
    // محتوای صفحه حفاظت شده
}
?>

در این با بررسی تعریف بودن یا نبود سشن تنظیم شده در هنگام ورود، میتوان فهمید که کاربر ورود موفقیت آمیزی داشته یا خیر.

افزایش امنیت صفحه ورود و فرآیند ورود به سایت

کارهای زیادی برای افزایش امنیت فرآیند ورود کاربران میتوان انجام داد، یکی از این کارها، رمزنگاری رمزعبور کاربران سایت است.

اگر خدایی نکرده سایت شما مورد حمله قرار گرفته و مهاجم به پایگاه داده شما دست پیدا کند، رمز عبور تمام کاربران شما فاش شده و میتواند مشکلات بسیاری برایتان ایجاد کند.

برای جلوگیری از به وجود آمدن چنین مشکلی، میتوان رمزعبور کاربران را به صورت رمز شده (هش شده) در دیتابیس PHP نگهداری کرد. برای آشنایی و کار با Hashها آموزش هش در PHP را ببینید.

توجه داشته باشید که در اینصورت، قسمت بررسی رمز عبور در فایل do-login.php مقداری متفاوت خواهد شد.

مقاله آموزش ساخت فرم ورود با PHP برای سایت نیز به پایان رسید. امیدواریم برایتان جامع و مفید بوده باشد.

اگر سوالی درباره ساخت این فرم داشتید، خوشحال میشویم بتوانیم به شما کمک کنیم. آنرا در قسمت دیدگاه ها با ما در میان بگذارید.