آموزش ساخت صفحه لاگین و ثبت نام با php و mysql

اکثر ما وقتی وارد سایت مورد علاقه‌مان می‌شویم تصمیم به ثبت نام می‌کنیم تا بخشی از خانواده‌ی سایت مورد علاقه‌مان باشیم، اما تا به حال به این دقت کرده‌اید که ما دقیقا چگونه در سایت‌ها login یا ورود می‌کنیم و وارد پنل کاربری خود می‌شویم؟ و حتی اینکه چگونه در یک سایت عضو می‌شویم؟ اگر شما هم این سوال‌ها در ذهنتان هست پس در مقاله‌ی آموزش ساخت صفحه لاگین و ثبت نام با php و mysql با ما همراه باشید.

لاگین کردن در PHP - ساخت صفحه لاگین و ثبت نام با php و mysql

آمادی سازی محیط کار

برای شروع به کار در سیستم عامل خود یک ویرایشگر کد یا IDE داشته باشید تا بتوانید به راحتی نرم‌افزار خود را توسعه دهید. برای اینکه بتوانیم کدهای PHP خود را اجرا کنیم حتما WAMP یا XAMPP را نصب داشته باشید که ما به شما XAMPP را توصیه می‌کنیم.

در ادامه ما نیاز به چهار فایل داریم به نام‌های login.php، register.php، process.php، config.php. فایل login.php کدهای html ما که مربوط به فرم ورود (لاگین) است را در بر دارد و فایل register.php سورس کد فرم ثبت نام html را در بر دارد.

در فایل process.php ما کدهای مربوط به php را می‌نویسیم و در اصل عمل ثبت نام و ورود کاربر در آن قرار می‌گیرد و در آخر نیز در فایل config.php ما کدهای مربوط به اتصال به پایگاه داده را وارد می‌کنیم.

ساخت صفحه لاگین و ثبت نام با php

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

ساخت صفحه لاگین با php

سورس صفحه لاگین php در پایین همین متن قرار دارد و می‌توانید استفاده کنید، نام فایل را به دلخواه می‌توانید هر چیزی بگذارید اما برای اینکه با ما قدم به قدم جلو بیایید نام فایل را login.php قرار دهید.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>7Learn</title>
    <style>
        html,
        body {
            height: 100%;
        }
        body {
            background: #007bec;
            color: #fff;
            font-size: 1.5em;
            font-weight: 400;
            text-align: right;
            display: flex;
            align-items: center;
            flex-direction: column;
            justify-content: center;
        }
        .main {
            position: relative;
            background: #ffffff;
            color: #0e5698;
            display: inline-block;
            padding: 15px 30px;
            margin: 0 auto;
            border-radius: 7px;
            box-shadow: 0 50px 50px rgba(0, 0, 0, 0.2);
            min-height: 250px;
            min-width: 400px;
        }
        h1 {
            font: 30px sans-serif;
            text-align: center;
            margin: 25px 10px;
            font-weight: bold;
            color: #4a96db;
        }
        input,
        button,
        select,
        textarea {
            display: block;
            border: 1px solid #ccc;
            border-radius: 3px;
            margin-top: 10px;
            line-height: 28px;
            height: 30px;
            padding: 0 10px;
            width: 100%;
            box-sizing: border-box;
            font-family: sans-serif;
            font-size: 15px;
        }
        button {
            background: #007bec;
            color: #fff;
            line-height: 40px;
            height: 40px;
            font-size: 18px;
            border: 0;
        }
        button:hover {
            opacity: 0.7;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class='main'>
        <h1>7Learn</h1>
        <form action="process.php" method="post">
            <input type="text" name="username" placeholder="username">
            <input type="password" name="password" placeholder="password">
            <button type="submit" name=login"">Login</button>
        </form>
    </div>
</body>
</html>

سورس کد فرم ثبت نام html

سورس (source) صفحه ثبت نام را هم می‌توانید از همین جا بردارید، همان‌طور که گفته شد قرار دادن نام فایل دلخواه است اما برای اینکه با ما قدم به قدم جلو بیایید نام فایل را register.php قرار دهید.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>7Learn</title>
    <style>
        html,
        body {
            height: 100%;
        }
        body {
            background: #007bec;
            color: #fff;
            font-size: 1.5em;
            font-weight: 400;
            text-align: right;
            display: flex;
            align-items: center;
            flex-direction: column;
            justify-content: center;
        }
        .main {
            position: relative;
            background: #ffffff;
            color: #0e5698;
            display: inline-block;
            padding: 15px 30px;
            margin: 0 auto;
            border-radius: 7px;
            box-shadow: 0 50px 50px rgba(0, 0, 0, 0.2);
            min-height: 250px;
            min-width: 400px;
        }
        h1 {
            font: 30px sans-serif;
            text-align: center;
            margin: 25px 10px;
            font-weight: bold;
            color: #4a96db;
        }
        input,
        button,
        select,
        textarea {
            display: block;
            border: 1px solid #ccc;
            border-radius: 3px;
            margin-top: 10px;
            line-height: 28px;
            height: 30px;
            padding: 0 10px;
            width: 100%;
            box-sizing: border-box;
            font-family: sans-serif;
            font-size: 15px;
        }
        button {
            background: #007bec;
            color: #fff;
            line-height: 40px;
            height: 40px;
            font-size: 18px;
            border: 0;
        }
        button:hover {
            opacity: 0.7;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class='main'>
        <h1>7Learn</h1>
        <form action="process.php" method="post">
            <input type="text" name="username" placeholder="username">
            <input type="password" name="password" placeholder="password">
            <button type="submit" name="register">register</button>
        </form>
    </div>
</body>
</html>

سیستم ثبت نام کاربر در PHP - ساخت صفحه لاگین و ثبت نام با php و mysql

کدهای اتصال به پایگاه داده در php

در mysql یک دیتابیس به اسم my_site بسازید و درون دیتابیس ساخته شده یک جدول به اسم users با ستون‌های username، password ایجاد کنید تا بتوانیم کاربران خود را بسازیم و عمل ثبت نام و ورود کاربران را انجام بدهیم.

همان‌طور که در بالاتر نیز گفته شد ما کدهای مربوط به اتصال به پایگاه داده را درون فایل config.php می‌نویسیم. ابتدا ما مشخصات پایگاه داده‌ی خود را درون یک آرایه به اسم database_config ذخیره سازی می‌کنیم.

<?php
$database_config = (object) [
    'host'    => 'localhost',
    'user'    => 'root',
    'pass'    => '',
    'dbname'  => 'my_site'
]

در ادامه کدهای بالا ما باید کدهای مربوط به اتصال به پایگاه داده را بنویسیم که در اینجا ما از روش PDO استفاده می‌کنیم.

try {
    $pdo = new PDO("mysql:host={$database_config->host};dbname={$database_config->dbname}", $database_config->user, $database_config->pass);
    $pdo->exec('set names utf8');
} catch (Exception $e) {
    die("There is something wrong with connection, error: " . $e->getMessage());
}

در کد بالا و قسمت اتصال به پایگاه داده را درون بلاک try قرار داده‌ایم. درون کلاس PDO ما تمامی مشخصات لازم برای اتصال به پایگاه داده را نوشته‌ایم، بلاک catch هم زمانی اجرا می‌شود که خطایی در اتصال به پایگاه داده رخ بدهد.

حال اتصال به پایگاه داده‌ی ما آماده است و درون متغیر pdo قرار دارد و می‌توانیم به راحتی فایل config.php را هر جا که خواستیم include کنیم و از آن استفاده کنیم.

سورس کدهای ساخت صفحه لاگین و ثبت نام با php

کدهای مربوط به ثبت نام و لاگین (login) کاربر را ما درون فایل process.php می‌نویسیم، ابتدا ما می‌خواهیم از ثبت نام کاربر شروع کنیم پس با ما همراه باشید.

ثبت نام کاربر در php و mysql

به خاطر داشته باشید که action فرم ما به فایل process.php که ما اکنون درون آن کار می‌کنیم است و متد (method) فرم‌مان نیز POST می‌باشد.

وقتی که اطلاعات درون فرم موجود در فایل register.php ارسال می‌شود ما تمامی مقادیر وارد شده در فرم را درون آرایه‌ی سوپر گلوبال  (super global variables) POST داریم و می‌توانیم از آن‌ها به درستی استفاده کنیم.

اولین کاری که ما باید انجام دهیم این است که داده‌های موجود درون POST را اعتبارسنجی کنیم، اعتبارسنجی به این معناست که ما اطمینان پیدا کنیم که داده‌های وارد شده توسط کاربر قابل اعتماد هستند و می‌توانیم از آن‌ها استفاده کنیم. اعتبارسنجی ما در این پروژه کوچک بسیار ساده خواهد بود که در ادامه با همدیگر بررسی می‌کنیم.

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['password'])) {
        if (!empty($_POST['username']) and !empty($_POST['password'])) {
            if (isset($_POST['register'])) {
                # Register User
            } elseif (isset($_POST['login'])) {
                # Login User
            }
        }
    }
}

