PDA

View Full Version : چرافقط یه عکس رو در خروجی نشون میده؟



sara333
پنج شنبه 08 اردیبهشت 1390, 09:48 صبح
سلام من یکسری عکس رو در بانک ذخیره کردم ( با استفاده از کد های upload ) و الان برای نمایششون در خروجی با این مشکل روبه رو شدم که فقط یه عکس رو از بانک میخونه و میاره رو صفحه . میتونید یه راهنمایی کنید ؟
میخوام که عکس ها رو از بانک بخونه و در خروجی به صورت سطر به سطر نمایش بده . اینم کد ها:

<?php
$servername = "localhost";
$dbname = "upload";
$user = "root";
$pass = "";
$dblink = mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
$dbresult = mysql_query("SELECT * FROM images",$dblink);
$num = mysql_num_rows($dbresult);

for($i=0;$i<=count($num);$i++)
{

header('Content-type:image/jpg');
header("Content-type: image/png");
$record = mysql_fetch_array($dbresult);
echo($record['imageData']);
}

mysql_close($dblink);

?>

ممنون

رضا قربانی
پنج شنبه 08 اردیبهشت 1390, 10:36 صبح
شما هیچ موقع خود عکس رو داخل بانک ذخیره نکن!!! این اصلا خوب نیست.

شما بیا و آدرس عکس رو در بانکت ذخیره کن و خود فایل عکس رو به پوشه ای هدایت کن

و در نهایت آدرس پوشه رو بده و اسم عکسی که در بانک ذخیره کردی.

توی سایت بچرخی مثال های زیادی از این روش وجود داره

binyaft
پنج شنبه 08 اردیبهشت 1390, 10:49 صبح
دو تا header ارسال نکنید!

شما تو حلقه for هیدر ها رو تعریف کردید و مرورگر همه مقادیر چاپ شده رو به صورت یک عکس نمایش میده!
برای جلوگیری از این کار باید یک فایل دیگه ایجاد کنید ، id رو بهش بدید به صورت زیر


<img src="http://localhost/1.php?id=12">

بعد تو فایل 1.php هیدر ارسال کنید و محتوای تصویر رو چاپ کنید .

موفق باشید

alismith
پنج شنبه 08 اردیبهشت 1390, 11:00 صبح
سلام ببخشید میشه یکم بیشتر توضیح بدید


<img src="http://localhost/1.php?id=12">


خیلی ممنون

sara333
پنج شنبه 08 اردیبهشت 1390, 11:29 صبح
سلام
galiken_it : چشم میدونم که ذخیره کردن خوده عکس تو بانک کار درستی نیست و حجم بانک رو خیلی زیاد میکنه و تبادل اطلاعات با این حجم هم از بانک با برنامه کار درستی نیست . ولی اگه میشه فعلا همین مورد رو راهنمایی کنید ( واقعا واجبه ) (بعد میرم آدرس عکس رو ذخیره میکنم تو بانک و خود عکس رو تو یه پوشه - مشکلات اون رو هم میام ازتون میپرسم )
ببینید عکس تو بانک ذخیره میشه ولی موقع نمایش تو خروجی فقط یکی رو میاره .یعنی اگه تا آلان 3تا عکس تو بانک ذخیره شده فقط اولی رو نشون میده
binyaft : من واقعا تازه کارم میشه بیشتر توضیح بدین؟

alismith
پنج شنبه 08 اردیبهشت 1390, 11:42 صبح
خوب یه چی به نظر من رسید گفتم خوبه که بگم از این استفاده کنید



$dbresult = mysql_query("SELECT imageData FROM images",$dblink);

for($i=0;$i<=count($num);$i++)
{

header('Content-type:image/jpg');
header("Content-type: image/png");
echo mysql_result($dbresult,$i)
}


امتحان کنید ببینید مشکل حل میشه؟

sara333
پنج شنبه 08 اردیبهشت 1390, 11:47 صبح
alismit: نه نشد بازم فقط همون یکی رو نشون میده :گریه:

