امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
ذخیره تصاویر در MySQL و نمایش آنها با PHP قسمت دوم
نویسنده پیام
P.H.P آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 5
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 0
( 17 تشکر در 5 ارسال )
ارسال: #1
Toungue  ذخیره تصاویر در MySQL و نمایش آنها با PHP قسمت دوم
این آموزش ادامه قسمت اول روش ذخیره تصاویر در بانک اطلاعاتی است

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

حتما طبق روش قبل حجم تصویر و سایز آن را محدود کنید.

خوب اول از همه باید ارتباط با پایگاه داده را انجام دهیم؛ که این در آموزشهای قبل مختصر توضیح داده شد. برای اطلاعات بیشتر کلیک کنید.

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

من نمایش فایل را با استفاده از فایل image.php انجام خواهم داد، برای مثال اگر بخوایم رکورد 2 را نمایش دهیم به این صورت عمل میکنیم

کد:
image.php?id=2

به این صورت هر شماره ورودی در متد id تصویر آن رکورد را نمایش میدهد

برای دریافت ورودی از GET استفاده میکنیم

کد php:
$image $_GET["id"]; 

در نتیجه ورودی در متغیر [b]image قرار میگیرد[/b]

این به تنهایی اصلا صحیح نیست، و میتواند مشکلات امنیتی از نظیر SQL Injection به وجود آورد پس باید ورودی را کنترول و محدود کنیم، ما در اینجا از تابع intval استفاده کردیم، شما میتوانید از fliter در php یا توابع پاکسازی اعداد برای این کار استفاده کنید. (پس حتما در qeury پاکسازی را انجام دهید.)

به کد زیر دقت کنید و آن را در فایل image.php ذخیره کنید:

کد php:
<?php

$id 
intval($_GET["id"]);
if(isset(
$id))
{
 
$query "SELECT * FROM tblImages WHERE imgID = '$id'";
 
$result mysql_query($query);
 
$row mysql_fetch_array($result);

 if(
mysql_num_rows($result) == 1)
 {
 
header("Content-Type: " $row["imgType"]);

 exit(
$row["imgImage"]);
 }
 else
 {
 
$path "images/notfound.jpg";

 
$image imagecreatefromjpeg($path);

 
header("Content-Type: image/jpeg");

 
imagejpeg($image);

 
imagedestroy($image);
 }
}

?>

شرط ما برای نمایش:
کد php:
$id intval($_GET["id"]);
if(isset(
$id)) 

isset: تعیین کننده ی قرارگرفتن مقدار در متغیر است؛ در صورتی که قرار گرفته باشد این مقدار True خواهد شد در غیر این صورت False میشود.

intval: مقدار عدد صحیح یک متغیر را دریافت میکند.


از mysql_num_rows برای موجود بودن درخواست استفاده کردیم

کد php:
if(mysql_num_rows($result) == 1

در این شرط ما گفتیم در صورتی که query گرفته شده برابر با 1 (موجود بودن رکورد) بود آنگاه ....

کد php:
header("Content-Type: " $row["imgType"]);

 exit(
$row["imgImage"]); 

تابع header برای ارسال هیدر در شناسایی نوع محتوا کاربرد دارد.

Content-Type: مشخص کردن در شناسایی نوع خروجی، این نوع از رکورد انتخاب شده از فیلد imgType مشخص میشود.

exit: نمایش خروجی و خاتمه ی اسکریپت

حالا اگر رکورد وجود نداشت چکار باید انجام دهیم؟
کد php:
$path "images/notfound.jpg";

 
$image imagecreatefromjpeg($path);

 
header("Content-Type: image/jpeg");

 
imagejpeg($image);

 
imagedestroy($image); 
در اینجا از GD برای نمایش تصویر Not Found استفاده میکنیم. تصویر notfound.jpg در پوشه images در صورتی که رکورد به هر دلیلی موجود نبود نمایش داده خواهد شد.

و در آخر برای نمایش تصاویر از کد HTML زیر استفاده خواهیم کرد.


کد:
<img src="image.php?id=2">



این تصویر نمایش رکورد 2 از بانک اطلاعاتی خواهد بود.

شاید بگویید که چرا سایز تصویر را در قسمت اول آموزش ذخیره کردیم؟، این فیلد را میتوانید برای مدیریت بهتر تصاویر داشته باشید یا اینکه بخواهید بخشی برای دانلود تصاویر از طریق بانک اطلاعاتی در سایت قرار دهید، با این حال میتوانید با قرار دادن "Content-Length" و "Content-Disposition: attachment" در تابع header بافراخوانی لینک، فایل را دریافت کنید.

منبع: http://www.Vvolf.net

موفق
(آخرین ویرایش در این ارسال: ۱۷-شهریور-۱۳۸۹, ۰۷:۵۰:۴۷، توسط P.H.P.)
۱۶-شهریور-۱۳۸۹, ۱۶:۱۵:۴۹
ارسال‌ها
پاسخ
تشکر شده توسط : javaweb


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مشکل نمایش فارسی در json javaweb 1 3,124 ۱۶-تير-۱۳۹۴, ۱۵:۱۶:۱۲
آخرین ارسال: javaweb
  مشکل نمایش فارسی فاطمه وطن دوست 2 3,201 ۱۹-مهر-۱۳۹۳, ۱۲:۴۴:۵۰
آخرین ارسال: فاطمه وطن دوست
  آموزش برقراری ارتباط PHP و MySQL Ghoghnus 1 2,961 ۰۵-دى-۱۳۹۲, ۱۸:۱۹:۱۳
آخرین ارسال: lord_viper
Question [سوال] نمایش تعداد افرادی عضو آنلان در سایت crafcrab 6 4,506 ۰۴-دى-۱۳۹۲, ۱۶:۵۵:۲۷
آخرین ارسال: lord_viper
  آموزش ساخت نقشه سایت برای موتورهای جستجو با PHP و MySQL Ghoghnus 0 2,622 ۰۱-دى-۱۳۹۲, ۱۸:۴۷:۱۳
آخرین ارسال: Ghoghnus
Question نمایش رتبه ی الکسا javaweb 1 1,676 ۰۹-مرداد-۱۳۹۲, ۱۲:۳۴:۲۸
آخرین ارسال: lord_viper
  [آموزشی] ذخیره و بازیابی صحیح در mysql lord_viper 0 1,553 ۲۹-خرداد-۱۳۹۲, ۲۰:۲۶:۳۱
آخرین ارسال: lord_viper
Rolleyes [سوال] ذخیره ی در جدول javaweb 1 1,661 ۲۶-خرداد-۱۳۹۲, ۱۹:۴۵:۱۰
آخرین ارسال: babyy
  پرامپت mysql مرد یخی 1 2,238 ۰۶-اسفند-۱۳۹۱, ۱۴:۲۴:۳۵
آخرین ارسال: NabiKAZ
Question [سوال] ذخیره سورس یک وب سایت sajadgh 2 3,177 ۲۵-آذر-۱۳۹۰, ۱۵:۱۱:۳۸
آخرین ارسال: sajadgh

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS