Saturday, April 25, 2020

শুধুমাত্র HTML5 দিয়ে ক্লায়েন্ট-সাইড ফর্ম ভ্যালিডেইশনের মাথা এন্ড মুন্ডু


ওয়েব ফর্ম ভ্যালিডেইশন কাকে বলে, কত প্রকার ও কি কি, সংগা সহ উদাহরণ--- এসব বিস্তারিত জানার জন্য প্রথমেই এই লেখাটি পড়ে নিন -  
.
……তাহলে আপনারা জানেন যে ক্লায়েন্ট সাইড ভ্যালিডেইশন বা ফ্রন্ট-এন্ড ভ্যালিডেশন জিনিসটা কি ।
.
আপনি যখন কোন ওয়েব ফর্মের ক্লায়েন্ট সাইড ভ্যালিডেইশন করার সিদ্ধান্ত নেবেন তখন কয়েকটি অপশন আপনার সামনে আসবে ।
.
১. শুধুমাত্র HTML5 দিয়ে ক্লায়েন্ট সাইড ভ্যালিডেইশন করতে পারেন ।
.
অথবা ২. শুধুমাত্র JavaScript দিয়ে ক্লায়েন্ট সাইড ভ্যালিডেইশন করতে পারেন ।
.
অথবা ৩. প্রথমে HTML5 দিয়ে ভ্যালিডেইশন করে ফলব্যাক হিসেবে JavaScript দিয়ে ভ্যালিডেইশন করতে পারেন । এক্ষেত্রে প্রথম পছন্দ হচ্ছে HTML5 । কিন্তু যেসব ব্রাউজার HTML5 সাপোর্ট করবে না সেসব ব্রাউজারে JavaScript Validation কাজ করবে ।
.
অথবা ৪. HTML5 দিয়ে ভ্যালিডেইশন করে Constraint Validation API দিয়ে কাস্টমাইজ(মেসেজ এবং বাবল) ও ক্রসব্রাউজার সাপোর্ট দিতে পারেন ।
.
আমার ব্যক্তিগত পছন্দ ৩ এবং ৪ । কারণটা পরের অংশটুকু পড়লেই বুঝতে পারবেন J
.
HTML5 দিয়ে ক্লায়েন্ট সাইডে ফর্ম ভ্যালিডেইশন করাকে বলা হয় Constraint Validation বা Inline Validation ।
.
এই Constraint Validation এ ব্যবহার করা হয় কিছু HTML5 Constraint Validation Attributes । Attribute গুলোর মধ্যে রয়েছে কিছু ইনপুট টাইপ এট্রিবউট যেমন- text, email, url, number, tel, password, file, date, time, datetime, datetime-local, month, week, image, radio, checkbox, range, search । এই ইনপুট টাইপগুলোর মধ্যে কয়েকটি আগে থেকেই ছিল । বাকীগুলো HTML5 এ এসে যুক্ত হয়েছে । এছাড়াও আরো কিছু এট্রিবউট রয়েছে, যেমন- required, pattern, step, min, max, maxlength ইত্যাদি ।
.
Attribute গুলোর পাশাপাশি আরো ব্যবহার করা যায় Constraint Validation API । API গুলো দিয়ে ভ্যালিডেইশনের ম্যাসেজ, বাবল(bubble) ইত্যাদি কাস্টমাইজেইশন করা যায় । এমনকি ক্রসব্রাউজার সাপোর্টও দেয়া যায় । API এ ব্যবহৃত মেথডগুলো হলো: checkValidity(), setCustomValidity() ইত্যাদি । আরো ব্যবহৃত হয় কিছু প্রপারটি , যেমন- willValidate, validity.valueMissing, validity.patternMismatch, validity.stepMismatch, validity.typeMismatch, validity.tooLong, validity.rangeOverflow, validity.rangeUnderflow, validity.customError, validationMessage ইত্যাদি ইত্যাদি ।
.
পুরো ভ্যালিডেইশনকে Visitor/User এর কাছে আনন্দায়ক এবং সুখকর করার জন্য প্রয়োজন পড়ে একটি চমৎকার UI ডিজাইন । চমৎকার ডিজাইনের জন্য CSS এর রয়েছে কিছু চমৎকার hook, যেমন-
:invalid{}, :valid{}, :required{}, :optional{}, :in-range{}, :out-of-range{}, :read-only{}, :read-write{}, :disabled{}, :enabled{}, :default{} ইত্যাদি । এগুলো ব্যবহার করে মনের মাধুরি মিশিয়ে আপনার ফর্মের UI(User Interface) ডিজাইন করতে পারবেন । জানেন তো, ক্লায়েন্ট সাইড ভ্যালিডেইশনের প্রধান উদ্দেশ্যই হলো ইউজারের মনোতুষ্টি করা । ইউজার অখুশি তো আপনার ক্লায়েন্ট অখুশি । আর ক্লায়েন্ট অখুশি তো আপনি অখুশি ।
.
চলুন এবার জেনে আসি HTML5 দিয়ে ফর্ম ভ্যালিডেইশনের কিছু সীমাবদ্ধতা :
.
১. HTML5 এর সবগুলো input type এবং CSS selector সব ব্রাউজারে সাপোর্ট করে না । যেমন- time, datetime, datetime-local, month, week ইত্যাদি ইনপুট টাইপ Firefox-42.0  সাপোর্ট করে না । আবার datetime Chrome- 46.0.2490.86 m এবং Opera-33.0 সাপোর্ট করে না । Safari-5.1.1 color type সাপোর্ট করে না ।

