PDA

View Full Version : سوال: مشکل در انتخاب یک متغیر در آپلود عکس جهت چاپ نمودن



hamidhassas
سه شنبه 17 تیر 1393, 22:58 عصر
من از کد زیر استفاده میکنم برای آپلود عکس و تغییر سایز عکس مشکلم اینه که میخوام آدرس فایل آپلود شده که با دو سایز مختلف هست رو در یک رکورد در دیتابیس زخیره کنم

اتفاقی که الان رخ میده اینه که نمیتونم آدرس ها فایل ها رو که بعد از آپلود روی سرور انجام میشه رو در یک رکورد زخیره کنم بلکه به صورت دو تا رکورد زخیره میشه



// settings
$max_file_size = 1920*1024; // 200kb
$valid_exts = array('jpeg', 'jpg', 'png', 'gif');
// thumbnail sizes
//$sizes = array(100 => 100, 150 => 150, 250 => 250);
$sizes = array(48 => 48, 150 => 150,);
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_FILES['image'])) {
if( $_FILES['image']['size'] < $max_file_size ){
// get file extension
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
if (in_array($ext, $valid_exts)) {
/* resize image */
foreach ($sizes as $w => $h) {
$files[] = resize($w, $h);
}
} else {
$msg = 'Unsupported file';
}
} else{
$msg = 'Please upload image smaller than 1024KB';
}
}
date_default_timezone_set('Asia/Tehran');
function resize($width, $height){
/* Get original image x y*/
list($w, $h) = getimagesize($_FILES['image']['tmp_name']);
/* calculate new image size with ratio */
$ratio = max($width/$w, $height/$h);
$h = ceil($height / $ratio);
$x = ($w - $width / $ratio) / 2;
$w = ceil($width / $ratio);
/* new file name */
//$path = 'uploads/'.$width.'x'.$height.'_'.$_FILES['image']['name'].'_'.date('Y.n.j-G.i');
$path = '../../../../images/uploads/'.date('Y.n.j-G.i').'_'.$width.'x'.$height.'_'.$_FILES['image']['name'];
/* read binary data from image file */
$imgString = file_get_contents($_FILES['image']['tmp_name']);
/* create image from string */
$image = imagecreatefromstring($imgString);
$tmp = imagecreatetruecolor($width, $height);
imagecopyresampled($tmp, $image,
0, 0,
$x, 0,
$width, $height,
$w, $h);
/* Save image */
switch ($_FILES['image']['type']) {
case 'image/jpeg':
imagejpeg($tmp, $path, 100);
break;
case 'image/png':
imagepng($tmp, $path, 0);
break;
case 'image/gif':
imagegif($tmp, $path);
break;
default:
exit;
break;
}
return $path;
/* cleanup memory */
imagedestroy($image);
imagedestroy($tmp);
}

if(isset($files)){
foreach ($files as $image) {
//echo "<img class='img' src='{$image}' /><br /><br />";
$name_farsi=mysql_escape_string($_POST['name_farsi']);
$insert=mysql_query("INSERT INTO `download` (`file_name_persian` ,`image_min`, `image_max` ) VALUES ( '".$name_farsi."', '".$image."', '".$image."')");
}
}

amg_123
سه شنبه 17 تیر 1393, 23:41 عصر
با سلام
راستش حوصله نداشتم کداتو ببینم ولی میتونی اینجوری کنی =>
اگه دقیق متوجه سوالت شده باشم تو وقتی یه عکس آپلود میشه میای سایزشو عوض میکنی بعد دوباره ذخیرش میکنی یعنی دوتا عکس داری. امیدوارم که درست فهمیده باشم
خب تو میتونی اسم عکسی رو که ویرایش میکنی هم اسم عکس اصلیه بزاری ولی یه جمله به آخرش اضافه کنی مثلا
عکس اصلی : abcd.jpg
عکس ویرایش شده abcd_thumb.jpg

خب حالا میرسیم به مشکله شما => وقتی میخوای عکس ویرایش شده رو استفاده کنی میتونی با جایگزین کردن تو اسمه عکس اصلی اسمه عکس ویرایش شده رو بدست بیاری.


$o_img = "abcd.jpg";
$e_img = str_replace('.', '_thumb.', $o_img);

البته من نمیدونم چجوری اسمات رو ذخیره میکنی، معمولا همه اسمه عکسا رو تاریخ میزارن، اگه شما نام گزاریت فرق میکنه ممکنه این ج نده. من فرض کردم داخل اسمه عکسات دات( . ) نباشه مثلا اینجوری نباشه(abc.d.jpg). اگه مطمئن باشی که داخل اسمه عکسات فقط یه دات( . ) وجود داره که جدا کننده پسونده عکسته این کده جواب میده.
فقط یه نکته واسه تغییر اسم عکس ویرایش شدتم میتونی باز به روش بالا استفاده کنی مثلا دات رو به _thump. تغییر بدی.

hamidhassas
چهارشنبه 18 تیر 1393, 01:19 صبح
:متفکر::متفکر:

hamidhassas
شنبه 21 تیر 1393, 22:29 عصر
کسی نیست کمکمککنه

hamidhassas
یک شنبه 29 تیر 1393, 23:03 عصر
:گریه::گریه::گریه::گریه::گریه:

H:Shojaei
دوشنبه 30 تیر 1393, 00:11 صبح
سلام...
خوب شما خودت تو کد اومدی گفتی 2تا رکورد درج بشه اون بدبخت چکار کنه اونم درج میکنه دیگه :لبخند:


foreach ($files as $image) { //echo "<img class='img' src='{$image}' />"; $name_farsi=mysql_escape_string($_POST['name_farsi']); $insert=mysql_query("INSERT INTO `download` (`file_name_persian` ,`image_min`, `image_max` ) VALUES ( '".$name_farsi."', '".$image."', '".$image."')"); }
تو کد بالا شما اومدی آرایه ی $files رو اندیسهاشو خوندی و به ازای هرکدوم یکی درج کردی که دقیقا چیزی که گفتید اتفاق میافته...
کد بالا باید بشه:



$name_farsi=mysql_escape_string($_POST['name_farsi']); $insert=mysql_query("INSERT INTO `download` (`file_name_persian` ,`image_min`, `image_max` ) VALUES ( '".$name_farsi."', '".$files[0]."', '".$files[1]."')");