آگهی
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
» ساخت فید آر اس اس (RSS Feed) با استفاده از PHP و MySQL
» آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» آموزش ساخت فرم تماس با PHP و MySQL
commentنظرات (۲۳۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: حمید
زمان: ۲۲:۴۶:۱۶ - تاریخ: ۱۳۹۱/۱۲/۲۱
نمیشه با تابع date این کار رو انجام داد؟
یعنی کاربر اگه خواست ساعت مثلا 2 اخذ نوبت کنه بهش پیغام خطا بده
من فقط موندم چجوری date رو تعریف کنم
پاسخ: 
برای مقایسه زمان فعلی با زمان شروع و پایان، از نمونه کد زیر می توانید استفاده کنید.
<?php
$time_zone = 12600;//3:30 = ((60 * 60) * 3) + 1800
$start = date("Y-m-d 22:00:00", time() + $time_zone);//ساعت شروع از تاریخ فعلی
$end = date("Y-m-d 06:00:00", time() + $time_zone + 86400);//ساعت پایان در تاریخ فردا
$now = date("Y-m-d G:i:s", time() + $time_zone);//تاریخ فعلی

function ParseDate($date){
$date = str_replace('-', '', $date);
$date = str_replace(':', '', $date);
$date = str_replace(' ', '', $date);
return $date;
}

function IsBetween($start, $end, $now){
$start = ParseDate($start);
$end = ParseDate($end);
$now = ParseDate($now);
if(($now >= $start) && ($now <= $end)){
return TRUE;
}
return FALSE;
}

if(IsBetween($start, $end, $now)){
echo 'TRUE';
}
else{
echo 'FALSE';
}
?>
نکته: به جای تابع ParseDate از تابع strtotime نیز می توانید استفاده کنید.
نویسنده: حمید
زمان: ۲۳:۰۹:۱۳ - تاریخ: ۱۳۹۱/۱۲/۲۲
سلام ممنون از سایت خوبتون
من میخوام وقتی کاربر میاد نام کاربری و رمز عبورش رو میزنه تا وارد صفحه اخذ نوبت بشه اگه بین ساعت 10 شب تا 6 صبح نبود بهش پیغام بده
حالا این کدهایی که نوشتین رو باید کجا قرار بدم؟
ممنونم
پاسخ: 
سلام
کدهای نوشته شده تنها یک مثال از نحوه انجام این کار است و جهت راهنمایی شما در نوشتن برنامه مورد نظر، اینکه کجا و چگونه از آن استفاده کنید را باید خودتان انجام دهید و این کار نیاز به آشنایی با برنامه نویسی php و ویرایش سفارشی دستورات دارد.
نویسنده: حمید
زمان: ۰۰:۱۳:۲۸ - تاریخ: ۱۳۹۲/۰۱/۰۴
سلام من دارم سیستم نوبت دهی آنلاین طراحی میکنم میخوام تا 6 نفر فقط بتونن ثبت نام کنن و اگه نفر هفتم اومد واسه ثبت نام بهش پیغام خطا بده اینم کد من :
حذف شد
پاسخ: 
سلام
دوست گرامی ، لطفا از درج کدهای آماده طولانی خودداری کنید، تنها به سوالاتی پاسخ داده می شود که خودتان نیز بر روی آنها کار کرده و تا حدودی با چند و چون کار آشنا باشید.
نویسنده: سید
زمان: ۱۷:۰۱:۴۳ - تاریخ: ۱۳۹۲/۰۱/۰۴
سلام
چه جوری باید توی ومپ سرور فیلدی رو محدود کرد مثلا میخوام فیلد id رو محدود کنم که تا 6 بیشتر نشماره
پاسخ: 
سلام
ظاهرا این سوال نیز در راستای سوال قبلی شما پرسیده شده، به هر صورت برای این کار چند روش وجود دارد، می توانید با نمونه کد زیر بیشترین مقدار id را از جداول MySQL دریافت کنید، اگر برابر 6 (یا بزگتر) بود، اجازه ثبت مقادیر جدید را ندهید:
<?php
$sql = mysql_query("SELECT id FROM table ORDER BY id DESC LIMIT 1")
or die(mysql_error());
while($row = mysql_fetch_array($sql)){
$id = $row['id'];
}
if($id >= 6){
echo 'Error!';
}
else{
echo 'Ok!';
}
?>
روش دیگر استفاده از توابعی مانند MAX و COUNT در MySQL است.
نویسنده: سید
زمان: ۱۶:۰۵:۱۵ - تاریخ: ۱۳۹۲/۰۱/۰۵
سلام
توی کد زیر این خطا رو میده:
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given
اینم کد من :
<?php
include 'mytools.php' ;
$servername="localhost";
$port = "3306";
$dbname = "dentist";
$user = "root";
$pass = "";
$link = mysql_connect($servername.":".$port,$user,$pass);
mysql_select_db($dbname,$link);
$sql = "select * from nobat where id = 1 and id = 2 id = 3 and id = 4 and id = 5 and id = 6 " ;
$result = mysql_query($sql,$link);
if(mysql_fetch_assoc($result))
{
print(redirect('reserve.php'));
}
else{
print(redirect('pay.php'));
}
?>
پاسخ: 
سلام
پرس و جوی شما صحیح نیست و لذا مقادیر FALSE را برمی گرداند، نمونه صحیح:
$sql = "select * from nobat where id = 1 OR id = 2 OR id = 3 OR id = 4 OR id = 5 OR id = 6 ";
یا در حالت بهتر و کوتاه تر:
$sql = "select * from nobat where id >= 1 AND id <= 6";
نویسنده: حسین
زمان: ۱۸:۵۵:۰۶ - تاریخ: ۱۳۹۲/۰۱/۰۷
ممنون خیلی جالب بود.
نویسنده: ali
زمان: ۰۰:۳۵:۱۶ - تاریخ: ۱۳۹۲/۰۱/۰۸
سلام
میخواستم با جاوااسکریپت اجازه ورود به سایت رو در بازه زمانی 7 صبح تا 10 شب بدم کدش رو لازم دارم ممنون
پاسخ: 
سلام
لطفا به سایت های دریافت اسکریپت آماده مراجعه کنید.
نویسنده: سید
زمان: ۱۳:۰۷:۰۸ - تاریخ: ۱۳۹۲/۰۱/۱۴
دوستان یک داینامیک تیبل ساختم که خبر رو درج کنه توی صفحه اصلی که با این پیغام مواجه شدم
MM_ERROR: MySQL Error#: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext FROM news' at line 1
مشکل از کجاست؟؟؟ مرسی
پاسخ: 
سلام
عبارت "fulltext" یک کلمه محافظت شده (reserved) در MySQL است و نمی توانید در پرس و جوی خود به عنوان مثال برای نام جداول یا ستون ها از آن استفاده کنید، به جای آن از یک عبارت دیگر استفاده کنید.
نویسنده: حمید
زمان: ۱۳:۱۴:۲۹ - تاریخ: ۱۳۹۲/۰۱/۱۴
سلام
نمیدونم چرا گاهی اوقات دریم ویور به ومپ سرور کانکت نمیشه ولی وقتی کامپیوتر رو ریست میکنم وصل میشه؟؟؟؟
پاسخ: 
سلام
پاسخ دقیق به سوال شما بدون تست سیستم امکان پذیر نیست، اما به طور کلی ممکن است از بارگذاری ناقص برنامه های مورد نیاز سیستم عامل جهت کار با پروتکل های شبکه باشد، ممکن است ویروس یا برنامه ای (مانند فایروال) مانع از اتصال شود.
قبل از ریست کامپیوتر، یک بار کلیه سرویس های WampServer را ریست کنید، سپس Dreamweaver را بسته و از نو اجرا نمائید، امکان دارد مشکل موقتی باشد و حل شود.
نویسنده: محمد مهدی
زمان: ۱۶:۱۹:۱۰ - تاریخ: ۱۳۹۲/۰۱/۱۴
سلام
اول از سایت بسیار خوبتون تشکر میکنم که خیلی ساده و روان آموزش میدین
فقط یک انتقاد که بعضی از آموزش ها به علت اینکه جای دقیق کد ها رو توضیح نمیدین برای برخی افراد مثل من که اصلا عادت به کد نویسی وب ندارند مشکله
لطفا اگر امکان داشته باشه جای قرار گیری کد ها رو توضیح بدین...
و در صورت امکان سورس رو هم در کنار آموزش ها قرار بدین برای افراد مبتدی
من برای کار پروژه دارم به زبان php که اصلا اشنایی بهش ندارم یک سایت معرفی محصولات شرکتی با قالبیت ثبت نام و ... طراحی میکنم
تخصص مم تحت ویندوز و vb است
من با کمک سایت شما و سایر سایت ها یک قالب بسیار شیک + چت روم و ثبت نام و تماس با ما درست کردم و مشکلاتی چون زبان فارسی رو هم برطرف کردم
در حال حاظر فقط با مشکل ورود به سایت وجود دارد که پیغام
اطلاعات وارد شده صحیح نیست!
رو میده با اینکه اصلا مشکلی در برقراری ارتباط با پایگاه داده وجود نداره
من نوع Collation رو utf8_persian_ci قرار دادم احتمالا داره به خاطر این مشکل به وجود آمده باشه؟
از راهنماییتون بسیار ممنونم
پاسخ: 
سلام
خیلی ممنون از انتقاد سازنده شما.
در مورد سوالی که عنوان کردید، باید ببینید مشکل تطبیق نداشتن اطلاعات از کجا است، یونیکد utf8 استاندارد است و دلیل مشکل نیست، به احتمال زیاد هنگام ثبت نام از تابع md5 یا توابع شبیه به آن برای کلمه عبور استفاده می کنید (که عبارت را رمزی می کند)، اما موقع تطبیق اطلاعات، کلمه عبور را با این تابع رمزی نمی کنید، به این دلیل ممکن است مشکل عدم تطابق اطلاعات ایجاد شود، خطایابی در PHP چندان سخت نیست، کافی است قبل از تطبیق با دیتابیس با یک دستور echo ساده از محتوای متغیرها خروجی بگیرید.
به جزء این مورد ممکن است دستورات شرطی در PHP یا نحوه تنظیم پرس و جوهای MySQL صحیح نباشد که باید آنها را نیز به دقت بررسی کنید.
نویسنده: محمد مهدی
زمان: ۱۲:۳۷:۳۳ - تاریخ: ۱۳۹۲/۰۱/۱۵
بله مشکل یه همچین چیزی بود که برطرف شد ممنون بابت راهنمایی
شاید سوال الان من مربوط به این آموزش نباشه
من به جای اینکه صفحه های زیادی درست کنم و در هر کدام جدا کدنویسی کنم برای راحتی کار میخواهم در یک پوشه مثلا www.domin.ir/admins یه سری صفحه مثلا برای مدیریت تبلیغات درست کردم و میخواهم در ادرس
www.domin.ir/admin.php با استفاده از دستور
include ("admins/ads.php");
اون رو فراخوانی کنم تا اینجای کار مشکلی نیست
ولی میخواهم فقط یه صفحه مدیریت باشه و با تعدادی دکمه که وقتی روی اون دکمه ها روی هر کدام کلیک شد هر کدام یکی از صفحه های پوشه ادمین را اینکلود کنه تا مجبور نباشم برای هر قسمت یک صفحه بسازم
اگر متوجه شدید راهنمایی کنید
با تشکر از شما دوست عزیز
پاسخ: 
در وب باید پارامترهای مد نظرتان را از طریق متد get به برنامه خود تفهیم کنید، به طور مثال:
www.domin.ir/admin.php?action=ads
در این مثال پارامتر action حاوی مقدار ads است که در کدهای PHP به شکل زیر قابل دریافت است:
$action = $_GET['action'];
و پس از دریافت مقدار پارامتر می توان ادامه برنامه را بر طبق آن نوشت:
switch($action){
case 'ads':
include_once('admin/ads.php');
break;
case 'users':
include_once('admin/users.php');
break;
default:
include_once('admin/admin.php');
}
در این مثال از switch و case استفاده کرده ایم، اما شما می توانید از روش های دیگری مانند استفاده از دستورات شرطی if و else استفاده کنید.
البته PHP از دو شیوه برنامه نویسی معمولی و شی گراء پشتیبانی می کند، در شیوه شی گراء روش های دیگری نیز (برای ایجاد محیط مدیریتی داینامیک) وجود دارد.
نویسنده: محمد مهدی
زمان: ۱۴:۵۷:۳۱ - تاریخ: ۱۳۹۲/۰۱/۱۵
از راهنمایی بسیار بسیار مفیدتون ممنونم
واقعا نمیدونم چه جوری ازتون تشکر کنم برخی آموزش ها اصلا توی گوگل نیست و یا حداقل ما نمیتونیم پیدا کنیم چون از بس سایت های اسپم با کلمات کلیدی با محتوای مختلف هست که آدم نمیتونه راحت چیزی پیدا کنه!
تنها سوال من راجع سایتتون هست اسکریپت سایتتون چیه؟
اگر خودتون نوشتین آیا تمایلی به ارائه اسکریپتتون به دیگران رو دارید؟
بیشتر جهت یادگیری برای دیگران
با تشکر
پاسخ: 
خواهش می کنیم، در مورد اسکریپت سایت، بله خودنوشت است، البته در حال حاضر قابلیت انتشار عمومی ندارد.
نویسنده: محمد مهدی
زمان: ۱۸:۴۴:۳۵ - تاریخ: ۱۳۹۲/۰۱/۱۵
حالا اگر بخواهیم با همین روش بر اساس id در تیبل نمایش بده چه کار کنیم؟
برای راه اندازی بخش اخبار سایت
www.domin.ir/admin.php?posts=news&id=1
سایت من تقریبا تمامی نیاز های اولیه یک وب سایت رو داره به جز همین اخبار سایت که اون هم به امید خدا به زودی تموم میشه
مطالب بسیار خوبی رو از سایت شما یاد گرفتم
با تشکر از لطفتون
پایدار باشید
پاسخ: 
پارامترهای موجود در لینک ها با استفاده از متد get قابل دریافت هستند، می توانید پارامتر id را به یک متغیر دیگر اختصاص دهید و از آن متغیر در کد خود استفاده کنید، مثال:
$id = mysql_real_escape_string($_GET['id']);
$query = mysql_query("SELECT id, title, post FROM news WHERE id='$id'") or die(mysql_error());
در نمونه فرضی بالا، ما ابتدا مقادیر پارامتر id را به متغیری با نام id اختصاص دادیم و به جهت استفاده در یک پرس و جوی دیتابیس، آن را با تابع mysql_real_escape_string ایمن سازی کردیم.
نکته: در حال حاضر PHP از سه روش جهت اتصال به پایگاه داده استفاده می کند (MySQL, PDO, MySQLi) که روش قدیمی و پایه همان توابع زیر مجموعه _mysql است.
نویسنده: محمد مهدی
زمان: ۲۰:۳۷:۵۴ - تاریخ: ۱۳۹۲/۰۱/۱۵
خیلی سعی کردم اما نتونستم مشکل رو پیدا کنم!
ایا این کد صحیح است؟
<?php
$id = mysql_real_escape_string($_GET['id']);
$query = mysql_query("SELECT id, title, post FROM news WHERE id='$id'") or die(mysql_error());

$akhbar = $_GET['akhbar'];

switch($akhbar){
case 'id':
echo "$query";
break;
default:
echo "no news";
}
?>
اسم بانک اطلاعاتی من : ory_test
نام تیبل : news
نام ردیف : post و title
ببخشید زیادی وقتتونو گرفتم
پاسخ: 
به نظر می رسد باید با مقدمات کار با mysql بیشتر آشنا شوید، قبل از انجام پرس و جو، ابتدا باید به دیتابیس متصل شوید، نکته دوم اینکه برای گرفتن خروجی از پرس و جو، از تابع mysql_fetch_array استفاده کنید که نمونه های آن در بخش آموزش مقدماتی mysql وجود دارد.
نویسنده: حمید
زمان: ۲۱:۰۶:۵۱ - تاریخ: ۱۳۹۲/۰۱/۱۵
سلام
من یه سایت نوبت دهی آنلاین طراحی کردم که یه صفحه پرداخت الکترونیک داره و یه صفحه نوبت دهی
کاربر بعد از پرداخت به صفحه نوبت دهی هدایت میشه
میخوام که به کاربر اجازه نده مستقیما با درج آدرس صفحه نوبت دهی در نوار آدرس وارد این صفحه نوبت دهی بشه
لطفا راهنمایی کنین
ممنون
پاسخ: 
سلام
به چند روش می توانید این حالت را ایجاد کنید، برای حالت موقت یک روش این است که به فرض بعد از پرداخت یک سشن آی دی با مقادیر نام کاربر یا یک مقدار hash ایجاد کنید، سپس او را ارجاع دهید، در صفحه مقصد ابتدا ست شدن این سشن آی دی را چک کنید، اگر ست شده بود، پس کاربر به صورت قانونی وارد صفحه شده و در غیر این صورت خیر، روش دیگر این است که یک فرم (با دکمه ارسال) در صفحه اول داشته باشید که مقادیری را از یک فیلد مخفی (hidden) به صفحه مقصد ارسال کند، در صفحه مقصد مقدار این فیلد مخفی را بررسی کنید.
برای ایجاد دسترسی همیشگی، یک ستون به عنوان وضعیت پرداخت برای کاربران در نظر بگیرید، آنهایی که پرداخت می کنند مقادیر به فرض 1 یا ok داشته باشند، سپس در ابتدای صفحه وضعیت کاربر را چک کنید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ کوتاه و مختصر داده خواهد شد!
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.





4 × 4
 refresh
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form اریا
در:
سلام و درود بزرگوار چه دستوری باید بنویسیم تا فقط مقدارهای خاصی از ارایه بتونیم نمایش بدیم. مثلا یک ارایه 6 خونه ای...
۱۶:۴۷:۳۱ ۱۳۹۹/۰۴/۲۰

form کافه کتاب
در:
سپاس خیلی وقت بود دنبالش بودم مرسی از سایت عالیتون
۱۴:۵۱:۴۳ ۱۳۹۹/۰۴/۲۰

form سجاد
در:
دمتون گرم. خیلی زحمت کشیدید
۱۳:۴۳:۱۱ ۱۳۹۹/۰۴/۲۰

form KhashayarPrk
در:
سلام. میخوام الگو تمام کلمات داخل پرانتز رو بدون پرانتز بریزه ارایه با این کد فقط یک پرانتز رو جواب میده.
۱۳:۱۳:۴۷ ۱۳۹۹/۰۴/۲۰

form Oliver
در:
چطوری دستور background رو برای جدلمون عکسش رو تنظیم کنیم و بهش طول و عرض بدیم
۱۶:۰۷:۱۷ ۱۳۹۹/۰۴/۱۸

form محمد
در:
با عرض سلام ببخشید چطوری میتونم واسه اشتراک کاربر انقضا بزارم مثلا یک ماه داخل دیتابیس ردیف تایم رو درست کردم البته تاریخ رو تبدیل...
۱۹:۱۴:۵۹ ۱۳۹۹/۰۴/۱۵

form آیدا
در:
سلام من در حال طراحی با html هستم اما طبق فیلم آموزشی پیش میرم از یه جایی به بعد هم تغییرات اعمال نمیشه...
۲۲:۴۷:۴۴ ۱۳۹۹/۰۴/۱۴

form علی
در:
سلام اگه میشه یه تکه کدی بفرستید که کاربر نتونه عکس مورد نظر رو دانلود کنه و با نگه داشتن روی عکس فقط لینکو ببینه...
۰۹:۳۰:۴۹ ۱۳۹۹/۰۴/۱۴

form sina2000
در:
با سلام و خسته نباشید طبق کد زیر استفاده میگه متغیر Pdc برای PDO است لطفا نمونه کد برای لایبرری...
۱۵:۰۳:۵۱ ۱۳۹۹/۰۴/۱۳

form محمد امین
در:
سلام ممنون از مطلبتون ببخشید من یه سایتی با شی گرایی کامل زدم الان میخوام آدرسشو بهینه کنم آدرس الان من به این صورته:...
۱۸:۲۸:۲۴ ۱۳۹۹/۰۴/۱۱

form ترنم
در:
سلام وقتتون بخیر ببخشید من کدهای مربوط منو و زیر منو رو نوشتم ولی موقع اجرا منوی اصلی رو میاره ولی زیر منوها رو...
۱۱:۰۶:۲۹ ۱۳۹۹/۰۴/۱۱

form ا
در:
سلام چرا وقتی مطالب مربوط که تو وبلاگم هست رو جستجو میکنم نمیاره ؟؟؟
۲۰:۳۱:۰۸ ۱۳۹۹/۰۴/۰۷

form amir
در:
سلام من اگه بخوام با وارد کردن یه id داخل یک text کل اون ردیف پاک بشن باید چه کنم مثلا یک text دریافت میکنم...
۰۱:۴۸:۰۵ ۱۳۹۹/۰۴/۰۷

form محمدباقر حسیبیان
در:
من این مشکل برام پیش اومده که موقع ورود به پروژه م توی لوکال هاست wamp صفحه سفیده و هیچی رو نشون نمیده و کد...
۱۶:۴۲:۳۸ ۱۳۹۹/۰۴/۰۶

form ...
در:
سلام دو سایت نوشته ای مربوط به من رو چند سال قبل لینک دانلود قرار دادن من ازشون خواستم بردارنش ولی اینکارو نکردن سایت...
۱۷:۲۶:۴۲ ۱۳۹۹/۰۴/۰۵
form مجتبی
در:
سلام میشه یک کد جاوا رو به php تبدیل کرد تا لود سایت سریع تر بشه؟
۱۳:۰۴:۲۳ ۱۳۹۹/۰۴/۰۴
form متین
در:
سلام ؛ من تازه شروع به یادگیری کردم ؛ مطلب بسیار کاربردی بود ؛ ممنون از شما دوست عزیز.
۰۱:۵۰:۰۵ ۱۳۹۹/۰۴/۰۴
form mahdi
در:
سلام استاد عزیز و گرامی امیدوارم که حالتون خوب باشه ، اگه براتون ممکنه لطفا یه آموزش خوب در زمینه وردپرس بهم معرفی کنید ،...
۲۱:۴۸:۱۳ ۱۳۹۹/۰۴/۰۳
form امید
در:
در برنامه نویسی کاربر با چه دستوری میتواند به صفحه اصلی برگردد
۱۹:۰۶:۵۶ ۱۳۹۹/۰۴/۰۳
form ali
در:
با سلام من یک پروژه طراحی کردم میخوام که وقتی کاربر روی ادامه مطلب کلیک کرد در خود صفحه بقیه مطالب را ببینه...
۱۸:۴۷:۲۲ ۱۳۹۹/۰۴/۰۳
form علی
در:
سلام و تشکر از زحمات ارزشمند شما احتراما بنده امروز از یک شماره تلفن ثابت از طریق یک رایانه و یک موبایل به طور...
۱۸:۰۱:۱۰ ۱۳۹۹/۰۴/۰۳
form oscar
در:
درود. اگر بخوایم در نمایش تاریخ و زمان که به صورت لحظه ای خودش در صفحه رفرش میشه، فقط عبارت " Mon Jun 22 2020...
۱۵:۵۹:۳۲ ۱۳۹۹/۰۴/۰۲
form علی
در:
با سلام چطور میشه فقط یک صفحه مورد نظرمون رفرش بشه نه همه صفحات سایت
۰۰:۰۳:۴۱ ۱۳۹۹/۰۳/۳۱
form Farzad
در:
الان وقتی فایل رو میخواد دانلود بکنه از خودش فایل میسازه ، به این صورت یعنی بعد از پوشه file هر پوشه ای باشه...
۱۸:۵۶:۲۱ ۱۳۹۹/۰۳/۳۰
form Farzad
در:
سلام ، خسته نباشید من فایل هایی که در هاست میزارم به این شکل هست: یعنی مشخص نیست فایل ها تو چه پوشه...
۱۳:۳۳:۴۰ ۱۳۹۹/۰۳/۳۰
form شیما طیبی
در:
سلام خیلی مطلب مفیدی بود . همیشه به وبلاگ نویسی به چشم یه کار خسته کننده نگاه میکردم ولی خب یه مقدار نظرم تغییر کرد....
۲۳:۵۲:۳۲ ۱۳۹۹/۰۳/۲۹
form احسان
در:
سلام من یک کد اسکریپت دارم که به صورت عددی تبدیل شده است. میخواستم بپرسم چطوری میتونم اسکریپت به حالت اولیه نوشته شده برگردانم و...
۲۱:۰۲:۱۳ ۱۳۹۹/۰۳/۲۷
form علی
در:
ممنون از پاسختون اما روش بالا جهت دانلود فایل کاربرد داره . من میخواستم به صورت استریم ویدئو پخش بشه اما آدرس مستقیم ویدئو...
۰۰:۳۷:۴۶ ۱۳۹۹/۰۳/۲۷
form محمد
در:
سلام مجدد ببخشید طبق فرمایش شما من در دیتابیس جدولی ساخته بودم فقط مشکلم اینجاست چطوری میتونم توسط کوکی یا سیشن با تابع دیت انقضا...
۲۲:۳۸:۰۳ ۱۳۹۹/۰۳/۲۵
form محمد
در:
با عرض سلام ببخشید چطوری میشه واسه اشتراک خریدن زمان ۱ ماهه گذاشت که بعد از گذشت ۱ ماه پیام بده دوباره اشتراک تهیه کنید...
۱۳:۱۳:۵۵ ۱۳۹۹/۰۳/۲۵
form ehsan
در:
سلام و خسته نباشید. من قالب جدید تهیه کردم ولی ایکن هاش کار نمیکنن. اگه وبلاگم نگا کنین متوجه میشین. ایکن شبکه های اجتماعی...
۱۷:۱۹:۴۰ ۱۳۹۹/۰۳/۲۴
در انتظار بررسی: ۰