PHP, امنيت

چگونه : در PHP ساده و سریع تر با MySQL کار کنیم؟

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

سلام دوستان

موضوعی که در این بحث می خواهیم در موردش صحبت کنیم ،معرفی کلاس آماده ای برای کار با دیتابیس در php است . اگر تا حدودی با برنامه نویسی و مخصوصا php که اپن سورس هست آشنا باشید می دونین که معمولا برای هر کاری مث کار با دیتابیس ها ، تصاویر ، فرم ها و … کلاس های آماده و مختلفی وجود دارد که با کمی جستجو در نت می تونید خیلی از اونها رو پیدا کنید.شاید بپرسین وقتی خود زبان php توابع و امکانات لازم برای این کارها رو داره چه دلیلی داره از کدهای ثانویه استفاده کنیم ؟ جواب این سوال ساده است ; چون در این کدها که معمولا به صورت شی گرا (OOP) نوشته شده اند و در قالب یک کلاس (Class) منتشر می شوند ، سعی شده ساده ترین و سریع ترین روش برای انجام کار برامون میسر بشه و دیگه درگیر ریزه کاریهای زبان برنامه نویسی نمی شویم.در این کلاس ها خیلی از کارهای ضروری و عمومی از قبل انجام شده است و امکانات رند گشته و ما فقط با چند خط کد ساده می توانیم به هدف خود برسیم بدون درگیری با جزئیات توابع php و ایجاد امنیت و …

فک می کنم توضیح کافی باشه و اگر اجازه بدید بریم سراغ معرفی کلاس مورد نظرمون که یک کلاس کار با MySQL هست که خودم در کارهام ازش استفاده می کنم و کلاس جالبی است کلا !

این کلاس که اسمش PHP MySQL wrapper v3 هست امکانات و سینتکس ساده ای هم داره و نیاز به تخصص خاصی برای استفاده است نیست . امنیت داده هایی که به دیتابیس insert یا update می شوند را نیز به صورت توکار تامین می کند . دست شما رو برای تغییرات در آینده بازتر می گذارد و مزایای دیگه که کم کم خواهیم دید . برای شروع می تونید کلاس رو به صورت کامل و فشرده از اینجـــــا دانلود کنید

در داخل فایل دریافتی شما ۲ فایل اصلی php قرار دارد که کار هر کدام به این شرح است :

 

  • config.inc.php : همه تنظیمات مربوط به اتصال به دیتابیس اعم از آدرس سرور،نام کاربری ،کلمه عبور و نام دیتابیس مورد نظر را در این فایل وارد می کنیم و در بقیه کدها این فایل را به برنامه الحاق می کنیم تا لازم نباشد در هر صفحه از کدهامان این اطلاعات را قرار بدهیم
  • Database.singleton.php : فایل حاوی کلاس اصلی که می خواهیم ازش استفاده کنیم. نیازی به تغییر در داخل این فایل نیست و فقط باید در برنامه الحاقش کنیم حالا یا با دستور require یا include :)

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

 

 

در کد بالا همانطور که مشاهده می کنید در خط ۲ فایل اصلی کلاس را به برنامه الحاق کردیم و در خط ۴ پارامتر را به کلاس فرستاده و یک کپی از آن را در متغیر $db قرار دادیم.

۴ پارامتری که همیشه برای اتصال به پایگاه داده نیاز داریم و در این کلاس هم همینطوره این ها هستند:

  • server_name : آدرس یا ip سرور MySQL می باشد که معمولا هم در لوکال هاست و هم روی سرور همان localhost هستش.روی بعضی هاست ها مخصوصا هاست های رایگان ممکنه آدرس های خاصی غیر از این هم باشد
  • mysql_user : نام کاربری اتصال به MySQL هست
  • mysql_pass : کلمه عبور اتصال به MySQL هست . اگر کلمه عبور وجود ندارد (معمولا روی لوکال هاست) می توانید خالی اش بزارید مثل “”
  • mysql_database : این هم از اسمش معلوم هست چیه بله نام دیتابیسی که می خواهیم در برنامه ازش استفاده کنیم

البته این روش در صورتی است که نخواهیم از فایل تنظیمات که قبلا گفته شد استفاده کنیم . ولی شدیدا توصیه می شه این اطلاعات را در متغیر یا ثابت های php ذخیره کنید تا اگر در آینده تغییر کردند لازم نباشد کل کدهاتون رو باز کرده و ویرایش کنید.مثلا انعطاف کد زیر رو با کد بالایی مقایسه کنید

