article

آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL

mysql-php-login-logout

در مطلب قبل از بخش آموزش کاربردی PHP و MySQL با نحوه برنامه نویسی سیستم ساده عضویت کاربران در سایت آشنا شدیم، فرم HTML جهت ورود اطلاعات کاربران را نیز با چند فیلد شامل نام کاربری و کلمه عبور جهت نمونه ساختیم و در سمت سرور با کدنویسی PHP داده ها را کنترل و در نهایت در دیتابیس ذخیره کردیم، اکنون در این آموزش می خواهیم کار را با ساخت فرم ورود و خروج تکمیل کنیم تا کاربران پس از ثبت نام در سایت بتوانند به محیط مدیریت وارد شده و از امکانات پنل کاربری شخصی خود استفاده کنند، در این مطلب خواهیم دید که مبحث مربوط به نشست ها (سشن یا Session) برای ایجاد فرم ورود و خروج تا چه میزان اهمیت دارد و با نحوه تنظیمات سفارشی مربوط به آن بیشتر آشنا خواهیم شد.

سشن (Session) یا نشست چیست و چه کاربردی دارد؟


قبل از اینکه به کدنویسی کار بپردازیم لازم است نگاهی داشته باشیم به اینکه چرا باید در فرآیند ورود و خروج از سشن (Session) یا نشست استفاده کنیم، اصلا این اصطلاح به چه معنی است و چه کاربردی دارد؟
برای درک صحیح مطلب اجازه دهید با یک مثال موضوع را شرح دهیم، فرض کنیم می خواهیم وارد یک نمایشگاه بزرگ کتاب با غرفه های متعدد شویم و برای این کار از قبل در سیستم نمایشگاه اطلاعاتمان را وارد و ثبت نام کرده ایم، در قسمت ورودی نمایشگاه پس از ارائه مدارک شناسایی و در صورت انطباق صحیح نام کاربری و کلمه عبور با اطلاعات موجود در دیتابیس افراد ثبت نام شده برگه ای با شماره کد اختصاصی و تاریخ انقضاء مشخص به ما تعلق می گیرد که برای ورود به غرفه های گوناگون باید آن را ارائه کنیم (برگه را سشن، کد اختصاصی را همان مقدار سشن و غرفه ها را صفحات یک سایت فرض می کنیم)، در هر ورود به غرفه ها نیز صحت سشن و مدت اعتبار آن بررسی و در صورت تائید با مدت اعتبار جدید به روزرسانی می شود، بر همین روال و با توجه به سیاست های مدیریت ممکن است بعد از خروج از نمایشگاه دیگر نتوانیم با آن برگه وارد شویم (اعتبار برگه منقضی شود) و یا بعد از گذشت چند دقیقه یا چند ساعت اگر وارد هیچ غرفه ای نشده باشیم این اتفاق رخ دهد و مجبور به گرفتن برگه جدید از قسمت ورودی نمایشگاه شویم، حال اگر این برگه که روی آن کد اعتباری ما در مراجعه فعلی به نمایشگاه درج شده است به هر دلیل دریافت نشود یا از بین برود غرفه ها نمی توانند هویت ما را شناسایی کنند و لذا ممکن است اجازه دسترسی به خدماتشان را ندهند.
مشابه همین حالت به نوعی در سایت های وب در مورد بحث نشست یا سشن (Session) اتفاق می افتد، با اجرای هر درخواست ورود و در صورت تائید اطلاعات (معمولا شامل نام کاربری و کلمه عبور) برنامه فایلی با مقدار متنی اختصاصی برای هر کاربر در سرور و همچنین در مرورگر او ایجاد می کند (به فایلی که در سرور ایجاد می شود فایل سشن و به فایلی که در مرورگر ایجاد می شود کوکی گفته می شود) تا در هر بار درخواست صفحات سایت مرورگر مقدار کوکی را ارسال کرده و برنامه با تطبیق اطلاعات ارسالی با مقدار سشن بررسی کند که آیا کاربر مورد نظر دارای اعتبار لازم برای استفاده از صفحه درخواستی می باشد یا خیر، گفتیم این اعتبار در صورتی به کاربر تعلق می گیرد که او نام کاربری و کلمه عبور را به طور صحیح وارد کرده باشد و متغیرهای سشن مربوط به آن نام کاربری در سمت سرور از قبل تنظیم شده و دارای اعتبار باشند (به فرض نشست منقضی نشده یا کاربر از سیستم خارج نشده باشد).
هر نشست در PHP به صورت پیش فرض تا 24 دقیقه اعتبار دارد و اگر در این مدت کاربر هیچ صفحه ای را فراخوانی نکند باید مجددا وارد سایت شود، با فراخوانی هر صفحه مدت اعتبار نشست برای 24 دقیقه دیگر تمدید خواهد شد، این حالت را می توانیم تغییر دهیم که در این خصوص در آموزش بعد مفصل توضیح خواهیم داد.