در کد بالا در اولین شرط بررسی کرده‌ایم آیا فرم ارسال شده است؟ که بررسی این شرط با REQUEST_METHOD انجام شده است که اگر مقدار POST را درون خودش داشت به این معناست که فرم ارسال شده است.

در شرط بعدی بررسی کرده‌ایم که مقادیر ارسال شده‌اند یا خیر؟ که از isset استفاده کرده‌ایم. درون شرط بعدی بررسی کرده‌ایم که مقادیر ارسال شده خالی نباشند.

بعد از این سه تا شرط ما شرطی را آورده‌ایم که تشخیص دهد داده‌های ارسال شده از فرم ورود (login) است یا ثبت نام (register).

درون بلاک if اول که ما تشخیص داده‌ایم فرم ما register است، باید کدهای مربوط به ثبت نام کاربر را درون آن بلاک بنویسیم. برای اینکه کدهای تمیزتری داشته باشیم فرایند ثبت نام و ورود را در پایین همین صفحه در قالب توابع می‌نویسیم.

کدهای ثبت نام کاربر در php

ابتدا کار ما باید یک تابع بنویسیم که بررسی کند که آیا کاربر قبلا با این نام کاربری وجود دارد یا خیر. توجه داشته باشید ما باید با پایگاه داده کار کنیم پس به اتصال آن نیاز داریم و ما این اتصال را در فایل config.php داریم و باید این فایل را include کنیم. کد پایین را بعد از تگ php درون فایل process.php قرار دهید.

include 'config.php';

ابتدا تابعی می‌نویسیم تا بررسی که آیا کاربری با این نام کاربری وجود دارد یا خیر؟

function isUserExists($username)
{
    global $pdo;
    $sql = "SELECT * FROM users WHERE username = :username";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':username' => $username]);
    return $stmt->rowCount();
}

تابع بالا یک نام کاربری به عنوان ورودی دریافت می‌کند و یک کوئری به سمت پایگاه داده می‌زند تا بررسی کند کاربری که اطلاعات را اسال کرده است موجود است یا خیر؟ ما تابع بالا را درون تابع register استفاده می‌کنیم که اگر کاربر موجود بود او را به صفحه‌‌ی لاگین هدایت کنیم و اگر کاربر موجود نبود او را ثبت نام می‌کنیم.

function register($name, $username, $password)
{
    global $pdo;
    if (isUserExists($username)) {
        return false;
    }
    $sql = "INSERT INTO users (username, password) VALUES (:username, :password)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':username' => $username, ':password' => $password]);
    return $stmt->rowCount();
}