همونطور که مشاهده می کنید برای همه اطلاعاتی که ممکنه در آینده تغییر کنند یک ثابت (Constant) تعریف کردیم و مقدار را در ثابت قرار دادیم .(می تونستیم در متغیر هم قرار بدیم زیاد فرقی ندارند).

بعد در بالای برنامه مون کافیست این کد را قرار بدهیم :

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

اگر در مکانی غیر از برنامه اصلی (مثلا در داخل توابع) بخواهیم با دیتابیس کار کنیم کافیست از کد زیر استفاده کنیم:

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

احتمالا حدس زدید که می تونیم از خط ۷ تا ۱۳ رو هم داخل فایل config.inc.php قرار بدهیم چون کارهای روتینی هستند که همیشه انجام خواهیم داد و به این ترتیب از حجم کدهامون کم می شود . همینطور که می بینید چون متغیر $db که قبلا ساختیم در داخل تابع در دسترس نیست امدیم و در خط ۲۲ یک نمونه جدید از آن ساختیم .

در خط ۲۴ چون مقداری رو که از کاربر گرفتیم به دیتابیس می فرستیم تا تطبیق داده شود ،از متد $db->escape() کلاس مون استفاده کردیم تا جلوی حملات تزریق sql گرفته شود.به این حملات اصطلاحا XSS گفته می شود و در آن شخص نفوذگر سعی می کند با فرستادن و تزریق کدهای خاصی به دیتابیس دسترسی پیدا کرده و کارهای مورد نظرش را انجام دهد. این متد تا حد خوبی از این کار جلوگیری می کند و برنامه ما را امن تر می سازد

در خط ۲۵ هم از یک متد دیگر کلاس مون استفاده کردیم که پرس و جوی sql رو همزمان اجرا کرده و مقدار را هم بر می گرداند.

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

بروزکردن رکوردی از جدول (update)

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

 

همونطور که می بینید داده ها رو در یک آرایه قرار دادیم که کلید آرایه در واقع نام فیلد در جدول مون هست . بعد این آرایه مقادیر رو به همراه نام جدول و شرط مورد نظر به متد update سپردیم و داده ها بروز شدند.

 

وارد کردن اطلاعات جدید در جدول (insert)

درج اطلاعات جدید هم تقریبا مثل بروز کردن اطلاعات هستش فقط در اینجا شرط نیاز نیست :

حذف اطلاعات از جدول (delete)

حذف اطلاعات نیز به سادگی قابل انجام است :

 

جستجوی در جدول (search)

کد زیر کار جستجو رو انجام می دهد و داخل جدول گشته و اگر مقدار فیلد referer در جایی شامل آدرس سایت گوگل بود ، توسط یک حلقه while رکورد های یافت شده را نمایش میده.در اینجا هم از سه متد اصلی کلاس یعنی  escape() query()  fetch() استفاده شده:

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

 

اگر بخواهیم از انجام شدن درست عملیات های وارد کردن اطلاعات یا بروز کردن اطلاعات مطمئن بشیم هم یک متد در نظر گرفته شده است که به این صورت مورد استفاده قرار می گیرد :

 

نکته : نسخه ۳ این کلاس فقط در php نسخه ۵ کاربرد دارد واگر از نسخه های قدیمی php استفاده می کنید می توانید از ورژن ۲ این کلاس بهره ببرید

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

 

10 Comments

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

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

  2. بازتاب: دیزاین فا » Blog Archive » چگونه : در PHP ساده و سریع تر با MySQL کار کنیم؟
  3. کد خوب و خلاصه ایه. فقط این یک تیکه رو بعد از تابع obtain بزارید:
    or die(‘Error In Connecting to Database.’);
    این پیغام خطایی میده که جایگزین خطای پیشفرض میشه. چون با بعضی تنظیمات سرور خطا تو اتصال به خاطر بالا بودن ریکوئست ها یا دلایل دیگه ممکنه باعث بشه اطلاعات حساسی رو تو پیغام خطا به بازیدید کننده نشون بده و ضعف امنیتی محصوب میشه.

    1. ممنون . این کلاس توش یه متغیر بنام debug$ هست که اگه مقدارش رو false کنیم دیگه خطایی نشون نمیده . فک کنم این راهم خوب باشه برای عدم نمایش خطا

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آخرین مقالات فتولیا در ایمیل شما

در خبرنامه ما عضو شوید و آخرین مطالب و مقالات آموزشی را اول شما دریافت کنید