فرخوانی عکس از بانک

سلام من یک فرم دارم که عکس رو میگیره و در داخل یک فیلد از بانک میزاره .
سوالم اینه چطوره موقع نمایش عکس رو از بانک صدا بزنم و نمایش بدم .
 

sunrise

Member
از اين مي تونيد استفاده کنيد:

PHP:
<?php
$dblink = mysql_connect('localhost', 'root', '');

if (!$dblink)
{
	print('Failed to connect to database.');
	exit;
}
	else
{
	if (!mysql_select_db('mydb', $dblink))
	{
		print('Failed to select database.');
		exit;
	}
}

$id = $_REQUEST['id'];

$image = mysql_query("SELECT * FROM `images` WHERE imageid = $id LIMIT 1", $dblink);

if (mysql_num_rows($image))
{
	$fetch_image = mysql_fetch_array($image);

	header('Cache-control: max-age=31536000');
	header('Expires: ' . gmdate('D, d M Y H:i:s', (date("U") + 31536000)) . ' GMT');
	header('Content-disposition: inline; filename=' . $fetch_image['imagename']);
	header('Content-Length: ' . strlen($fetch_image['imagedata']));
	header('Content-transfer-encoding: binary');
	header('ETag: "' . $fetch_image['imagestamp'] . '-' . $fetch_image['imagename'] . '"');
	header('Content-type: ' . $fetch_image['imagetype']);

	echo $fetch_image['imagedata'];	
}

mysql_close($dblink);
?>
البته کدي که من نوشتم براي حالتي هست که اطلاعات تصوير بصورت باينري در بانک ذخيره شده باشه و اگه فقط لينک تصوير در بانک ذخيره ميشه براي فراخوني اون مي تونيد بصورت زير عمل کنيد:
PHP:
<?php
$dblink = mysql_connect('localhost', 'root', '');

if (!$dblink)
{
	print('Failed to connect to database.');
	exit;
}
	else
{
	if (!mysql_select_db('mydb', $dblink))
	{
		print('Failed to select database.');
		exit;
	}
}

$id = $_REQUEST['id'];

$image = mysql_query("SELECT * FROM `images` WHERE imageid = $id LIMIT 1", $dblink);

if (mysql_num_rows($image))
{
	echo '<img src="' . $image['url'] . $image['filename'] . '" border="0">';
}

mysql_close($dblink);
?>
براي مورد اول ساختار جدول بانک اطلاعاتي بصورت زير هست:
کد:
  `imageid` smallint(5) unsigned NOT NULL auto_increment,
  `imagetype` varchar(15) NOT NULL,
  `imagename` varchar(100) NOT NULL,
  `imagedata` longblob,
  `imagestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`imageid`)
و براي مورد دوم به اين صورت:
کد:
  `imageid` smallint(5) unsigned NOT NULL auto_increment,
  `url` varchar(100) NOT NULL,
  `filename` varchar(100) NOT NULL,
  PRIMARY KEY  (`imageid`)
 

imanmir

Member
کدinsert عکس به db از طریق باینری

سلام دوست عزیز شما فراخوانی را نوشتید بی زحمت کد اینتسرشم بنویسم مرسی و اینکه آیا باید تمامی header های نام برده شده باید باشد؟
 

sunrise

Member
سلام دوست عزیز شما فراخوانی را نوشتید بی زحمت کد اینتسرشم بنویسم مرسی و اینکه آیا باید تمامی header های نام برده شده باید باشد؟
البته همه هدرها بصورت کامل وجودشون به اين صورت الزامي نيست، منتها من طوري هدرها رو قرار دادم تا بهترين حالت براي نمايش تصوير (و کش شدن اون) باشه.

براي ذخيره تصوير هم مي تونيد از کدي مثل کد زير استفاده کنيد:
PHP:
<?php
//Get file extension function
function getfile_extension($file)
{
	return(strtolower(substr(strrchr($file,"."),1)));
}

//Post file
$postimage = $_FILES['image_file'];

//Get the file extension
switch (getfile_extension($postimage['name']))
{
	case 'gif': $type = 'image/gif'; break;
	case 'jpg': $type = 'image/jpeg'; break;
	case 'jepg': $type = 'image/jpeg'; break;
	case 'png': $type = 'image/png'; break;
	default: $type = null; break;
}

//Store image in database
if ($type)
{
	$file_read = @fopen($postimage['tmp_name'], 'rb');
	$image['binary'] = @fread($file_read, $postimage['size']);
	if (mysql_query("INSERT INTO `images` (`imagetype`, `imagename`, `imagedata`) VALUES ('$type', '" . $image['name'] . "', '" . addslashes($image['binary']) . "')"))
	{
		print("Your image has successfully stored in database with <b>" . mysql_insert_id . "</b> imageid.");
	}
		else print("<b>MySQL Error:</b> " . mysql_error());
}
?>
 

imanmir

Member
ارسال فایل به db

سلام خسته نباشید
مرسی از جواب بسیار عالی شما
آیا آیا برای insert فایل های با پسوند doc,pdf,...از کد بالا می شه استفاده ککرد؟
 

sunrise

Member
سلام خسته نباشید
مرسی از جواب بسیار عالی شما
آیا آیا برای Insert فایل های با پسوند Doc,pdf,...از کد بالا می شه استفاده ککرد؟
بله، اين روش براي ذخيره هر نوع فايل ميشه ازش استفاده کرد، به شرط اينکه موقع خوندن اون فايل هدرهاي مربوط به اون رو بدونيد که مي تونيد با انجام يک جستجوي ساده در اينترنت هدر مناسب هر يک رو بدست بياريد.
 

imanmir

Member
لطفا این فایل رو چگ کنید

با سلام و خسته نباشید من طبق کد های که دادید انجام دادم ولی error می دی می شه ببنی مشکل چیه و اگه می شه هدر های فایل هم بهم بگید
 

پیوست ها

  • picupload.zip
    1.9 کیلوبایت · بازدیدها: 2

sunrise

Member
تغييراتي در کدي که نوشته بوديد ايجاد کردم و تست هم کردم و مشکلي که داشت مرتفع شد.

يه اشتباه از من بود که يادم رفت بگم براي ذخيره سازي اطلاعات باينري فايل در جدول بانک اطلاعاتي بايد از تابع addslashes استفاده کنيد که همينجا ازتون معذرت خواهي مي کنم :cry:

تغيير صورت گرفته در اين مورد به اين شکل هست:
PHP:
'" . $image['binary'] . "'
تغيير يافته به اين صورت:
PHP:
'" . addslashes($image['binary']) . "'

و اما اشتباهي که در کدنويسي توسط شما صورت گرفته بود اين بود که براي فايلي که قرار هست تصوير رو نشون بده (show.php) تگ هاي HTML رو هم قرار داده بوديد در صورتي که به هيچ وجه لازم نيست تگ هاي آغازين و پاياني HTML در اين فايل قرار بگيره.

در هر صورت فايل پيوست شده رو دانلود کنيد و تست کنيد، اگه خطا گرفت، خطايي که روي صفحه ظاهر ميشه رو اينجا قرار بديد تا بتونيم مشکل رو بهتر حل کنيم.

با تشکر
 

پیوست ها

  • picupload_fixed.zip
    1.6 کیلوبایت · بازدیدها: 12

جدیدترین ارسال ها

بالا