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

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
من سعی کردم هر چی کد شما نیاز دارید را پست بزنم، باقیش را از داخل تاپیک پیدا کنید.


images.jpeg
 

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 اول فایل باشه بهتره. دقیق نمی دونم چرا ولی فکر کنم دردسرش کمتره. شاید کار من مشکلی داره که مجبور شدم قسمت اکشن را بزارم اول فایل که فعلا نمی دونم و فعلا این طوری عمل می کنم.

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

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

saalek110

Well-Known Member
صفحه ۴۱

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

saalek110

Well-Known Member
بعد از بحث صفحه قبل ، یعنی آشنایی با فایلهای عملیاتی ، من می خوام یک فایل عملیاتی پیچیده تر بسازم.
من همان طور که قبلا گفتم ، در فروم خود ، ۳ فروم دارم ، و حالا می خوام یک فایل عملیاتی بسازم که تاپیکهای دو فروم دیگر را به جداول فروم اصلی منتقل کند.

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

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

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

saalek110

Well-Known Member
گفتیم گه فایل عملیاتی ۳ قسمت دارد ،
ورودی گرفتن
و قسمت اکشن
و فرم دیالوگ با کاربر.

هر سه قسمت باید تغییر کند.

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

HTML:
<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">

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

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


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

ولی باید شماره تاپیک مبدا را هم ارسال کنم. تا بتواند تاپیک را از فروم اول پیدا کند و در تالار مورد نظر فروم مقصد بسازد. فکر کنم با فیلد مخفی باید شماره تاپیک را ارسال کنم.


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

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

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

saalek110

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

کدهای دریافت چنین شکلی دارند:


PHP:
 $topic_number=security_check($_POST["shomare_topic"]);

چون توسط فرم ارسال شده و نه لینک. اگر با لینک بود به جای POST کلمه GET را داشتیم.

خوب این قسمت را من نوشتم و تمام شد.

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

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

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


درعکس بالا ، قسمت قبل زدن دکمه تایید در فایل عملیاتی را می بینید.
شماره تاپیک و شماره فرض فروم که همین طوری در فرم من ۲۲ وارد کردم و شماره فروم را می بینید. دو فروم کنار فروم اصلی با شماره های یک و دو داریم. پس یکی از ورودی ها شماره فروم است.عدد ۵۰۵ شماره تاپیک است.

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