বিশেষভাবে লক্ষণীয়: যখন কোনো ব্রাউজার HTML5 এর কোনো input type সাপোর্ট না করে তখন সেই input type কে text হিসেবে ধরে নেয় । ফলে টেক্সট টাইপের যেকোন ইনপুটকেই ব্রাউজারটি গ্রহণ করে নেয় । এক্ষেত্রে pattern ব্যবহার করে সমস্যার সমাধান করা যেতে পারে ।
.
২. ‍সাফারি-5.1.1 ব্রাউজারটি HTML5 এর ভ্যালিডেইশনের পুরো প্রক্রিয়াটিকে অগ্রাহ্য করে অর্থাৎ ভ্যালিডেইশন না করেই ইনপুট গ্রহণ করে । ‍accept এট্রিবিউট সাপোর্ট করে না । মজার ব্যাপার হলো ব্রাউজারটি ইনপুট টাইপ number, date, time, datetime, datetime-local, month, week, file, image, search ইত্যাদি সাপোর্ট করে এবং কার্যকর ও দৃষ্টিনন্দন একটি UI প্রদান করে । CSS hook গুলোকেও মোটামুটি সাপোর্ট করে ।
.
৩. একেক ব্রাউজারে একেক রকম UI দেখা যায় । ফায়ারফক্স-এর UI সাদামাটা । কিন্তু number, date, time, datetime, datetime-local, month, week এসবের জন্য ক্রোম, অপেরা, সাফারি এবং iPhone গুলোতে অনেক সুন্দর এবং কার্যকর UI পাওয়ার যায় । iPhone এ emil, url ইত্যাদির ইনপুট দেয়ার জন্য আলাদা আলাদা অন-স্ক্রিন কী-বোর্ড পাওয়া যায় ।
.
৪. Bubble গুলোকে কাস্টমাইজ করা এখন পর্যন্ত সম্ভব হচ্ছে না । তবে শুধুমাত্র Chrome-28 এর আগের ভার্সনে কাস্টমাইজ করা যেত ।
.
৫. ডিফল্ট মেসেজ টেক্সটকে এডিট করা গেলেও স্টাইল দেয়া সম্ভব নয় ।
.
৬.  IE <= 9, iOS Safari, এবং  default Android browser এ constraint validation সাপোর্ট করে না ।
.
৭. পুরো ভ্যালিডেইশন প্রক্রিয়াটাই ব্রাউজারের উপর নির্ভরশীল । যেমন- আপনি একটা পেইজ করলেন ইংরেজি ভাষায় । কিন্তু ব্রাউজারটি ফ্রেঞ্চ ভাষায় হওয়ায় ভ্যালিডেইশন ম্যাচেজ গুলোও চলে আসলো ফ্রেঞ্চ ভাষায় । এটা একটা সমস্যা ।
তাহলে এতসব সীমাবদ্ধতার পরেও আমরা কেন HTML5 Validation করবো ? আসুন সেটাও জেনে নেই …
.
১. JavaScript এর প্রতি ৪/৫ লাইন কোডের বদলে একটি HTML5 attribute ব্যবহার করে ভ্যালিডেইশন করা যায় । ফলে বেঁচে যায় অনেক সময়, শ্রম এবং খরচ ।
.
২. ডিফল্ট মেসেজ কাস্টমাইজ করা যায় Constraint Validation API দিয়ে ।
.
৩. ডিফল্ট bubble কে বন্ধ (suppress) করে নতুন করে কাস্টামাইজড বাবল তৈরি করা যায় Constraint Validation API দিয়ে । এবং এটা হবে ক্রসব্রাউজার (কাস্টমাইজড বাবল এবং ভ্যালিডেইশন) সাপোর্টেড ।

