
به نام خدا و سلام،پوزش بابت تاخیر زیادی که پیش اومد،بدون اتلاف وقت بریم سر اصل مطلب،کا در قسمتهای قبلی فایلهای لازم رو ایجاد کردیم،حالا باید بخش مدیریت رو ایجاد کنیم.پوشه ای با نام admin در پوشه اصلی پروژه ایجاد کنید سپس فایل index.php رو ایجاد کنید و کدهای زیر رو داخلش قرار بدین.
header("Location: dashboard.php");
این کد مشخص میکنه باید کاربر رو به فایل dashboard.php هدایت کنیم.چه کاربر آدرس پوشه admin رو بنویسه و چه آدرس کامل فایل dashboard.php رو بنویسه به این فایل منتقل میشه.البته این فایل برای یه کار دیگه هم لازم میشه که بعدا اونو مینویسیم.
فهرست محتوای این مقاله
- فایل dashboard.php
- تابع get
- تابع get_post_by_id
- d)!==0){ $result= mysql_query("SELECT * FROM posts WHERE post_ID={$id} LIMIT 1"); return mysql_fetch_assoc($result); } } از این تابع برای دریافت یک مطلب با شناسه استفاده میکنیم،برای زمانی که بخوایم محتوای کامل مطلب رو نشون بدیم از این استفاده میکنیم.
- تابع get_posts_count
- تابع get_pages_count
- تابع get_comments_count
- تابع get_post_comment_count
- تابع get_users_count
- تابع هش کرن داده ها
- تابع تبدیل تاریخ شمسی
- توابع آدرس سایت و آدرس مدیریت
- ایجاد صفحه dashboard
فایل dashboard.php
فایل داشبورد ما لینک صفحه اصلی محیط مدیریت محسوب میشه که باید در اون وضعیت برنامه رو نشون بدیم،مثل همین وردپرس که صفحه اول مدیریت وضعیت محتواها و کاربران و نظرات رو نشون میده.
اما قبل از پر کردن محتوای فایل داشبورد ما باید یکسری توابع رو ایجاد کنیم.توابع رو در فایل functions.php ایجاد میکنیم.
تابع get
با تابع get میتونیم اطلاعات هر جدولی خواستیم رو دریافت کنیم.
function get($tbl,$limit=0,$offset=0){ try { if(!empty($limit) && !empty($offset)) { $res=mysql_query("SELECT * FROM {$tbl} LIMIT $offset,$limit"); } elseif(!empty ($limit) && empty($offset)) { $res=mysql_query("SELECT * FROM {$tbl} LIMIT $limit"); }else if(empty ($limit) && empty ($offset)){ $res=mysql_query("SELECT * FROM {$tbl}"); } if($res){ return $res; } } catch (Exception $ex) { return false; } }
در این تابع limit و offset هم قرار دادیم وبرای زمانی که بخواین صفحه بندی کنیم هم مناسبه یا اینکه تعداد خاصی رو بخوایم برگردونیم.
تابع get_post_by_id
function get_post_by_id($id=null){ if(!empty($id) && intval($id)!==0){ $result= mysql_query("SELECT * FROM posts WHERE post_ID={$id} LIMIT 1"); return mysql_fetch_assoc($result); } }
از این تابع برای دریافت یک مطلب با شناسه استفاده میکنیم،برای زمانی که بخوایم محتوای کامل مطلب رو نشون بدیم از این استفاده میکنیم.
تابع get_page_by_id
function get_page_by_id($id=null){ if(!empty($id) && intval($id)!==0){ $result= mysql_query("SELECT * FROM pages WHERE page_ID={$id} LIMIT 1"); return mysql_fetch_assoc($result); } }
اینم مثل تابع بالاست با یان تفوات که محتوای یه برگه رو برای ما برمیگردونه.
تابع get_posts_count
از این تابع برای دریافت تعداد کل مطالب استفاده میکنیم.
function get_posts_count($status=""){ $sql=""; if(!empty($status)) { $sql="SELECT COUNT(*) FROM posts WHERE post_status='{$status}'"; }else{ $sql="SELECT COUNT(*) FROM posts"; } $result= mysql_query($sql); return mysql_result($result, 0, 0); }
یه پارامتر هم داره که نوع وضعیت مطلب رو مشخص میکنه،اینکه مطلب منشتر شده یا در مرحله پیش نویس هستش.طبق همون تعداد رو برمیگردونه.اگرم برای پارامتر هیچی ارسال نشه تعداد کل رو میگردونه.
تابع get_pages_count
ما از این تابع مثل تابع بالا برای برگهها استفاده میکنیم.
function get_pages_count($status=""){ $sql=""; if(!empty($status)) { $sql="SELECT COUNT(*) FROM pages WHERE page_status='{$status}'"; }else{ $sql="SELECT COUNT(*) FROM posts"; } $result= mysql_query($sql); return mysql_result($result, 0, 0); }
تابع mysql_result با دریافت نتیجه کوئری و هم چنین شماره ستر و ستون مقدار مشخصی رو برمیگردونه که در اینجا چون ما بخث تعداد رو داشتیم همون سطر و ستون 0 مقدار مورد نظر ما هست.
تابع get_comments_count
این تابع هم مثل تایعهای بالا برای دریافت تعداد نظرات استفاده میشه و پارامترش هم وضعیت نظرات رو مشخص میکنه.
function get_comments_count($approved=""){ $sql=""; if(!empty($approved)) { $sql="SELECT COUNT(*) FROM comments WHERE comment_approved={$approved}"; }else{ $sql="SELECT COUNT(*) FROM comments"; } $result= mysql_query($sql); return mysql_result($result, 0, 0); }
تابع get_post_comment_count
ما از این تابع برای دریافت تعداد نظرات یه پست استفاده میکنیم.پارامترش هم وضعیت نظرات رو مشخص میکنه.
function get_post_comment_count($pid,$approved=""){ $sql=""; if(!empty($approved)) { $sql="SELECT COUNT(*) FROM comments WHERE comment_post_ID={$pid} AND comment_approved='{$approved}'"; }else{ $sql="SELECT COUNT(*) FROM comments WHERE comment_post_ID={$pid}"; } $result= mysql_query($sql); return mysql_result($result, 0, 0); }
آیدی مطلب رو با pid و وضعیت نظر رو با approved مشخص کردیم.
تابع get_users_count
از این تابع هم برای دریافت تعداد کاربران با سطح مشخص استفاده میکنیم.
function get_users_count($level=""){ $sql=""; if(!empty($level)){ $sql="SELECT COUNT(user_ID) FROM users WHERE user_level='{$level}'"; }else{ $sql="SELECT COUNT(user_ID) FROM users"; } $result= mysql_query($sql); return mysql_result($result,0,0); }
اون پارامتر level وضعیت کاربر رو که مدیر یا کاربر معمولی هست مشخص میکنه.
خوب دوستان توابع اصلی کار رو فعلا نوشتیم ممکنه در طول دوره آموزش باز هم توابعی رو کم یا اضافه کنیم.حالا چند تا تابع مفید هم مینویسیم.
تابع هش کرن داده ها
از این تابع برای هش کردن دادهها استفاده میکنیم.
function hash_string($string){ $salt="@#^&$%)(*HKJH%&^@#[email protected]^&@&*#[email protected]@#*@^*#@H#@Y"; if(!empty($string)){ return sha1($salt.sha1($string).$salt); } }
حتما میپرسین کاربردش چیه؟خوب وقتی که کاربری رو ثبت نام کنیم میخوایم پسووردش رو با همین تابع هش کنیم تا غیر قابل دسترسی باشه و بالطبع موقع لاگین هم ازش استفاده میکنیم.اون متغیر salt کمک میکنه هش ما محکمتر باشه.
تابع تبدیل تاریخ شمسی
یه تابع ساده برای تیدیل تاریخ فارسی نوشتیم که بعدا خیای جاها به دردمون میخوره.
function get_persian_date($date){ return jstrftime("%A %e %B %Y", strtotime($date)); }
تاریخی که گرفتیم رو با توابع فایل jdf به شمسی تبدیل کردیم.
فایل jdf.php رو حتما در داخل پوشه inc قرار بدین و در بالای فایل functions اونو الصاق کنید.
توابع آدرس سایت و آدرس مدیریت
از این توابع برای دریافت ادرسهای مدیریت و سایت استفاده میکنیم.
function site_url(){ return 'http://localhost:2020/CMS'; } function admin_url(){ return 'http://localhost:2020/CMS/admin'; }
من طبق لوکال خودم ست کردم شما هم همین کارو بکنید.خوب در صفحه بعد ما صفحه dashboard رو ایجاد میکنیم.
ایجاد صفحه dashboard
من طبق کدهای اصلی bootstrap ساختار زیر رو ایجاد کردم،ساختار زیر یک منوی بالای ثابت که لینک خرو ج و نمایش سایت رو در خودش داره و هم چنین یه ساید بار برای لینکهای اصلی بخش مدیریت و قسمت محتوای صفحه رو شامل میشه.تمام فایلها اصلی بخش مدیریت این ساختار رو دارند و فقط برای فایلهای مختلف محتوای اصلی تغییر میکنه.خوب برای بخش داشبورد ما این ساختار رو قرار دادیم.
<?php require_once '../init.php'; ?> <!DOCTYPE html> <html lang="fa"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>مدیریت سایت</title> <!-- Bootstrap --> <link href="../css/bootstrap.css" rel="stylesheet"> <link href="../css/bootstrap-rtl.css" rel="stylesheet"> <link href="../css/bootstrap-theme.css" rel="stylesheet"> <link href="../css/style.css" rel="stylesheet"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div class="container"> <div class="row"> <div class="navbar navbar-default navbar-fixed-top navbar-inverse" role="navigation"> <ul class="nav navbar-nav"> <li><a target="_blank" href="<?php echo site_url(); ?>">نمایش سایت</a></li> <li><a href="">خروج از سایت</a></li> </ul> </div> </div> <div class="row" style="margin-top: 100px;" > <div class="col-xs-12 col-sm-3 col-md-3"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">پنل مدیریت</h3> </div> <div class="panel-body"> <ul class="nav nav-stacked"> <li><a href="dashboard.php">داشبورد</a></li> <li>مدیریت مطالب</li> <li class="nav nav-divider"></li> <li><a href="posts.php">همه مطالب</a></li> <li><a href="new-post.php">مطلب جدید</a></li> <li>مدیریت برگه ها</li> <li class="nav nav-divider"></li> <li><a href="pages.php">همه برگه ها</a></li> <li><a href="new-page.php">برگه جدید</a></li> <li>مدیریت کاربران</li> <li class="nav nav-divider"></li> <li><a href="users.php">همه کاربران</a></li> <li><a href="new-user.php">کاربر جدید</a></li> <li>مدیریت نظرات</li> <li class="nav nav-divider"></li> <li><a href="comments.php">همه نظرات</a></li> </ul> </div> </div> </div> <div class="col-xs-12 col-sm-8 col-md-9"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">هم اکنون</h3> </div> <div class="panel-body"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-4"> <table class="table table-bordered"> <tr> <th colspan="2">محتوا</th> </tr> <tr> <td>مطلب منتشر شده :</td> <td><span class="badge"><?php echo get_posts_count('published'); ?></span></td> </tr> <tr> <td>مطلب پیش نویس :</td> <td><span class="badge"><?php echo get_posts_count('draft'); ?></span></td> </tr> <tr> <td>برگههای منتشر شده :</td> <td><div class="badge"><?php echo get_pages_count('published'); ?></div></td> </tr> <tr> <td>برگههای پیش نویس:</td> <td><div class="badge"><?php echo get_pages_count('draft'); ?></div></td> </tr> </table> </div> <div class="col-xs-12 col-sm-12 col-md-4"> <table class="table table-bordered"> <tr> <th colspan="2">نظرات</th> </tr> <tr> <td>تعداد کل</td> <td><span class="badge"><?php echo get_comments_count(); ?></span></td> </tr> <tr> <td>تایید شده</td> <td><span class="badge"><?php echo get_comments_count(1); ?></span></td> </tr> <tr> <td>تایید نشده</td> <td><span class="badge"><?php echo get_comments_count(0); ?></span></td> </tr> </table> </div> <div class="col-xs-12 col-sm-12 col-md-4"> <table class="table table-bordered"> <tr> <th colspan="2">کاربران</th> </tr> <tr> <td>تعداد کل :</td> <td><span class="badge"><?php echo get_users_count(); ?></span></td> </tr> <tr> <td>مشترک</td> <td><span class="badge"><?php echo get_users_count("user"); ?></span></td> </tr> <tr> <td>مدیر</td> <td><span class="badge"><?php echo get_users_count("admin"); ?></span></td> </tr> </table> </div> </div> </div> </div> </div> </div> <div class="row"> <div class="col-sm-12" id="admin_footer"></div> </div> </div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="../js/jquery-1.10.2.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="../js/bootstrap.min.js"></script>https://7learn.com/wp-admin/post.php?post=25478&action=edit# <script src="../js/script.js"></script> </body> </html>
اول فایل داشبورد ما فایل init.php رو اضافه کردیم تا به توابع دسترسی داشته باشیم، اگه خوب ساختار رو بررسی کنید از اکثر اون توابعی که در فایل functions ایجاد کردیم استفاده شده. تصویر زیر این محیط رو نشون میده.
خوب ما توابع اصلی رو نوشتیم و قالب اصلی مدیریت رو هم طراحی کردیم.
ذز قسمت بعدی ما صفحه ارسال مطلب و هم چنین نصب ادیتور رو آموزش میدیم.
موفق و پیروز باشید.
سلام
لطفا یا توابع جدید رو با pdo بروز رسانی کنید یا نحوه تغییر را با pdo آموزش دهید من هر کاری میکنم نمیتونم نتیجه بگیرم
کلا لزوم استفاده از pdo چیست؟
آیا میشه به نحو دیگری این اررور برطرف بشه؟
این دوره قدیمی هست و دیگه پشتیبانی و آپدیت نمیشه
سلام
یکی از آیتم های عضویت vip برنزی پاسخگویی حداکثر تا 48 ساعت هست.
من در صفحه های قبلی یه چند تا سوال پرسیدم (5 روز پیش) ولی …
تشکر
سلام.لینک سوالتون رو ارسال کنید.
سلام
معادل تابع mysql_result در PDO چیست و چه طور استفاده کنیم؟
در pdo میتونید تابع fetch رو از متغییر stmt فرخوانی کنید.
سلام
این ارور را چطور برطرف کنم ؟
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\inc\db.php on line 3
سلام باید کدهای دیتابیس رو از mysql به PDO تغییر بدین.
سلام و تشکر
این کار چطور انجام میشه ؟ لطفا راهنمایی کامل نمایید . باتشکر
سلام توی نت برای PDO یه کلاس php پیدا کنید و تنظیمات دیتابیسش رو ست کنید و سپس از توابعش به جای توبع mysql استفاده کنید.
سلام من وقتی این تنظیمات رو انجام میدم با ارور موتجه میشم نمی دونم مشکل چیه
عنوان ارور
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\wamp\www\CMS\inc\db.php on line 3
سلام ب خاطر توابع mysql هست که php اونارو منقضی کرده و در نسخه های بعدی حذف میشن.باید دستورات جایگزین مثل mysqli و PDO استفاده بشن.
سلام ببخشید من با mysqli کار میکنم این خط رو میشه بگید چجوری بنویسمش ؟
$res=mysql_query(“SELECT * FROM {$tbl} LIMIT $offset,$limit”);
یا چرا متغیر نا مجدول رو داخل { } گذاشته؟
سلام
ساختار کدنویسی با mysqli کمی متفاوته. باید اول یه لینک به دیتابیس بزنید و بعد اون لینک رو به همراه کوئری به تابع mysqli_query پاس بدید. اگر بخواید حرفه ای یاد بگیرید این مورد رو دوره php سایت رو ثبت نام کنید .
مرسی از توضیحات کاملتون …
فقط یک سوال دیگه پس با چی مشخص میکنیم چه مقدار از مطالبمون نمایش داده بشه؟ مثلا 4 خط از یک مطالب نمایش داده بشه که بعدش بزنیم : ادامه ی مطلب ؟
باز هم متشکر از جوال کامل و سریعتون
سایتتون عالیه 🙂
خواهش می کنم دوست عزیز برای این موردی که فرمودین باید از تابع sustr استفاده کنید .ابتدا باید یه کوئری به دیتابیس بزنید و اطلاعات فیلد مورد نظر رو بخوید بعد مقدار برگشتی فیلد مورد نظر رو که کل مطلب مورد نظر هست رو با تابع sustr و مقادیری که براش ست می کنید کوتاه میکنید یعنی بطور مثال اگر کل حروف متن برگشتی مورد نظر 100 کارکتر باشه با مقداری که به تابع substr می دید مشخص میکنید که از این 100 کارکتر یا هر تعداد کارکتری که پست های سایتتون داره و برگشته یا به عبارتی fetch شده رو مثلا 30 تاش رو نشون بده و بعدش … بزاره.لینک زیر هم میتونه بیشتر کمکتون کنه
لینک
موفق باشید
سلام خسته نباشید
ببخشید limit و offset هر کدوم چه چیزی رو محدود میکنند؟ تعداد مطالب که تو صفحه نمایش میده یا تعداد کاراکتری که مثلا از یک مطلب نمایش داده میشه ؟؟ اگر یکم برام توضیحش بدید متشکر میشم
آموزش هاتون عالین هیچ سایتی ندیدم اینجوری کدهارو کامل بگذاره مرسی
این دو مورد رو اگر sql بلد باشید خوب متوجه میشید. مشخص می کنند از کوم ایندکس چه تعدادی از سطر های جدول دیتابیس دریافت بشه .
سلام دوست عزیز از limit برای نمایش تعداد مشخصی از row هایی که توسط کوئری از دیتابیس میخونیم استفاده میشه بعنوان مثال شما 30 row در دیتابیس داری و می خوای تعداد 10 تا از اونها رو به کاربر نمایش بدی در این حالت از limit استفاده میکنید و چون limit همیشه به آخر سطر ها یا همون row های برگشتی و فراخوانده شده از دیتابیس رجوع مینکه با توجه به مقدار که بهش میدیم مقادیر آخر سطرها رو برمیگیرونه مثلا اگر 10 بهش پاس بدید 10 سطر آخر رو از هر تعداد سطزر موجود رو نمایش میده offset تا حدودی مشابه limit هست با لین تفاوت که با مقداری که بهش پاس میدید مقادیر رو از بین سطر های مورد نظر برمیگردونه مثلا شما همون 30 سطر برگشتی رو دارید و میخواهید سطر های آخر مانند دستور limit نمایش نده بلکه بیاد سطر های بین 10 تا 20 رو نمایش بده در اینصورت از offset استفاده میکنیم
موفق باشید…
البته!