سایت خود را بسازید ، به روش saalek110

saalek110

Well-Known Member
ساختار یک سایت:


در اینجا می خواهم ساختار فروم خود را به عنوان ساختار یک سایت بررسی کنم.

احتمالا برای هر سایت دیگری بشود این ساختار را استفاده کرد. حالا شاید با کمی تغییرات.



فایل اصلی ، یا صفحه اول:

فایل index.php می دونید در سایت فایل اصلی است ولی میشه در هر پوشه ، یک فایل index.php ساخت. و در هر پوشه یک سایت ساخت. فروم من هم در پوشه forum قرار دارد و فایل index.php دارد و یک فایل index.php هم در بیرون این پوشه است که فایل اصلی ساب دومین است. من دومین خریدم ، ولی فایلهای سایت خود را داخل دومین منتقل نکردم ، و فقط از دومین به ساب دومین لینک دادم.



پس در پوشه forum یک فایل index.php دارم که به باقی فایلها لینک می دهد.

من فایلهای موجود در پوشه forum را به دو دسته تقسیم می کنم تا فهمش راحت تر بشه.


اولی ، فایلهای نمایشی

دومی ، فایلهای عملیاتی






فایلهای نمایشی:

مثل فایل نمایش تالارها که اسمش هست forum.php
و فایل نمایش پستهای یک تاپیک که اسمش هست topic.php
همین صفحه ای که دارید این مطابب را درش می خوانید فایل topic.php فروم مجیدآنلاین است ، البته ساختار فروم مجیدآنلاین کمی با ساختار فروم من فرق داره ، که فعلا بحث نمی کنم.
پس من در فروم خود با فایل forum.php زیرتالارهای یک تالار و لیست تاپیکها را لیست می کنم.
لیست تالارهای اصلی در صفحه index.php داخل پوشه forum لیست شده بود.
پس فایل forum.php لیست زیرتالارهای یک تالار که در صفحه اول لیست شده بود را لیست می کند و در زیرش لیست تاپیکها لیست میشه ، این طوری:

Screenshot_۲۰۲۵-۰۱-۱۰_۱۴۱۵۵۴.jpg


در شکل بالا ، دو زیر تالار را می بینید و زیرش لیست تاپیکها را می بینید که رنگ صورتی دارد.
البته جلوی اسم هر تاپیک ، تعداد پست و تعداد بازدیدش هم نوشته شده و هر چیز اضافه ای هم میشه اضافه کرد.

چیزی که در عکس بالا می بینید ، تالار زبانهای خارجی است.
و در صفحه اول فروم چنین داریم:

Screenshot_۲۰۲۵-۰۱-۱۰_۱۴۱۸۵۸.jpg

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

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

Screenshot_۲۰۲۵-۰۱-۱۰_۱۴۲۳۲۵.jpg

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

اینجاست که فایلهای عملیاتی ، معرفی می شود. فایلهای عملیاتی ، فایلهایی هستند که هر یک کاری را برای ما انجام می دهند.
 
آخرین ویرایش:

saalek110

Well-Known Member
فایلهای عملیاتی:

در فروم من مثلا فایل اضافه کردن یک پست به یک تاپیک ، یک فایل عملیاتی است. که اسمش مثلا هست post_add.php یا فایل حذف یک تاپیک یا فایل ادیت یک پست. و یا فایل دیلت یک پست.

پس در پوشه forum من دو سری فایل دارم ، فایلهای نمایشی و فایلهای عملیاتی.
 

saalek110

Well-Known Member
پوشه حاوی فایلهای کمکی:

چند تا پوشه داخل پوشه forum دارم که فایلهای نمایشی ، قطعاتی از خود را درون اون می ذارن تا فایل خودشون کوچک شود. مثلا داخل پوشه komaki یک فایل دارم به نام topic_ lister.php . البته تمامی این اسمها را الان ساختم و اسم پوشه ها و فایلها چیز دیگری است و بخاطر امنیت اسم پوشه ها و فایلهای سایت خودم را نمیگم. ولی اسمها مهم نیست و ساختار مهم است.



من با استفاده از کلمه include میام اسم اون فایل و اسم پوشه ای که اون فایل داخلشه را میگم. مثلا این طوری:


PHP:
include"esme_poshe/esme_file";

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