৪. ক্রসব্রাউজার সমাধানে প্রথমে HTML5 দিয়ে ভ্যালিডেইশন করে ফলব্যাক হিসেবে JavaScript ভ্যালিডেইশন করা যায় । ফলে যেসব ব্রাইজার HTML5 সাপোর্ট করে সেসব ব্রাউজারে পাওয়া যাবে HTML5 এর চিরচেনা স্বাদ আর গন্ধ । আবার যারা সাপোর্ট করবে না সেখানেও ভ্যালিডেইশন ব্যাহত হবে না জাভাস্ক্রি্টের কারণে ।
.
৫. বর্তমান HTML5 এর কার্যক্রম খুলে দিচ্ছে ভবিষ্যতের কিছু সম্ভাবনাময় কার্যক্রমের দ্বার । যেমন- ভবিষ্যতে ইউজারের কনট্যাকট লিস্ট বা এড্রেসবুকের ঠিকানা অনুযায়ী ইনপুট টাইপ email/ tel ইত্যাদি অটো কমপ্লিটের ব্যবস্থা হতে পারে । search টাইপ ব্রাউজার, AT(assistive technology like screen reader) এবং স্বয়ংক্রীয় ক্রলারদের জন্য দিতে পারে স্মার্ট কোন অপশন যেমন- কোন নির্দিষ্ট সাইটে স্বয়ংক্রীয়ভাবে কাস্টম সার্চ তৈরির অপশন দিতেই পারে কোন কোন ব্রাউজার ।
.
সবচেয়ে বড় কথা, ব্রাউজারগুলো খুব দ্রুত আপডেট হচ্ছে । ফলে ক্রসব্রাউজার সমস্যাগুলো অচিরেই মিটে যাবে, আশা করা যায় । ক্রসব্রাউজার এবং অন্যান্য ছোট-খাট সমস্যাগুলো মিটে গেলে ক্লায়েন্ট সাইড ভ্যালিডেইশনে জাভাস্ক্রিপ্ট নির্ভরতা একটা সময় শূন্যের কোঠায় নেমে আসবে । সময়, শ্রম ও খরচ কমার কারণে স্বাভাবিকভাবেই HTML5 Validition এর জনপ্রিয়তা অতি দ্রুত বেড়ে যাবে ।
.
তাহলে আর দেরি কেন? চলুন এখুনিই HTML5 দিয়ে ক্লায়েন্ট সাইড ভ্যালিডেইশন শেখা শুরু করি এবং বাস্তবে কাজে লাগাই ।
.
বিশেষ সতর্কীকরণ:
ক্লায়েন্ট সাইড ভ্যালিডেইশন করুন বা না করুন সার্ভার সাইড ভ্যালিডেইশন অবশ্যই করতে হবে আপনার ফর্মটিকে নিরাপদ রাখার জন্য । ক্লায়েন্ট সাইড ভ্যালিডেইশন করা হয় মূলত visitor/user -দেরকে একটি মনোমুগ্ধকর আমেজ দেয়ার জন্য । এটিকে অনেকে ভ্যালিডেইশন বলতে নারাজ । ক্লায়েন্ট সাইড ভ্যালিডেইশনকে এড়িয়ে (bypass) ফর্ম সাবমিট করা সম্ভব । তাই ফর্মের আসল নিরাপত্তা দেবে সার্ভার সাইড ভ্যালিডেইশন বা ব্যাক-এন্ড ভ্যালিডেইশন । সুতরাং আপনার ফর্মের সার্ভার সাইড ভ্যালিডেইশন করতে কখনই ভুলবেন না । (y)

একজন টুনা ভাইয়ের মন্তব্য:
HTML 5 is not good to validation . Cause if you inspect element then you can change type="" easily

এবং আমার প্রতি মন্তব্য:
টুনা ভাই, কেউ HTML5 বাইপাস করলে তার জন্য তো ফলব্যাকে JavaScript থাকবেই , মু হা হা হা…। আর JavaScript বাইপাস করলে ব্যাক-এন্ডে থাকবে বাপের বেটা সাদ্দাম ভ্যালিডেইশন, মু হি হি হি । আর সেটাকে বাইপাস করলে থাকবে…. থাক ভাই আর কিছু করার দরকার নেই । এত টাইট দিলে হ্যাকার ভাইয়েরা তো বেকার হইয়া যাইবো । তাগোরে একটা সুযোগ দ্যাননা  রে ভাই…হিক হিক হি…হি.. হি..

একটি accessible এবং usable web form তৈরিতে করণীয়