در تابع register ما یک شرط آورده‌ایم و اگر کاربر موجود بود false را به عنوان خروجی تابع برمی‌گردانیم تا بتوانیم به او اطلاع بدهیم تا عمل لاگین را انجام دهد. اگر هم کاربر موجود نبود و از قبل ثبت نام نکرده بود ادامه‌ی کد اجرا می‌شود و کاربر در سیستم ما ثبت نام می‌شود.

در بخش شرط‌هایمان که تابع register را صدا زده‌ایم به راحتی می‌توانیم خروجی تابع register را دریافت کنیم و با توجه به آن خروجی واکنش مناسبی می‌دهیم. تابع register اگر به درستی کاربر را ثبت کند خروجی 1 را به عنوان خروجی می‌دهد و اگر عملیات با موفقیت انجام نشد خروجی 0 خواهد بود که 1 و 0 معادل true و false هستند.

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['password'])) {
        if (!empty($_POST['username']) and !empty($_POST['password'])) {
            if (isset($_POST['register'])) {
                if (register($_POST['username'], $_POST['password'])) {
                    header("location: register.php?s=1");
                    exit;
                }else{
                    header("location: register.php?s=0");
                    exit;
                }
            } elseif (isset($_POST['login'])) {
               # 
            }
        }
    }
}

در بلاک شرط register ما بررسی کرده‌ایم که اگر خروجی تابع register درست یا true بود به صفحه‌ی register.php برگشت داده شود و در URL برگشت داده شده ما یک مقدار s=1 را نیز قرار داده‌ایم تا بتوانیم در صفحه‌ی مقصد پیام مرتبط را چاپ کنیم. در بخش else هم زمانی اجرا می‌شود که درون تابع register تابع isUserExists اجرا شده است و تابع به این نتیجه رسیده است که کاربر موجود است و نیازی به ثبت نام دوباره ندارد پس مقدار بازگشتی تابع 0 خواهد بود و ما می‌توانیم پیام مرتبط با آن را نیز نمایش بدهیم.

در آخر نیز باید بگوییم که رمز عبور کاربر باید حتما hash شود و نباید به طور پیش‌فرض ذخیره شود، برای هش کردن مناسب رمز عبور کاربر می‌توانید از هش پسورد و احراز هویت آن استفاده کنید.

سیستم ثبت نام کاربر در PHP - ساخت صفحه لاگین و ثبت نام با php و mysql

کدهای لاگین کاربر در php

در این بخش از مقاله‌ی آموزش ساخت صفحه لاگین و ثبت نام با php و mysql ، به آموزش ساخت صفحه لاگین با php می‌پردازیم.

بخش لاگین کاربر ساده‌تر از ثبت نام او است ولی باید یک نکته را در نظر بگیرید، زمانی که عمل لاگین کاربر انجام شد ما باید از کاربر یک رد پا بگذاریم تا بتوانیم تشخیص بدهیم که کاربر لاگین کرده است. این کار را می‌توانیم با SESSIONها انجام بدهیم.

برای اینکه بتوانیم از SESSIONها استفاده کنیم باید SESSION را start کنیم، برای این کار کافی است در بالاترین قسمت صفحه‌ای که قرار است از SESSION استفاده کنیم تابع ()session_start را استفاده کنیم.

بعد از ()session_start حال نوبت به نوشتن تابع login است.

function login($username, $password)
{
    global $pdo;
    if (!isUserExists($username)) {
        return false;
    }
    $sql = "SELECT * FROM users WHERE username = :username AND password = :password";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':username' => $username, ':password' => $password]);
    $result = $stmt->fetch(PDO::FETCH_OBJ);
    $_SESSION['login'] = $result->id;
    return true;
}

درون تابع لاگین ما اول بررسی کرده‌ایم که آیا کاربر از قبل وجود دارد؟ اگر کاربر از قبل ثبت نام کرده بود ما در ادامه‌ی کد با یک کوئری بررسی می‌کنیم ببینیم آیا نام کاربری و رمز عبورش درست است. اگر درست بود یک SESSION برای کاربر با id خودش ثبت می‌کنیم.

تمامی کدهای صفحه‌ی process.php در یک نگاه

<?php
session_start();
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['password'])) {
        if (!empty($_POST['username']) and !empty($_POST['password'])) {
            if (isset($_POST['register'])) {
                if (register($_POST['username'], $_POST['password'])) {
                    header("location: register.php?s=1");
                    exit;
                } else {
                    header("location: register.php?s=0");
                    exit;
                }
            } elseif (isset($_POST['login'])) {
                if (login($_POST['username'], $_POST['password'])) {
                    header("location: login.php?s=1");
                    exit;
                } else {
                    header("location: login.php?s=0");
                    exit;
                }
            }
        }
    }
}
function isUserExists($username)
{
    global $pdo;
    $sql = "SELECT * FROM users WHERE username = :username";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':username' => $username]);
    return $stmt->rowCount();
}
function register($username, $password)
{
    global $pdo;
    if (isUserExists($username)) {
        return false;
    }
    $sql = "INSERT INTO users (username, password) VALUES (:username, :password)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([ ':username' => $username, ':password' => $password]);
    return $stmt->rowCount();
}
function login($username, $password)
{
    global $pdo;
    if (!isUserExists($username)) {
        return false;
    }
    $sql = "SELECT * FROM users WHERE username = :username AND password = :password";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':username' => $username, ':password' => $password]);
    $result = $stmt->fetch(PDO::FETCH_OBJ);
    $_SESSION['login'] = $result->id;
    return true;
}

بررسی لاگین بودن کاربر در صفحه‌ی لاگین

در صفحه login.php می‌خواهیم لاگین بودن کاربر را با SESSION که در تابع login ثبت کردیم بررسی کنیم، برای این کار ابتدا در بالاترین نقطه‌ی صفحه‌ی login.php سشن (SESSION) را start کنید.

<?php session_start() ?>