alismith
پنج شنبه 08 اردیبهشت 1390, 11:56 صبح
ببخشید یه سوال الان این imageData گفتید دقیقا چیه؟ :متفکر:

alismith
پنج شنبه 08 اردیبهشت 1390, 12:04 عصر
این رو امتحان کنید:



$dbresult = mysql_query("SELECT * FROM images",$dblink);
print header('Content-type:image/jpg');
print header("Content-type: image/png");
while($record = mysql_fetch_array($dbresult)){

print $record['imageData'];

}


امیدوارم مشکل حل بشه.

sara333
پنج شنبه 08 اردیبهشت 1390, 12:48 عصر
alismit: این iamageData اسم فیلدیه که عکسم تو بانک داخلش ذخیره میشه و از نوع LONGBLOB هستش .
نه بازم فقط یکی رو میاره . این یه مشکلی داره

رضا قربانی
پنج شنبه 08 اردیبهشت 1390, 16:14 عصر
از پست شماره ی 9 استفاده کن و مشکلی هم نداره.

فقط یه کاری کن - توی بانکت یه فیلد id بساز و از نوع int و Extra رو auto_increment بذار و primary تنظیمش کن . با این کار یک کلید اصلی می سازی که رکورد شمارو می شماره و هیچ موقع تکراری نمی شه و موقع نمایش به ترتیب نمایش می ده .

یا اگه نتونستی جدولتون رو اکسپورت کنید و واسمون بذارید تا درستش کنیم .
ببین بازم مشکل داری - اگه بازم مشکل داری بدون یک جایی رو درست نفهمیدی و کدت رو بذار اینجا تا واست درست کنیم

موفق باشید

Mahdi.Spirit
پنج شنبه 08 اردیبهشت 1390, 16:52 عصر
از پست شماره ی 9 استفاده کن و مشکلی هم نداره.

فقط یه کاری کن - توی بانکت یه فیلد id بساز و از نوع int و Extra رو auto_increment بذار و primary تنظیمش کن . با این کار یک کلید اصلی می سازی که رکورد شمارو می شماره و هیچ موقع تکراری نمی شه و موقع نمایش به ترتیب نمایش می ده .

فكر نكنم مشكل از id باشه
مشكل سر همون پست شماره 3 هست!
وقتي اون دستور پست شماره 9 رو هم تست كردم يه عكس مياره! توي يه header ميشه چنتا عكس وارد كرد؟
وقتي صفحه جديد ايجاد ميشه اصلا سورسش رو نميشه ديد چون اون صفحه عكسه نه صفحه html

Mahdi.Spirit
پنج شنبه 08 اردیبهشت 1390, 17:03 عصر
اينجا هم همين سوال رو پرسيدن
http://stackoverflow.com/questions/5753928/how-to-display-multiple-images-blob-from-mysql-using-php

ممكنه اين آدرس هم بتونه كمي كمك كنه ،‌ البته خيلي ربطي به اصل موضوع نداره
http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_(blob_storage).xm l

alismith
پنج شنبه 08 اردیبهشت 1390, 17:21 عصر
سلام مطابق گفته های دوست خوبم galiken_it و این کدی که قرار دادم عمل کنید:



//imageSelector [.php]
$dbresult = mysql_query("SELECT imageData FROM images WHERE imageId ='". $_GET['imageId'] ."'",$dblink);
header('Content-type:image/jpg');
header("Content-type: image/png");
print mysql_result($dbresult,0);


//imageView [.php]
$dbresult = mysql_query("SELECT imageId FROM images",$dblink);
while($record = mysql_fetch_array($dbresult)){
echo '<img src="imageSelector.php?imageId='.$record[0].'">';
echo '<br/>';

}




امیدوارم تونسته باشم کمکی بکنم

Mahdi.Spirit
پنج شنبه 08 اردیبهشت 1390, 17:48 عصر
من اينو تست كردم تميز كار كرد اميدوارم براي شما هم كار كنه
اول يه فايل به اسم image.php بسازين با كد زير :