ساخت دیتابیس، جدول، ستون ها و درج نمونه اطلاعات


کاربران برای ورود به پنل مدیریت قبلا باید در سایت ثبت نام کرده باشند که در آموزش قبل در این خصوص به صورت اختصاصی صحبت کردیم، لذا در این مطلب جهت جلوگیری از تکرار مباحث گذشته از توضیح دوباره مبحث خودداری می کنیم، در صورتی که آموزش قبل را مطالعه نکرده اید لطفا ابتدا با پیروی از مطالب آموزش آدرس زیر، دیتابیس، جدول و ستون ها را ساخته و نمونه اطلاعات اولیه را در آن درج نمائید:
آموزش ساخت فرم عضویت در سایت با PHP و MySQL
پس از ساخت دیتابیس، جدول، ستون ها و درج نمونه اطلاعات اولیه، ساز و کار لازم برای ایجاد مرحله ورود اعضاء به پنل مدیریت فراهم می شود.

تنظیم اطلاعات اتصال به دیتابیس در فایل config.php


برای اتصال به دیتابیس نیاز به تنظیم چند پارامتر در تابع mysqli_connect است که شامل نام سرور، نام کاربری دیتابیس، کلمه عبور دیتابیس و در نهایت عنوان دیتابیس است، برای تجمیع این موارد و استفاده چندباره از تنظیمات پیکربندی در صفحات مختلف معمولا از فایل Configoration استفاده می شود که در این آموزش نیز بر همین اساس اطلاعات را در فایلی با نام دلخواه config.php به صورت نمونه زیر قرار داده ایم:
<?php
//تنظیمات اتصال به دیتابیس
$config = array(
    'host' => 'localhost',
    'db_user' => 'نام کاربری دیتابیس',
    'db_pass' => 'کلمه عبور دیتابیس',
    'db_name' => 'نام دیتابیس'
);
?>
این فایل جهت نمونه است و باید مطابق با اطلاعات دیتابیسمان تکمیل شود.

فرم HTML جهت ورود و خروج در فایل index.php