saalek110

Well-Known Member
ساختار فایلهای نمایشی:

در فایل نمایشی که چیز خاصی نداره ، یک کوئری داره که دیتابیس را می خونه و نمایش می دهد و در این تاپیک قبلا بحث شده.
مثلا لیست تالارها و تاپیک ها را نمایش می دهیم ......یا مثلا اگر سایت بانک باشه ، لیست مشتریان را نمایش می دهد ، یا لیست چک ها را ، یا اگر سایت یک هتل باشه ، لیست اتاق ها یا لیست مشتری ها را نمایش می دهد.

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

saalek110

Well-Known Member
ساختار فایلهای عملیاتی:

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

که در پستهای بعدی کدهای هر مرحله را بحث می کنیم.
 

saalek110

Well-Known Member
گرفتن ورودی توسط فایل عملیاتی:

دو روش ارسال و دریافت اطلاعات بین دو فایل وجود دارد ، GET و POST

اگر فرم بسازید میشه روش post و اگر لینک بسازید میشه روش get

من در فروم خودم از هر دو روش استفاده کردم. من در هاست مجانی کار می کنم ، یک بار get ها از کار افتاده بود و من همه را به post تغییر دادم. و یعنی قابل تبدیل به هم است. راجع به معایب و مزایای این دوروش می توانید در گوگل سرچ کنید.

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


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


ادامه در پست بعد....
 

saalek110

Well-Known Member
ادامه گرفتن ورودی:

PHP:
 $shomareye_post=check_security($_GET["number"]);

در کد بالا با روش get اول فایل اومدیم number را دریافت کردیم، حالا این number می تونه شماره پست یا شماره تاپیک یا شماره چک یا هر چیز دیگری باشد.

روش post هم داریم ولی کد بالا ، روش دریافت به روش get بود.

اون چک سکوریتی ، یک تابع امنیتی است که من انتهای فایل دارم و یک سری توابع چک روی ورودی دارد تا چیزهای مضر به جای ورودی مورد نظر ندهند. قبلا در تاپیک بحث شده.
 

saalek110

Well-Known Member
قسمت کارهای اولیه و نمایش اولیه و قسمت کار نهایی در فایل عملیاتی:

بعد گرفتن ورودی از لحاظ قرارگیری من اول قسمت اکشن را گذاشتم و بعد قسمت کارهای اولیه را. چون دیدم این طوری بهتر کار می کنه، و توصیه می کنم شما خم این طوری قرار دهید.

PHP:
 if(isset($_POST['my_action']))
{
}

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

PHP:
if (  $_SESSION["fard"] == "Admin" )  
{



if(isset($_POST['my_action']))
{
}



}

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

saalek110

Well-Known Member
در قسمت کارهای اولیه ، یک فرم داریم که خط آخرش یعنی خط دکمه اش اینه:


PHP:
  <input type="submit"  name='my_action' form='my_form' value="Submit"  style=" font-size:40px; height:90px; width:150px">

یعنی فرمی که خط آخرش اینه ، پاس میده به خود فایل با کد زیر:

PHP:
 <form id='my_form' action="<?php echo $_SERVER['PHP_SELF']; ?>"  method = 'POST'>

پس خط اول و آخر فرمی که در قسمت کارهای اولیه قرار دارد را در بالا می بینید.
حالا خطوط وسط این فرم چیه؟

یکی فیلدهای مخفی می تواند باشد و یا چیزهای دیگر.
PHP:
  echo'<input type="hidden"  name="shomareye_post"  value='.$shomare.'>';

خط بالا ، یک فیلد هیدن یا مخفی است که محتوای متغیر shomare را با نام shomareye_post می فرستد به قسمت اکشن. و در قسمت اکشن این طوری دریافت می کنیم:


PHP:
 $esme_delkhah=check_security($_POST["shomareye_post"]);
 

saalek110

Well-Known Member
پس کد سه قسمت دریافت ورودی و قسمت اکشن و قسمت کارهای اولیه را در بالا بحث کردیم.

قسمت اولیه ، می آید میگه من می خواهم پستی به شماره مثلا ۲۳ را ادیت کنم ، آیا موافقی؟ و شما دکمه بله را می زنی و بعد شماره پست مثلا به روش مخفی در فرم برای قسمت اکشن ارسال میشه.

حالا در قسمت اکشن چی داریم؟

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

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

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

SQL:
$sql = "SELECT * FROM topics WHERE  shomareh_topic=$topic_number";

result=.....
...
...
...while(.....)
{
            $forum_number=$info['Shomare_forum'];

}

من کد کوئری و کد دریافت شماره تالار را در بالا نوشتم ولی کد کاملش را در تاپیک می توانید پیدا کنید.

پس در قسمت اول ، در قسمت اکشن ، می رود اطلاعات لازم ، مثلا برای ساخت لینک برگشت را پیدا می کند.
و کد لینک برگشت دقیقا این طوریه:
PHP:
echo'<a href="http://saalek110.is-great.net/forum/forum.php?number='.$forum_number.'&h='.$abcdgh.'">'.'return to forum'.'</a>';

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

اگر در فروم من به فایل لیست زیرتالارها و لیست تاپیکها که همون فایل forum.php است بروید و به آدرس نگاه کنید ، کلمه number و h را خواهید دید. البته فعلا ساختار فروم من این جوریه و بعدا شاید عوضش کنم و مثلا با روش post کار کنم نه روش get و دیگه این number و h دیگه وجود نداشته باشه.
 

saalek110

Well-Known Member
اما وظیفه اصلی قسمت اکشن ، ایجاد ایجاد لینک برگشت نیست.
مثلا وظیفه اش ، ادیت یک پست یا دیلت یک پست است که خوب وقتی شماره پست را داشته باشی کوئری ادیت یا دیلت پست را می نویسی که خودتان بلدید و نیاز نیست من باز تکرار کنم.

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

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

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

saalek110

Well-Known Member
کوئری های کار اصلی قسمت اکشن:

کوئری دیلت:

SQL:
$sql = "DELETE FROM topics WHERE shomare_topic=$topic_number";

کوئری ادیت:

PHP:
     $sql = "UPDATE topics SET shomareye_forum='$in_shomareh' WHERE shomareye_topic=$topic_number";

در کوئری بالا ، شماره تالار یک تاپیک با شماره topic_number عوض شده به in_shomareh

کوئری ساخت یک پست جدید:

SQL:
$sql = "INSERT INTO `esme_jadval` (`abc`,`abc`,`abc`,`...`,`...`,`....`) VALUES ( '$abc','$abc','$abc','$...','$...','$....')";
 

saalek110

Well-Known Member
یک تاپیکی من دارم که درش به ساختار فایلهای php پرداخته شده. بحث بالا کمی شبیه بحث اون تاپیک شد...
یعنی به ریز کدها کار نداریم ، به ساختار کلی فایل کار داریم.
شاید بعدا باز هم به ساختار کلی فایلها پرداختیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
نقش قسمت نمایشی اولیه در فایل عملیاتی چیه؟

یکی اینکه تایید بگیرد ، اگر اتفاقی دست کسی به لینک یا دکمه دیلت بخوره و فایل عملیاتی بدون هیچ سوالی ، اونو دیلت کنه ، خسارت دارد.

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

saalek110

Well-Known Member
Css فایلهای نمایشی و فایلهای عملیاتی:

در فایلهای من ، چه نمایشی و چه عملیاتی ، اول هر فایل ، css اون قرار داره . البته یک فایل css هم هست که همه فایلها اینکلود می کنند. من به شیوه رایج سایت سازی کار نکردم و فایلهای css من هم پسوند php دارند و اونها را اینکلود می کنم. چون فایلهای دارای پسوند ‌css کچ میشه و بعد تغییر اونها باید بروسر را پاک کنی تا نتیجه تغییر را ببینی.

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

saalek110

Well-Known Member
فرق عمده فایلهای عملیاتی و نمایشی چیست؟
در فایلهای نمایشی ، اطلاعاتی از دیتابیس خونده میشه و نمایش داده میشه و هیچ تغییری در دیتابیس داده نمیشه.
مثل نمایش لیست تالارها و تاپیکها یا نمایش پستها در یک تاپیک.

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

saalek110

Well-Known Member
سه قسمت فایل عملیاتی :
اول دریافت ورودی ها
دوم قسمت ‌action
سوم نمایش و فرم ارسال اطلاعات.

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

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

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

جدیدترین ارسال ها

بالا