চেক না করা এইচটিএমএল চেকবক্সগুলি পোস্ট করুন


303

আমি অনেকগুলি চেকবক্স পেয়েছি যা ডিফল্টরূপে চেক করা হয়। আমার ব্যবহারকারীরা সম্ভবত চেকবক্সগুলির কয়েকটি (যদি থাকে) আনচেক করে বাকীটি চেক করে রেখে দেবে।

সেখানে ফর্ম পোস্ট চেকবাক্সগুলি যে হয় তা নিশ্চিত করতে কোন উপায় আছে কি না চেক করা থাকে, বরং বেশী যে এর চেয়ে করছে চেক করা?

উত্তর:


217

একটি আলাদা আইডি সহ চেকবক্সের জন্য একটি লুকানো ইনপুট যুক্ত করুন:

<input id='testName' type='checkbox' value='Yes' name='testName'>
<input id='testNameHidden' type='hidden' value='No' name='testName'>

ফর্মটি জমা দেওয়ার আগে, চেক শর্তের ভিত্তিতে লুকানো ইনপুটটি অক্ষম করুন:

if(document.getElementById("testName").checked) {
    document.getElementById('testNameHidden').disabled = true;
}

58
আপনি যদি এইরকম একটি মার্কআপ-ভিত্তিক সমাধান নিয়ে চলেছেন তবে অন্য অনেক উত্তর অনুসারে প্রথমে লুকানো ইনপুটটি রাখা ভাল। আপনি যদি পিএইচপি ব্যবহার করে থাকেন তবে জাভাস্ক্রিপ্ট নির্ভরতা দূর করতে পারেন, কারণ কেবল শেষ মানটি ব্যবহৃত হয়।
বেন

12
গ্যামভ, আপনার ভুল হয়েছে, লেবেলগুলি আইডি অ্যাট্রিবিউটের উপর ভিত্তি করে ইনপুটগুলিতে সংযুক্ত থাকে, ইনপুট নামের বৈশিষ্ট্যটি নয়
জাস্টিন এমেরি

