برای مطالعه بخش اول این مقاله اینجا کلیک کنید
شیوه کار فرمها در HTML
فرمها در همه سایتها استفاده میشوند. هنگامی که خریدی از یک فروشگاه اینترنتی انجم میدهید، آدرس و اطلاعات کارت بانکی خود را در وبسایتی وارد میکنید یا پیامی از طریق نسخه وب یک پیامرسان ارسال میکنید، در حال استفاده از یک فرم هستید. شکل 1 نمونه سادهای از یک فرم را نشان میدهد.
شکل 1
ساخت اولین فرم
به احتمال زیاد با عملکرد وبسایتهایی مثل توییتر آشنا هستید. شکل دو کادر متنی که برای نوشتن یک توییت در اختیار کاربران قرار دارد را نشان میدهد (شکل2). بخش اصلی هر توییت، یک کادر متنی چند خطی و یک دکمه است که این پیام را به سرورهای توییتر ارسال میکند. آیا این امکان وجود دارد که نسخهای شبیه به فرم مذکور را از طریق HTML ایجاد کرد؟ قطعه کد زیر امکان ساخت یک فرم ساده را میدهد.
<form action=”postForm.php” method=”post”>
<TextArea name=”microBlog” id=”microBlog” cols=”30” rows=“10”>
</br>
</TextArea>
<input type=”submit”>
</form>
</body>
شکل 2
اکنون زمان بررسی مولفههای کد فوق است. یک فرم درون تگهای form قرار گرفته است. فرمها دو پارامتر میگیرند. آرگومان اول لینکی به یک فایل PHP است که فرم ما را مدیریت میکند. آرگومان دوم متدی است که شیوه ارسال دادهها به سرور وب را مشخص میکند. این دو آرگومان میتوانند از نوع post یا get باشند. درون فرم عنصری بهنام TextArea وجود دارد. تفاوت اصلی یک عنصر TextArea و عنصر ورودی در این است که TextArea امکان وارد کردن محتوای چندخطی را ایجاد میکند، در حالی که عنصر Input (وقتی برای تحویل یک فرم استفاده نشود) تنها یک خط را دریافت میکند. با توجه به اینکه ما میخواهیم نسخه شبیهسازی شده از توییتر بسازیم از عنصر TextArea برای دریافت post استفاده میکنیم. این عنصر چند آرگومان دارد. دو آرگومان نخست به ترتیب name و id هستند که به آنها مقدار microblog میگویند. دو آرگومان بعدی cols و rows هستند که به ترتیب مقادیر 30 و 10 دارند. این دو مقدار را میتوان تغییر داد. در انتها یک عنصر Input داریم. این عنصر از نوع submit است و در مرورگر به شکل یک دکمه نمایش داده میشود. هنگامی که دکمه مذکور فشار داده میشود، محتوای فرم به فایلpostForm.php ارسال میشود. خروجی قطعه کد فوق در شکل 3 نشان داده شده است.
شکل 3
مدیریت ورودیها در پیاچپی
چگونه میتوانیم ورودی فرمها را دریافت کنیم و آنها را روی صفحه نمایش دهیم؟ برای این کار باید فایل podtForm.php که در ریشه سند وبسایت ایجاد شده را پیدا کرده و دستورات زیر را به آن اضافه کنیم.
<?php
$microBlog = $_POST[‘microBlog’];
echo $microBlog;
?>
در قطعه کد بالا $_POST چه نقشی دارد؟ این مفهومی است که آنرا متغیر فراسراسری (super-global) مینامیم. این مفهوم اعلام میدارد هر بار هنگام اشاره به ورودی فرم باید از آن استفاده کنیم. در انتهای $_POST ما ID ورودی فرمی که به آن اشاره کردهایم را مینویسیم و آنرا درون دو کروشه و گیومه قرار میدهیم. محتوای microBlog به یک متغیر انتساب پیدا میکند و در ادامه روی صفحهنمایش نشان داده میشود. روند فوق ساده است. در ادامه بررسی میکنیم که آیا این کد قابلیت اجرا دارد یا خیر (شکل 4). به صفحه اصلی وبسایت خود میرویم و چیزی در فرم مینویسیم و دکمه submit را میزنیم (شکل 5)
شکل 4
شکل 5
همانگونه که مشاهده میکنید، ورودی به خود ما بازگردانده میشود، اما اگر مرورگر را بسته و localhost/postForm.php را دومرتبه باز کنیم چه اتفاقی میافتد؟ همه اطلاعات پاک میشوند، زیرا مقدار ورودی تنها در حافظه اصلی مرورگر ذخیرهسازی شده و هنگامی که مرورگر بسته میشود، این مقادیر نیز پاک میشوند. با این حال روش سادهای برای حفظ دادهها وجود دارد. این دادهها باید در یک پایگاه داده ذخیره شوند.
پایگاههای دادهای
پایگاههای داده بهشدت کاربردی و محبوب هستند. هنگامی که کامپیوترها اختراع شدهاند به فاصله کوتاهی پایگاههای داده به عنوان راهکاری برای ذخیرهسازی اطلاعات پدید آمدند. هر چیزی که تصور کنید، از گذرواژه که برای ورود به فیسبوک استفاده میکنید تا پیکربندی یک کامپیوتر و اطلاعات حساب بانکی، همگی در یک پایگاه داده ذخیره میشوند. نسخههای اولیه پایگاههای داده محدود و تخت (Flat) بودند، اما به مرور زمان تکامل پیدا کردند و سرعت و پایداری آنها بهبود پیدا کرد. یکی از روشهای رایج ذخیرهسازی دادهها استفاده از پایگاههای دادهای رابطهای است. این پارادایم ذخیرهسازی دادهها در دهه 80 میلادی ابداع شد و مبتنی بر مفهوم ارتباط متقابل جداول است. در این پایگاههای داده، اطلاعات در ردیفها و ستونهای جداول مختلف ذخیره میشود. تعداد زیادی از سیستمهای مدیریت پایگاه داده وجود دارند که از پارادایم RDBMS استفاده میکنند. از مهمترین آنها باید به اوراکل (Oracle)، اماسکیوال (MsSQL)و ماریادیبی (MariaDB) اشاره کرد. ما در این مقاله از مایاسکیوال (MySQL) استفاده میکنیم. مایاسکیوال یک سیستم مدیریت پایگاه داده مدرن است. تعداد وبسایتهایی که از آن استفاده میکنند، زیاد است. وردپرس از آن استفاده میکند و نسخههای اولیه فیسبوک نیز از آن استفاده میکردند. این پایگاه داده بر اساس پارادایم پایگاههای داده رابطهای رفتار میکند. پایگاه داده مایاسکیوال مزایای زیادی دارد. بهطور مثال، یک پایگاه داده رایگان است و لایسنس استفاده از آن آزاد است، روی هر پلتفرمی قابل استفاده است، یک بسته نرمافزاری سبک است و قابلیت اجرا روی سیستمهای ضعیف را دارد. بهعلاوه، یادگیری آن ساده است و حجم اطلاعات زیادی در مورد آن برای افرادی که میخواهند آنرا بیاموزند، وجود دارد. منابع آموزشی زیاد همراه با مستندات دقیق در ارتباط با آن موجود است که توسط توسعهدهندگان ساخته شده است. برای تعامل با مایاسکیوال باید از زبان برنامهنویسی SQL استفاده کنیم. این زبان امکان اجرای کوئریهای پیچیدهای روی پایگاه داده را فراهم میکند. اما قبل از آنکه با این پایگاه داده آشنا شویم باید اطلاعاتی در مورد نوعهای دادهای مایاسکیوال به دست آوریم.
انواع دادههای مایاسکیوال
در مایاسکیوال هر ستون در یک جدول با نوع داده مشخصی تعریف میشود، بهطور مثال، نوع سن یک نفر را میتوان بهشکل عددی تعریف کرد، در حالی که نام فرد میتواند ترکیبی از کاراکترهای الفبایی مختلف باشد. برای اطمینان از این موضوع که یکپارچگی دادههای ذخیره شده در یک جدول حفظ میشود باید نوع دادهها از قبل مشخص شوند. با اینکار مشخص میکنیم چه نوع دادههایی در یک ستون جدول داده ذخیره میشوند. نوعهای دادهای زیادی در مایاسکیوال وجود دارند که در اینجا به دو مورد از آنها اشاره میکنیم.
Varchar(x)
وقتی محتوایی در پایگاه داده وارد میکنید که شامل نوعهای عددی، کاراکترهای خاص و حروف مختلف است، بهتر است از یک فیلد varchar استفاده کنید. این نوع داده میتواند طول متغیری داشته باشد. اندازه فیلد با طول بیشینه 30 کاراکتر را میتوان به صورت varchar(30) تعریف کرد.
Integer
وقتی قصد ذخیرهسازی اعداد صحیح مثبت و منفی بزرگ در پایگاه داده را دارید باید از این نوع داده استفاده کنید. این نوع داده میتواند اعدادی از منفی تا مثبت 2147483647 را شامل شود. البته اگر قصد ذخیرهسازی اعداد بزرگتری را دارید، میتوانید از نوعهای دادهای دیگری استفاده کنید. نوعهای دادهای مختلف و زیادی برای این پایگاه داده تعریف شدهاند که میتوان برای نمایش و ذخیرهسازی دستههای مختلفی از دادهها استفاده شوند. دستههای مختلف دادهها شامل بخشهای بزرگ متنی، مقادیر درست یا نادرست و فایلهای دودویی هستند.
ساخت پایگاه داده
اکنون زمان آن رسیده که یک پایگاه داده برای نسخه شبیهسازیشده برنامه توییتری ایجاد کنیم. ابتدا باید به مایاسکیوال وصل شویم. اگر از لینوکس استفاده میکنید و مایاسکیوال را از طریق ابزار مدیریت بسته نصب کردهاید، در این صورت میتوانید از طریق ترمینال و با اجرای دستور زیر به این پایگاه داده وصل شوید.
mysql-u root-p
هنگام اجرای دستور فوق، درخواستی مبنی بر وارد کردن گذرواژه نشان داده میشود. کاربران XAMPP و MAMP میتوانند از PHPMyAdmin استفاده کنند که درون این بستهها قرار دارد و امکان ویرایش پایگاه داده از طریق یک رابط کاربری تحت وب را به وجود میآورد. ابتدا باید یک پایگاه داده برای وبسایت خود میسازیم و درون این پایگاه داده جدولی برای نگهداری پستهای میکروبلاگ ایجاد میکنیم. شما میتوانید وارد PHPMyAdmin شوید یا از طریق کنسول مایاسکیوال دستورات زیر را اجرا کنید:
CREATE DATABASE MicroBlog;
USE MicroBlog;
CREATE TABLE MicroBlog (
id integer auto_increment,
post varchar(255),
primary key (id)
);
اگر با خطایی روبرو نشدید، جدول بدون هیچگونه اشکالی ایجاد شده است (شکل 6).
شکل 6
در اینجا باید به چند نکته مهم دقت کنید. نکته اول اینکه همه دستورات با یک نقطهویرگول (;) بسته میشوند و این وضعیت همانند نوشتن کدهای زبان برنامهنویسی پیاچپی است. البته موضوعات زیادی در عبارتCREATE TABLE وجود دارند که ممکن است با آنها ناآشنا باشید. ابتدا باید بدانید ID فیلدی است که به طور منحصربهفرد هر پست را مشخص میکند. هنگامیکه این فیلد را ایجاد میکنیم، به آن خصوصیت auto_increment میدهیم تا هر بار که ردیف جدیدی به پایگاه داده اضافه میشود، مقدار ID بهطور خودکار یک واحد اضافه شود و بدین ترتیب همه ردیفها با عدد منحصربهفردی مشخص شوند. در مورد عبارت primary key (id) باید بدانید، به دلیل اینکه میخواهیم مقدار id منحصربهفرد باشد باید هر ردیف به وسیله این فیلد یکتا شناسایی شود. با تعیین ویژگیprimary key برای فیلد مذکور مطمئن میشویم شرایط تحقق پیدا کرده است.
روش اشتباه پیادهسازی محاوره روی بانک اطلاعاتی!
سؤالی که اکنون مطرح است این است که چگونه میتوانیم یک پست درون پایگاه داده وارد کنیم؟ روش عادی انجام اینکار در پیاچپی به شرح زیر است:
$conn = mysqli_connect($DBServer, $DBUser, $DBPass, $DBName);
ابتدا باید یک اتصال به سرور با استفاده از نام میزبان (hostname) گذرواژه پایگاه داده و نام پایگاه داده ایجاد کنیم و آنرا به یک شی اختصاص دهیم. در مثال فوق این شی $conn نامگذاری شده است. در ادامه محاوره بانک اطلاعاتی را به شرح زیر تعریف میکنیم:
$query = mysqli_query($conn, “INSERT INTO MicroBlog VALUES (‘$post’)”);
در انتها باید اتصال به پایگاه داده را با استفاده از دستور زیر ببندیم.
mysqli_close($conn);
البته روش فوق یک مشکل بزرگ دارد. در این قطعه کد فرض ما بر این است که همه ورودیهای پایگاه داده قابل اعتماد هستند، در حالی که در عمل اینگونه نیست. اگر به این نکته دقت نکنید، هکرها میتوانند با اجرای برخی کدهای اسکیوال مخرب اطلاعات درون پایگاه داده را خراب یا تحریف کنند. یک مثال روشن در این زمینه، شبکه اجتماعی لینکدین است. برنامهنویسان این سایت کاریابی به دلیل عدم دقت کافی به ورودیهای پایگاه داده باعث شدند ناخواسته رکوردهای اطلاعاتی هزاران کاربر این سایت افشا شود. چگونه میتوانیم از یک بانکاطلاعاتی به شکل ایمن در پیاچپی استفاده کنیم؟
استفاده از MeekroDB
MeekroDB کتابخانهای است که تعامل سادهتر با بانک اطلاعاتی را فراهم میکند و همزمان از بانک اطلاعات در برابر تهدیدات هکری محافظت میکند. این کتابخانه با هدف مقابله با حملههای تزریق کد اسکیوال طراحی شده و استفاده غیرتجاری از آن رایگان است. بنابراین اگر قصد استفاده از آن در یک پروژه تجاری را دارید باید لایسنس مربوطه را خریداری کنید (شکل 7).
شکل 7
برای بهرهمندی از کتابخانه فوق، یک کپی از میکرودیبی را از سایت رسمی آن دانلود کنید. هنگامی که دانلود پایان یافت، آنرا از حالت فشرده خارج کنید و در سندی در دایرکتوری ریشه وبسایت قرار دهید. اکنون به ویرایشگر متنی مراجعه کنید. فایل postForm.php را باز کنید و خطوط زیر را به آن اضافه کنید.
require_once ‘meekrodb.2.2.class.php’;
DB::$user = ‘user’;
DB::$password = ‘password’;
DB::$dbName = ‘database’;
مقادیر ‘user’, ‘password’ و ‘database’ را بر اساس مقادیر واقعی نام کاربری، گذرواژه و نام بانک اطلاعاتی خود وارد کنید. اکنون زمان اضافه کردن پستها در بانک اطلاعاتی رسیده است. خطوط زیر را به فایل اضافه کنید.
DB::debugMode();
$microBlog = $_POST[‘microBlog’];
DB::insert(‘MicroBlog’, array(
‘post’ => $microBlog)
);
عملکرد قطعه کد فوق به این صورت است که بخش DB::debugMode وظیفه ارزیابی و بازبینی کدها را بر عهده دارد. بنابراین اگر اشتباهی منطقی در کدها انجام دهید، خطایی تولید میکند. بنابراین قرار دادن آن در کد کارآمد است، زیرا فرایند توسعه را سادهتر میکند.
بخش DB::insert هنگامی فراخوانی میشود که یک یا چند آیتم در پایگاه داده اضافه میشوند. ‘MicroBlog’ بهنام جدول مربوطه در بانکاطلاعاتی اشاره دارد و ‘post’ حاوی پیامی است که در وبسایت ما پست شده است. میتوانید با باز کردن PHPMyAdmin مشاهده کنید که پستهای ما به بانک اطلاعاتی وارد شدهاند (شکل 8).
شکل 8
اگر از مایاسکیوال روی لینوکس استفاده میکنید و آنرا از طریق ابزار مدیریت بستهها نصب کردهاید، میتوانید مایاسکیوال را از پنجره ترمینال باز کنید و دستورهای زیر را اجرا کنید.
Use MicroBlog;
Select * from MicroBlog;
همانگونه که مشاهده میکنید، فرایند سادهای است.
دریافت محتوا از بانک اطلاعاتی
در پاراگراف قبل میکرودیبی را معرفی کردیم که کتابخانهای برای پایگاه داده است که امکان تعامل ایمن با پایگاه داده مایاسکیوال در چارچوب برنامه پیاچپی را ممکن میسازد. اکنون چند پست در پایگاه داده داریم. با این حال، پستهایی که درون پایگاه داده قرار گرفتهاند، هنوز استفاده نشدهاند. اکنون زمان نشان داده آنها روی مرورگر است. میتوان از زبان SQL در پایگاه داده مایاسکیوال برای اجرای محاوره روی پایگاه داده استفاده کرد. با اینکه میکرودیبی امکان درج محتوا در پایگاه داده را بدون استفاده از SQL فراهم کرده است، اما برای بازیابی رکوردها باید از مقداری اسکیوال استفاده کنید.
انتخاب و نشان دادن نتایج
دستوری که برای اینکار استفاده میشود Select Statement است. در کد زیر در بین دو تگ <?php و ?> دستورات زیر را وارد کنید:
<?php
require_once ‘meekrodb.2.2.class.php’;
DB::$user = ‘root’;
DB::$password = ‘root’;
DB::$dbName = ‘MicroBlog’;
$results = DB::query(“SELECT post FROM MicroBlog”);
foreach ($results as $row){
echo “<div class=’microBlog’>”. $row[‘post’]. “</div>”;
}
?>
پنج خط ابتدای کد را قبلا مشاهده کردهایم و از آنها به عنوان بخشی از کد درج پست در پایگاه داده استفاده کردهایم.
$results = DB::query(“SELECT post FROM MicroBlog”);
این خط همه پستها را از جدول MicroBlog انتخاب میکند و آنها را به متغیر $results کپی میکند. متغیر $results حاوی چند آیتم است که امکان استخراج مقادیر از طریق حلقه foreach را میدهد. ترکیب نحوی انجام اینکار به شرح زیر است:
foreach ($results as $row){
echo “<div class=’microBlog’>”. $row[‘post’]. “</div>”;
}
در کد فوق هر یک از آیتمهای متغیر $results را یکبهیک بررسی میکنیم و آنها را به یک متغیر نگاشت میکنیم. در ادامه آنها را بین دو تگ div نشان میدهیم. اینکار امکان کپسولهسازی هر پست و سبکبندیهای خاص را به وجود میآورد. خروجی این قطعه کد در شکل 9 نشان داده شده است.
شکل 9
سبکبندی
یک فایل جدید به نام style.css ایجاد کنید. خطوط کد HTML زیر را بین دو تگ Head به شرح زیر وارد کنید.
<link rel=”stylesheet” type=”text/css” href=”style.css”>
اکنون زمان آن رسیده تا هر پست را به شکل متفاوت نمایش دهیم. در فایل style.css خطوط زیر را وارد کنید.
body {
background-color: #99CCFF;
}
form {
text-align: center;
margin-left: 300px;
margin-right: 300px;
}
.microBlog {
text-align: center;
margin-left: 300px;
margin-right: 300px;
margin-bottom: 10px;
border-style:solid;
border-width:5px;
}
در قطعه کد فوق به هر پست یک فاصله (padding) دادهایم و در وسط صفحه نمایش قرار گرفته است. بهعلاوه، به آن یک حاشیه تخصیص داده شده و مرکز صفحه نمایش طراز شده است. خروجی قطعه کد فوق در شکل 10 نشان داده شده است.
ورود و احراز هویت
فرض کنید یک نفر خاص بتواند پستهایی روی وبسایت قرار دهد و در عمل چیزی شبیه به یک توییتر شخصی ایجاد کرد.
جدول کاربران
ابتدا یک جدول برای مدیریت اطلاعات ورود ایجاد میکنیم. این جدول دو فیلد دارد. فیلد نخست برای نام کاربر و فیلد دوم برای گذرواژه است. قطعه کد زیر نحوه ساخت جدول را نشان میدهد.
CREATE TABLE Credentials (
username varchar(255),
password varchar(255),
PRIMARY KEY (username)
);
همانند حالت قبل، قطعه کد فوق را روی پایگاه داده از طریق ترمینال یا PHPMyAdmin اجرا میکنیم.
جلسات در پیاچپی
اکنون وقت آن رسیده تا بحث ورود و ثبتنام را بررسی کنیم. اینکار با استفاده از مفهومی به نام جلسههای پیاچپی انجام میشود. روش انجام اینکار ساده است. چند متغیر وجود دارند که در سراسر یک برنامه وب استفاده میشوند و این متغیرها را میتوان در حالت حضور یا عدم حضور، بسته به اینکه کاربر وارد وبسایت شده یا نه تعیین کرد. قبل از اینکه بتوانید جلسهها را مدیریت کنید، ابتدا باید یک جلسه ایجاد کنید. قطعه کد زیر را به ابتدای فایل index.php اضافه کنید تا در ابتدای هر فایلی که به جلسهها دسترسی دارد دیده شود.
<?php session_start();?>
اکنون باید اطمینان حاصل کنیم که دکمه ارسال پست تنها برای افرادی قابل مشاهده است که وارد وبسایت شدهاند. فایل فرمی را که ایجاد کردیم را به شرح زیر تغییر میدهیم.
<?php if(isset($_SESSION[‘loggedin’])){
echo ‘<form action=”postForm.php” method=”post”>
<TextArea name=”microBlog” id=”microBlog” cols=”30” rows=”10”>
</TextArea>
</br>
<input type=”submit”>
</form>’;
}
?>
$_SESSION[‘loggedin’] یک متغیر جلسه است. هنگامی که این متغیر تعیین شود، کاربر قادر به مشاهده فرم برای نوشتن پست است. در ادامه بخشهای دیگری به آن اضافه میکنیم.
else {
echo ‘<form action=“login.php” method=“post”>
Username: <input type=“text” name=“username” id=”username” /> </br>
Password: <input type=“text” name=“password” id=”password” />
<input type=”submit”>
</form>’;
}
وقتی به آدرس localhost/index.php بروید، قادر به ارسال هیچ پستی نیستید و از شما درخواست میشود تا وارد وبسایت شوید، این نشان میدهد قطعه کد به درستی کار میکند. اما در ابتدا باید حسابی داشته باشیم تا بتوانیم با آن وارد وبسایت شویم. بنابراین خطوط کد زیرا را به صفحه index اضافه میکنیم.
if (isset($_SESSION[‘loggedin’])){
echo ‘<a href=”logout.php”>Log Out</a>’;
} else {
echo ‘<a href=”register.php”>Register</a>’;
}
اگر کاربر وارد وبسایت شده باشد گزینهای برای خروج مشاهده میکند. بهعلاوه، اگر کاربر وارد وبسایت نشده باشد، گزینهای برای ثبتنام نشان داده میشود. اکنون زمان ساخت فرم ثبتنام رسیده است. فایل جدیدی بهنام register.php ایجاد میکنیم و کدهای زیر را به آن اضافه میکنیم:
<?php session_start();?>
<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8”>
<title>Register</title>
<link rel=”stylesheet” type=”text/css” href=”style.css”>
</head>
<body>
<h2>Register</h2>
<form action=“registerForm.php” method=“post”>
<p>Username: <input type=“text” name=“username” id=”username”></p>
<p>Password: <input type=“text” name=“password” id=”password”></p>
<input type=”submit”>
</form>
</body>
</html>
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