<?php
$id=abs($_GET['id']);
$servername = "localhost";
$dbname = "upload";
$user = "root";
$pass = "";
$dblink = mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
$dbresult = mysql_query("SELECT imageData FROM images WHERE id=$id",$dblink);
header('Content-type:image/jpg');
$record = mysql_fetch_array($dbresult);
echo($record['imageData']);
mysql_close($dblink);
?>


فايل اصلي هم با كد زير :



<?php
$servername = "localhost";
$dbname = "upload";
$user = "root";
$pass = "";
$dblink = mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
$query = mysql_query("SELECT id FROM images",$dblink);
while($data=mysql_fetch_array($query)) {
echo '<'.'img src="image.php?id='.$data['id'].'">';
}
mysql_close($dblink);
?>


بعد فايل اصلي رو اجرا كنيد و تمام!

Mahdi.Spirit
پنج شنبه 08 اردیبهشت 1390, 17:57 عصر
اين هم اضافه كنم كه آدرس عكسها اينطوري ميشن (id همون شماره عكسه توي ديتابيس):


http://localhost/image.php?id=1
http://localhost/image.php?id=2
http://localhost/image.php?id=3
...

binyaft
پنج شنبه 08 اردیبهشت 1390, 18:41 عصر
من كه همون اول گفتم :لبخند:

Mahdi.Spirit
پنج شنبه 08 اردیبهشت 1390, 19:41 عصر
من كه همون اول گفتم :لبخند:

منم كه همون اول نوشتم مشكل همون پست سومه!
ولی دیدم قضیه براشون روشن نشده كامل نوشتم!
:خجالت:

sara333
جمعه 09 اردیبهشت 1390, 09:16 صبح
سلام و از همه ی دوستان واقعا ممنون که اینجوری پیگیر کار من بودن .
پست ها رو الان دیدم امتحان میکنم ببینم چی میشه . نتیجه رو میگم .
ببخشی که اذیت کردم چکار کنیم تازه کاریم

sara333
جمعه 09 اردیبهشت 1390, 11:45 صبح
منظورتون از پست شماره 9 اینه که header ها رو بیارم بیرون حلقه؟
خوب این کارم کردم .ولی ...

binyaft
جمعه 09 اردیبهشت 1390, 18:16 عصر
هنوز مشکل حل نشده ؟ :اشتباه:

جناب MAHDI.SPIRIT کد کامل رو گذاشتن که...

رضا قربانی
شنبه 10 اردیبهشت 1390, 12:23 عصر
ببین این روش اصلا خوب نیست و سرعت کارتون رو میاره پایین و ... و کمتر کسایی هستن که از این روش استفاده می کنن (اونم مجبوری)


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



برای مثال ما یک صفحه index.php داریم و می خواییم توسط یک فرم یک عکسی رو از سیستممون انتخاب کنیم و در شاخه اصلی سایت داخل پوشه upload بریزیم و آدرس اون عکس رو داخل بانک ذخیره کنیم .


اول ما باید یک فرم داشته باشیم و محتویاتش رو به صورت پست ارسال کنیم :

توی بادی قرار می گیره

<form action="index.php" method="post" name="form1" target="_self" id="form1" enctype="multipart/form-data">
<table width="500" align="center" dir="rtl" >
<tr>
<td width="67"><div align="center" class="style1"> انتخاب تصویر </div></td>
<td ><div align="center">

<input name="pic" type="file" style="width:350px"/>

</div></td>
</tr>
<tr>
<td colspan="2"><div align="center">

<input type="submit" name="Submit" value="ذخیره" />

</div></td>
</tr>
</table>
</form>



و بعد باید بیاییم اول صفحه ، تصویری که به صورت پست ارسال کردیم رو دریافت کنیم :




