آموزش کامل PHP – قسمت 15: درج اطلاعات در بانک

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

عملیات درج در پایگاه داده

برای درج اطلاعات در ادامه پروژه cms که در قسمت قبلی ساختیم باید یک فرم برای درج اضافه کنید. در پوشه cms یک فایل جدید به نام insert.php بسازید. در این فایل یک فرم برای درج مطلب در جدول پست طراحی می کنیم. از آنجا که دو فیلد در جدول داریم باید در فرم نیز دو فیلد تعریف کنیم. یکی برای عنوان و یکی برای متن. حال کد زیر را در فایل index.php قرار دهید.

<!DOCTYPE html>
<html dir="rtl" lang="fa-IR">
<head>
<title>درج مطلب</title>
<meta charset="utf-8" />
</head>
<body style="font-family: tahoma; font-size:14px;">
<center>
<form action="sendpost.php" method="post">
عنوان مطلب : <input type="text" name="postTitle" size="40"><br>
متن مطلب: <br>
<textarea name="postText" rows="10" cols="50"></textarea>
<br>
<input type="submit" value="ثبت مطلب">
</form>
</center>
</body>
</html>

در کد بالا یک فیلد به نام postTitle برای عنوان و یک فیلد به نام postText برای متن است. همچنین محتویات فرم با متد post به صفحه ای به نام sendpost.php ارسال می شود. این فایل را ایجاد کرده و کد زیر را در آن قرار دهید.

<!DOCTYPE html>
<html dir="rtl" lang="fa-IR">
<head>
<title>درج مطلب</title>
<meta charset="utf-8" />
</head>
<body style="font-family: tahoma; font-size:14px;">
<center>
<?php
include ("config.php");
$title = trim ($_POST['postTitle']);
$text = trim ($_POST['postText']);
if($title != "" && $text != ""){
$query_res = mysql_query("INSERT INTO `posts` (`title`, `text`) VALUES ('$title','$text')");
if($query_res){
echo "مطلب شما با موفقیت در بانک داده درج شد.";
}else{
echo "مشکلی در ثبت مطلب رخ داده، لطفا مجددا تلاش کنید. <a href=insert.php>بازگشت</a>";
}
}else{
echo 'برای درج مطلب جدید باید عنوان و متن مطلب را وارد کنید. <a href=insert.php>بازگشت</a>';
}
?>
</center>
</body>
</html>

توضیح کد فوق:

ابتدا فایل config.php را که در جلسه قبل ساختیم، فراخوانی کرده ایم. سپس مقادیر وارد شده در فیلد ها را در دو متغیر ذخیره کرده ایم. سپس با یک دستور if بررسی کرده ایم که مقداری در فیلد ها وارد شده یا نه. اگر وارد نشده پیغام مناسب را نمایش می دهیم، اگر وارد شده باشد عملیات درج  انجام می شود.

با استفاده از تابع mysql_query مقادیر وارد شده توسط کاربر را به جدول وارد می کنیم. این تابع دو خروجی دارد که با دستور if آن را بررسی می کنیم. اگر true باشد عملیات درج با موفقیت انجام شده و پیغام مناسب را نمایش می دهیم. در غیر این صورت درج انجام نشده و باید پیغام مناسب را نمایش داده و کاربر به صفحه insert.php بازگردد.

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

فرم درج مطلب

پس از زدن دکمه ثبت تصویر زیر را می بینید.

پیغام درج مطلب

توضیحاتی در مورد کوئری درج:

برای درج اطلاعات از کوئری زیر استفاده می کنیم.

INSERT INTO `TABLE_NAME` (`f1`, `f2`) VALUES ('value1', 'value2')

در پرانتز اول نام فیلد های رکورد یا سطری که قصد درج آن در جدول را داریم می نویسیم. احتمالا این سوال برای شما پیش می آید که جدول پستی که در جلسه قبل طراحی کردیم در هر سط 3 فیلد دارد ولی ما در کد های فوق دو فیلد درج کردیم. دلیلش این است که فیلد id یا شناسه را به صورت AUTO_INCREMENT تعریف کرده ایم. این بدان معناست که با هر بار پر کردن یک رکورد به صورت اتوماتیک یکی به مقدار این فیلد اضافه می شود و لازم نیست که آن را به صورت دستی وارد کنیم. پرانتز بعدی برای گرفتن مقادیر فیلد ها می باشد که در مثال فوق این مقادیر را در دو متغیر قرار داده بودیم و توسط کاربر وارد می شد.

اطلاعات درج شده در جدول را می توانید از طریق آدرس http://127.0.0.1/phpmyadmin مشاهده کنید. در آن جا ابتدا روی دیتابیس cms و سپس روی جدول posts کلیک کنید.

آموزش کامل PHP – قسمت 14: ارتباط با بانک اطلاعاتی

اتصال به بانک های اطلاعاتی از مهمترین مباحث برنامه نویسی است. زبان برنامه نویسی php قابلیت اتصال به انواع بانک های اطلاعاتی را دارا می باشد. در این قسمت از آموزش ما طریقه ارتباط با یکی از محبوب ترین بانک های اطلاعاتی یعنی mysql را آموزش خواهیم داد.

در این قسمت از سری آموزش های php با پردیس وردپرس، پروژه یک سیستم مدیریت محتوا را آغاز می کنیم.

اتصال به بانک اطلاعاتی

ابتدا پوشه ای در htdocs (زمپ) یا www (ومپ) ایجاد کنید و نام دلخواهی (مثلا cms) برای آن انتخاب کنید. در داخل پوشه فایلی به نام config.php ایجاد کنید. (این فایل تنظیمات مربوط به سیستم ما را نگهداری می کند). در واقع برنامه ما از طریق همین فایل به بانک متصل می شود.

حالا باید بانک اطلاعاتی نورد نظرتان را ایجاد کنید. بعد از اجرای نرم افزار سرور مجازی سرویس mysql آن را استارت کنید و آدرس localhost/phpmyadmin را در مرورگر وارد کنید. صفحه ای مانند تصویر زیر باز می شود که شما می توانید بانک های اطلاعاتی خود را در آن ساخته و مدیریت کنید.

ساخت بانک اطلاعاتی

روی Databases کلیک کنید و بعد از وارد کردن اطلاعات، مانند تصویر زیر روی Create کلیک کنید.

ایجاد بانک اطلاعاتی

حال نوبت ساخت جداول است. وارد بخش 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";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 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;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

کد بالا برای ایجاد یک جدول به نام posts است که این جدول سه فیلد دارد. برای هر مطلب یک فیلد برای شماره مطلب وجود دارد که این شماره برای هر رکورد از جدول یکتا خواهد بود. همچنین یک فیلد برای عنوان و یک فیلد نیز برای متن مطلب در نظر گرفته‌ایم. یونیکد این جدول و تمامی فیلد‌های آن نیز utf8-general-ci است.

حال به بخش php بر می گردیم. کد زیر را در فایل config.php قرار دهید.

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbname = "cms";
$dbpass = "";

$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);

if ($connect_db){
    echo "Connected to db successfully!";
}else{
    echo "error in connecting db";
}
?>

برای اتصال به پایگاه داده mysql در php به چهار متغیر به شرح زیر نیاز داریم:

  1. متغیری برای آدرس بانک اطلاعاتی – dbhost که localhost است
  2. متغیری برای نام کاربری یا یوزرنیم بانک – dbuser که root است
  3. متغیری برای نام بانک اطلاعاتی که cms می باشد
  4. متغیری برای رمز عبور بانک اطلاعلتی – dbpass که خالی است

با استفاده از تابع 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 را در مروگرتان اجرا کنید، باید با عبارت !Connected to db successfully مواجه شوید. در غیر این صورت یکی از مراحل را اشتباه انجام داده‌اید.

اگر همه چیز به درستی انجام شده، می توانید بخش if را در فایل config حذف کنید یا به حالت کامنت در آورید. همچنین یک دستور دیگر برای انتخاب بانک cms به آن اضافه کنید.

<?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 متصل شوید. همانطور که می‌بینید این تابع دو آرگومان دارد که ورودی اول نام بانک اطلاعاتی است و آرگومان دوم که تعریف آن اجباری هم نیست، به خروجی تابع اتصال به سرور اشاره دارد. ما خروجی تابع را در متغیر connect_db قرار داده بودیم و از همین رو در آرگومان دوم نام این متغیر را وارد کرده‌ایم.

توجه داشته باشید که ما در این قسمت یک جدول برای ذخیره نوشته های سایت خود ساخته ایم. در این جدول ستون id همان کلید اصلی است و شامل شماره هر سطر در جدول می باشد.