14
বিশ্বাস করা শক্ত নয় যে লেখকরা এটি এভাবে ডিজাইন করেছিলেন। যেগুলি চেক করা হয়নি তাদের জন্য কিছু ডিফল্ট মান সহ সমস্ত ইনপুট ক্ষেত্রগুলি কেন প্রেরণ করা হবে না :( কিছু লুকানো ক্ষেত্র "হ্যাক" বাস্তবায়ন করার পরে এটি আরও পরিষ্কার সমাধান হতে পারে must এটি অবশ্যই স্পষ্ট হয়ে গেছে যে এটি প্রয়োজন হবে এবং তাদের দরকার ছিল এটি আগেই দেখুন
শ্রেনেকিজ

34
এটা খুব হ্যাক লাগছে।
এরালপবি

65
আমি কি সেই ব্যক্তিই যারা এই checkboxউপাদানটির অন্তর্নিহিত নকশাটি ভয়াবহ বলে মনে করেন? তারা একটি বাইনারি নিয়ন্ত্রণ, তাদের বাইনারি মান প্রেরণ করা উচিত।
অ্যালেক্সউ

473

আমি এখন পর্যন্ত যে সমাধানটি সবচেয়ে পছন্দ করেছি তা হ'ল চেকবক্সের মতো একই নামের সাথে একটি লুকানো ইনপুট স্থাপন করা যা সম্ভবত চেক করা যায় না। আমি মনে করি এটি কাজ করে যাতে চেকবক্সটি চেক না করা থাকলে, লুকানো ইনপুটটি এখনও সফল এবং সার্ভারে প্রেরণ করা হয়েছে তবে যদি চেকবক্সটি চেক করা থাকে তবে এটি তার আগে লুকানো ইনপুটটিকে ওভাররাইড করে। এইভাবে আপনাকে পোস্ট করা ডেটাতে কোন মানগুলি চেকবাক্স থেকে প্রত্যাশিত হয়েছিল তা ট্র্যাক রাখতে হবে না।

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

3
এখন যেহেতু আমি পুনরায় প্রশ্নটি পড়েছি মনে হচ্ছে এটি আসলে যা আপনি চেয়েছিলেন তা নয়। তবে আমি এই প্রশ্নের উত্তর পেয়েছি যখন আমি এই উত্তরটি বের করার চেষ্টা করছিলাম যাতে এটি অন্য কারও পক্ষে কার্যকর হতে পারে।
স্যাম

2
.NET ভিন্ন, পরিবর্তে দেখতে stackoverflow.com/questions/7600817/...
KCD

121
এটি লক্ষ করা উচিত যে আপনি বাক্সটি চেক করলে ব্রাউজারটি লুকানো এবং চেকবক্স উভয় মান প্রেরণ করবে। এই সমাধানটি সার্ভারের পোস্ট ভেরিয়েবলের এই 2 টি মান সহ পরিচালনার উপর নির্ভর করে। যদি এটি কেবল সর্বশেষ মানটি গ্রহণ করে (যেমন পিএইচপি), আপনার কোড প্রত্যাশার মতো কাজ করবে। যাইহোক, কিছু সার্ভারগুলি এটিকে অন্যভাবে পরিচালনা করে, কিছু প্রথম মানটি বেছে নেয়, অন্যরা উভয় মানকে একটি তালিকা / অ্যারেতে রাখে।
মাইকেল একোকা

1
এই উত্তরটি এই ধারনাটির ভিত্তিতে তৈরি করা হয়েছে যে আপনি দুটি সমান নামযুক্ত ইনপুটগুলির মধ্যে একটিতে কেবল রিলে যেতে পারেন সার্ভারে প্রেরণ করা হবে - আমি বুঝতে পারি না কেন এটি এত বেশি ভোট পেয়েছে?
মোলসকিনার

7
@ সাম জানেন না আপনি কোথা থেকে এই ধারণাটি পেয়েছেন? যখন দুটি বা ততোধিক নিয়ন্ত্রণ একইরূপে নামকরণ করা হয় তখন উভয়কে সাবমিট করার সময় সার্ভারে প্রেরণ করা হবে (চেকবক্সগুলির জন্য তবে শুধুমাত্র পরীক্ষা করা থাকলে) - সার্ভারে কীভাবে পরিচালনা করা হয় তা সার্ভারের পাশের প্রয়োগের উপর নির্ভর করে। আপনি যদি আমাকে বিশ্বাস না করেন তবে আপনি ফিজলারের মতো কোনও সরঞ্জাম ব্যবহার করে ট্র্যাফিক পর্যবেক্ষণ করে নিজের জন্য দেখতে পারেন।
মুলেস্কিনার

75

আমি ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে এটি সমাধান করেছি:

<input type="hidden" name="checkboxName" value="0"><input type="checkbox" onclick="this.previousSibling.value=1-this.previousSibling.value">

এই দুটি ইনপুট উপাদানগুলির মধ্যে কোনও ফাঁকা স্থান বা লাইন ব্রেক না করার জন্য সাবধান!

তুমি ব্যবহার করতে পার this.previousSibling.previousSibling "উপরের" উপাদানগুলি পেতে ।

পিএইচপি দিয়ে আপনি 0 (সেট না) বা 1 (সেট) এর জন্য নামযুক্ত লুকানো ক্ষেত্রটি পরীক্ষা করতে পারেন।


কেন আপনি দুটি উপাদানের মধ্যে স্পেস বা রেখা বিরতি রাখতে পারবেন না?
মাইকেল পটার

@ মিশেলপোটার: এই.প্রিপারসিব্লিং হোয়াইটস্পেস হিসাবে ভাইবাল হিসাবে পাবেন, তাই এটি কাজ করে না।
মার্সেল এনিক্স

4
ওহ এই পারফেক্ট! এটি সেখানে সদৃশ নামযুক্ত ক্ষেত্রগুলি সহ একাধিক ফিল্ডসেট পোস্ট করার সমস্যাটি সমাধান করে other মার্সেলের পদ্ধতিটি ব্যবহার করে আপনার পোস্ট করা ক্ষেত্রে সমান দৈর্ঘ্যের অ্যারে থাকবে। সুতরাং এই দৃশ্য: <fieldset name='fs1'> <input type="text" name="somefield[]"> <input type="checkbox" name="live[]"> </fieldset> <fieldset name='fs2'> <input type="text" name="somefield[]"> <input type="checkbox" name="live[]"> </fieldset>* ধরুন সেখানে নতুন লাইন ছিল। তারা মিনি-মার্কআপ কোড ব্লকে কাজ করছে বলে মনে হচ্ছে না
ব্রায়ান লেইম্যান

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি অ্যারে নিয়ে কাজ করে (প্রাক্তন / নাম = "স্যুপ []")
jdavid05

2
আপনি previousElementSiblingপরিবর্তে ব্যবহার করতে পারেন previousSibling। এটি প্রায় সর্বত্র সমর্থিত এবং এটি পাঠ্য নোড উপেক্ষা করে।
মারসফট

23

আমার ব্যক্তিগত প্রিয়টি হ'ল একই নামের সাথে একটি লুকানো ক্ষেত্র যুক্ত করা যা চেক-বাক্সটি চেক করা না থাকলে ব্যবহার করা হবে। তবে সমাধানটি যতটা সহজ মনে হচ্ছে তত সহজ নয়।

আপনি যদি এই কোডটি যুক্ত করেন:

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

আপনি এখানে যা করেন তা ব্রাউজারটি সত্যই যত্ন করে না। ব্রাউজার সার্ভারে উভয় পরামিতি প্রেরণ করবে, এবং সার্ভারটি তাদের সাথে কী করবে তা সিদ্ধান্ত নিতে হবে।

উদাহরণস্বরূপ পিএইচপি ব্যবহার করার মতো হিসাবে সর্বশেষ মানটি নেয় (দেখুন: নকল এইচটিটিপি জিইটি কোয়েরি কীগুলির অনুমোদিত অবস্থান )

তবে অন্যান্য সিস্টেমগুলির সাথে আমি কাজ করেছি (জাভা ভিত্তিতে) এটি প্রায় কাছাকাছি করে - তারা আপনাকে কেবল প্রথম মান দেয়। .NET পরিবর্তে উভয় উপাদানগুলির সাথে আপনাকে একটি অ্যারে দেবে

আমি এটি node.js, পাইথন এবং পার্লের সাথে পরীক্ষা করার চেষ্টা করব।


2
রুবি এবং নোড.জে উভয়ই কোনও নকল ফর্ম ক্ষেত্রের শেষ মান গ্রহণ করবে। রুবে অন রেলস এর সহায়ক পদ্ধতিগুলি এই কারণে এই ফ্যাশনে চেকবক্সগুলি তৈরি করে।
nzifnab

7
কেবল এটিকে গোল করার জন্য - এটি এইচটিটিপি প্যারামিটার দূষণ নামক আক্রমণটির উপর ভিত্তি করে এবং ওডাব্লুএএসপি দ্বারা বিশ্লেষণ করা হয়েছে: owasp.org/images/b/ba/AppsecEU09_CrettoniDiPaola_v0.8.pdf (পৃষ্ঠা 9) যেখানে আপনি 20 এর একটি তালিকা পেতে পারেন সিস্টেম সিস্টেম এবং দেখুন যে তারা কীভাবে পরিচালনা করে।
সাইমনসিমসিটি

1
জাভা সার্লেটস আপনাকে যতক্ষণ কল করবেrequest.getParameterValues
মউহিজ

20

এর চারপাশে একটি সাধারণ কৌশল হ'ল প্রতিটি চেকবক্সের সাথে একটি গোপন ভেরিয়েবল বহন।

<input type="checkbox" name="mycheckbox" />
<input type="hidden" name="mycheckbox.hidden"/>

সার্ভারের সাইডে, আমরা প্রথমে লুকানো ভেরিয়েবলের তালিকাটি সনাক্ত করি এবং প্রতিটি গোপন ভেরিয়েবলের জন্য, আমরা চেষ্টা করে দেখি যে সংশ্লিষ্ট চেকবক্স এন্ট্রি ফর্ম ডেটাতে জমা দেওয়া হয়েছে কি না।

সার্ভার সাইড অ্যালগরিদম সম্ভবত দেখতে হবে:

for input in form data such that input.name endswith .hidden
  checkboxName = input.name.rstrip('.hidden')
  if chceckbName is not in form, user has unchecked this checkbox

উপরোক্ত প্রশ্নের ঠিক উত্তর দেয় না, তবে অনুরূপ কার্যকারিতা অর্জনের একটি বিকল্প উপায় সরবরাহ করে।


20

সমস্ত চেকবক্সের জন্য আপনার কোনও গোপন ক্ষেত্র তৈরি করার দরকার নেই কেবল আমার কোডটি অনুলিপি করুন। এটি চেকবক্সের মান পরিবর্তন করে যদি না valueবরাদ্দ করা হবে 0এবং যদি চেকবক্সটি চেক valueকরা থাকে তবে তার জন্য নির্ধারণ করুন1

$("form").submit(function () {

    var this_master = $(this);

    this_master.find('input[type="checkbox"]').each( function () {
        var checkbox_this = $(this);


        if( checkbox_this.is(":checked") == true ) {
            checkbox_this.attr('value','1');
        } else {
            checkbox_this.prop('checked',true);
            //DONT' ITS JUST CHECK THE CHECKBOX TO SUBMIT FORM DATA    
            checkbox_this.attr('value','0');
        }
    })
})

1
এই সমাধানটি লুকানো ক্ষেত্রগুলি সহ ডোমকে দূষিত করার চেয়ে সূক্ষ্ম এবং আরও মার্জিত কাজ করে।
প্রসাদ পারঞ্জপে

9
ফর্মটি জমা দেওয়ার সময় বাক্সটি অস্থায়ীভাবে চেক হয়ে যায়। এটি ব্যবহারকারীর কাছে বিভ্রান্তিকর (সর্বোত্তম)।
মার্ক ফ্রেজার

12
$('input[type=checkbox]').on("change",function(){
    var target = $(this).parent().find('input[type=hidden]').val();
    if(target == 0)
    {
        target = 1;
    }
    else
    {
        target = 0;
    }
    $(this).parent().find('input[type=hidden]').val(target);
});

<p>
    <input type="checkbox" />
    <input type="hidden" name="test_checkbox[]" value="0" />
</p>
<p>
    <input type="checkbox" />
    <input type="hidden" name="test_checkbox[]" value="0" />
</p>
<p>
    <input type="checkbox" />
    <input type="hidden" name="test_checkbox[]" value="0" />
</p>

যদি আপনি চেকবক্সের নামটি ছেড়ে দেন তবে এটি পাস হয় না। কেবলমাত্র টেস্ট_চেকবক্স অ্যারে।


1
খুব দুর্দান্ত সমাধান, তবে আমার ক্ষেত্রে লাইভ () কাজ করে না, তাই আমি () পদ্ধতিতে ব্যবহার করেছি: '(' ইনপুট [টাইপ = চেকবক্স]])। ("পরিবর্তন", ফাংশন () {...}) ;
ম্যাসা