প্রথম প্রকাশ: Wednesday, January 6, 2016 
BDLance E-Learing পেইজে
----------------------------
 Web form ডায়নামিক ওয়েব সাইটের একটি গুরুত্বপূর্ণ অংশ । এই ফর্মের মাধ্যমে একজন ব্যবহারকারী ওয়েব সাইটটিতে রেজিস্ট্রেশন করা, এডমিনকে মেসেজ/ইমেইল দেয়া, ই-মেইল সাবস্ক্রাইব করা ইত্যাদি কাজ করতে পারেন । এর মাধ্যমে ব্যবহারকারী ও ওয়েব সাইটের মধ্যে একটি আন্ত:ক্রিয়া সংগঠিত হয় । তাই যেনতেন ভাবে ফরম তৈরি করলেই কাজ শেষ হয়ে যায় না । ফর্মটিকে করতে হয় অধিকতর accessible এবং usable । সেজন্য নিতে হবে নিচের পদক্ষেপগুলো গুরুত্বের সাথে ।

1.   প্রতিটি input এ যথাযথভাবে label দিতে হবে । ডিজাইনে লেবেল না থাকলেও লেবেল ব্যবহার করে সেটাকে css দিয়ে হাইড করে দেয়া যেতে পারে । লেবেল দিলে ইনপুট ফিল্ড semantic হয় । অর্থাৎ ব্রাউজারগুলো অন্যান্য semantic element (যেমন- header, section, main, article) এর মত ইনপুট গুলোকেও চিনতে পারে । সবচেয়ে বড় বিষয়, screen reader software যেমন- NVDA, VoiceOver, JAWS ইত্যাদি সফটওয়ারগুলো লেবেলের লেখা পড়তে পারে । ফলে ফর্মটি হয় অন্ধ, বধির, কানে কম শোনা প্রতিবন্ধিদের জন্য accessible এবং usable । এছাড়া লেবেলের উপর ক্লিক করলেই সংশ্লিষ্ট ইনপুট সিলেক্ট হয়ে যায় বলে ছোট ছোট ইনপুট যেমন চেকবক্স, রেডিও বাটন ইত্যাদি সিলেক্ট করতে বিশেষ ‍সুবিধা পাওয়া যায় । লেবেলে ইনপুট সম্পর্কিত প্রয়োজনীয় তথ্য প্রদর্শন করা যায় যেমন- ইনপুটটি অত্যাবশ্যক কিনা, কি ধরনের ফরম্যাটে তথ্য দিতে হবে ইত্যাদি । ফলে ফর্মটি হয় অধিকতর ব্যবহার বান্ধব (user friendly)।
2.   ফর্মে দৃশ্যত:(visually) কোন label না থাকলে কিংবা লুক্কায়িত (hidden) label দিতে না চাইলে Input এ aria-label=”name(required)” এভাবে দেয়া যেতে পারে screen readers ব্যাবহারকারীদের সুবিধার্থে ।
3.   Check box, radio button ইত্যাদি গ্রুপ আকারে থাকা ইনপুট ফিল্ডগুলোকে fieldset এর মধ্যে রাখতে হবে । fieldset এর মধ্যে legend দেয়া যেতে পারে ।
4.   Date, phone number ইত্যাদি ইনপুটের ফরম্যাট যথাযথভাবে উল্লেখ করে দিতে হবে । যাতে একজন ব্যবহারকারী খুব সহজেই বুঝতে পারে কোন ফরম্যাটে ইনপুট তথ্য দিতে হবে ।
5.   কোন কোন ইনপুট ফিল্ড অবশ্যই পূরণ করতে হবে (required field) সে সম্পর্কিত তথ্য বোধগম্য এবং সহজেই নজরে পড়ে এমনভাবে উপস্থাপন করতে হবে ।প্রথম নজরেই যেন ব্যবহারকারী বুঝতে পারে যে, কোন কোন ফিল্ড তাকে অবশ্যই পূরণ করতে হবে । এ কাজটা label এর মধ্যে লাল রংয়ের * চিহ্ন দিয়ে অথবা required শব্দটি লিখে করা যেতে পারে । required দিয়ে করাটাই সবচেয়ে ভালো কেননা লেবেলের মধ্যের লেখাকে screen reader software গুলো পড়তে পারে । তাছাড়া * চিহ্নটিকে NVDA ডিফল্টভাবে ‍star উচ্চারণ করতে পারে না যদিও VoiceOver/JAWS করতে পারে ।এছাড়াও * টিকে গ্রাফিক আকারে দিয়ে alternet text দিয়ে দেয়া যায় । তবে এক্ষেত্রে সমস্যা হলো OS X Lion সফটওয়ার atlternet text পড়তে পারেনা । অনেকে লেবেলের মধ্যে ইনপুটের নামটিকে লাল রংয় দিয়ে নির্দেশ করেন । এটা করা একদম ঠিক নয় । কারণ screen reader গুলো শুধু লেখাটিকে পড়বে । এটা যে অত্যাবশ্যক সেটা বলবে না যদি required লেখাটি না থাকে ।
6.   যেসব বর্ণনামূলক তথ্য label এর মধ্যে দেয়া সম্ভব নয় সেগুলো প্রয়োজনে আলাদা একটি span দিয়ে তার মধ্যে দেয়া যেতে পারে । এর মধ্যে থাকতে পারে ইনপুটে কোন কোন অক্ষর/চিহ্ন কোন ফরম্যাটে ব্যবহার করতে হবে ইত্যাদি ।
7.   Place Holder Text ব্যবহার করতে হবে । এতে থাকতে পারে ইনপুট ফিল্ডটি অত্যাবশ্যক কিনা এবং ইনপুট তথ্যের যথাযথ ফরম্যাট ।
8.   একটি আকর্ষণীয় ও কার্যকর ক্লায়েন্ট সাইড ভ্যালিডেইশন করতে হবে । HTML5 দিয়ে ইনলাইন ভ্যালিডেশন করা যেতে পারে যেখানে প্রতিটি অক্ষর টাইপ করার সাথে সাথে ব্যবহারকারী বুঝে যাবে যে সে সঠিক ইনপুট দিচ্ছে কিনা ।
9.   Form Validation এর Error Message একটি অতি গুরুত্বপূর্ণ বিষয় । সহজে বোধগম্য error message দিয়ে ব্যবহারকারীকে বলে দিতে হবে সে কোন জায়গায় ভুল করেছে এবং সঠিক ইনপুট কিভাবে দিতে হবে ।
10. CSS দিয়ে পুরো ফর্মের UI Desing কে আকর্ষণীয় এবং অধিকতর কার্যকরভাবে উপস্থাপন করতে হবে । ইনলাইন ভ্যালিডেইশন, অত্যাবশ্যকীয় ইনপুট ফিল্ড, এরর মেসেজ ইত্যাদি এমনভাবে ডিজাইন করতে হবে যেন ব্যবহারকারী প্রত্যেকটা টাইপের সাথে সাথে ফর্মের রূপ পরিবর্তন(কালার, বর্ডার) দেখেই ‍বুঝতে পারেন তিনি সঠিক ইনপুট দিচ্ছেন নাকি বেঠিক দিচ্ছেন । এবং কোন ধরনের ইনপুট দিতে হবে ।
11.  HTML5 দিয়ে ইনলাইন ভ্যালিডেশন করে ক্রসব্রাউজারের জন্য JavaScript দিয়ে ফলব্যাক ভ্যালিডেইশন করা উচিৎ ।
12. WAI-ARIA (Web Accessibility Initiative-Accessible Rich Internet Application) দিয়ে ফর্মটিকে Accessible এবং Usable করতে হবে । অন্ধ, বধির, কানে কম শোনা প্রতিবন্ধীরা Screen Reader Software ব্যবহার করে ফর্মটিকে যেন কার্যকরভাবে ব্যবহার করতে পারে সেদিকে বিশেষ নজর দিতে হবে ।

