سلام دوستان
من عکس هامو در دیتابیس به صورت json دخیره میکنم
و از bootstrap multiselect file upload استفاده میکنم برای آپلود تا اینجا مشکلی نیست
و عکس ها به صورت json ذخیره میشه مشکلی که دارم اینه که من هرچندتا عکس آپلود میکنم در دیتابیس به این شکل هست
["1608042292.jpeg","1608042292.jpeg"]
در اینجا دوتا عکس آپلود شده ولی اسماشون یکی میافته و در واقع فقط یک عکس در پوشه اپلود میشه با دو اسم در دیتابیس
فایل store من در کنترلر
public function store(Request $request)
{
if($request->hasfile('photo'))
{
foreach($request->file('photo') as $file)
{
$name = time().'.'.$file->extension();
$file->move(public_path().'/photo/tourism/', $name);
$data[] = $name;
}
}
$file= new Tourism();
$file->photo=json_encode($data);
$file->save();
return redirect('/AdminCp/ژity');
}
فرم view
<form class="form0reg row" method="post" action="{{ route("Tourism.store")}}" enctype="multipart/form-data">
@csrf
<div class="col-md-12">
<h6 class="text-right h-color">سایر عکس ها <span
class="span-color">(اختیاری)</span></h6>
<div class="file-loading">
<input id="file-1" type="file" name="photo[]" multiple
class="file form-control"
data-overwrite-initial="false"
data-min-file-count="1">
</div>
</div>
<div class="col-sm-12 text-left">
<button type="button"
onclick="document.getElementsByClassName('form0reg')[0].submit()"
class="btn btn-successs">ویرایش مطلب</button>
</div>
</form>
ممکنه راهنماییم کنید مشکل از کجاست حتی روش آپلودم عوض کردم ولی همین مشکل پابرجا بود
در دیتابیس هم ستون photo که عکس ذخیره میشه از نوع varchar هست
سلام خانم چون دارید برای نام گزاری از time() استفاده می کنید چون دستورات در کسری از ثانیه انجام میشه اسم هر دو عکس یکی میشه بهتره از تابع rand()استفاده کنید که رندوم هر سری یک عددی برای عکس در کنار time()تولید کند
@bahar
سلام. به دلیل تفسیر شدن کد با سرعت بالا تابع time زمان یکسانی رو برمیگردونه. راه های خیلی زیادی هست برای اینکه اعداد رندوم استفاده کنید که تداخلی بین اسم فایلها نباشه.
اما یه راه خیلی ساده و کوتاه به نظرم این هست که شماره ایندکس آیتمتون رو یه تایم بچسبونید.مثلا:
foreach($request->file('photo') as $key => $file)
{
$name = time().$key.'.'.$file->extension();
$file->move(public_path().'/photo/tourism/', $name);
$data[] = $name;
}
ولی فکر نمیکنم روش خیلی جالبی باشه ( کثیفه 😅 ). راهی هست که فی البداهه به ذهن رسید.
همون طوری که دوستان اشاره کردند بجای تابع time() بایستی از تابعی استفاده کنید مطمئن باشید هر سری که اجرا میشه مقدار متفاوتی تولید کنه. یکی از بهترین جایگزین هاش هم به نظرم تابع uniqid() هست که بصورت خاص برای این جور مواقع تعبیه شده.
$name = uniqid().'.'.$file->extension();
//خروجیش میشه یک چیزی مثل این:
// 5fd9126be7818.jpg
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