حال می‌خواهیم بررسی کنیم اگر کاربر لاگین بود فرم ورود را نشان ندهد و یک پیام “You are logged in” را می‌دهیم و اگر لاگین نبود فرم ورود را به کاربر نشان می‌دهیم تا لاگین کند.

    <?php if (isset($_SESSION['login'])) : ?>
        <?= "You are login" ?>
    <?php else : ?>
        <div class='main'>
            <h1>7Learn</h1>
            <form action="process.php" method="post">
                <input type="text" name="username" placeholder="username">
                <input type="password" name="password" placeholder="password">
                <button type="submit" name="login">Login</button>
            </form>
        </div>
    <?php endif; ?>

در کد بالا با یک if ساده این کار را انجام داده‌ایم دقت کنید که ما این کدها را درون فایل login.php نوشته‌ایم و از شرط‌هایی که درون بلاک‌های مختلف php آمده‌اند استفاده کرده‌ایم.

جمع‌بندی

در این مقاله ما یاد گرفتیم که چگونه کاربر را درون سیستم خود ثبت نام و ورود یا به اصطلاح لاگین کنیم و توانستیم با کمک توابعی که نوشته‌ بودیم این کار را به راحتی انجام دهیم، کار دیگری که می‌توانید با این پروژه کوچک انجام بدهید این است که بعد از دریافت s=1 و s=0 از header به کاربر یک پیام مناسب نشان دهید. اگر در مورد آموزش ساخت صفحه لاگین و ثبت نام با php و mysql سوال یا نظری داشتید خوشحال می‌شویم که در بخش نظرات با ما و کاربران سون لرن به اشتراک بگذارید.

اگر به یادگیری بیشتر در زمینه‌ی PHP علاقه داری، با شرکت در دوره‌ PHP در کمتر از یک سال به یک متخصص PHP تبدیل می‌شوی که آماده‌ی استخدام، دریافت پروژه، کسب درآمد و یادگیری مباحثی مثل لاراول هستی.

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

 
ارسال دیدگاه
ما همه سوالات و دیدگاه ها رو می خونیم و پاسخ میدیم
۷۲ دیدگاه
۰۱ شهریور ۱۴۰۱، ۲۰:۱۷
سلام
چطوری میشه یک صفحه ورود رو به چندین سایت متصل کرد یعنی با ورود داخل این صفحه خودکار در چند سایت دیگر لاگین شه کاربر
نازنین کریمی مقدم ۰۲ شهریور ۱۴۰۱، ۰۸:۲۱
درود
شما اطلاعات کاربر + توکن ورودش رو بعد از ورود در دیتابیس ذخیره میکنید. بعد برای لاگین باقی صفحات، چک میزنید که آیا کاربر اطلاعاتش موجود هست یا نه، اگر موجود بود خودکار لاگین میشه.
درضمن از لحاظ امنیتی دقت کنید که چنین کاری توصیه نمیشه و بهتره کاربر در هر سایت جدا احراز هویت شه.
۲۲ تیر ۱۴۰۱، ۱۶:۴۷
سلام و تشکر از مطلب خوبتون
اگر بخواهم در قسمت لاگین گزینه نمایش پسورد را قرار دهم (که معمولا به شکل چشم هستش) باید چکار کنم؟
نازنین کریمی مقدم ۲۶ تیر ۱۴۰۱، ۰۸:۳۲
درود
کافیه در تگ input در بخش html، ویژگی type=password رو اضافه کنید.
۲۰ خرداد ۱۴۰۱، ۰۰:۳۳
خوب بود با جاوا اسکریپت کار ساخت صفحه ثبت نام و لاگین با مشکل مواجه میشه چونکه اگه بخایم کاربران رو توی local Storage ذخیره کنیم محدودیت ۵ مگابایت داریم و فقط توی یک مرورگر در دسترس هست و کاربرای عمومی نمیشن با جاوا اسکریپت نمیشه صفحه لاگین ساخت چون حتما با مشکلاتی مواجه خاهیم شد و باید کنار جاوااسکریپت از زبان های دیگه هم استفاده کنیم(به احتمال زیاد) و جاوااسکریپت به تنهایی موفق نمیشه کل صفحه لاگین رو بسازه و دیتا کاربران رو درون خودش ذخیره کنه و این صفحه خوب بود بعنوان pdf دانلودش کردم
۰۹ اردیبهشت ۱۴۰۱، ۱۱:۱۴
سلام و درود من یک سایت وردپرسی دارم که از پلاگین های المنتور و ووکامرس استفاده میکنم.
میخوام وقتی کاربر لاگین میکنه یا ورود میزنه توی همون صفحه ای فرود بیاد که داخلش بود
مثلا توی صفحه سبد خرید _ تسویه حساب ( که مربوط به ووکامرس هستن ) یا حتی توی هر کدوم از نوشته های سایت ( که با المنتور طراحی و نوشته شدن) ممنون میشم منو راهنمایی کنید.