مشابه آنچه در آموزش مربوط به ساخت فرم عضویت در سایت با PHP و MySQL دیدیم برای ورود به پنل مدیریت هم به فرم HTML جهت دریافت نام کاربری و کلمه عبور اعضاء نیازمندیم، البته اگرچه این فرم به صورت HTML است اما بهتر است پسوند فایل را به php ذخیره کنیم چون به دلیل کار با سشن و دریافت اطلاعات از کاربر و به فرض نمایش پیام در حالت ورود و خروج از پنل سایت به کدنویسی PHP نیاز خواهیم داشت، به هر صورت ابتدا فرم زیر را در فایلی با پسوند php و نام دلخواه index.php ایجاد می کنیم:
<?php
if(!isset($check)){
$text = null;
$username = null;
}
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | فرم HTML ورود کاربر به پنل مدیریت سایت</title>
<!-- Webgoo.ir -->
<style>
body{
font-family:Tahoma, Geneva, sans-serif;
direction:rtl;
font-size:12px;
line-height: 22px;
}
.error{
height: 30px;
width: 100%;
color: #dd000a;
}
</style>
</head>
<body>
<?php echo $text; ?>
<form action="login.php" method="post">
<label for="user">نام کاربری:</label>
<input name="username" id="user" type="text" value="<?php echo $username; ?>" maxlength="255" dir="ltr">
<label for="pass">کلمه عبور:</label>
<input name="password" id="pass" type="password" maxlength="255" dir="ltr">
<input name="check" type="hidden" value="1">
<input type="submit" value="ورود به پنل">
</form>
<hr>
- قبل از ورود کاربر به پنل مدیریت سایت ابتدا باید اطلاعات اتصال به دیتابیس را در فایل config.php در آرایه config تعریف کرده باشیم، نام کاربری در لوکال هاست معمولا root و بدون کلمه عبور است.<br>
- اجرای صحیح این کد مستلزم ساخت دیتابیس، جدول، ستون ها و درج نمونه اطلاعاتی است که در آموزش نحوه ساخت فرم عضویت سایت توضیح داده ایم (در صورتی که این آموزش را مطالعه نکرده اید لطفا به بخش آموزش های کاربردی MySQL مراجعه کنید).<br>
- دقت کنیم برای رمزنگاری کلمه عبور در مرحله عضویت کاربر از تابع password_hash استفاده کرده ایم، این تابع از نسخه PHP 5.5 در دسترس است، برای سازگاری نسخه های قدیمی تر کتابخه password_compat به کدها اضافه شده است.<br>
</body>
</html>
توضیح:
- دو فیلد اصلی در فرم ورود با نام های username و password مشخص شده اند، فیلد مربوط به کلمه عبور از نوع password است تا کلمه عبور کاربر به شکل حفاظت شده و مخفی وارد شود.
- اطلاعات این فرم به فایلی با نام دلخواه login.php و با متد POST ارسال می شود، با توجه به آدرس دهی قسمت action فرم این فایل باید در کنار فایل index.php قرار داشته باشد.
- فیلد مخفی با نام فرضی check جهت اطمینان از ارسال فرم ورود توسط کاربر است.
- تکه کدهای PHP استفاده شده در این فایل هماهنگ با سایر فایل هایی هستند که در ادامه بررسی خواهیم کرد.

بررسی وضعیت ورود کاربر با فایل login.php


پس از اینکه کاربر اطلاعات خود را در فرم ورود وارد کرده و بر روی دکمه ارسال کلیک می کند، داده ها شامل نام کاربری و کلمه عبور در سرور و کدهای PHP دریافت می شوند، در این مرحله برای اینکه کاربر دسترسی مجاز به پنل کاربری داشته باشد مقادیر ارسالی باید با آنچه که در دیتابیس سرور وجود دارد تطبیق داده شوند، به طور معمول این تطبیق با برنامه نویسی PHP و MySQL انجام می شود که این کار در نمونه کد زیر هماهنگ با فرم عضویتی که در آموزش قبل ساختیم انجام شده است:
<?php
//شروع نشست
session_name('panel');
session_start();

//پیش فرض
$_SESSION['access'] = false;
$_SESSION['user'] = null;
$error = 0;
$text = null;

//فایل تنظیمات اتصال به دیتابیس
include_once('config.php');

//تعریف توابع کلمه عبور در نسخه های پائین تر از PHP 5.5
if(!function_exists('password_hash')) {
    include_once('lib/password_compat.php');
}

//دریافت و تعریف متغیرها
@$username = $_POST['username'];
@$password = $_POST['password'];
@$check = $_POST['check'];