4
লাইভ অপ্রচলিত। স্ট্যাকওভারফ্লোতে আর উত্তরে এটি ব্যবহার করবেন না। Amem।
ইসমাইল

এই উত্তরটি সত্যিই সেরা .. এটি প্রত্যাশার মতো কাজ করছে। এমনকি গ্রুপ চেকবক্সের জন্যও।
আলেমোহ রাফিয়াল বাজা

11

আপনি ফর্মের জমা ইভেন্টে কিছু জাভাস্ক্রিপ্ট করতে পারেন। ব্রাউজারগুলি নিজেরাই এটি করার কোনও উপায় নেই তবেই আপনি এটি করতে পারেন। এর অর্থ জাভাস্ক্রিপ্ট ছাড়াই আপনার ফর্মটি ব্যবহারকারীদের জন্য ভেঙে যাবে। সার্ভারে চেকবক্সগুলি রয়েছে তা জানা ভাল, সুতরাং আপনি অনুমান করতে পারেন যে পোস্ট ফর্মের মানগুলি ( $_POSTপিএইচপি-তে) অনুপস্থিত রয়েছে তাদের চেক করা হয়নি ।


2
পিএইচপি ৪.১ এর পর থেকে আপনি $ $QQUEST php.net/manual/en/reided.variables.request.php
কার্ল অ্যাডলার

$_REQUESTআপনার স্ক্রিপ্ট উভয় পদ্ধতি সমর্থন করে তবে এটি কিছু কোড পুনরায় ব্যবহারের অনুমতি দেয় কারণ এটি একটি ভাল অনুশীলন।
nullability

9

আমি আসলে নিম্নলিখিতটি করতাম do

চেকবক্স ইনপুট সহ একই নামের সাথে আমার লুকানো ইনপুট ক্ষেত্রটি রাখুন

<input type="hidden" name="checkbox_name[]" value="0" />
<input type="checkbox" name="checkbox_name[]" value="1" />

এবং তারপরে আমি যখন পোস্ট করি তখন সর্বপ্রথম $ _POST অ্যারেতে নেওয়া সদৃশ মানগুলি সরান, যা প্রতিটি অনন্য মানকে প্রদর্শন করে।

  $posted = array_unique($_POST['checkbox_name']);
  foreach($posted as $value){
    print $value;
  }

অ্যারে থেকে সদৃশ মানগুলি মুছে ফেলার জন্য আমি এটি পেয়েছি


নাম ক্ষেত্রের মান সম্পর্কে [] এর উদ্দেশ্য কী?
মাইকেল পটার


@ টুইস্টার 1002, আমি মনে করি আপনি নামের বৈশিষ্ট্যের উদ্দেশ্য বর্ণনা করেছেন, নামটিতে [] যুক্ত করার উদ্দেশ্য নয়। আমি একটি ওয়েব অনুসন্ধান করেছি এবং দেখে মনে হচ্ছে কিছু লোক একসাথে গ্রুপের ক্ষেত্রগুলিতে গ্রুপ নাম [এলিমেন্টনাম] দিয়ে এই কাজটি করে, তবে আমি খালি [] এর কোনও ব্যাখ্যা পাইনি।
মাইকেল পটার

1
@ মিশেলপোটার দুঃখিত, আমি ভেবেছিলাম যে আমি এই বিবৃতিটি শেষ করেছি। তবে দৃশ্যত তা নয়। আমাকে আবার করতে দিন। যখন এটি পিএইচপিতে প্রেরণ করা হবে পিএইচপি প্রসেসর এটি অ্যারে হিসাবে পড়বে। সুতরাং প্রতিটি নামের সাথে checkbox_name[]প্রতিটি মান একটি অ্যারেতে প্রবেশ করবে, যা আপনি পরে টানতে পারবেন। প্রাক্তন: $_POST['checkbox_name'][0]এবং কতগুলি ক্ষেত্রের একই নাম ছিল তার বর্ধনের সাথে। আরেকটি উদাহরণ হ'ল যদি আপনার তিনটি ক্ষেত্রের নাম থাকে তবে আপনি পছন্দটির field_name[]দ্বিতীয় মান পেতে field_nameপারেন $_POST['field_name'][1]। যদি আপনার একই নামের বেশ কয়েকটি ক্ষেত্র থাকে তবে এর উদ্দেশ্যটি আশ্চর্যজনক হতে পারে।
টুইস্টার 1002