সর্বোপরি, একটা কথা বিশেষভাবে মনে রাখতে হবে—একটি ওয়েব ফর্মের সফলতা বা বিফলতা নির্ভর  করে ফর্মটিকে যাঁরা ব্যবহার (user) করবেন তাঁদের উপর । ব্যবহারকারী যদি ফর্মটিকে ব্যবহার করে আনন্দ পান, সন্তুষ্ট থাকেন তবেই ফর্মটি তথা ডিভেলপার হিসেবে আপনি সফল । আর ব্যবহারকারী তখনই সন্তুষ্ট হবেন যখন তিনি কোনরূপ হয়রাণি ছাড়াই কম সময়ের মধ্যে ফর্মটিকে পূরণ করে সফলভাবে প্রেরণ (send) করতে পারবেন ।

** screen reader হলো এমন সব সফটওয়ার (NVDA, VoiceOver, JAWS, Window-Eyes, Orca (on Linux) etc.) যে গুলো কোন ওয়েব পেইজকে পড়ে শোনাতে পারে । সাধারণত অন্ধ, দৃষ্টি ক্ষতিগ্রস্ত(visually impaired), বধির এবং কানে কম শোনেন এমন লোকেরা এসব সফটওয়ার ব্যবহার করেন ।

Web Form Validation এর মাথা এবং মুন্ডু