/* بررسی معتبر بودن اطلاعات ارسالی کاربر در صورت ارسال فرم */
if($check == 1) {
    //نام کاربری
    if(!isset($username) || empty($username)) {
        $error = 1;
        $text = "نام کاربری خود را وارد کنید!";
    } //کلمه عبور
    elseif(!isset($password) || empty($password)) {
        $error = 1;
        $text = "کلمه عبور خود را وارد کنید!";
    }

    //بررسی خطا
    if($error === 0) {
        //اتصال به دیتابیس
        $conn = mysqli_connect($config['host'], $config['db_user'], $config['db_pass'], $config['db_name']);

        if(!$conn) {
            echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
            exit;
        } else {
            //ایمن سازی پارامترها
            $username = mysqli_real_escape_string($conn, $username);

            //نام جدول
            $tbl_name = "users";

            //اانتخاب اطلاعات از جدول و ستون
            $sql = "SELECT `password` FROM $tbl_name WHERE `username` = '$username' LIMIT 1";
            $query = mysqli_query($conn, $sql);

            if(!$query) {
                echo "Selecting From Table $tbl_name: Error! " . mysqli_error($conn) . '<br>';
            } else {
                //تعداد ردیف های انتخاب شده
                $count = mysqli_num_rows($query);

                if($count === 0) {
                    $error = 1;
                    $text = "نام کاربری یا کلمه عبور اشتباه است!";
                } else {
                    while($row = mysqli_fetch_array($query)) {
                        $db_hashed_password = $row['password'];

                        //تطبیق کلمه عبور
                        if(password_verify($password, $db_hashed_password)) {
                            $_SESSION['access'] = true;
                            $_SESSION['user'] = $username;
                            header("Location: panel.php");
                            exit;
                        } else {
                            $error = 1;
                            $text = "نام کاربری یا کلمه عبور اشتباه است!";
                        }
                    }
                }
            }
        }

        //پایان اتصال
        mysqli_close($conn);
    }
}

//بارگذاری مجدد فرم ورود در صورت بروز خطا یا فراخوانی مجدد
if($check != 1 || $error == 1) {
    if($error == 1) {
        $text = '<div class="error">' . $text . '</div>';
    }

    include_once('index.php');
}
?>
توضیح:
- اگر بخواهیم نام سشن و کوکی به صورت سفارشی و دلخواه تنظیم شود می توانیم با تابع session_name این کار را انجام دهیم، در غیر اینصورت مفسر PHP به صورت پیش فرض از نام PHPSESSID برای سشن و کوکی استفاده خواهد کرد.
- در گام دوم با تابع session_start یک نشست یا سشن را برای ورود فعلی تعریف می کنیم، دقت کنیم که این تابع باید قبل از ارسال هر نوع خروجی به مرورگر تنظیم شود در غیر اینصورت خطای 
Warning: Cannot modify header information - headers already sent...
دریافت خواهیم کرد.
- در مرحله بعد متغیرهای پیش فرض برنامه را با مقادیر اولیه تعریف می کنیم.
- با توجه به اینکه توابع مربوط به رمزنگاری و تطبیق کلمه عبور (password_hash و password_verify) در نسخه های قدیمی PHP در دسترس نیستند، از کتابخانه جایگزین password_compat بدین منظور استفاده کرده ایم تا برنامه با این نسخه ها نیز سازگار باشد.
- مقادیر ارسالی کاربر از فرم را در متغیرهایی دریافت می کنیم تا در ادامه کدها از این اطلاعات استفاده کنیم، در اینجا توجه به پارامتر نام (name) فیلدهای input اهمیت زیادی دارد، چرا که متغیرها و مقادیر آنها بر اساس نام فیلد و متد POST مقداردهی می شوند.
- قسمت مربوط به متغیر check برای اطمینان از ارسال فرم توسط کاربر درنظر گرفته شده است، نوع input به صورت hidden یا مخفی است و جلوه ظاهری ندارد اما با ارسال فرم مقدار 1 به سرور ارسال می شود که با این شیوه می توانیم بین دو حالت ارسال و عدم ارسال فرم در کدهای PHP تفاوت قائل شویم.
- برای اعتبارسنجی مقادیر ارسال شده از فرم ورود از دستورات شرطی if و elseif و توابع isset (بررسی وجود یک متغیر) و empty (بررسی خالی نبودن مقدار متغیر) استفاده کرده ایم.
- سپس اتصال به پایگاه داده را با توجه به اطلاعات موجود در فایل config.php برقرار می کنیم، برای سرور مجازی یا لوکال هاست معمولا از نام کاربری root و بدون پسورد استفاده می شود، نام پایگاه داده نیز بستگی به خودمان و دیتابیسی دارد که پیشتر ساخته ایم (در آموزش های مقدماتی MySQL دیدیم که دیتابیس را هم می توانیم با کدهای PHP و هم به صورت دستی در برنامه phpMyAdmin بسازیم).
- بعد از برقراری اتصال به پایگاه داده باید متغیر نام کاربری را با تابع mysqli_real_escape_string ایمن سازی کنیم تا از برنامه در مقابل نفوذ احتمالی به پایگاه داده حفاظت کرده باشیم، البته یادآور می شویم تابع عنوان شده صرفا جهت نمونه و برای کاربردهای متداول است، قاعدتا می توانیم از روش ها و توابع پیچیده تری نیز برای افزایش ضریب امنیت استفاده کنیم.
- با دستور SELECT بررسی می کنیم تا ببینیم آیا کاربری با این مشخصات در دیتابیس برنامه وجود دارد یا خیر، اگر تعداد فیلدهای انتخاب شده برابر با 0 باشد (mysqli_num_rows تعداد ردیف های نتایج یک پرس و جو را برمی گرداند)، پس چنین کاربری وجود ندارد و پیغام خطا نمایش داده می شود، در غیر اینصورت اگر مقادیر 1 برگردانده شود این نام کاربری وجود دارد و وارد مرحله تطبیق کلمه عبور می شویم.
- اگر کاربر مشخصات را صحیح وارد کرده و تطبیق با تابع password_verify صحیح (true) باشد دو متغیر از نوع SESSION تنظیم می کنیم، مقادیر access برای متغیر جهت تعیین وضعیت دسترسی مجاز یا غیرمجاز و مقادیر user نام کاربری را در خود نگهداری می کند.
- متغیرهای نوع SESSION به صورت سراسری (Superglobal) هستند و بین صفحات مختلف در هر قسمت از برنامه می توانیم به مقدار آنها دسترسی داشته باشیم.
- در صورت تطبیق اطلاعات و پس از تنظیم متغیرهای سشن، کاربر به صورت خودکار به پنل مدیریت هدایت می شود و در صورت عدم تطبیق پیغام خطا نمایش داده خواهد شد.
- در نهایت نیز اتصال به پایگاه داده را با تابع mysqli_close خاتمه می دهیم.
- در صورتی که کاربر فرم را ارسال نکرده یا فرم با خطا مواجه شود، فایل index.php را در انتهای کدهای فایل login.php وارد می کنیم تا فرم ورود نمایش داده شود، این ساز و کار به عنوان نمونه است و جنبه آموزشی دارد، قاعدتا با درک نحوه کار سشن و کوکی می توانیم ساختار سفارشی و مد نظر خودمان را داشته باشیم.

