راکت
حل شده

دریافت سایز دو فیلد فایل در یک فرم

13 پاسخ

سلام.
من با جاوا اسکریپت میخوام بخش فایل توی فرمم رو چک کنم.
توی فرم 2 تا فیلد هست که هر دو تا اپشنال هستن. یکی برای عکس و یکی برای فایل
حالا من برای چک همچین کدی نوشتم

var pic = document.getElementById('pic').files[0];
var file = document.getElementById('file').files[0];
if(pic.size < 3000000){ 
if(file.size < 8000000){

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

ثبت پرسش جدید

پاسخ‌ها

13
میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

بهترین پاسخ

دقیق نمیدونم دنبال چی هستید و صورت مسئله چیه. ولی تا جایی که فهمیدم هدفتون رو، این رو امتحان کنید:

$('#Check').submit(function(evt){
  var pics = document.getElementById('pics').files[0];
  var file = document.getElementById('file').files[0];

  if(pics) {
    if(pics.size < 3000000){
    } else{evt.preventDefault();alert('err')}
  }
  if(file) {
    if(file.size < 8000000){
    //Submit form
    }else{evt.preventDefault();alert('err')}
  }
});
محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

میثم
میثم
@adoniya.ir

تخصص: برنامه نویسی PHP خالص بدون هیچ گونه فریمورکی! با کمی چاشنی CSS و جاوا !!!

سلام. @mohsenbostan
این لینک اصلا به درد کار من نمیخوره در مورد اعتبار سنجی یک فیلد هست که موضوع سوال من نیست.
ببینید ما دو تا فیلد فایل داریم.
توی اولی عکس اپ میشه و توی دومی فایل با فرمت مختلف.
موقعی که عکس انتخاب میشه جاوا درست عمل می‌کنه.
اما موقعی که عکس انتخاب نمیشه، انگار بخش اعتبار سنجی فیلد دوم اصلا نادیده گرفته میشه.
دوستان کسی راهشو بلد نیست؟؟؟؟
توی شرط اول گفتیم عکس کمتر از حدود ۳ مگ، پس اگه کاربر عکسی رو انتخاب نکنه حجم میشه صفر و شرط اول برقراره اما چرا شرط دوم توی این شرایط اجرا نمیشه؟

شاید پاسخ شما همین‌جا باشد

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

1) منظورتون جاوااسکریپت هستش یا جاوا؟ اینا باهم فرق دارند.
2) کدهای HTML و JS رو باهم قرار بدین.

میثم
میثم
@adoniya.ir

تخصص: برنامه نویسی PHP خالص بدون هیچ گونه فریمورکی! با کمی چاشنی CSS و جاوا !!!

سلام فرقی نداره کلا کار راه بیفته.
کد html

<form method="post" enctype="multipart/form-data" id="Check">
<table>
<tr><td>تصویر شاخص : </td></tr>
<tr><td><input type="file" name="pics" id="pics"></td></tr>
<tr><td>فایـل ضمیمـه : </td></tr>
<tr><td><input type="file" name="file" id="file"></td></tr>
<tr><td>
<button type="submit">send</button>
</td></tr>
</table></form>

کد فایل JS

$('#Check').submit(function(evt){
var pics = document.getElementById('pics').files[0];
var file = document.getElementById('file').files[0];
if(pics.size < 3000000){
if(file.size < 8000000){
 //Submit form
}else{evt.preventDefault();alret ....}
}else{evt.preventDefault();alret ....}
});

کدهای دیگه هم بود که خلاصه کردم.
تویه همین قسمت مشکل وجود داره. اگر برای فیلد pics یه فایل انتخاب بشه فیلد file هم به درستی کار می کنه.
اما اگر برای فیلد pics هیچ فایلی انتخاب نکنیم. فیلد file اعتبار سنجی نمیشه و ایراد حجم نمیگیره.

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

منظورم اینه که دسته بندی گفتگو رو اشتباه که قرار بدین، شاید سایرین هم نیان کمک تون کنند، فکر می کنند درباره جاوا و موبایل هستش.
دسته بندی صحیح که قرار بدین برای آینده هم بهتره.

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

فکر می کنم مشکل کدهاتون هم پیداست، دلیلش اینه که شما شرط رو تودرتو قرار دادین.
این باید خطای شما باشه.
به چه دلیل شرط اندازه فایل رو داخل شرط اندازه عکس گذاشتید؟
این مشکل ساز شده.

میثم
میثم
@adoniya.ir

تخصص: برنامه نویسی PHP خالص بدون هیچ گونه فریمورکی! با کمی چاشنی CSS و جاوا !!!

ممنونم. درسته شرط ها تو در تو هستن، اما از لحاظ منطقی نباید مشکل ایجاد کنه. مثلا اگه کاربر عکس ارسال نکنه شرط اول مقدار ۰ رو برای حجم بر می‌گردونه که درسته اما چرا شرط دوم کار نمیکنه؟
اگه بخوایم درستش کنیم شروط باید چطور نوشته بشه؟
هر دو فیلد اپشنال هستن ولی در صورت انتخاب فایل باید حجم ها چک بشن.
ممنون میشم کدمو اصلاح کنید و قرار بدین.
@milad

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

خیر، اشتباه می کنید، منطقی هستش.
چون مقدار متغیر pics زمانی که کاربر عکسی رو وارد نکرده باشه، مقدار تعریف نشده (undefined) میشه. برای همین قرار نیست عدد 0 رو برای اندازه نشون بده.

میثم
میثم
@adoniya.ir

تخصص: برنامه نویسی PHP خالص بدون هیچ گونه فریمورکی! با کمی چاشنی CSS و جاوا !!!

@milad
آقا دمت گرم. کارت درسته.
مشکل حل شد. اینکه دو تا شرط رو از هم جدا کردیم و از console.log استفاده کردیم عالی بود.
یه سوال این console.log دقیقا چیکار می کنه؟

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

سلامت باشی عزیز جان
چه خوب که حل شدش

نه این بخش console.log مهم نیستش، اون واسه این بود که من خطایابی کنم و بتونم کد رو تحلیل کنم. اون نباید جز کدها باشه (حذفش کردم).
برای سنجش کدها و خطایابی، برنامه نویس ها از تابع console.log کمک میگیرند.

میثم
میثم
@adoniya.ir

تخصص: برنامه نویسی PHP خالص بدون هیچ گونه فریمورکی! با کمی چاشنی CSS و جاوا !!!

@milad
ممنونم. 👌👌👌👌

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

مخلصم، سرزنده باشین

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام