در سری آموزشهای پیاچپی تاکنون با مباحث زیادی آشنا شدهاید و حال نوبت مبحث اتصال به بانکهای داده است. در واقع پویا بودن صفحات وب پیاچپی بدون اتصال به بانکهای اطلاعاتی بیمعنی به نظر میرسد. در این جلسه میخواهیم روش اتصال به یکی از محبوبترین و پرکاربردترین بانکهای اطلاعاتی یعنی MySql را به شما آموزش دهیم. در ادامه با ما همراه باشید.
با اتصال به بانکهای اطلاعاتی تحت سرور میتوانیم دادههای موردنظرمان را در جداول این بانکهای اطلاعاتی ذخیره کنیم و در مواقع لزوم به سرعت به آنها دسترسی داشته باشیم. همچنین در مواقعی نیاز به بهروزرسانی اطلاعات و نیز حذف آنها خواهیم داشت.
پیاچپی از بانکهای اطلاعاتی مختلفی پشتیبانی میکند. اما یکی از محبوبترین و پراستفادهترین بانکهای اطلاعاتی در بین برنامهنویسان از زبان MySQL است. در این جلسه روش اتصال به این بانک داده را با PHP به شما آموزش خواهیم داد و نیز ۴ عملیات اصلی کار با بانکهای اطلاعاتی را به مرور فرا خواهید گرفت.
از این جلسه شروع به ساخت یک CMS (سیستم مدیریت محتوا = Content Managment System) میکنیم. قبل از هر چیز نیاز است الگوریتم سادهای برای این پروژه ایجاد کنید. اما در اینجا برای جلوگیری از سنگین شدن این جلسه بخش الگوریتم را به خودتان واگذار میکنیم.
در کل باید بدانید قصد داریم یک پروژه بسازیم که با بانک اطلاعاتی MYSQL ارتباط داشته باشد و بتوان با استفاده از آن مطالب جدیدی را در بانک داده ذخیرهسازی کرد. هدف ما ایجاد بخشی برای ارسال مطلب، بخشی برای ویرایش مطالب ارسال شده، امکان حذف مطالب ارسال شده و نیز نمایش مطالب ارسال شده است. چهار عمل اصلی در ارتباط با بانکهای داده وجود دارد که به اختصار آنها را CURD مینامند. C برای ساختن (Create) و U برای بهروزرسانی (Update) و R برای خواندن (Read) و نهایتا D برای حذف (Delete).
اتصال به بانک داده
قبل از این کار یک پوشه جدید در پوشه htdocs نرمافزار Xampp ایجاد کنید و نام آن را cms بگذارید. حالا در پوشه cms یک فایل به نام config.php ایجاد کنید. این فایل در واقع تنظیمات مربوط به سیستم ما را نگهداری خواهد کرد. همچنین از طریق این فایل به بانک داده متصل خواهیم شد.
اما ابتدا باید بانک اطلاعاتی موردنظرمان را ایجاد کنید. پس از اجرای Xampp در پنل مدیریت این نرمافزار سرویس MySQL را نیز همانند سرویس Apache اجرا کنید.
حالا مرورگر خود را باز کرده و به آدرس http://127.0.0.1/phpmyadmin بروید. در این بخش شما میتوانید بانکهای اطلاعاتی سرور محلی خود را مشاهده، ایجاد و حذف کنید. پس از اجرای آدرس فوق باید با صفحهای مانند زیر مواجه شوید.
همانطور که در تصویر با کادر قرمز مشخص شده، روی Database کلیک کنید. در این بخش میتوانید یک بانک اطلاعاتی جدید بسازید. نام بانک اطلاعات موردنظر خود را باید در کادر مربوطه همانند تصویر زیر وارد کنید. همچنین نوع یونیکد موردنظر برای این بانک داده را هم با استفاده از منو کشویی مقابل فیلد نام آن، میتوانید تعیین کنید. از آنجا که زبان ما فارسی است بهترین کار در این مرحله انتخاب یونیکد utf-8 است. پس همانند تصویر زیر نام بانک اطلاعاتی جدید خود را cms و نوع آن را هم utf8-general-ci تعیین کنید.
حال باید جداول موردنظرتان را ایجاد کنید. اما برای جلوگیری از سنگین شدن مبحث و اینکه هدف ما آموزش php است، جداول موردنیاز برای این پروژه را ساختهایم و شما نیز برای ساختن این جداول مراحل زیر را پس از ساختن بانک اطلاعاتی یاد شده انجام دهید. پس از اینکه روی دکمه Create کلیک کنید، بانک اطلاعاتی cms ایجاد خواهد شد. حالا وارد بخش sql شوید و همانند تصویری که در ادامه میبینید، کد زیر را در بخش مربوطه قرار داده و سپس بر روی دکمه Go کلیک کنید.
— phpMyAdmin SQL Dump
— version 4.5.1
— http://www.phpmyadmin.net
—
— Host: 127.0.0.1
— Generation Time: May 28, 2016 at 02:13 PM
— Server version: 10.1.9-MariaDB
— PHP Version: 5.6.15
SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;
SET time_zone = “+00:00”;
/*!۴۰۱۰۱ SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!۴۰۱۰۱ SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!۴۰۱۰۱ SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!۴۰۱۰۱ SET NAMES utf8mb4 */;
—
— Database: `cms`
—
— ——————————————————–
—
— Table structure for table `posts`
—
CREATE TABLE `posts` (
`id` int(11) NOT NULL,
`title` varchar(200) NOT NULL,
`text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
—
— Indexes for dumped tables
—
—
— Indexes for table `posts`
—
ALTER TABLE `posts`
ADD PRIMARY KEY (`id`);
—
— AUTO_INCREMENT for dumped tables
—
—
— AUTO_INCREMENT for table `posts`
—
ALTER TABLE `posts`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
/*!۴۰۱۰۱ SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!۴۰۱۰۱ SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!۴۰۱۰۱ SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
کد بالا برای ایجاد یک جدول به نام posts است که این جدول سه فیلد دارد. برای هر مطلب یک فیلد برای شماره مطلب وجود دارد که این شماره برای هر رکورد از جدول یکتا خواهد بود. همچنین یک فیلد برای عنوان و یک فیلد نیز برای متن مطلب درنظرگرفتهایم. یونیکد این جدول و تمامی فیلدهای آن نیز utf8-general-ci است.
اصلا نگران این بخش نباشید چرا که بعدا مفصلا به آن خواهیم پرداخت. فقط به یاد داشته باشید که تاکنون چه کارهایی انجام دادیم.
حالا برگردیم به بخش پیاچپی. فایل config.php را باز کنید و کد زیر را در آن قرار دهید:
<?php
$dbhost = “localhost”;
$dbuser = “root”;
$dbname = “cms”;
$dbpass = “”;
$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
if ($connect_db){
echo “we Connected to db successfully!”;
}else{
echo “error in connecting db”;
}
?>
در کد بالا ابتدا ۴ متغیر تعریف کرده و آنها را مقداردهی کردیم. برای اتصال به بانکاطلاعاتی mysql در php نیاز به ۴ مشخصه خواهید داشت. آدرس میزبان بانک داده که در اینجا متغیر dbhost است، نام کاربری بانک داده که در اینجا dbuser است، نام بانک داده که در اینجا dbname است و نهایتا رمزعبور کاربر بانک داده که در اینجا dbpass است. در بیشتر مواقع آدرس میزبان بانک داده همان localhost خواهد بود. در نرمافزار زمپ نام کاربری تمام بانکهای دادهای که میسازیم root است و این کاربر رمزعبور ندارد و به همین دلیل مقدار dbpass را خالی گذاشتهایم. نام بانک داده نیز همان نامی خواهد بود که در هنگام ساختن بانک اطلاعاتی موردنظر خود تعیین کردهاید و در این پروژه نام تعیین شده ما cms بود.
حال باید با استفاده از تابع mysql_connect به بانک داده متصل شویم. این تابع سه آرگومان ورودی دارد که به ترتیب آدرس میزبان بانک داده، نام کاربری بانک داده و رمزعبور کاربر بانک داده هستند. خروجی این تابع نیز یا true خواهد بود یا false. در کد بالا ما خروجی این تابع را در متغیر connect_db ذخیره میکنیم و سپس با یک دستور if بررسی کردهایم که اگر اتصال به درستی برقرار شد پیام مناسب به کاربر نمایش داده شود و اگر اتصال انجام نشده بود پیام خطای عدم اتصال به بانک داده نمایان شود.
پس از اینکه مراحل فوق را انجام دادید یک فایل دیگر به نام index.php در پوشه cms ایجاد کنید. سپس در این فایل کد زیر را قرار دهید:
<?php
include (“config.php”);
?>
همانطور که احتمالا متوجه شدهاید ما فایل config.php را با کد بالا در فایل index.php فراخوانی کردهایم. حالا اگر آدرس http://127.0.0.1/cms/index.php را در مروگرتان اجرا کنید، باید با عبارت we Connected to db successfully! مواجه شوید. در غیر اینصورت یکی از مراحل را اشتباه انجام دادهاید، چراکه در این صورت اتصال به بانک داده انجام نشده است. اما اگر پیغام یاد شده را مشاهده میکنید یعنی با موفقیت به بانک داده cms متصل شدهایم. اگر همه چیز به درستی انجام شده بخش if فایل config.php را حذف کنید یا آن را به صورت کامنت درآورید. همچنین یک دستور دیگر برای انتخاب بانک اطلاعاتی cms که آن را در مراحل قبلی ایجاد کردیم به این فایل اضافه میکنیم. در نهایت کد config.php شما باید شبیه به زیر باشد:
<?php
$dbhost = “localhost”;
$dbuser = “root”;
$dbname = “cms”;
$dbpass = “”;
$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname,$connect_db);
?>
با استفاده از تابع mysql_select_db میتوانید به بانک اطلاعاتی موردنظر خود در سرور mysql متصل شوید. همانطور که میبینید این تابع دو آرگومان دارد که ورودی اول نام بانک اطلاعاتی که قصد متصل شدن به آن را داریم است و مورد دوم که تعریف آن اجباری هم نیست، به خروجی تابع متصل شدن به سرور MySQL اشاره دارد. در اینجا ما خروجی تابع را در متغیر connect_db قرار داده بودیم و از همین رو در آرگومان دوم تابع mysql_select_db نام این متغیر را وارد کردهایم.
اما برای درک بهتر ادامه این آموزش باید با ساختار جدولی که ساختهایم آشنا شوید. به شکل زیر دقت کنید:
در نتیجه ما یک بانک اطلاعاتی به نام cms داریم. هر بانک اطلاعاتی میتواند شامل چند جدول باشد و هر جدول نیز شامل یکسری فیلد است.
در اینجا جدول ما posts نام دارد و هر سطر آن (هر رکورد) شامل سه فیلد id و title و text است. تعیین نام فیلدها و نوع آنها در هنگام ساخت جدول انجام میشود و در این مورد نامهای انتخابی ما سه موردی بود که اشاره کردیم. همانطور که در تصویر بالا میبینید هر مطلب به صورت یک سطر جدید در جدول posts ذخیره خواهد شد و هر مطلب سه مشخصه id یا شناسه یکتای مطلب، title برای عنوان و text برای متن مطلب را شامل میشود.
در جلسه بعد پروژه خود را ادامه خواهیم داد و رفته رفته آن را کاملتر میکنیم. پیشنهاد میکنیم برای درک بهتر آموزشهای بعدی کمی در مورد بانک اطلاعاتی mysql و نیز دستورات sql در گوگل جستجو کنید و در میان مطالب بسیار زیاد فارسی منتشر شده در این مورد کمی تحقیق کنید تا با آمادگی بیشتری بتوانید ادامه آموزشها را پیگیری کنید.
اگر هرگونه سوالی در مورد مباحث این جلسه برایتان پیش آمده آن را در بخش نظرات اعلام کنید.