برقراری نشست (Session) در پنل کاربری با فایل panel.php


زمانی که کاربر با موفقیت وارد محیط کاربری برنامه می شود برای برقراری پیوسته نشست در هر صفحه از سایتمان که به صورت مستقل فراخوانی می شود باید از توابع session_name و session_start استفاده کنیم، همچنین در صفحاتی که نیاز به دسترسی مجاز به محتوا دارند باید بررسی کنیم و ببینیم که متغیر سشن access تنظیم شده و برابر مقدار true باشد که این کار را با شرط if و تابع isset انجام داده ایم.
فایل محیط کاربری را که در واقع فایل اصلی پنل کاربری برنامه است با نامی انتخابی و صرفا جهت نمونه به صورت panel.php نامگذاری کرده  و نمونه کدهای زیر را در آن درج می کنیم:
<?php
//شروع نشست
session_name('panel');
session_start();

//بررسی متغیرهای نشست
if(isset($_SESSION['access']) && $_SESSION['access'] === true) {
    echo 'Welcome To Control Panel!<br>User Name: ' . $_SESSION['user'];
    echo '&nbsp;[<a href="logout.php" title="Logout">Logout</a>]';
} else {
    header("HTTP/1.1 403 Forbidden");
    echo 'HTTP 403 Forbidden – Access Denied!';
    exit;
}
?>
این نمونه کد ساختار کلی و اولیه پنل کاربری را نشان می دهد که شامل سه قسمت زیر است:
- نام سشن، کوکی و شروع نشست با توابع session_name و session_start، این توابع باید قبل از ارسال هر نوع خروجی به مرورگر اجرا شوند، این خروجی می تواند شامل کاراکترهای نامرئی BOM (مخفف Byte Order Mark) باشد که برای اطمینان بهتر است فایل ها را در برنامه ++Notepade اجرا و از قسمت Encoding گزینه Encoding in UTF-8 without BOM را انتخاب و مجددا فایل را ذخیره کنیم.
- قسمت مربوط به بررسی وضعیت مجاز بودن دسترسی کاربر که با استفاده از تنظیم متغیر SESSION با نام access و مقدار true (دسترسی مجاز) و یا false (دسترسی غیرمجاز) تعیین می شود، این نوع متغیرها در صورت برقراری نشست در صفحات مختلف در دسترس هستند و می توانیم اطلاعات را از صفحه ای به صفحه دیگر به اشتراک بگذاریم، برای نمونه در اینجا متغیر SESSION با نام usre مقدار نام کاربری را در خود نگهداری می کند و می توانیم با دستور echo از آن خروجی بگیریم.
- در قسمت سوم در صورت عدم برقراری شرط if بخش else اجرا خواهد شد و با تنظیم کد خطای HTTP 403 با استفاده از تابع header دسترسی کاربر به مرورگر غیرمجاز اعلام می شود.
نکته 1: هر نشست در PHP به صورت پیش فرض تا 24 دقیقه اعتبار دارد و اگر کاربر در این فاصله صفحه را رفرش نکرده یا صفحه دیگری را فراخوانی نکند نشست جاری به صورت خودکار منقضی می شود، این تنظیمات از طریق فایل php.ini و همچنین ذخیره و به روزرسانی اطلاعات سشن در دیتابیس قابل تغییر است که در آموزش بعدی در این خصوص بیشتر خواهیم گفت.
نکته 2: این نمونه کد فقط یک ساختار ساده محیط کاربری است و جنبه آموزشی دارد، قاعدتا برنامه های کاربردی نیاز به کدنویسی بیشتر و تعریف امکانات متفاوتی دارند که هر کدام باید در جای خود آموزش داده شوند.