8

"আমি সার্ভারের পদ্ধতির সাথে চলেছি fine ঠিকঠাক কাজ করার জন্য দেখে মনে হচ্ছে - ধন্যবাদ reachপ্রেম 4thelailers ডিসেম্বর 1 '09 এ 15:19 এ" আমি মালিকের কাছ থেকে এটি সুপারিশ করতে চাই। উদ্ধৃত হিসাবে: জাভাস্ক্রিপ্ট সমাধান সার্ভার হ্যান্ডলার (আমি এটি পরীক্ষা করিনি) তার উপর নির্ভর করে

যেমন

if(!isset($_POST["checkbox"]) or empty($_POST["checkbox"])) $_POST["checkbox"]="something";

8

আমি জানি এই প্রশ্নটি 3 বছরের পুরানো তবে আমি একটি সমাধান পেয়েছি যা আমি মনে করি যে এটি বেশ ভালভাবে কাজ করে।

A _POST ভেরিয়েবল নির্ধারিত হয়েছে কিনা তা আপনি একটি চেক করতে পারেন এবং এটি একটি ভেরিয়েবলে সংরক্ষণ করতে পারেন।

$value = isset($_POST['checkboxname'] ? 'YES' : 'NO';

isset () ফাংশনটি $ _POST ভেরিয়েবল নির্ধারিত হয়েছে কিনা তা পরীক্ষা করে। যুক্তি দ্বারা যদি এটি নির্ধারিত না হয় তবে চেকবক্সটি চেক করা হয় না।


এটি অনেক বেশি ভাল, যেহেতু সর্বাধিক জনপ্রিয় প্রতিক্রিয়া হ'ল পর্দার পাঠকদের জন্য একটি ভয়ানক সমাধান।
কেভিন ওয়াটারসন

7

এখানে বেশিরভাগ উত্তরের জন্য জাভাস্ক্রিপ্ট বা সদৃশ ইনপুট নিয়ন্ত্রণের ব্যবহার প্রয়োজন require কখনও কখনও এটি পুরোপুরি সার্ভার-সাইডে পরিচালনা করা দরকার।

আমি বিশ্বাস করি যে এই সাধারণ সমস্যা সমাধানের জন্য (উদ্দেশ্যযুক্ত) কী হ'ল ফর্মটির জমা দেওয়ার ইনপুট নিয়ন্ত্রণ।

চেকবাক্সগুলির জন্য সফলভাবে চেক করা মানগুলি ব্যাখ্যা ও হ্যান্ডেল করার জন্য আপনাকে নিম্নলিখিতগুলির জ্ঞান থাকা দরকার:

  1. চেকবাক্সগুলির নাম
  2. ফর্ম জমা দেওয়ার ইনপুট উপাদানটির নাম

ফর্মটি জমা দেওয়া হয়েছে কিনা তা পরীক্ষা করে (কোনও মূল্য জমা দেওয়ার ইনপুট উপাদানকে দেওয়া হয়), কোনও চেক না হওয়া চেকবক্স মান ধরে নেওয়া যেতে পারে

উদাহরণ স্বরূপ:

<form name="form" method="post">
  <input name="value1" type="checkbox" value="1">Checkbox One<br/>
  <input name="value2" type="checkbox" value="1" checked="checked">Checkbox Two<br/>
  <input name="value3" type="checkbox" value="1">Checkbox Three<br/>
  <input name="submit" type="submit" value="Submit">
</form>

পিএইচপি ব্যবহার করার সময় কোন চেকবক্সগুলি টিক দেওয়া হয়েছিল তা সনাক্ত করা মোটামুটি তুচ্ছ।

<?php

$checkboxNames = array('value1', 'value2', 'value3');

// Persisted (previous) checkbox state may be loaded 
// from storage, such as the user's session or a database.
$checkboxesThatAreChecked = array(); 

// Only process if the form was actually submitted.
// This provides an opportunity to update the user's 
// session data, or to persist the new state of the data.

if (!empty($_POST['submit'])) {
    foreach ($checkboxNames as $checkboxName) {
        if (!empty($_POST[$checkboxName])) {
            $checkboxesThatAreChecked[] = $checkboxName;
        }
    }
    // The new state of the checkboxes can be persisted 
    // in session or database by inspecting the values 
    // in $checkboxesThatAreChecked.
    print_r($checkboxesThatAreChecked);
}

?>

প্রাথমিক পৃষ্ঠাগুলি প্রতিটি পৃষ্ঠার লোডে লোড করা যেতে পারে, তবে ফর্মটি জমা দেওয়া হলে কেবল সংশোধন করা উচিত। যেহেতু চেকবাক্সগুলির নাম আগেই জানা ছিল, সেগুলি পৃথকভাবে ট্র্যাভারসড এবং পরীক্ষা করা যায়, যাতে তাদের পৃথক মানগুলির অনুপস্থিতি ইঙ্গিত দেয় যে তারা চেক করা হয়নি।


6

আমি প্রথম স্যাম এর সংস্করণ চেষ্টা করেছি। ভাল ধারণা, তবে এটি একই নামের সাথে ফর্মটিতে একাধিক উপাদান থাকতে পারে। আপনি যদি কোনও জাভাস্ক্রিপ্ট ব্যবহার করেন যা নামের উপর ভিত্তি করে উপাদানগুলি সন্ধান করে তবে এটি এখন উপাদানগুলির একটি অ্যারে ফিরিয়ে দেবে।

আমি পিএইচপি-তে শৈলেশের ধারণাটি কাজ করেছি, এটি আমার পক্ষে কাজ করে। আমার কোডটি এখানে:

/ * মুছে ফেলুন '। লুকানো' ক্ষেত্র যদি আসল উপস্থিত থাকে তবে '.হিডড' মানটি ব্যবহার করুন যদি না হয়। * /
foreach ($ _POST ['frmmain'] হিসাবে $ ক্ষেত্রের নাম => $ মান)
{
    // কেবল '.গোপনে' দিয়ে শেষ হওয়া উপাদানগুলি দেখুন
    যদি (! সাবস্ট্রটার ($ ক্ষেত্রের নাম, -স্ট্রেলেন ('। লুকানো'))) {
        বিরতি;
    }

    // 'লুকানো' ছাড়া নাম পান
    $ আসল_নাম = সাবস্ট্রাস্ট ($ কী, স্ট্রেলেন ($ ক্ষেত্রের নাম) - স্ট্রেন ('। লুকানো'));

    // একটি আসল অস্তিত্ব না থাকলে '। লুকানো' মান সহ একটি 'জাল' আসল ক্ষেত্র তৈরি করুন
    যদি (! অ্যারে_কি_একটি উপস্থিত থাকে ($ আসল_নাম, $ পসT_ কপি)) {
        ; _POST [$ আসল_নাম] = $ মান;
    }

    // 'লুকানো' উপাদানটি মুছুন
    সেট না ($: _ পোস্ট [$ FIELD_NAME]);
}

6

আমি জাভাস্ক্রিপ্ট ব্যবহার করে আমার কাছে একটি অতিরিক্ত ইনপুট ক্ষেত্র পোস্ট করার সমাধানটিও আমার কাছে একটু হকি বলে মনে হচ্ছে।

আপনার ব্যাকএন্ডের জন্য আপনি কী ব্যবহার করছেন তার উপর নির্ভর করে কোন ইনপুট প্রথমে যায় তার উপর নির্ভর করবে।

সার্ভার ব্যাকএন্ডের জন্য যেখানে প্রথম ঘটনাটি ব্যবহৃত হয় (জেএসপি) আপনার নিম্নলিখিতটি করা উচিত।

  <input type="checkbox" value="1" name="checkbox_1"/>
  <input type="hidden" value="0" name="checkbox_1"/>


একটি সার্ভার ব্যাকএন্ডের জন্য যেখানে শেষ ঘটনাটি ব্যবহৃত হয় (পিএইচপি, রেলস) আপনার নিম্নলিখিতটি করা উচিত।

  <input type="hidden" value="0" name="checkbox_1"/>
  <input type="checkbox" value="1" name="checkbox_1"/>


একটি সার্ভার ব্যাকএন্ডের জন্য যেখানে সমস্ত উপস্থিতি একটি তালিকা ডাটা টাইপ ( [], array) এ সঞ্চিত থাকে । (পাইথন / জোপ)

আপনি যে কোনও ক্ষেত্রে যা পছন্দ চান তা পোস্ট করতে পারেন, আপনাকে কেবল checkboxধরণের বৈশিষ্ট্যের সাথে ইনপুট থেকে মান পাওয়ার চেষ্টা করতে হবে । সুতরাং তালিকার প্রথম সূচক যদি চেকবক্সটি লুকানো উপাদানের আগে ছিল এবং শেষ সূচকটি যদি চেকবক্সটি লুকানো উপাদানগুলির পরে ছিল।


একটি সার্ভার ব্যাকএন্ডের জন্য যেখানে সমস্ত উপস্থিতি কমা দিয়ে যুক্ত হয় (ASP.NET / IIS) একটি তালিকা উপাত্ত তৈরির জন্য আপনাকে একটি কমা ব্যবহার করে স্ট্রিমটি (বিভক্ত / বিস্ফোরিত) করতে হবে। ( [])

এখন আপনি তালিকার প্রথম সূচকটি ধরার চেষ্টা করতে পারেন যদি চেকবক্সটি লুকানো উপাদানের আগে ছিল এবং চেকবক্সটি লুকানো উপাদানের পরে থাকলে শেষ সূচকটি ধরতে পারে।

ব্যাকএন্ড প্যারামিটার হ্যান্ডলিং

চিত্র উত্স


6

আমি jQuery এর এই ব্লকটি ব্যবহার করি, যা প্রতিটি চেকড চেকবক্সে জমা দেওয়ার সময় একটি গোপন ইনপুট যুক্ত করে। এটি আপনাকে গ্যারান্টি দেবে যে প্রতিবার আপনার চেকবাক্সের জন্য আপনার মার্কআপের বিশৃঙ্খলা না করে এবং পরে যুক্ত করা একটি চেকবক্সে ভুলে যাওয়ার ঝুঁকি না নিয়ে সর্বদা একটি মূল্য জমা দেওয়া হয়। এটি আপনি যে ব্যাকএন্ড স্ট্যাক (পিএইচপি, রুবি, ইত্যাদি) ব্যবহার করছেন তাও অজ্ঞানীয়।

// Add an event listener on #form's submit action...
$("#form").submit(
    function() {

        // For each unchecked checkbox on the form...
        $(this).find($("input:checkbox:not(:checked)")).each(

            // Create a hidden field with the same name as the checkbox and a value of 0
            // You could just as easily use "off", "false", or whatever you want to get
            // when the checkbox is empty.
            function(index) {
                var input = $('<input />');
                input.attr('type', 'hidden');
                input.attr('name', $(this).attr("name")); // Same name as the checkbox
                input.attr('value', "0"); // or 'off', 'false', 'no', whatever

                // append it to the form the checkbox is in just as it's being submitted
                var form = $(this)[0].form;
                $(form).append(input);

            }   // end function inside each()
        );      // end each() argument list

        return true;    // Don't abort the form submit

    }   // end function inside submit()
);      // end submit() argument list

5

আপনি ফর্মটি বাধা দিতে পারেন event ইভেন্ট জমা দিন এবং জমা দেওয়ার আগে বিপরীত চেক

$('form').submit(function(event){
    $('input[type=checkbox]').prop('checked', function(index, value){
        return !value;
    });
});

4

আমি দেখতে পাচ্ছি যে এই প্রশ্নটি পুরানো এবং এর অনেকগুলি উত্তর রয়েছে তবে আমি আমার পেনিসটি যাই হোক না কেন দেব। আমার ভোট ফর্মের 'জমা দিন' ইভেন্টের জাভাস্ক্রিপ্ট সমাধানের জন্য, যেমন কেউ কেউ উল্লেখ করেছেন। ইনপুটগুলি দ্বিগুণ না করা (বিশেষত আপনার যদি এইচটিএমএল মিশ্রিত পিএইচপি কোডের সাথে দীর্ঘ নাম এবং বৈশিষ্ট্যগুলি থাকে), কোনও সার্ভার পার্শ্ব বিরক্ত করে না (যার জন্য সমস্ত ক্ষেত্রের নামগুলি জানতে এবং একে একে একে পরীক্ষা করার প্রয়োজন হবে), কেবল সমস্ত চেক না করা আইটেম আনুন , তাদের একটি 0 মান নির্ধারণ করুন (বা আপনার যা কিছু 'চেক না হওয়া' স্থিতি নির্দেশ করতে হবে) এবং তারপরে তাদের বৈশিষ্ট্যটি 'পরীক্ষিত' সত্যে পরিবর্তন করুন

    $('form').submit(function(e){
    var b = $("input:checkbox:not(:checked)");
    $(b).each(function () {
        $(this).val(0); //Set whatever value you need for 'not checked'
        $(this).attr("checked", true);
    });
    return true;
});

এইভাবে আপনার মতো একটি $ _POST অ্যারে থাকবে:

Array
(
            [field1] => 1
            [field2] => 0
)

আমার পক্ষে কাজ করছে না। এটি করার চেষ্টা করছে কিন্তু এখনও সমস্ত চেকবাক্স পোস্ট করছে না। [কোড] $ ("# ফিল্টার ইনপুট")। পরিবর্তন (ফাংশন (ই) {কনসোল.লগ ('সাবলিমেট'); ভার বি = $ ("ইনপুট: চেকবক্স: নয় (পরীক্ষিত)"); $ (খ) .each (ফাংশন () {$ (এটি) .ভাল (2); $ (এটি) .আত্র ("পরীক্ষিত", সত্য);}); $ ("# ফিল্টার")। জমা দিন ();}); [/ কোড]
লিও

আমার জন্য কৌশলটি। একমাত্র ত্রুটি - ফর্ম জমা প্রতিটি চেকবক্স চেক হয়ে যায়। এটি কোনও ব্যবহারকারীর কাছে বিভ্রান্তিকর হতে পারে তবে ফর্ম জমা দেওয়ার পরে পৃষ্ঠাটি পুনরায় লোড হচ্ছে বলে আমি মনে করি এটি একটি ছোটখাটো সমস্যা।
ওকসানা রোমানিভ

ওকসানা যেমন বলেছে, এটি প্রয়োজনীয় সমস্ত চেকবক্সগুলি সহ সমস্ত চেকবক্সগুলিকে পরীক্ষা করে, ব্যবহারকারী কোনও শর্তে রাজি না হয়ে ফর্মটি জমা দেওয়ার অনুমতি দেওয়ার জন্য ব্যবহারকারীরা তাদের নির্বাচন করেন নি।
bskool

4
$('form').submit(function () {
    $(this).find('input[type="checkbox"]').each( function () {
        var checkbox = $(this);
        if( checkbox.is(':checked')) {
            checkbox.attr('value','1');
        } else {
            checkbox.after().append(checkbox.clone().attr({type:'hidden', value:0}));
            checkbox.prop('disabled', true);
        }
    })
});

1
এটি আমার পক্ষে কাজ করেছে। সাবমিট ব্যবহারের পরিবর্তে আপনি। ক্লিক ক্লিক করুন। তারপরে বিটটি সরিয়ে ফেলুন যা চেকবক্সগুলি অক্ষম করে। এর পরে এটি পুরোপুরি কাজ করে।
cgrouge

1
সেরা উত্তরের প্রত্যেকের জন্য আর একটি লুকানো ইনপুট যুক্ত করার দরকার নেই
স্কাই

3

আমি যা করেছি তা কিছুটা আলাদা ছিল। প্রথমে আমি সমস্ত চেক না করা চেকবাক্সগুলির মানগুলি পরিবর্তন করেছি। "0" এ, তারপরে সেগুলি সমস্ত নির্বাচন করুন, সুতরাং মানটি জমা দেওয়া হবে।

function checkboxvalues(){
  $("#checkbox-container input:checkbox").each(function({ 
    if($(this).prop("checked")!=true){
      $(this).val("0");
      $(this).prop("checked", true);
    }
  });
}


উত্তরটি ভাল, তবে আমি জানতে চাই এটি কি রমিজ সুম্রোর উত্তর থেকে আলাদা?
ইমরান কামের

অনুরূপ শেষ ফলাফল, কেবলমাত্র এইভাবে আপনি পরীক্ষিত চেকবক্সগুলির মান পরিবর্তন করবেন না।
সেবরেরিয়া

2

আমি কোলেটটি পছন্দ করব $ _POST

if (!$_POST['checkboxname']) !$_POST['checkboxname'] = 0;

এটি মনে করে, যদি POST- এর 'চেকবক্সনাম' মূল্য না থাকে, তবে এটি মানবিহীন ছিল as

আপনি আপনার সেকেকবক্স মানগুলির একটি অ্যারে তৈরি করতে পারেন এবং এমন একটি ফাংশন তৈরি করতে পারেন যা পরীক্ষা করে মানগুলি বিদ্যমান কিনা তা যদি তা না হয় তবে এটি বিবেচনা করে না যে চেক করা আছে এবং আপনি একটি মান স্বাক্ষর করতে পারেন


1

আজাক্স ক্রিয়াগুলির উদাহরণ হ'ল (': চেক করা') .val () এর পরিবর্তে jQuery ব্যবহৃত;

            var params = {
                books: $('input#users').is(':checked'),
                news : $('input#news').is(':checked'),
                magazine : $('input#magazine').is(':checked')
            };

প্যারামগুলি সত্য বা মিথ্যাতে মান পাবে ..


1

চেকবাক্সগুলি সাধারণত বাইনারি ডেটা উপস্থাপন করে যা ডাটাবেসে হ্যাঁ / না, ওয়াই / এন বা 1/0 মান হিসাবে সঞ্চিত থাকে। এইচটিএমএল চেকবাক্সগুলির সার্ভারে মান প্রেরণে খারাপ প্রকৃতি নেই কেবলমাত্র চেকবক্সটি যদি পরীক্ষা করা হয়! এর অর্থ হ'ল ধনাত্মক (চেক করা) বা নেতিবাচক (চেক না করা) মানগুলি সঞ্চয় করতে সক্ষম হওয়ার জন্য অন্য সাইটের সার্ভার স্ক্রিপ্টটি অবশ্যই আগে থেকেই জানতে হবে ওয়েব পৃষ্ঠায় সমস্ত সম্ভাব্য চেকবক্সগুলি কী। প্রকৃতপক্ষে কেবল নেতিবাচক মানগুলিই সমস্যা (যখন ব্যবহারকারী পূর্বে যাচাই করা হয়েছিল (প্রাক) চেক করা মানটি - যখন এই নামটি প্রেরণ করা উচিত তা আগেই জানা না থাকলে সার্ভার কীভাবে এটি জানতে পারে) nothing আপনার যদি এমন একটি সার্ভার সাইড স্ক্রিপ্ট থাকে যা গতিশীলভাবে আপডেটের স্ক্রিপ্ট তৈরি করে তবে একটি সমস্যা আছে কারণ আপনি জানেন না যে চেকডের জন্য ওয়াই মান এবং চেক করা (প্রাপ্ত না হওয়া )গুলির জন্য এন মান সেট করার জন্য সমস্ত চেকবক্সগুলি কী গ্রহণ করা উচিত।

যেহেতু আমি আমার ডাটাবেসে 'Y' এবং 'N' মানগুলি সংরক্ষণ করি এবং পৃষ্ঠায় চেক করা এবং চেক না করা চেকবক্সগুলির মাধ্যমে সেগুলি উপস্থাপন করি, তাই আমি 'Y' এবং 'N' মানগুলির সাথে প্রতিটি মান (চেকবক্স) এর জন্য লুকানো ক্ষেত্র যুক্ত করেছি তবে চাক্ষুষের জন্য কেবল চেকবক্স ব্যবহার করি উপস্থাপনা, এবং নির্বাচন অনুযায়ী মান নির্ধারণ করতে সাধারণ জাভাস্ক্রিপ্ট ফাংশন চেক () ব্যবহার করুন।

<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>

আমার ওয়েব পৃষ্ঠায় প্রতিটি চেকবক্সের জন্য একটি জাভাস্ক্রিপ্ট অনক্লিক শ্রোতা এবং কল ফাংশন চেক () ব্যবহার করুন:

function check(me)
{
  if(me.checked)
  {
    me.previousSibling.previousSibling.value='Y';
  }
  else
  {
    me.previousSibling.previousSibling.value='N';
  }
}

এইভাবে 'ওয়াই' বা 'এন' মানগুলি সর্বদা সার্ভার সাইড স্ক্রিপ্টে প্রেরণ করা হয়, এটি জানে যে কোন ক্ষেত্রগুলি আপডেট করা উচিত এবং সেখানে চেকবক্সের "মান" 'Y' তে রূপান্তরিত করার প্রয়োজন নেই বা 'N' তে চেকবক্স পাওয়া যায় না '।

দ্রষ্টব্য: সাদা স্থান বা নতুন রেখাটিও একটি সহোদর তাই এখানে আমার প্রয়োজন pre এরপরে যদি কোনও স্থান না থাকে তবে কেবলমাত্র .PriPressSibling.value


আপনার আগের মতো অনক্লিক শ্রোতা সুস্পষ্টভাবে যুক্ত করার দরকার নেই, আপনি আপনার পৃষ্ঠার সমস্ত চেকবক্সে মান পরিবর্তন করতে ফাংশন সহ ক্লিক শ্রোতাদের গতিশীলভাবে যুক্ত করতে jQuery লাইব্রেরিটি ব্যবহার করতে পারেন:

$('input[type=checkbox]').click(function()
{
  if(this.checked)
  {
    $(this).prev().val('Y');
  }
  else
  {
    $(this).prev().val('N');
  }
});

1

সমস্ত উত্তর দুর্দান্ত তবে আপনার যদি একই নামে একটি ফর্মে একাধিক চেকবক্স থাকে এবং আপনি প্রতিটি চেকবক্সের স্থিতি পোস্ট করতে চান। তারপরে আমি চেকবক্সের সাথে একটি লুকানো ক্ষেত্র রেখে (যা চাই তা সম্পর্কিত নাম) রেখে এই সমস্যাটি সমাধান করেছি।

<input type="hidden" class="checkbox_handler" name="is_admin[]" value="0" />
<input type="checkbox" name="is_admin_ck[]" value="1" />

তারপরে নীচে jquery কোডের মাধ্যমে চেকবক্সের পরিবর্তনের স্থিতি নিয়ন্ত্রণ করুন:

$(documen).on("change", "input[type='checkbox']", function() {
    var checkbox_val = ( this.checked ) ? 1 : 0;
    $(this).siblings('input.checkbox_handler').val(checkbox_val);
});

এখন যে কোনও চেকবক্সের পরিবর্তনে, এটি সম্পর্কিত গোপন ক্ষেত্রের মান পরিবর্তন করবে। এবং সার্ভারে আপনি চেকবক্সগুলির পরিবর্তে কেবল লুকানো ক্ষেত্রগুলিতে দেখতে পারেন।

আশা করি কারও এই ধরণের সমস্যা করতে সহায়তা করবে। উল্লাস :)


1

চেকবাক্সগুলির সমস্যা হ'ল যদি সেগুলি চেক না করা হয় তবে সেগুলি আপনার ফর্মের সাথে পোস্ট করা হয় না। যদি আপনি একটি চেকবক্স চেক করেন এবং কোনও ফর্ম পোস্ট করেন তবে আপনি চেকবাক্সের মান $ _POST ভেরিয়েবলের মধ্যে পাবেন যা আপনি কোনও ফর্ম প্রক্রিয়া করতে ব্যবহার করতে পারেন, যদি এটিটি চেক না করা হয় তবে কোনও মান $ _POST ভেরিয়েবলের সাথে যুক্ত করা হবে না।

পিএইচপি-তে আপনি সাধারণত আপনার চেকবক্সের উপাদানটি একটি আইসেট () পরীক্ষা করে এই সমস্যাটি ঘটাবেন। আপনি যে উপাদানটি আশা করছেন তা যদি $ _POST ভেরিয়েবলে সেট না করা থাকে তবে আমরা জানি যে চেকবক্সটি চেক করা হয়নি এবং মানটি মিথ্যাও হতে পারে।

if(!isset($_POST['checkbox1']))
{
     $checkboxValue = false;
} else {
     $checkboxValue = $_POST['checkbox1'];
}

তবে যদি আপনি একটি গতিশীল ফর্ম তৈরি করে থাকেন তবে আপনি সর্বদা আপনার চেকবক্সগুলির নাম বৈশিষ্ট্যটি জানতে পারবেন না, যদি আপনি চেকবক্সের নামটি জানেন না তবে আপনি এটিটি প্রেরণ করা হয়েছে কিনা তা পরীক্ষা করতে আইসেট ফাংশনটি ব্যবহার করতে পারবেন না $ _POST ভেরিয়েবল।


1
function SubmitCheckBox(obj) {
     obj.value   = obj.checked ? "on" : "off";
     obj.checked = true;
     return obj.form.submit();
}

<input type=checkbox name="foo" onChange="return SubmitCheckBox(this);">

0

আরও ভাল কাজ আছে। প্রথমে কেবলমাত্র সেই চেকবক্সগুলিতে যাচাই করা আছে তাদের নাম বৈশিষ্ট্য সরবরাহ করুন। তারপরে ক্লিক করে submit, একটি জাভাস্ক্রিপ্টের মাধ্যমে functionআপনি সমস্ত চেক না করা বাক্স পরীক্ষা করে দেখুন। সুতরাং যখন আপনি submitকেবল তারাই পুনরুদ্ধার করবেন form collectionযাদের nameসম্পত্তি আছে have

  //removing name attribute from all checked checkboxes
                  var a = $('input:checkbox:checked');
                   $(a).each(function () {
                       $(this).removeAttr("name");        
                   });

   // checking all unchecked checkboxes
                   var b = $("input:checkbox:not(:checked)");
                   $(b).each(function () {
                       $(this).attr("checked", true);
                   });

সুবিধা: অতিরিক্ত লুকানো বাক্স তৈরি করার প্রয়োজন নেই, এবং সেগুলি চালিত করতে হবে।


0

@ সিপিবার্নজ ঠিকই পেয়েছেন তবে অনেক কোডে, কম কোড ব্যবহার করে এখানে একই ধারণাটি দেওয়া হয়েছে:

জাতীয়:

// jQuery OnLoad
$(function(){
    // Listen to input type checkbox on change event
    $("input[type=checkbox]").change(function(){
        $(this).parent().find('input[type=hidden]').val((this.checked)?1:0);
    });
});

এইচটিএমএল (একটি অ্যারের নাম ব্যবহার করে ক্ষেত্রের নামটি নোট করুন):

<div>
    <input type="checkbox" checked="checked">
    <input type="hidden" name="field_name[34]" value="1"/>
</div>
<div>
    <input type="checkbox">
    <input type="hidden" name="field_name[35]" value="0"/>
</div>
<div>

এবং পিএইচপি জন্য:

<div>
    <input type="checkbox"<?=($boolean)?' checked="checked"':''?>>
    <input type="hidden" name="field_name[<?=$item_id?>]" value="<?=($boolean)?1:0?>"/>
</div>

0

@ বিষ্ণুর উত্তরের jQuery সংস্করণ।

if($('#testName').is(":checked")){
    $('#testNameHidden').prop('disabled', true);
}

আপনি যদি jQuery 1.5 ব্যবহার করছেন বা নীচে দয়া করে .prop () এর পরিবর্তে .attr () ফাংশনটি ব্যবহার করুন


0

এই সমাধানটি @ ডেস্কের দ্বারা অনুপ্রাণিত হয়েছে।

যদি আপনার ইনপুট নামগুলি "ফর্ম শৈলীতে" থাকে, আপনি একটি চেকবক্স চেক করার সাথে সাথে আপনার চেকবক্স মানগুলির সাথে অ্যারে সূচক সংস্থানটি হারাবেন, প্রতিবার একটি চেকবক্স চেক করা হলে এই "বিযুক্তি" এক ইউনিট দ্বারা বাড়িয়ে তোলা হবে। এটি কোনও ক্ষেত্র দ্বারা রচিত কর্মীদের মতো কিছু সন্নিবেশ করার জন্য ফর্মের ক্ষেত্রে এটি হতে পারে:

<input type="text" name="employee[]" />
<input type="hidden" name="isSingle[] value="no" />
<input type="checkbox" name="isSingle[] value="yes" />

আপনি যদি একবারে তিনজন কর্মচারী সন্নিবেশ করান এবং প্রথম এবং দ্বিতীয়জন একক হন, আপনি একটি 5-এলিমেন্ট isSingleঅ্যারে দিয়ে শেষ করবেন , সুতরাং আপনি তিনটি অ্যারের মাধ্যমে একবারে পুনরাবৃত্তি করতে সক্ষম হবেন না, উদাহরণস্বরূপ , একটি ডাটাবেসে কর্মী .োকান।

আপনি কিছু সহজ অ্যারে পোস্টপ্রসেসিং দিয়ে এটি কাটিয়ে উঠতে পারেন। আমি সার্ভারে পিএইচপি ব্যবহার করছি এবং আমি এটি করেছি:

$j = 0;
$areSingles = $_POST['isSingle'];
foreach($areSingles as $isSingle){
  if($isSingle=='yes'){
    unset($areSingles[$j-1]);
  }
  $j++;
}
$areSingles = array_values($areSingles);

0

সুতরাং এই সমাধানটি এই প্রশ্নের জন্য ওভারকিল, তবে আমার যখন একই টেস্টবক্সে বিভিন্ন সারির জন্য বহুবার ঘটেছিল একই চেকবক্সটি তখন আমাকে সাহায্য করেছিল। আমার চেকবাক্সটি উপস্থাপিত সারিতে এবং চেকবক্সের অবস্থা (চেক / চেক করা না থাকা) জানতে হবে।

আমি যা করেছি তা হ'ল আমার চেকবক্স ইনপুটগুলির নাম অ্যাট্রিবিউটটি নেওয়া, তাদের সমস্ত একই শ্রেণি দেওয়া এবং একটি লুকানো ইনপুট তৈরি করা যা ডেটার জেএসএন সমতুল্য রাখে।

এইচটিএমএল

 <table id="permissions-table">
    <tr>
	<td>
	    <input type="checkbox" class="has-permission-cb" value="Jim">
	    <input type="checkbox" class="has-permission-cb" value="Bob">
	    <input type="checkbox" class="has-permission-cb" value="Suzy">
	</td>
    </tr>
 </table>
 <input type="hidden" id="has-permissions-values" name="has-permissions-values" value="">

জাভাস্ক্রিপ্ট ফর্ম জমা চালানোর জন্য

var perms = {};
$(".has-permission-checkbox").each(function(){
  var userName = this.value;
  var val = ($(this).prop("checked")) ? 1 : 0
  perms[userName] = {"hasPermission" : val};
});
$("#has-permissions-values").val(JSON.stringify(perms));

জসন স্ট্রিংটি $ _POST ["-র-অনুমতি-মানগুলি"] হিসাবে ফর্মের সাথে পাস হবে। পিএইচপি-তে, স্ট্রিংটিকে একটি অ্যারেতে ডিকোড করুন এবং আপনার সাথে একটি সহযোগী অ্যারে থাকবে যার প্রতিটি সারি এবং প্রতিটি সংশ্লিষ্ট চেকবক্সের জন্য সত্য / মিথ্যা মান রয়েছে। তারপরে চলতে এবং বর্তমান ডাটাবেসের মানগুলির সাথে তুলনা করা খুব সহজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.