if(!empty($_FILES["pic"]['name']))
{

if( ($_FILES["pic"]["type"]=="image/gif") or ($_FILES["pic"]["type"]=="image/x-png") or ($_FILES["pic"]["type"]=="image/png") or ($_FILES["pic"]["type"]=="image/pjpeg") or ($_FILES["pic"]["type"]=="image/jpeg") or ($_FILES["pic"]["type"]=="image/jpg"))
{


$time = time();

$name=strtolower( $_FILES['pic']['name']);

$ext=$name[strlen($name)-3].$name[strlen($name)-2].$name[strlen($name)-1];

$dir=$name."_".$time.".".$ext;

if(!file_exists("./upload/".$dir))
{
move_uploaded_file($_FILES['pic']['tmp_name'],"./upload/".$dir) or die ("Could not move_uploaded_file");
$pic=true;
}


}
else
{
echo"<meta http-equiv=\"content-Type\" content=\"text/html; charset=utf-8\"><script>alert(\"!! پسوند تصاویر قابل قبول نیست \")</script>";
$dir='';
$pic=false;
}




حالا ما تصویر رو به پوشه upload هدایت کردیم و اسمش رو هم عوض کردیم تا تصاویرهایی که درج می شن نامشون با هم قاطی نشه و واسه برنامه مشکلی پیش نیاد


خب حالا باید نام تصویر که در داخل متغیر $dir ذخیره شده رو با دستور sql وارد بانک کنیم (خیلی ساده)



if($pic)
{
$sql="UPDATE `tbl` SET `pic` = '$dir' ";
}



همین و تمام شد
الآن ما اومدیم و فایل عکس رو به پوشه ی upload فرستادیم و نام عکس رو ذخیره بانک اطلاعاتی کردیم .

حالا برای نمایش عکس باید به این صورت عمل کنید :
کافیه این خط کد رو بندازین داخل حلقه و هر چی عکس دارین پشت سر هم نشون می ده


echo'<img src="./upload/'.$row["pic"].'" /><br />
';


سوالی داشتی همین جا بگو

موفق باشید

رضا قربانی
شنبه 10 اردیبهشت 1390, 12:39 عصر
بچه ها توی مثال هاتون که این کد رو گذاشتید درست نیست



echo '<'.'img src="image.php?id='.$data['id'].'">';


این باید تصویر رو نمایش بده و دیگه نیاز به آدرس و آی دی نیست !!!

binyaft
شنبه 10 اردیبهشت 1390, 13:18 عصر
درسته دیگه!
شما وقتی داری یه سری تصویر رو از بانک میخونی نمیتونی همشو یه جا echo کنی و بعد header بفرستی که!
باید ID ــه تصویر رو بفرستی به یه فایل دیگه تا اون data رو از دیتابیس بخونه و نمایش بده!
در ضمن تصویر رو هم نمایش میده .

sara333
شنبه 10 اردیبهشت 1390, 15:46 عصر
از راهنمایی های binyaft (http://barnamenevis.org/member.php?106845-binyaft)
خیلی ممنونم
درست شد
اینم نتیجه:
این صفحه headershow

<?php

$id=(integer) $_GET['id'];
$servername = "localhost";
$dbname = "upload";
$user = "root";
$pass = "";
$dblink = mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
$sql = "SELECT `imageData` FROM `images` WHERE `imageID`='$id'";


$result = mysql_query($sql, $dblink);
header('Content-Type : image/jpg');
if(mysql_affected_rows($dblink)>0)

{

while($data=mysql_fetch_array($result))
{

echo $data['imageData'];
}


}



?>
اینم صفحه show

<?php

$servername = "localhost";
$dbname = "upload";
$user = "root";
$pass = "";
$dblink = mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
$sql = "SELECT * FROM `images` order by imageID desc ";

$result = mysql_query($sql, $dblink);

if(mysql_affected_rows($dblink)>0)

{

while($data=mysql_fetch_array($result))
{

echo '<img src="http://localhost:8080/store/headershow.php?id='.$data["imageID"].'">';

}


}

واقعا از همگی ممنون