ذخیره و نمایش تصاویر و مدیا در پایگاه داده یکی از نیازهای رایج در پروژههای وب است. در این مقاله به شما نشان میدهیم که چگونه تصاویر را به پایگاه داده MySQL اضافه و بازیابی کنید. همچنین به بررسی کد نمونهای که در بالا ارائه شده است، میپردازیم.
در اینجا ابتدا یک مثال کامل در مورد افزودن عکس در پایگاه داده آورده ایم سپس قسمتهای مهم آن را در ادامه توضیح داده ایم .
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ذخیره و نمایش تصاویر</title>
<style>
body {
font-family: Arial, sans-serif;
direction: rtl;
text-align: right;
background-color: #f9f9f9;
}
.form-container {
width: 400px;
margin: 20px auto;
padding: 20px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #333;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="number"],
input[type="text"],
input[type="file"] {
width: calc(100% - 20px);
padding: 10px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 5px;
}
button {
width: 100%;
padding: 10px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
button:hover {
background-color: #0056b3;
}
table {
width: 90%;
margin: 20px auto;
border-collapse: collapse;
background-color: #fff;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
table th, table td {
border: 1px solid #ddd;
padding: 10px;
text-align: center;
}
table th {
background-color: #007bff;
color: white;
}
img {
max-width: 100px;
max-height: 100px;
}
</style>
</head>
<body>
<?php
// اتصال به پایگاه داده
$host = "localhost";
$user = "root";
$password = "";
$dbname = "itvisit";
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die("اتصال به پایگاه داده ناموفق بود: " . mysqli_connect_error());
}
// ایجاد جدول در صورت عدم وجود
$createTableQuery = "
CREATE TABLE IF NOT EXISTS media (
id INT PRIMARY KEY,
name VARCHAR(100),
picture LONGBLOB
)
";
mysqli_query($conn, $createTableQuery);
// پردازش فرم
if (isset($_POST['submit'])) {
$id = $_POST['id'];
$name = $_POST['name'];
$picture = addslashes(file_get_contents($_FILES['picture']['tmp_name']));
$insertQuery = "INSERT INTO media (id, name, picture) VALUES ('$id', '$name', '$picture')";
if (mysqli_query($conn, $insertQuery)) {
echo "<p style='text-align:center; color:green;'>اطلاعات با موفقیت ذخیره شد.</p>";
} else {
echo "<p style='text-align:center; color:red;'>خطا در ذخیره اطلاعات: " . mysqli_error($conn) . "</p>";
}
}
// بازیابی دادهها
$selectQuery = "SELECT id, name, picture FROM media";
$result = mysqli_query($conn, $selectQuery);
?>
<body>
<div class="form-container">
<h1>اضافه کردن اطلاعات</h1>
<br>
<p> سایز عکس کوچک باشد </p>
<br>
<p> مطمئن شوید که اندازه فایل آپلود شده در تنظیمات PHP محدود نباشد</p>
<form action-xhr="#" method="POST" enctype="multipart/form-data">
<label for="id">کد (ID):</label>
<input type="number" name="id" id="id" required>
<label for="name">نام:</label>
<input type="text" name="name" id="name" required>
<label for="picture">تصویر:</label>
<input type="file" name="picture" id="picture" required>
<button type="submit" name="submit">اضافه کردن</button>
</form>
</div>
<?php if (mysqli_num_rows($result) > 0): ?>
<h2 style="text-align:center;">اطلاعات ذخیرهشده</h2>
<table>
<tr>
<th>کد</th>
<th>نام</th>
<th>تصویر</th>
</tr>
<?php while ($row = mysqli_fetch_assoc($result)): ?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><img src="data:image/jpeg;base64,<?php echo base64_encode($row['picture']); ?>" alt="تصویر"></td>
</tr>
<?php endwhile; ?>
</table>
<?php else: ?>
<p style="text-align:center;">هیچ دادهای برای نمایش موجود نیست.</p>
<?php endif; ?>
</body>
</body>
</html>
نکته :
در قسمت ابتدایی این کدها استایل میباشد که در درسهای css به آنها اشاره شده است .
ابتدا، یک جدول با استفاده از دستور CREATE TABLE
ایجاد میکنیم. این جدول شامل سه ستون است:
LONGBLOB
است.$createTableQuery = "
CREATE TABLE IF NOT EXISTS media (
id INT PRIMARY KEY,
name VARCHAR(100),
picture LONGBLOB
)
";
mysqli_query($conn, $createTableQuery);
در اینجا از شرط IF NOT EXISTS
استفاده میشود تا از ایجاد مجدد جدول در صورت وجود جلوگیری کنیم.
برای ذخیره تصاویر در پایگاه داده:
addslashes
آمادهی ذخیرهسازی میشود.$picture = addslashes(file_get_contents($_FILES['picture']['tmp_name']));
$insertQuery = "INSERT INTO media (id, name, picture) VALUES ('$id', '$name', '$picture')";
if (mysqli_query($conn, $insertQuery)) {
echo "<p style='text-align:center; color:green;'>اطلاعات با موفقیت ذخیره شد.</p>";
}
کاربرد کد زیر در این برنامه :
$picture = addslashes(file_get_contents($_FILES['picture']['tmp_name']));
$_FILES['picture']['tmp_name']
:$_FILES
یک آرایهی ابر جهانی در PHP است که اطلاعات فایلهای آپلود شده را نگهداری میکند. picture
نام فیلد ورودی فایل در فرم HTML است و tmp_name
مسیر موقتی است که فایل در سرور ذخیره شده است.file_get_contents()
:addslashes()
:'
یا "
) و بکاسلش (\
) در رشته اضافه میکند تا از فرار کردن کاراکترها جلوگیری کند. این کار معمولاً برای جلوگیری از حملات SQL Injection و هنگام ذخیرهسازی دادهها در پایگاه داده انجام میشود.$picture
شامل محتوای فایل آپلود شده با اسلشهای اضافی برای کاراکترهای خاص است. این معمولاً قبل از ذخیرهسازی دادهها در پایگاه داده استفاده میشود تا از صحت دادهها و امنیت اطمینان حاصل شود.برای نمایش تصاویر ذخیرهشده در پایگاه داده:
SELECT
بازیابی میشوند.base64_encode
کدگذاری شده و در HTML نمایش داده میشود.while ($row = mysqli_fetch_assoc($result)) {
echo '<img src="data:image/jpeg;base64,' . base64_encode($row['picture']) . '" alt="تصویر">';
}
این کد یک حلقه while
در PHP است که در هر تکرار، یک ردیف از نتایج پرس و جوی پایگاه داده را پردازش و یک تصویر را در صفحه وب نمایش میدهد. در اینجا توضیح مرحله به مرحله از عملکرد این کد آورده شده است:
mysqli_fetch_assoc($result)
:$result
باید نتیجهی یک پرس و جوی SQL باشد که از قبل اجرا شده است.while
:while
تا زمانی که ردیفهای بیشتری در نتیجهی پرس و جو وجود داشته باشد، ادامه پیدا میکند. هر بار که حلقه اجرا میشود، یک ردیف جدید از نتایج دریافت میشود.echo '<img src="data:image/jpeg;base64,' . base64_encode($row['picture']) . '" alt="تصویر">';
:<img>
HTML را در صفحه وب ایجاد میکند.base64_encode($row['picture'])
: این تابع محتوای ستون picture
(که باید حاوی دادههای باینری تصویر باشد) را به رشتهای به کدگذاری Base64 تبدیل میکند.data:image/jpeg;base64,
: این پیشوند به مرورگر میگوید که دادههای تصویر به صورت Base64 کدگذاری شده است و نوع تصویر JPEG است.$row['picture']
: مقدار تصویر از ردیف جاری نتیجهی پرس و جو دریافت میشود.این کد به شما امکان میدهد تصاویری که در پایگاه داده ذخیره شدهاند را به صورت مستقیم در صفحه وب نمایش دهید. هر تصویر در یک ردیف جدید در نتایج پرس و جو قرار دارد و به صورت Base64 کدگذاری شده و در تگ <img>
قرار میگیرد.
این شرط در دستور CREATE TABLE
استفاده میشود تا بررسی کند آیا جدولی با همین نام وجود دارد یا خیر. اگر جدول موجود نباشد، آن را ایجاد میکند.
نوع دادهای در MySQL است که برای ذخیره دادههای باینری بزرگ مانند تصاویر و فایلها استفاده میشود. این نوع میتواند تا 4 گیگابایت داده ذخیره کند.
این تابع رشتهای را دریافت کرده و کاراکترهای خاص مانند ‘ و “ را با ** فرار میدهد. این کار از بروز خطاهای نحوی در SQL جلوگیری میکند.
$picture = addslashes(file_get_contents($_FILES['picture']['tmp_name']));
این تابع برای اجرای کوئری SQL روی پایگاه داده استفاده میشود. اگر کوئری موفق باشد، مقدار true و در غیر این صورت مقدار false بازمیگرداند.
این تابع تعداد رکوردهای بازگشتی از یک کوئری SELECT
را محاسبه میکند. اگر هیچ رکوردی یافت نشود، مقدار صفر بازمیگرداند.
if (mysqli_num_rows($result) > 0) {
// داده موجود است
}
این تابع یک آرایهی associative شامل دادههای یک رکورد از نتیجهی کوئری بازمیگرداند. این آرایه با استفاده از نام ستونها قابل دسترسی است.
$row = mysqli_fetch_assoc($result);
echo $row['name'];
این تابع دادهی باینری را به رشتهای کدگذاریشده در قالب Base64 تبدیل میکند. این روش برای نمایش دادههای باینری (مانند تصاویر) در HTML بسیار کاربردی است.
Base64 یک روش رمزگذاری و کدنویسی است که دادههای دودویی (مانند فایلهای تصویر، ویدئو یا هر نوع داده باینری دیگر) را به رشتهای از کاراکترهای متنی تبدیل میکند. این روش اغلب برای انتقال دادههای دودویی در محیطهایی که تنها متون قابل انتقال هستند (مانند ایمیل، JSON یا دادههای HTTP) استفاده میشود.
<img src="data:image/jpeg;base64,<?php echo base64_encode($row['picture']); ?>" alt="تصویر">
در این مقاله، نحوهی ذخیره و نمایش تصاویر در پایگاه داده با استفاده از PHP و MySQL را بررسی کردیم. همچنین توابعی مانند addslashes
، base64_encode
، و mysqli_fetch_assoc
که برای کار با دادههای باینری ضروری هستند، توضیح داده شدند. با این روشها میتوانید فایلهای مدیا را بهراحتی در پایگاه داده مدیریت کنید.
هنگام کار با پایگاه داده در PHP، ممکن است خطاهایی ناشی از کوئریهای ناقص یا…
ایجاد پایگاه داده در PHP یکی از مباحث اساسی برای ساخت وبسایتها و برنامههای تحت…
کلاسها در PHP یکی از اصلیترین مباحث برنامهنویسی شیءگرا (Object-Oriented Programming) هستند. با استفاده از…
استفاده از ساختارهای کنترل خطا در برنامهنویسی از اهمیت ویژهای برخوردار است. در زبان PHP،…
اتصال به پایگاه داده database connectivity یکی از مراحل مهم در توسعه وب است. با…
سشنها (Sessions) و کوکیها (Cookies) هر دو ابزارهایی هستند که برای ذخیرهسازی دادهها و پیگیری…
View Comments
I do not know whether it's just me or if perhaps everybody else experiencing issues with your site.
It appears like some of the text within your posts are running off the screen. Can somebody else please comment and let me
know if this is happening to them as well? This could be
a problem with my internet browser because I've had this happen before.
Thank you
Excellent beat ! I wish to apprentice at the same time as you amend your website, how could i subscribe for a blog web site?
The account aided me a applicable deal. I have been tiny bit familiar of this your broadcast provided bright clear
idea
hi!,I love your writing very so much! share we keep in touch more about your article on AOL?
I need a specialist on this house to unravel my problem.
Maybe that's you! Looking forward to see you.
Thanks for your personal marvelous posting! I quite enjoyed reading it, you
happen to be a great author. I will always bookmark your blog and may come back later on. I want to encourage yourself to continue your great
job, have a nice weekend!
What's up Dear, are you actually visiting this web
site daily, if so after that you will absolutely
obtain nice know-how.