پایان نشست و خروج از سایت با فایل logout.php


اغلب کاربران در مرحله ای از کار نیاز به خاتمه نشست و خروج امن از پنل مدیریت سایت دارند که باید با ساز و کاری این امکان را فراهم کنیم، بدین منظور دو تابع session_unset (حذف متغیرهای نشست) و session_destroy (حذف کامل اطلاعات نشست از سرور) کاربرد دارند که در نمونه کد زیر در فایل logout.php استفاده شده اند:
<?php
//شروع نشست
session_name('panel');
session_start();

//منقضی کردن و حذف اطلاعات نشست
session_unset();
session_destroy();

//انتقال به صفحه ورود
header("Location: login.php");
exit;
?>
توضیح:
- از تابع session_unset برای منقضی کردن متغیرهای سشن استفاده می کنیم، متغیرهای نشست در این ساختار شامل access و user هستند که با SESSION و به صورت آرایه تعریف شده اند، در واقع استفاده از این تابع مساوی با حالت زیر است:
$_SESSION = array();
- با تابع session_destroy فایل حاوی اطلاعات نشست از سرور حذف می شود و برای ورود مجدد کاربر، نیاز به ارسال نام کاربری و کلمه عبور است.
فایل logout.php را هم از طریق لینک و هم با استفاده از فرم HTML و دکمه input می توانیم فراخوانی کنیم:
<a href="logout.php" title="Logout">خروج</a>

<form action="logout.php" method="post">
<input type="submit" value="خروج">
</form>
توضیح:
- این فرم صرفا فایل logout.php را فراخوانی می کند و با فراخوانی این فایل سشن به طور کامل منقضی می شود.
- با کمی آشنایی بیشتر با مبحث نشست ها در PHP می توانیم ایده های جالبی تعریف کنیم، به طور مثال پیام خوش آمد گویی و خروج به کاربر نمایش دهیم یا به فرض از مقادیری که در متغیر سشن user وجود دارد برای نمایش نام کاربری استفاده کنیم.
نکته: در نگاه اول مبحث مربوط به سشن ها ممکن است کمی پیچیده به نظر برسد به همین جهت در این مطلب به همین حد اکتفا می کنیم و در آموزش بعدی خواهیم دید که چگونه می توانیم امکانات جانبی بیشتری به فرم ورود و خروج سایت اضافه کنیم.