প্রথম প্রকাশ:  
August 11, 2015 at 10:37 PM 
BDLance E-Learning পেইজে 
---
“Web Form Validation” জিনিসটা কি ?
================================
কিছু কিছু ওয়েব সাইট আছে যেখানে একজন ভিজিটরকে তাঁর নাম, ইউজার নাম, ইমেইল, পাসওয়ার্ড, পোস্ট কোড/জিপ কোড ইত্যাদি তথ্য প্রদান করে ঐ সাইটে রেজিস্ট্রেশন করতে হয় । যেমন- upwork.com, freelancer.com, facebook.com ইত্যাদি । আবার কিছু কিছু ওয়েব সাইটের এডমিন বা সাইটের মালিকের(owner) সাথে যোগাযোগ করার জন্য থাকে নাম, ইমেইল, ওয়েব ঠিকানা এবং কমেন্ট বক্স সমৃদ্ধ একটি কমেন্ট ফরম । এভাবে ওয়েব পেইজে নাম, ইউজার নাম, ইমেইল, ওয়েব ঠিকানা, পাসওয়ার্ড, পোস্ট কোড, কমেন্ট বক্স ইত্যাদি সহ যে ফরম থাকে তাকে বলা হয় ওয়েব ফরম । ওয়েব ফরম বিভিন্ন রকম হতে পারে । আপাতত এটুকু জানলেই চলবে ।
যেমনটা আমরা বাস্তবে পরীক্ষার ফরম ফিলআপ করে থাকি ঠিক তেমনটাই আমরা ওয়েব ফরমেও করে থাকি । আমরা আমাদের প্রয়োজনীয় তথ্যগুলো (নাম, ইমেইল ইত্যাদি) ওয়েব ফরমের নির্দিষ্ট ইনপুট ফিল্ডে প্রদান করি এবং সাবমিট বাটনে ক্লিক করি । তখন এই তথ্যগুলো সাইটের ডাটাবেজে গিয়ে জমা হয় যা পরবর্তীতে কাজে লাগানো হয় ।

একজন ভিজিটর/ইউজার ওয়েব ফরমে যে তথ্যগুলো দেন সেগুলো সঠিক ফর‌ম্যাটে (গঠন) দিচ্ছেন কিনা, কিংবা কোন অত্যাবশ্যকীয় (required) তথ্য না দিয়েই ফরম সাবমিট করছেন কিনা, কিংবা কোন ক্ষতিকর (malicious) কোড (যেমন- জাভাস্ক্রিপ্ট) ইনপুট ফিল্ডে দিচ্ছেন কিনা ইত্যাদি যাচাই-বাচাই করাকে বলা হয় ফরম ভ্যালিডেশন ।

আরো সহজভাবে বলা যায়, নামের ঘরে নাম লিখতে সচরাচর যেসব অক্ষর/চিহ্ন প্রয়োজন হয় সেটা আমরা জানি । এখন যে কেউ  নামের ঘরে নাম না দিয়ে ইমেইল/ওয়েব ঠিকানা বা সাইটের ক্ষতি করার জন্য কোন ক্ষতিকর কোড দিতে পারেন । একই ভাবে ইমেইলের বা ওয়েব ঠিকানার নিজ নিজ গঠন রয়েছে । এসব ঘরেও যে-কেউ ভুল ইনপুট বা ক্ষতিকর কোড দিতে পারেন । ইউজার যাতে এ ধরনের কাজ না করতে পারেন তথা তাঁর সাবমিটকৃত ফরমের তথ্যগুলো যাতে বৈধ (valid) হয় তা যাচাই করার প্রক্রিয়াকে বলা হয় Web Form Validation ।

Web Form Validation এ চারটা বিষয়ে চোখ-কান-নাক-গলা খোলা রাখবেন
==============================================================
১. ইউজার কোন অত্যাবশ্যকীয় (required) তথ্য না দিয়েই ফরম সাবমিট করছেন কিনা ।
২. ইউজার কোন ক্ষতিকর কোড ইনপুট ফিল্ডে দিচ্ছেন কিনা ।
৩. ভুল ফরম্যাটে ইনপুট দিচ্ছেন কিনা ।
৪. ইউজারের ভুলগুলো তুলে ধরা এবং যথাযথ নির্দেশনা দেয়া মেসেজের মাধ্যমে ।

হায় ! হায় ! Web Form Validation কেমনে করে
======================================
সাধারণত: দুই ভাবে ফরম ভ্যালিডেশন করা হয় । যথা-
1.   Front-End Validation / ‍Client-Side Validation
2.   Back-End Validation / Server-Side Validation


