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

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


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

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

saalek110

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



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

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

پیوست ها

  • Screenshot_۲۰۲۵-۰۱-۱۰_۲۰۲۸۱۰.jpg
    Screenshot_۲۰۲۵-۰۱-۱۰_۲۰۲۸۱۰.jpg
    38.6 کیلوبایت · بازدیدها: 1
آخرین ویرایش:

saalek110

Well-Known Member
تا اینجا کار انجام شد،

کوئری ساخت تاپیک و پست ها:


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

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

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

saalek110

Well-Known Member
یافتن شماره تاپیک تازه ساخته شده:


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


SQL:
$sql = "SELECT * FROM topics ORDER BY topic_number ASC";
result=.....
while(....)
{
     $my_topic_number=$info['topic_number'];
}

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

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

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


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

saalek110

Well-Known Member
برای ایجاد پستها ، باید پستها را از مبدا بخوانیم در مقصد ایجاد کنیم.

فکر می کنم داخل کروشه های while خواندن پست از مبدا ، باید کوئری ‌insert پستهای مقصد را بنویسم.
 

saalek110

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


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

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

تقریبا آخر کاره .....

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

موفقیت: پست خلق شد و تاپیک هم اون را شناخت و اضافه کرد.

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

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



فایل عملیاتی مورد نظر را در یک نشست یعنی یک جلسه نوشتم.
دو قسمت دیگه البته باید بهش اضافه کنم تا کاملا تکمیل بشه.
۳ الی ۴ تا تاپیک را باهاش منتقل کردم. یکی از نواقصش اینه که تاریخ تاپیک را تنظیم نمی کنه که البته کدش را در فایل دیگری دارم و اضافه می کنم و درست میشه...
نقص دیگرش هم اینه که باید تاپیک مبدا را دیلت کنه که اینم فقط یک کوئری ساده است و کاری نداره.‌

پس در تکمیل اون هیچ مشکلی نیست.
 
آخرین ویرایش:

saalek110

Well-Known Member
مقدار خاصی دادن به پست اول تاپیک منتقل شده:


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

بعضی مشکلات براحتی با کمی فکر حل میشه.
 

saalek110

Well-Known Member
گنگی مطالب این صفحه بدون ارائه کدها:

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

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

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

بالا