دانلود نمونه فایل های آموزش


برای جمع بندی کار می توانیم فایل هایی که در این آموزش بررسی کردیم را از لینک زیر دریافت کنیم:
دانلود نمونه فایل های آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» نحوه رسم چارت و نمودار آماری با PHP و MySQL
» آموزش ساخت فرم تماس با PHP و MySQL
» جستجو در مطالب سایت با استفاده از MySQL Full-Text
» آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس
» صفحه بندی مطالب و محتوا با PHP و MySQL
commentنظرات (۲۳۱ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: آرش
۰۹:۰۷ ۱۳۹۷/۱۲/۱۶
سلام ببخشید من یک مشکل دارم تازه سایت سازی رو یاد گرفتم میشه مشکلم اینه که بعضی سایتا میبینید چند تا موضوع دارن هرکدوم سرچ میکنی تو گوگل میاد مثلا وارد سایت میشی اینطوری میشه
webgoo.ir/photo
مثلا دانلود عکس هست ولی من نمیتونم تو سایتم چند تا لینک بزارم
فقط همین میاد
webgoo.ir
چطور چند تا لینک تو سایتم بزارم
پاسخ: 
لینک ها آدرس ارجاع به صفحات وب هستند و می توانید به هر تعداد که بخواهید با تگ a لینک ایجاد کنید، منتها مراحل انجام کار بستگی به سیستم مدیریت محتوا (CMS) دارد که از آن استفاده می کنید، قاعدتا ابتدا باید یک صفحه وب (داینامیک یا استاتیک) ایجاد کنید و سپس به آدرس آن لینک دهید، توصیه می کنیم در خصوص HTML آموزش ها را از سطح مقدماتی مطالعه کنید و با نحوه کار و امکانات CMS مورد نظر خود (به فرض وردپرس، جوملا و...) نیز آشنا شوید.
نویسنده: Ali.joker
۱۴:۰۴ ۱۳۹۸/۰۲/۰۸
سلام خسته نباشید
من میخاستم یه فرم لاگین درست کنم که وقتی کاربر اطلاعاتشو درست وارد میکنه داخل بشه ولی وقتی اشتباه وارد میکنه داخل همون صفحه لاگین بزنه اطلاعات اشتباست و به صفحه ی دیگه ای نره
لطفا راهنمایی کنید
ممنون
پاسخ: 
اصول کار در آموزش حاضر توضیح داده شده، برای سفارشی سازی نحوه ورود و خروج باید با برنامه نویسی وب آشنایی داشته باشید، در این صورت به راحتی می توانید کدهای HTML را با PHP در یک فایل واحد ترکیب کنید، قاعدتا قسمت هایی مانند action فرم نیز باید ویرایش شوند.
نویسنده: amin
۲۳:۲۸ ۱۳۹۸/۰۲/۱۱
با سلام و خسته نباشید من با استفاده از آموزش شما یه فرم لاگین رو ساختم و ابتدا خیلی خوب کار می کرد ولی الان سشن ها نه روی هاست و نه روی لوکال اصلا کار نمی کنند
پاسخ: 
هرچند بدون بررسی سورس کدها و تست برنامه نمی توان نظر قطعی داد اما اینگونه مشکلات می تواند به فرض ناشی از وجود کاراکترهای نامرئی به نام BOM یا Byte Order Mark در فایل باشد، توضیح اینکه برخی ویرایشگرها و برنامه ها در هنگام ذخیره کردن فایل کاراکترهایی به صورت نامرئی به ابتدای آن اضافه می کنند که این به جهت مشخص شدن یونیکد فایل است، اما این کار باعث بروز مشکل با توابع headers (مانند توابع سشن) می شود چون قبل از اینگونه توابع نباید هیچ خروجی ارسال شود، راه حل آن استفاده از برنامه هایی مانند ++Notepad یا Adobe Dreamweaver است، در این برنامه ها در هنگام ذخیره یا در قسمت Encoding می توانیم BOM را حذف کنیم، در صورتی که مشکل از این موارد نباشد نیاز به بررسی دارد (می توانید فایل ها را به آدرس ایمیل ما موجود در بخش تماس ارسال کنید).
نویسنده: هومن
۱۴:۲۰ ۱۳۹۸/۰۳/۱۳
سلام میشه بگین این پوشه html رو چگونه به php ارتباط بدیم
پاسخ: 
سوالتان مبهم است! در مطلب از پوشه صحبتی نشده؟! برای استفاده از آموزش های کاربردی باید سطحی از آموزش های مقدماتی را گذرانده باشید در این صورت توضیحات لازم در آموزش ذکر شده است.
نویسنده: مرتضی پیران
۰۰:۰۳ ۱۳۹۹/۰۱/۲۵
سلام خسته نباشید من یه مشکلی داشتم من یه صفحه ثبت نام طراحی کردم چطوری میتونم وقتی کاربر تو سایت ثبت نام کرد اطلاعات خودش رو تو صفحه پنل کاربریش ببینه و ویرایش کنه خیلی گشتم نتونستم چیزی پیدا کنم اگه کمکم کنید ممنون میشم
پاسخ: 
ویرایش اطلاعات مرحله بعد از ثبت نام و ذخیره سازی است، در اینجا باید با اجرای پرس و جوی SELECT اطلاعات موجود از دیتابیس استخراج و با PHP به عنوان value در تگ های زیرمجموعه form در HTML مانند تگ input خروجی داده شود، سپس در نهایت فرم ارسال شده و مجدد با دستور UPDATE در MySQL اطلاعات جدید جایگزین موارد قبلی دیتابیس می شود، نمونه کد:
https://www.sourcecodester.com/php/11546/easy-and-simple-add-edit-delete-mysql-table-rows-using-phpmysqli.html
نویسنده: محمد
۱۰:۴۹ ۱۳۹۹/۰۷/۰۹
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از سایت خروج پیدا کرده
پاسخ: 
بحث پنل ورود و خروج سایت مبتنی بر مبحث سشن، کوکی و کار با دیتابیس است که برای نمونه در آموزش حاضر توضیح داده شده است، در مورد سوالتان هم این رویه صدق می کند، اگر برنامه مبتنی بر سشن، کوکی و دیتابیس باشد می توانیم با روش های گفته شده در آموزش وضعیت ورود یا خروج را به نحو دلخواه سفارشی سازی کنیم، اگر نیاز به راهنمایی خاصی دارید لطفا سوال را با جزئیات مطرح کنید تا امکان راهنمایی دقیقتر فراهم باشد.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





7 × 7
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form عبدالمالت ریالی
در:
سلام علیک میشه از چند فونت در یک صفحه html استفاده کرد.؟
۱۳۹۹/۰۸/۰۱

form مبینا
در:
سلام من برنامه ای میخواستم که داخل ارایه 5 رنگ قرار گرفته باشه. و با استفاده از حلقه for این یک متنو به اون پنج...
۱۳۹۹/۰۸/۰۱

form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

form محمد
در:
سلام. یک کد نوشته ام بدین صورت: وقتی صفحه باز شده یک پنجره پیام خالی با یک ok باز شده هر چه ok را...
۱۳۹۹/۰۷/۲۸

form فایز پور جهانبخشی
در:
سلام اگر بخواهیم برنامه ای که داخل متلب نوشتیم تا یک ثانیه اجرا شود و بعد از ثانیه اول در حالت خطا که...
۱۳۹۹/۰۷/۲۸

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

form reza
در:
سلام خوبید انشاالله؟ خواستم بدونم این نوار ابزار رو چطور باید اونایی رو دوست دارم بزارم سمت راست وبلاگم. هر چی کد و ......
۱۳۹۹/۰۷/۲۴

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

form فاطمه
در:
سلام ممنونم... خیلی ساده و روون توضیح دادین.. اونقدر که تشویق شدم محتوای یه فایل تکس رو با ایجکس درون یه div بیارم ولی...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
خب متوجه شدم. که باید خط اول عدد فانکشن رو تغییر بدم. بسته به تعداد آرایه یا هر عدد دیگه تغییر بدم جوابمو...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته...
۱۳۹۹/۰۷/۲۱

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.