Front-End Validation / Client-side validation
====================================
কোন Web Form  কে ক্লায়েন্ট সাইডে রেখে অর্থাৎ ব্রাউজারে রেখে validation করার প্রক্রিয়াকে বলা হয় fron-end validation ।  এ প্রক্রিয়ায় পেইজটিকে বার বার লোড হতে হয় না । অর্থাৎ সার্ভারের সাথে যোগাযোগ না করেই ব্রাউজারে থেকে ফর্মের ভ্যালিডেইশন চেক করা হয় । ইউজার যখন কোন ইনপুট দিবেন বা ইনপুট না দিয়ে চলে যাবেন বা ভুল ইনপুট দিবেন তখন সাথে সাথেই সেটা যাচাই হয়ে যাবে এবং যথাযথ নির্দেশনা দিয়ে মেসেজ দেয়া হবে । এবং কাজটি হবে তাৎক্ষণিক কোনরূপ পেইজ লোড না হয়েই ।
কেউ কেউ এই প্রক্রিয়াকে ভ্যালিডেশনের আওতায় ফেলেন না । কাজটি করা হয় মূলত একজন ইউজারকে একটি সুন্দর ঝামেলাহীন মসৃণ কুল-কুল-ঠান্ডা-ঠান্ডা অভিজ্ঞতা (user experience) প্রদানের জন্য । বার বার পেইজ লোড (যা খুবই বিরক্তিকর) না করে সাবমিটের আগেই ইউজার নিজের ভুলগুলো বের করতে পারেন এবং তাৎক্ষণিকভাবে যথাযথ তথ্য দিয়ে ফরম সাবমিট করতে পারেন ।

কেডায়, কি দিয়া  front-end validation করে
==================================
Front-end validation এর দায়িত্ব মূলত front-end engineer (developer) এর । আর কাজটি করা হয় client side scripting language যেমন JavaScript (jQuery), VBScript ইত্যাদির মাধ্যমে । ফলে স্বাভাবিকভাবেই JavaScript (jQuery)/ VBScript এর উপর front end engineer (developer) এর থাকতে হয় অগাধ দক্ষতা । যদিও এ কাজটি front end designer/web designer এর আওতায় পড়ে না তথাপি তাঁকেও এ কাজটি  করতে হতে পারে ।
তবে বর্তমানে HTML5 দিয়েও ক্লায়েন্ট সাইডে ফরম ভ্যালিডেশন করা যায় । এটা খুবই সহজ । এজন্য <input> ট্যাগে required, pattern, minlength ইত্যাদি attributes ব্যবহার করা হয় । এতে সমস্যা একটাই, ব্রাউজারের যেসব ভার্সন HTML5 সাপোর্ট করে না সেসব ব্রাউজারে এটা কার্যকর নাও হতে পারে ।

বেশি বালা , বালা না
======================
১. ইউজারের ব্রাউজারে জাভাস্ক্রিপ্ট বন্ধ (disable) করা থাকলে প্রক্রিয়াটি কাজ করবে না ।
২. যে-কেউ খুব সহজেই পুরো ভ্যালিডেশন প্রক্রিয়াকে পাশ কাটিয়ে (bypass) যেকোন ক্ষতিকর (malicious) কোড ইনপুট করতে পারবে ।

Back-end Validation / Server-Side Validation
=======================================
কোন Web Form এ প্রদত্ত তথ্যকে সার্ভারের মাধ্যমে ভ্যালিডেইট করার প্রক্রিয়াকে বলা হয় back-end validation । এক্ষেত্রে ইউজার যখন ইনপুট দিয়ে সাবমিট করবে তখন সেই ইনপুট চলে যাবে সার্ভারে । সেখানে প্রদত্ত ইনপুট ভ্যালিড কিনা চেক করা হবে । ইনপুট ভ্যালিড হলে গ্রহণ করা হবে । আর ইনভ্যালিড হলে গ্রহণ না করে পুনরায় ব্রাউজারে ফেরৎ পাঠানো হবে এবং সঠিক ইনপুট দেয়ার জন্য যথাযথ নির্দেশনা সহ ইউজারকে মেসেজ করা হবে ।

