چطور داده‌هامون رو به سایت ارسال کنیم (بخش اول)

چند سال پیش برای پروژه‌ای نمایشی می‌خواستم داده‌های هواشناسی، مثل دما و رطوبت هوا رو با حسگرهای الکترونیکی اندازه‌گیری کنم و بعد با استفاده از ماژول وای- فای (توضیحاتش توی گاهنامه‌های پیشین هست)، این اطلاعات رو روی سایتی نمایش بدم. بحث سخت‌افزاری و ارسال داده‌ها یه طرف، قسمت طراحی سایت و اینکه چطوری داده‌ها به سایت فرستاده بشن یه طرف. قبلا با HTML سایت ساخته بودم، اما برای دریافت داده‌ها از دستگاهِ ساخته شده و ارسال به بانک اطلاعاتی احتیاج به برنامه نویسی داشت. بعد از کلی اینور اونور کردن و جستجو توی اینترنت و پیدا کردن نمونه برنامه‌های مختلف، به این نتیجه رسیدم که با PHP میشه اینکارو انجام داد (با پایتون هم میشه، اما ظاهراً سایت‌های رایگانی که پایتون ساپورت کنن کم هست). خلاصه با کلی دردسر کارها انجام شد. چون پول مفت به کسی نمیدم (در عوض کلی دردسر می کشم) چند تا سایت که PHP رو ساپورت کنن و فیلتر نباشن و یا اونا بخاطر تحریم ها دسترسی مارو قطع نکرده باشن پیدا کردم، بهترین اونا www.freewebhostingarea.com هست که خدمات خوبی داره و می‌تونیم اسم دامین‌‌مون رو از بین اسامی مختلف انتخاب کنیم. سایت رو ساختم و کارهایی که می‌خواستم انجام شد، بعد از چند ماه که بهش سر زدم، سرور سایت گفت که چون بیش از دو ماه از سایت‌تون استفاده نکردین سایت حذف شده. دوباره سایت رو راه انداختم اما چون مدت زیادی ازش گذشته بود، تنظیماتی که توی سایت و تغییراتی که توی برنامه‌ها داده بودم رو فراموش کردم و با کلی سعی و خطا دوباره درست شد. به نظرم رسید کارهایی که انجام دادم رو بنویسم تا اگه باز این مشکل پیش اومد، دوباره بـــــــــیـــــــــــب نشه. شاید به درد دوستان دیگه هم بخوره و بتونن از این آموزش استفاده کنن و مهم‌تر از همه اینکه اساتید حرفه‌ای اگه اشتباهی توش دیدن یا نکته نظری (نقطه نظر اشتباهه) دارن بگن. کاری که می خوایم انجام بدیم اینه:یه دستگاه الکترونیکی داریم که میخوایم داده‌هاشو برای ذخیره و استفاده بعدی به سایتی بفرسته، این دستگاه با استفاده از یه ماژول وای-فای به اینترنت متصله .یه سایت بسازیم که PHP رو ساپورت کنه و امکان دسترسی به بانک اطلاعاتی رو برای کاربر فراهم کنه.یه برنامه PHP برای سایتمون بنویسیم که وقتی داده‌ها توسط دستگاه ارسال شد، داده‌ها رو بگیره و توی بانک اطلاعاتی ذخیره کنه.یه برنامه دیگه بنویسیم تا وقتی کاربر خواست، داده‌های دریافت شده رو بصورت جدول نشون بده.برای اینکار اول از همه باید یه هاست یا فضا توی اینترنت بگیریم تا بتونیم برنامه‌ای بنویسیم و داده هارو در اینترنت ذخیره کنیم. همینطور یه دامنه مختص خودمون که در حقیقت آدرس سایت ماس. اگه نمی‌خوایم پول بدیم می تونیم از سایت‌هایی که این امکانات رو بصورت رایگان در اختیارمون قرار میدن استفاده کنیم. محدودیت‌هایی دارن، اما برای شروع بد نیست. سایت های خارجی امکانات بهتری دارن، اما همونطور که گفتم یا فیلتر هستن و یا اجازه دسترسی ایرانی ها قطع شده، این سایت خیلی خوبه، هم هاست و هم دامینش رایگانه:https://www.freewebhostingarea.com/سایت گیگفا و پرگیگ هم سایت‌های ایرانی خوبی هستن. من برای ارسال داده‌ها با روش POST به سرور گیگفا کمی مشکل داشتم و پیشنهاد می‌کنم که اگه می خواین با متد POST به سایت اطلاعات بفرستین از سایت پرگیگ استفاده کنین.در این آموزش من از سایت گیگفا استفاده کردم، پرگیگ هم دقیقا مشابه همین هست و فقط آدرس سایتش فرق میکنه. برای شروع به صفحه اصلی سایت میریم و یک هاست رایگان ثبت نام میکنیم:ثبت نام هاست رایگان رو انتخاب و برای سایت‌مون یه اسم می‌ذاریم و بهش پسورد می‌دیم و ...مثلا من اسم سایتم رو az-test گذاشتم. پسوردش هم بماند.اگه کارها درست انجام بشه، واسمون از طرف سایت یه ایمیل میاد که لینک تایید توش هست، روی اون کلیک می‌کنیم تا کارهای ساخت هاست انجام بشه. در نهایت همچین صفحه ای باز میشه که توی اون اطلاعات اکانت‌مون قابل مشاهده‌اس:بهتره که اطلاعات رو کپی و توی یه فایل TEXT برای استفاده های بعدی ذخیره کنیم. روی لینک cpanel.gigfa.com کلیک می‌کنیم تا بعد از وارد کردن یوزرنیم و پسورد وارد کنترل پنل اختصاصی‌مون بشیم.اولین کاری که می خوایم انجام بدیم اینه که یه دیتابیس بسازیم تا داده‌های ورودی رو بتونیم توش ذخیره کنیم. برای اینکار از قسمت DATABESES کنترل پنل، روی لینک MySQL Databeses کلیک می‌کنیم. صفحه‌ای مشابه عکس زیر باز میشه و اسمی برای دیتابیس (مثلا example) انتخاب و دیتابیس رو می‌سازیم.بعد از ساخت، مشخصات دیتابیس به نمایش در میاد (MySQL DB Name و MySQL User Name و MySQL Host Name...) و پسورد هم، پسوردی هست که برای سایت انتخاب کردیم. بهتره این اطلاعات رو توی همون فایل TEXT برای استفاده بعدی ذخیره کنیم.حالا لازمه که بانک اطلاعاتی ساخته شده رو مطابق دلخواه‌مون مدیریت کنیم، دقیقاً مشابه کاری که با فایل‌های جدولی اکسل انجام می‌دیم. مثلا من می خوام که این دیتابیس، 4 ستون داشته باشه:1- ستون اول تاریخ2- ستون دوم ساعت3- ستون سوم دما4- ستون چهارم رطوبت هوابرای مدیریت کردن دیتابیس، روی دکمه Admin کلیک میکنم.حالا باید یه جدول بسازیم و بهش اسم بدیم، مثلا من اسم example رو انتخاب کردم با 4 ستون. بعد دکمه GO رومی‌زنیم.صفحه ای مشابه صفحه زیر باز میشه و توی این صفحه باید اسم ستون‌ها و نوع اون‌هارو مشخص کنیم.اسم ستون اول رو date گذاشتم و نوع (یا تایپ) اونو از جنس تاریخ (Date)، ستون دوم با اسم time و از جنس time، ستون سوم به اسم dama ستون چهارم به اسم rh و جنس این دو ستون رو INT یا اعداد صحیح انتخاب کردم. درپایان باید Save رو کلیک کنیم.برای اینکه بخوایم داده‌ها رو به سایت بفرستیم و سایت هم داده‌ها رو دربانک اطلاعاتی قرار بده باید یه برنامه کوچولو بنویسیم که من از زبان PHP استفاده کردم. برای دریافت اطلاعات میشه از متد GET یا متدPOST. فعلاً از متد GET استفاده می‌کنم و با استفاده از خط فرمان ( Command line) داده‌ها رو وارد بانک اطلاعاتی می‌کنم.برنامه زیر نمونه‌ای که می تونیم ازش استفاده کنیم:<?php date_default_timezone_set(&quotAsia/Tehran&quot); $dama=$_GET['dama']; $rh=$_GET['rh']; $t=date(&quoth:i:sa&quot); $d=date(&quotY/m/d&quot); mysql_connect(&quotMySQL Host Name&quot, &quotMySQL User Name&quot, &quotPASS&quot) or die(mysql_error()); mysql_select_db(&quotMySQL DB Name&quot) or die(mysql_error()); mysql_query(&quotINSERT INTO example (date, time , dama , rh) VALUES('$d', '$t' , '$dama' , '$rh' ) &quot) or die(mysql_error()); echo &quotData Inserted!&quot ?>در فایل بالا بجای MySQL Host Name و MySQL User name و PASS و MySQL DB Name باید مشخصات بانک اطلاعاتی که در مرحله قبل به دست اوردیم رو بذاریم. بعد از اعمال تغییرات این فایل رو به اسم GET.PHP روی کامپیوتر ذخیره می‌کنیم. حالا باید فایل GET.PHP رو توی سایتمون آپلود کنیم. برای اینکار وارد کنترل پنل می‌شیم و از قسمت Files، لینک Online File manager رو کلیک می‌کنیم تا صفحه‌ای مشابه عکس زیر باز بشه. این قسمت تقریباً مشابه MyComputer ویندوز هست ولی بجای اینکه با فایل‌های روی کامپیوتر کار کنیم، با فایل‌هایی که توی اینترنت ذخیره شدن کار می‌کنیم. همونطور که نوشته (DO NOT ULPOAD FILES HERE)، توی این قسمت کاری نباید انجام بدیم و فایلی نباید آپلود کنیم. برای همین روی فولدر htdocs کلیک می کنیم تا صفحه زیر باز بشه:اینو می‌تونین مثل یکی از درایوهای کامپیوترتون تصور کنین، وقتی تازه هاست رو ایجاد کردین، فقط این دو تا فایل توی درایوتون (در حقیقت توی هاست‌تون) وجود داره. حالا باید فایل GET.PHP رو که توی کامپیوتر ذخیره کردیم، توی این درایو (در حقیقت هاست) قرار بدیم. برای اینکار روی آیکون آپلود کلیک می کنیم و مسیر فایل GET.PHP روی کامپیوترمون رو مشخص و فایل رو آپلود می‌کنیم. اگه مشکلی پیش نیاد می‌بینیم که فایل GET.PHP به درایو (همون هاست) اضافه شده.میتونیم برای راحتی کار از برنامه‌های FTP استفاده و فایل‌ها رو سریع تر آپلود کنیم. همچنین میشه بجای آپلود فایل، مستقیماً فایل‌های PHP رو توی فولدری که می‌خوایم ایجاد کنیم.حالا می‌تونیم این فایل رو از طریق مرورگر اجرا کنیم. برای اینکه به مرورگر بگیم این فایل کجاس (در کدوم هاست و آدرس اینترنتی قرار داره )، باید اسم این فایل رو به اسم آدرس سایتی که ساختیم اضافه کنیم. مثلا سایتی که ساختم اسمش az-test بود که در این صورت اسم سایتم میشه az-test.gigfa.com و آدرس فایل GET.PHP میشه:az-test.gigfa.com/get.phpاگه این آدرس رو توی مرورگر وارد کنیم، پیام Data Inserted! به نمایش درمیاد (گرچه داده‌ای وارد نکردیم و فقط برنامه رو اجرا کردیم) که نشون میده برنامه به درستی آپلود و به دیتابیس متصل شده (یادتون باشه که آدرس شما بر اساس سایتی که ساختین متفاوته).خوب حالا قرار بود که ما بوسیله خط فرمان، داده های دما و رطوبت رو وارد سایت کنیم، مثلا می خوایم دمای 23 و درصد رطوبت 45 رو توی دیتابیس ذخیره کنیم. برای اینکار (بدون استفاده از دستگاهی که ساختیم) عبارت زیر رو به آدرس برنامه GET.PHP اضافه می‌کنیم:?dama=23&rh=45(کلمه dama و rh همون اسم ستون‌هایی هستن که توی مدیریت دیتابیس برای جدول‌مون گذاشتیم).در نهایت چنین عبارتی رو در مرورگر وارد می‌کنیم:az-test.gigfa.com/get.php?dama=23&rh=45و نمایش پیام Data Inserted! نشانگر اتصال به دیتابیس و ذخیره اطلاعاته.اگه وارد قسمت مدیریت دیتابیس (همونجایی که رفتیم و جدول ساختیم و اسم ستون هارو انتخاب کردیم و ...) بشیم و بعد Browse رو کلیک کنیم:می بینیم که داده هایی که وارد دیتابیس سایتمون کردیم نشون داده میشه:که در این جدول، تاریخ و زمان ورود اطلاعات، دما و رطوبت هوا قابل مشاهده‌اس. در ردیف اول چون بار اول که برنامه رو اجرا کردیم، اطلاعات مربوط به دما و رطوبت رو وارد نکردیم، بخاطر همین اعداد 0 (هم برای دما و هم برای رطوبت) نشون داده شده. اما در ردیف دوم داده های دریافتی دما و رطوبت دیده میشه.این اطلاعات رو ما بصورت خط فرمان و از طریق مرورگر وارد کردیم، اما در واقع دستگاهی که ساختیم داده هارو از سنسورها میگیره و در بستر اینترنت می فرسته.ما اطلاعات رو توی اینترنت ذخیره کردیم، ولی فقط خودمون که صاحب سایت هستیم می‌تونیم اونو ببینیم و افراد دیگه که پسورد رو ندارن قادر به دیدن داده‌ها نیستن. برای همین باید یه برنامه دیگه بنویسیم تا هرکسی با اجرای اون، بتونه داده‌هایی که به اینترنت فرستاده و ذخیره شده رو ببینه. نمونه برنامه مشابه برنامه زیره:<?php mysql_connect(&quotMySQL Host Name&quot, &quotMySQL User Name&quot, &quotPASS&quot) or die(mysql_error()); mysql_select_db(&quotMySQL DB Name&quot) or die(mysql_error()); $result = mysql_query(&quotSELECT * FROM example&quot) or die(mysql_error()); echo &quot<table border='1'>&quot echo &quot<tr> <th>Date</th> <th>Time</th> <th>Dama</th><th>Rh</th></tr>&quot while($row = mysql_fetch_array( $result )) { echo &quot<tr><td>&quot echo $row['date']; echo &quot</td><td>&quot echo $row['time']; echo &quot</td><td>&quot echo $row['dama']; echo &quot</td><td>&quot echo $row['rh']; echo &quot</td></tr>&quot } echo &quot</table>&quot ?>همونطور که قبلاً گفتم قسمت MySQL Host Name و MySQL User name و PASS و MySQL DB Name رو باید مطابق مشخصات بانک اطلاعاتی خودمون اصلاح کنیم. این برنامه رو به اسم SHOW.PHP ذخیره و مثل توضیحات داده شده آپلود می‌کنیم. حالا هرکی، از هرجای دنیا آدرس زیر رو وارد مرورگر کنه:http://az-test.gigfa.com/show.phpجدول حاوی اطلاعات داده های دما و رطوبت ذخیره شده به نمایش در میاد، یه همچین چیزی:خوب این جدول ساده و پیش پا افتاده‌اس، باید یه پیج خوب طراحی کنیم و خوشگل مشگلش کنیم و...همچنین می‌تونیم هر تغییری خواستیم توی دیتابیس‌مون بدیم، مثلا داده‌ها بصورت زمانی مرتب بشن، یعنی داده‌هایی که جدیداً وارد شدن، در بالاترین ردیف ستون قرار بگیرن. اینجوری:گفته شده که بعضی‌ها (همون هکرها) می‌تونن بجای ورود داده‌های عددی، کدهایی وارد برنامه PHP کنن و سایت رو هک و از کار بندازن، برای همین لازمه که کد‌هایی به برنامه اضافه بشه که جلوی ورود داده‌های غیرعددی و یا پرت رو بگیره.سایت‌هایی که هاست رایگان میدن معمولاً درآمدشون از راه تبلیغاته، اگه از هاست رایگانی که استفاده می‌کنیم فقط بخاطر اجرای کدهامون باشه و سایتی نسازیم، ممکنه بعد از مدتی هاست‌مون رو حذف کنن. بهتره برای گول زدنشون یه فایل index.html و یه سایت برای هاست‌مون بسازیم. ((( چون اطلاعاتم در مورد طراحی سایت و برنامه نویسی PHP و... زیاد نیست، احتمالا اشتباهاتی توی متن و آموزش هست، این مطلب برای استفاده بعدی خودم نوشتم، شاید به درد دوستان دیگه هم بخوره و حتماً با نظرات خوب دوستان حرفه‌ای کامل‌تر خواهد شد)))