ممنونم
نازنین کریمی مقدم ۱۸ اردیبهشت ۱۴۰۱، ۱۳:۱۵
درود
جواب سوالتون در قالب کامنت نمیگنجه اما بطور مختصر باید از آموزشهای ریدایرکت به صفحه مورد نظر در php استفاده کنید و کدهای قالب رو بازنویسی کنید.
۰۷ فروردین ۱۴۰۱، ۰۱:۰۵
ببخشید یه سوال این صفحه لاگینی که درست کرید اگر من بخواهم برای سایتم استفاده کنم و در اینترنت قرار دهم آیا امنیت را خواهم داشت؟
ای کاش یه سایت در مورد مباحث امنیت برای ساخت یه سایت با php را کامل توضیح می داد :(
نازنین کریمی مقدم ۰۹ فروردین ۱۴۰۱، ۱۹:۱۷
درود
برای بحث امنیت باید بگم که باید مواظب sql injection ها باشید. با سرچ در نت به نتایج خوبی میرسید.
کلا امنیت شاخه به شدت پرباری هست و سعی میکنیم در آینده این بخش رو پوشش بدیم.
۰۶ فروردین ۱۴۰۱، ۱۲:۱۷
تشکر از زحمات شما.
از
function register($name, $username, $password)
به
function register($username, $password)
تغییر کند
۱۲ بهمن ۱۴۰۰، ۰۲:۳۸
من می خواهم سفارش دهم یک سورس کامل از یک رستوران را ؛ با اچ تی ام ال و سی اس اس و جاوا اسکریپت و پی اچ پی، می خواهم سبد خرید در هوم پیج قرار داشته باشد و غذاها بصورت افقی در زیر هم و کدگوری غذا در بالا بصورت لینک یا منوی افقی در بالا و زمانی که روی یک کتگوری کلیک می کنیم بهنگام در لیست روی همان کتگوری اسکرول کند و هر غذا لینک پروداکت آیدی داشته باشد و هر غذا یک لیست اگسترا بصورت بازشونده زیر خود داشته باشدکه مشتری بتواند به غذای خود اضافه کند و.... وقتی سفارش انجام شد ؛ کشتری به محل پرداخت هدایت شود و هم با پی پال و هم با کردیت کارت و هم بصورت نقدی درب منزل پول را به تحویل دهنده غذا بدهد.البته جزییات دیگری هم دارد اگر این زحمت را قبول کنید عکس های آن را برایتان می فرستم، من سه میلیون در شروع کار و چهار میلیون بعداز تحویل سورس و یک میلیون در صورتی که توضیحات کامل بود برایتان واریز می کنم. (بسیار از توضیحاتی که در همین صفحه قسمت آموزش قرار داشت رضایت مند بودم. موفق باشید
نازنین کریمی مقدم ۱۲ بهمن ۱۴۰۰، ۱۳:۱۱
سلام
لطفا از طریق بخش تماس با ما در منوی بالای سایت اقدام کنید تا رسیدگی بشه.
۱۰ دی ۱۴۰۰، ۲۰:۴۲
سلام
اول اینکه ممنون از آموزش خوبتون
دوم اینکه ای کاش سورس کامل همه فایل ها رو بذارین تا دوستانی مبتدی هستند گیج نشن و راحت بتونن کار رو انجام بدن.
با تشکر
۰۹ دی ۱۴۰۰، ۱۲:۱۳
سلام مجدد
معذرت می خوام ارسال لینک مجاز نیست به همین خاطر لینک حذف شده.
https🙂://codepen.io/🙂GrandvincentMarion/pen/epEPjp
در ضمن من از بک اند سر در نمیارم امکانش هست موفق بشم؟
نازنین کریمی مقدم ۱۱ دی ۱۴۰۰، ۱۸:۰۶
درود
1. برای اینکار کافیه بخش html و css رو از همین لینکی که دادید بردارید و متغیرهای نام و... رو در بخش پی اچ پی تعریف کنید. در اصل بک اند مثل مقاله هست و فرانت از لینک میشه. فقط دقت کنید که تفاوتهایی در تعداد فیلد و... وجود داره و بهتره مرحله به مرحله پیش برید تا به مشکل نخورید. یعنی اول فیلد نام رو به تنهایی اضافه کنید، بعد ایمیل و به همین صورت تا آخر.
2. در مورد یادگیری بک اند سعی کنید اصولی پیش برید و از پایه مطالب رو یاد بگیرید. در همین مثال شما باید کامل مقاله ما رو متوجه شده باشید تا بتونید براساسش تغییرات لازم رو بدید. البته بستگی به میزان تجربه کدنویسی تون داره اما احتمالا یه دوره 20 ساعته بهتون کمک کنه و سرعتتون رو در بک اند بیشتر کنه.
۰۶ دی ۱۴۰۰، ۱۶:۳۲
سلام
وقت بخیر
بنده می خواهم از لاگین پیج لینک زیر استفاده کنم.
چه کار باید بکنم؟
نازنین کریمی مقدم ۰۶ دی ۱۴۰۰، ۱۷:۱۹
درود
لینک تون رو فراموش کردید بفرستید :)
۳۰ آذر ۱۴۰۰، ۱۷:۱۶
slm be in error bar mikhorm chra

Parse error: syntax error, unexpected token &quot;try&quot; in H:\xampp\htdocs\test\config.php on line 8
نازنین کریمی مقدم ۰۴ دی ۱۴۰۰، ۱۱:۰۸
درود
این ارور میگه که شما در فایل config.php در خط 8 خطای نوشتاری دارید. کدتون رو بررسی کنید یه پرانتزی براکتی چیزی جا مونده احتمالا :)
۲۱ آذر ۱۴۰۰، ۲۲:۴۷
سلام
اموزش ثبت نام و احراز هویت شماره همراه رو از کجا میتونم ببینم؟
نازنین کریمی مقدم ۲۲ آذر ۱۴۰۰، ۰۹:۳۲
درود
نزدیک ترین بهش مقاله احراز هویت با موبایل در لاراول هست.
ali ۱۲ آذر ۱۴۰۰، ۰۰:۳۹
سلام ممنون از مقاله خوبتون
من یه سوالی داشتم و اینکه چطوری توی وبسایت ها مختلف ما ثبت نام میکنیم و بعد چند روز میایم داخل سایت میبینیم که توی سایت لاگین هستیم
بعد اگه ما توی کوکی بریزیم امنیتش پایینه و اگر هم داخل سشن بریزیم بعد از بسته شدن مرورگر از بین میره می خواستم بدونم که چطوری میشه کاری کرد که وقتی کاربر ثبت نام میکنه اون تا چند روز توی سایت لاگین باشه؟
Nazanin KarimiMoghaddam ۱۳ آذر ۱۴۰۰، ۱۱:۵۸
درود
بسیاری از روش کوکی و سشن استفاده میکنند که همونطور که فرمودید روش مناسبی نیست.
یکی از کاربردی ترین کارها استفاده از JWT هست. وقتی کاربر یک بار لاگین میکنه، یک توکن امن توسط سرور صادر شده و با فرمت JWT به سمت کلاینت ارسال میشه. این توکن در بخش local storage مرورگر کاربر ذخیره میشه (پس دیگه مشکل سشن رو نداره) دفعات بعدی بجای ارسال اطلاعات به سرور و... سایت میاد خیلی راحت local storage رو چک میزنه و میبینه کاربر اجازه ورود داره و اطلاعاتشم همونجاست، پس لاگین نگهش میداره.
برای اطلاعات بیشتر میتونید این لینک رو مطالعه کنید.
Hacker ۲۵ آبان ۱۴۰۰، ۰۷:۵۹
ببخشید یه راهنمایی دارم براتون
داخل قسمت سرچ شما برای حذف&lt;&gt; از از &amp;gt; &amp;lt; استفاده کردید ولی در داخل قسمت پایینش جای حروف اصلی کد هایی که زدید نمایش داده میشه بهتره که یکاری کنید که در قسمت پایین سرچ که سرچ رو نشون میده &amp;gt; و &amp;lt; رو تبدیل به علامت های اصلی کنه
Nazanin KarimiMoghaddam ۲۵ آبان ۱۴۰۰، ۰۹:۵۷
درود
باهاتون خیلی موافقم :) یکم تمیزکاری میخواد.
Hacker ۲۵ آبان ۱۴۰۰، ۰۷:۵۳
سلام من علاقه بسیاری به برنامه نویسی دارم ولی نت ندارم و ویندوزم هم 32 هستش برای برنامه نویسی پی اچ پی کامپایلر افلاین وجود داره؟۱۴ سالمه css html js رو یاد گرفتم میخوام پی اچ پی رو‌هم یاد‌ بگیرم
Nazanin KarimiMoghaddam ۲۵ آبان ۱۴۰۰، ۰۹:۳۵
درود
بله میتونید از برنامه phpstorm یا حتی vscode استفاده کنید. هردو هم نسخه 32 بیتی دارند. نیازی به نت نیست اما بهتره یکمی داشته باشید که اگر به مشکلی خوردید بتونید سرچش کنید.
پاینده باشید.
Dude ۰۴ مهر ۱۴۰۰، ۰۰:۴۵
سلام. در مورد لاگین چند مرحله ای سوال داشتم.

۱: ابتدا کاربر با شماره موبایل احراز هویت میکنه و کد تایید ارسال میشه .
۲: اگر کاربر قبلا ثبت نام کرده باشه و اطلاعاتش تو دیتابیس باشه وارد برنامه میشه ولی اگر ثبت نام نکرده باشه صفحه ثبت نام ایجاد میشه که اطلاعات باید وارد کند.
مشکل من قسمت دوم هستش که چه کدی باید نوشت که تشخیص بده کاربر جدید هست یا نه ؟
ممنوم میشم راهنماییم کنید.
نازنین کریمی مقدم ۰۶ مهر ۱۴۰۰، ۰۵:۳۷
درود
کاربر شما هنگام ثبتنام یسری اطلاعات داده که در پایگاه داده ذخیره میشن. شما با تابع isUserExists چک میزنید که این اطلاعات در پایگاه داده هست یا خیر. اگر نبود یعنی کاربر جدید هست.
تابع isUserExists رو چک بزنید بدنه و ورودی خروجیها به صورت کد موجود هست و کافیه مطالعه کنید.
saeed ۲۹ شهریور ۱۴۰۰، ۱۰:۱۸
سلام هنگام لاگین کردن با پسورد اشتباه هم وارید میشه
لطفا راهنمایی کنید
نازنین کریمی مقدم ۳۱ شهریور ۱۴۰۰، ۱۵:۱۸
درود
بخش تابع login رو بررسی کنید و یه پرینت بذارید ببینید مقدار پسورد ذخیره شده و پسورد وارد شده رو چی میزنه؟ چون تو این بخش چک میزنیم اگه برابر بود بیاد session بسازه و قاعدتا نباید مشکلی باشه.
eliya ۰۱ شهریور ۱۴۰۰، ۱۵:۵۵
نمیتوانم لودینگو بسازم
رامین احمدی ۲۸ خرداد ۱۴۰۰، ۱۲:۴۵
شما مثلا سایت برنامه نویسی هستید . ولی کدهای خودتون هم ارور سینتکس داره .
من تامام مراحل رو رفتم ولی همونطور که یه کاربر دیگه هم گفته بود Parse error: syntax error, unexpected 'try' (T_TRY) in C:\xampp\htdocs\my_site\config.php on line 9
در اینجا دچار مشکل هست .
لطفا بررسی کنید
نازنین کریمی مقدم ۲۸ خرداد ۱۴۰۰، ۱۷:۳۷
سلام
یکی از دلایل رایج در گرفتن سینتکس ارور این هست که شما در کدتون و به خصوص حوالی بلاک try یه جایی semicolon یا ; رو فراموش کردید بذارید.
یه دلیل دیگه هم میتونه این باشه که یه جایی اشتباها پرانتز و یا آکولادی رو بستید.
کدتون رو با درنظر گرفتن این موارد بررسی کنید. به هر حال انسان جایزالخطاست و ممکنه تو نگارش مقاله یسری چیزا در ساختار سایت جا بمونه. مفهومو که بفهمید باقیش رو خودتون میتونید بزنید.
مانی ۰۲ اردیبهشت ۱۴۰۰، ۰۳:۰۴
سلام
من یه مشگلی دارم
زمانی که لاگین میکنم تا به صفحه پنل برم توی نوار بالا یه لاگین اظافه نوشته میشه یعنی لاگین قبلی حذف نمیشه که پنل جایگزین بشه تا بتونم وارد بشم
کد ها رو هم برسی کردم ولی هیچ مشکلی هم پیدا نکردم
نازنین کریمی مقدم ۰۳ اردیبهشت ۱۴۰۰، ۱۸:۳۲
درود
ما تو این مقاله روت کردن به پنل بعد از لاگین رو نیوردیم و صرفا با نمایش پیام اینو به کاربر نشون میدیم. اگر این بخش رو خودتون نوشتید و همچنان مشکل داره، باید در تابع روت تون در نظر بگیرید که اگر کاربر از اول لاگین بود، مستقیم به صفحه پنل روت شه و دیگه فرم لاگین رو نبینه.
علیرضا ۲۵ فروردین ۱۴۰۰، ۱۰:۴۳
بری اینکه این سیستم رو امن کنیم چه پیشنهاداتی دارین؟ یا اگه ممکنه سری مبحث بهم معرفی کنید برم خودم سرچ بزنم الان هیچ دیدی ندارم که واسه امنیتش لز کجا شروع کنم
نازنین کریمی مقدم ۲۵ فروردین ۱۴۰۰، ۱۶:۵۱
درود.
شما میتونید عبارت امنیت php رو در سایت سرچ بزنید مقالات مرتبط رو میاره.
برای مثال این مقاله خیلی خوبیه: آموزش کامل برقراری امنیت در برنامه نویسی PHP
قاسم ۲۲ اسفند ۱۳۹۹، ۰۰:۴۱
سلام ، مراحل طی شد و درست اجرا میشه . منتها کاربر مجدد که register میشه و با وارد کردن نام کاربری خود و رمز عبوری مخالف رمز ی که اول وارد کرده ( در قالب رمزی 34 رقمی در جدول ذخیره شده است ) هدایت به فرم لاگین می شود مگر غیر اینه که سیتم باید ارور بده ، زیرا رمز اشتباه است .
نازنین کریمی مقدم ۲۶ اسفند ۱۳۹۹، ۱۳:۵۴
درود.
بله ما تو کدمون اینطوری مدیریت کردیم اما شما میتونید تابع login رو با نوشتن یک شرط ادیت کنید که اگر رمز اشتباه بود، سیستم پیام ارور بده.
mohammad ۲۳ بهمن ۱۳۹۹، ۱۳:۵۲
من وقتی اطلاعات رجیستر رو وارد میکنم با ارور this page is'nt working روبه رو میشم وقتی میخود بره به process.php
نازنین کریمی مقدم ۲۹ بهمن ۱۳۹۹، ۲۰:۴۲
درود
این خطا معمولا وقتی پیش میاد که در کد خطا دارید. یکبار دیگه بررسی کنید اسم متغیری رو جایی اشتباه ننوشته باشید و...
چون این کدها تست شدند و درست کار میکنند.
قاسم ۲۷ دی ۱۳۹۹، ۱۲:۳۴
سلام ، ""کدهای مربوط به ثبت نام و لاگین (login) کاربر را ما درون فایل process.php می‌نویسیم""
لطفا چگونگی ترکیب این کدها را توضیح دهید.
نازنین کریمی مقدم ۲۷ دی ۱۳۹۹، ۱۴:۲۹
درود.
چهار فایل داریم به نام‌های login.php، register.php، process.php، config.php. فایل login.php کدهای html که مربوط به فرم ورود (لاگین) است و فایل register.php سورس کد فرم ثبت نام html را دارد. در فایل process.php کدهای مربوط به php را می‌نویسیم و در اصل عمل ثبت نام و ورود کاربر در آن قرار می‌گیرد و در آخر نیز در فایل config.php ما کدهای مربوط به اتصال به پایگاه داده را وارد می‌کنیم.
نیاز به ترکیب نیست: به همون ترتیبی که در هر بخش گفته شده کد رو در فایل مخصوص به خودش کپی پیست میکنید. توصیه میکنم php رو از پایه یاد بگیرید چون در ادامه براتون مشکل ساز میشه.
پاینده باشید.
احسان معالی امیری ۱۴ دی ۱۳۹۹، ۲۰:۵۶
سلام
من پس از زدن لاگین اروری دریافت نمی کنم ولی برنامه در config.php گیر می کند و عملکرد نخواهد داشت
دلیل چیست
کدهای شما را کاملا درست کپی کردم
دیتابیس هم ارور نمیدهد
ولی درست عمل نمی کند
لطفا یا سورس را برای دانلود بگذارید یا راهنمایی بفرمایید
با تشکر
نازنین کریمی مقدم ۱۵ دی ۱۳۹۹، ۰۱:۰۶
سلام. بررسی کردید که دقیقا رو چه خطی گیر میکنه؟
حسین ۲۵ آذر ۱۳۹۹، ۱۳:۴۸
ممنون از آموزش خوب و جامع تون
من php یه کم تازه واردم چجوری میتونم این فرم رو داخل صفحه html وبسایتم بارگزاری کنم؟
نازنین کریمی مقدم ۱۶ دی ۱۳۹۹، ۱۲:۱۸
سلام.
اگر فقط کد html رو نیاز دارید کافیه کپیش کنید.
اما اگر کل کد رو به همراه کدهای php میخواید طبق مراحل مقاله پیش برید.
علی ۱۸ آذر ۱۳۹۹، ۲۱:۳۷
سلام خوبین
اگه میشه سورس کامل zip شده رو به ایمیلم ارسال کنید
رضا کلیدری ۱۱ آذر ۱۳۹۹، ۱۷:۱۵
سلام ب همه
دوستان اگر میخواین متد logout رو هم پیاده کنید، لازمه که صفحه process رو به صورت زیر ویرایش کنید:
mahan ۳۰ مهر ۱۳۹۹، ۱۲:۵۸
سلام وقتتون بخیر
من با این که دقیقا کدهارو عین شما اجرا کردم syntax ارور گرفتم (Parse error: syntax error, unexpected 'try' (T_TRY) in C:\xampp\htdocs\login_form\config.php on line 10)میشه راهنماییم کنین مشکل از چیه . تو syntax هیچ مشکلی نمیتونم پیدا کنم
نازنین کریمی مقدم ۰۸ آبان ۱۳۹۹، ۱۵:۱۹
سلام.
یکی از دلایل رایج در گرفتن سینتکس ارور این هست که شما در کدتون و به خصوص حوالی بلاک try یه جایی semicolon یا ; رو فراموش کردید بذارید.
یه دلیل دیگه هم میتونه این باشه که یه جایی اشتباها پرانتز و یا آکولادی رو بستید.
کدتون رو با درنظر گرفتن این موارد بررسی کنید.
مصطفی ۲۷ مهر ۱۳۹۹، ۱۲:۵۷
سلام خسته نباشید به شما و گروه خوبتون
میخواستم بپرسم ایا شما اموزش {(رمز خود را فراموش کرده اید ؟ )} رو هم توی این وب سایت قرار دادین ؟
یا اگه ندادین میشه یک کمک بکنید ببینم چجوری میشه ساخت این بخش رو ، که مثلا چجوری میشه پیام فرستاد به جیمیل طرف که از طریق اون بره رمزش رو عوض کنه
نازنین کریمی مقدم ۲۷ آبان ۱۳۹۹، ۱۶:۳۲
سلام. خیر چنین آموزشی در مقالات هنوز نوشته نشده اما در دستور کار قرار میدیم.
اگر نیاز فوری دارید، میتونید به این آموزش مراجعه کنید: آموزش ارسال ایمیل در صورت فراموشی رمز در php
Hosein Mohamadi_R ۰۵ شهریور ۱۳۹۹، ۱۶:۵۷
سلام
من خیلی از فور لاگین شما خوشم اومده
یه زحمت کوچولو میکشید
که کد لاگینتونو برای منم به ایمیلم ارسال کنید
ممنون میشم
امیر صالحی ۰۵ شهریور ۱۳۹۹، ۱۷:۵۲
سلام
خوشحالیم که مقاله براتون مفید بوده، متاسفانه همچین امکانی رو توی سون لرن ندارم.
ممنون از وقتی که گذاشتید
رضا ۲۲ مرداد ۱۳۹۹، ۲۱:۲۶
سلام سابتتون عالیه ولی وقتی فرم میخوام تست کمنم میزنم لاگین همینتور میره
مثلا نمیگه فرم را کامل کنید یا فرم اشتباه است
ممنون میشم کدی بدید که بشه به کاربر اخطار داد
امیر صالحی ۲۴ مرداد ۱۳۹۹، ۲۰:۴۵
سلام و احترام، ممنون از توجهی که دارید. با سرچ ساده توی اینترنت میتونید خیلی راحت به هدفتون برسید.
sadaf ۱۶ مرداد ۱۳۹۹، ۲۲:۱۱
تونستم فورم لاگین رو بیارم اما بعدش لاگین میزنم یه صفحه ارور میاد چرا یا کدو اشتباه نوشتم یا کد بیشتر ادامه داشت
امیر صالحی ۱۷ مرداد ۱۳۹۹، ۲۰:۱۵
سلام وقتتون بخیر، لطفا جزئیات بیشتر بدید یا کدی که بهش شک داریدو اینجا قرار بدید تا بررسی کنم
سید مهدی ۳۰ تیر ۱۳۹۹، ۱۵:۵۴
سلام با تشکر از زحماتتون ولی من صفحه login برام کار نمیکنه در هر صورتی به صفحه process منتقل میشه اگه اطلاعات درست باشه خالی باشه غلط باشه فرقی نمیکنه کلا میره به صفحه process
امیر صالحی ۳۰ تیر ۱۳۹۹، ۲۰:۰۸
سلام، ممنون از لطفی که دارید
شما می‌تونید در دومین شرطی که بررسی میشه کاربر اطلاعات را وارد کرده یا خیر به راحتی یک else برای اون شرط قرار بدید و نزارید کاربر تا وقتی که اطلاعات را کامل وارد نکرده، وارد صفحه process نشه
saeed ۲۴ تیر ۱۳۹۹، ۱۲:۰۲
سلام خسته نباشید واقعا دست شما درد نکنه خیلی عالیه.
استاد اگه بخواهیم کاربر بعد از ورود به پروفایلش انتقال پیدا کنه باید چکار کنیم.باز ممنون از زحمات شما
امیر صالحی ۲۴ تیر ۱۳۹۹، ۱۵:۱۸
سلام سعید جان
خواهس مبکنم افتخاریه برای ما.
برای اینکه کاربر رو به جای دیگه انتقال بدی میتونی از تابع header استفاده کنی
header("Location: test.php")
محمدرضا رحیمی ۰۴ تیر ۱۳۹۹، ۲۱:۲۷
سلام
به جای session میشه از cookie استفاده کرد؟ که مثلا کاربر تا یک هفته هرموقع به سایت مراجعه کرد نیازی به لاگین کردن نداشته باشه
امیر صالحی ۲۴ تیر ۱۳۹۹، ۱۵:۱۵
سلام محمد رضا جان.
بله میشهُ نمونه ش رو هم میتونی تو همین سایت سون لرن مشاهده کنی
mjavadH ۳۰ خرداد ۱۳۹۹، ۱۰:۱۵
بسیار خوب بود ولی من وقتی چک کردن وجود کاربر رو (isUserExists ) رو بصورت تابع مینوشتم query کار نمیکرد
امیر صالحی ۰۳ تیر ۱۳۹۹، ۱۹:۴۸
سپاس فرمان از شما
آیا connection به درستی بر قرار شده بود؟
بهرام ۲۸ خرداد ۱۳۹۹، ۱۲:۱۳
عالی بود.
ممنون.
امیر صالحی ۰۳ تیر ۱۳۹۹، ۱۹:۴۷
ممنون از توجهتون
!" A "! ۲۸ خرداد ۱۳۹۹، ۱۰:۳۳
💪 واقعا گروه 7learn گروه قدرتمندی هست !
خیلی عالی بود 😎
اگه ممکنه همچین مقاله هایی رو بیشتر انتشار بدین.
موفق باشید.
امیر صالحی ۰۳ تیر ۱۳۹۹، ۱۹:۴۶
خیلی ممنونیم از شما و از لطفتون، حتما