কেডায়, কি দিয়া  back-end validation করে
===================================
Back-end validation করেন back-end developer / web programmar –রা । এ কাজে তাঁরা ব্যবহার করেন server-side scripting language যেমন- PHP, JSP, Perl  ইত্যাদি । ভাষাগুলোর যেকোন একটি ব্যবহার করে ভ্যালিডেশনের জন্য প্রোগ্রাম তৈরি করা হয় । প্রোগ্রামটি সার্ভারে কার্যকর (execute) হয় । সার্ভারে প্রেরিত ইনপুট তথ্যগুলো সে যাচাই-বাচাই করে ফলাফল ব্রাউজারে প্রেরণ করে ।
বর্তমানে সবচেয়ে জনপ্রিয় ভাষা হচ্ছে PHP PHP প্রোগ্রামিং ভাষা ব্যবহার করে সহজেই ইনপুট তথ্যকে ভ্যালিডেইট করা যায় । ভাষাটা শেখাও সহজ । শুধুমাত্র বেসিক ভালোভাবে শিখেও ফরম ভ্যালিডেশনের বিষয়টা রপ্ত করা যাবে, ইনশাআল্লাহ ।

Back-end Validation এর উপরি
==========================
১. পুরো ভ্যালিডেশন প্রক্রিয়াটি যেহেতু সার্ভারে সংঘটিত হয় এবং প্রোগ্রামারের আওতায় থাকে তাই এটি অধিকতর নিরাপদ । মেকানিজমকে পাশ কাটিয়ে ক্ষতিকর কোড ইনপুট করা খুব একটা সহজ নয় ।

২. ব্রাউজারে স্ক্রিপ্টিং বন্ধ থাকুক বা না থাকুক, সাপোর্ট করুক বা না করুন ভ্যালিডেশন কিন্তু ব্যাহত হবে না ।

এখন প্রশ্ন হচ্ছে, এই দুই ভ্যালিডেশনের মধ্যে আপনি কোনটা করবেন বা করা উচিৎ?
উপরের আলোচনা থেকে দেখা যাচ্ছে, fron-end validation করা হয় মূলত: ইউজারকে সুবিধা প্রদান করার জন্য । এবং এটাকে খুব সহজেই বাইপাস করে সাইটের ক্ষতি করা সম্ভব । এটাকে কেউ কেউ ফরম ভ্যালিডেইশন বলেন না ।
অন্যদিকে, back-end validation -ই মূলত: ফরম ভ্যালিডেশন । এটাকে খুব সহজে বাইপাস করা সম্ভব নয় ।
সুতরাং ভিজিটরের সুবিধার্থে একটা ঝাকানাকা UX (User Experience) দেয়ার জন্য জেকুয়েরি ভ্যালিডেইশন আর সাইটের নিরাপত্তার স্বার্থে ২ স্তর বিশিষ্ট মানকি-ঝানকি নিরাপত্তা বেষ্টনির জন্য পিএইচপি ভ্যালিডেইশন করা উচিৎ । মানে দুইটা ভ্যালিডেইশনই করা উচিৎ ।

এবার প্রশ্ন হচ্ছে, কোন পদ্ধতিটি সহজ ?
আমি বলবো দুটোই সহজ ।
Slider এর মত jQuery প্লাগিন (যেমন-jQuery validation plugin)ব্যবহার করে খুব সহজেই front-end validation করা যায় । তবে মাঝে মাঝে কঠিন হয়ে দাঁড়াতেও পারে JavaScript/jQuery এর ব্যাসিক না জানলে । যে কাজটা করতে ২ সেকেন্ড লাগত সেটা করতে ২০ দিনও লেগে যেতে পারে । তাই পরামর্শ রইলো  JavaScript/jQuery এর অন্তত ব্যাসিকটা শিখুন আর ম্যাগি নুডুলস বানান দুই সেকেন্ডে । পরামর্শটা নিজেকেও দিলাম ;) ।
একই কথা প্রযোজ্য back-end validation এর ক্ষেত্রেও । php এর ব্যাসিক জেনে ফরম ভ্যালিডেশন করলে অনেক সহজেই এবং কম সময়ে কাজটা করতে পারবেন । অন্যের তৈরি স্ক্রীপ্ট ব্যবহার করলেও কাজের প্রয়োজনে কাস্টমাইজ করতে পারবেন । ব্যাসিক থেকে এ্যাডভান্স শিখার জন্য পরামর্শ থাকবে Morshedul Arefin ভাইয়ের টিউটগুলো (https://www.youtube.com/user/coderhousebd/videos) চোখ বন্ধ করে অনুশীলন করার । তাছাড়া এই নরাধমেরও এ বিষয়ে দুইটি টিউট আছে ।


ফরম ভ্যালিডেশনের উপর আজকের আলোচনা আশা করছি মাথায় ঢুকে মুন্ডুতে প্রবেশ করেছে, ইনশাআল্লাহ । পরবর্তী মাথা-মুন্ডুর প্রস্তুতির জন্য আজকে এখানেই বিদায় নিচ্ছি । আল্লাহ হাফেজ ।J