একাধিক চেকবক্স থেকে _P _POST পান


159

এতে একাধিক চেকবক্স সহ আমার 1 টি ফর্ম রয়েছে (কোড সহ প্রতিটি):

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">

$row['Report ID']ডাটাবেসে প্রাথমিক কী কোথায় - প্রতিটি মান আলাদা is

কোন চেকবক্সগুলি চেক করা হয়েছে তা আমি কীভাবে বলতে সক্ষম হব? (সম্ভবত একাধিক)

এটি একটি ইনবক্স সিস্টেমের জন্য এবং আমার নীচে একটি বোতাম রয়েছে যা আমি চাইলে (ক্লিক করার সময়) সমস্ত বার্তাগুলি (এর আইডি: $row['Report ID']:) মুছে ফেলতে চাই যা চেকবক্সের চেক রয়েছে।

উত্তর:


334

ফর্মটিতে নামটি সেট করুন check_list[]এবং আপনি সমস্ত চেকবক্সগুলিকে অ্যারে ( $_POST['check_list'][]) হিসাবে অ্যাক্সেস করতে সক্ষম হবেন ।

অনুরোধ হিসাবে এখানে একটি সামান্য নমুনা দেওয়া হয়েছে:

<form action="test.php" method="post">
    <input type="checkbox" name="check_list[]" value="value 1">
    <input type="checkbox" name="check_list[]" value="value 2">
    <input type="checkbox" name="check_list[]" value="value 3">
    <input type="checkbox" name="check_list[]" value="value 4">
    <input type="checkbox" name="check_list[]" value="value 5">
    <input type="submit" />
</form>
<?php
if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
            echo $check; //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}
?>

4
আপনি কি আমাকে একটি চেক_লিস্ট [] চেকবক্সের প্রতিধ্বনি (আইএনএন) উদাহরণ দিতে পারেন? (এবং এটি কি নির্বাচিত দুজনের জন্য সমান হবে?) ধন্যবাদ
জেমস অ্যান্ড্রু

2
আমার আরও উল্লেখ করতে হবে যে এইচটিএমএলে কোনও মান সেট না করা থাকলে $checkসমান হবে on
শন ওয়ালশ

9
if($_POST)- অকেজো, $_POSTসর্বদা সত্য হবে। !empty($_POST['check_list'])পরিবর্তে আপনার পরীক্ষা করা উচিত ।
মার্টিও ব্রিডিস

3
@ মার্টিņšব্রিডিস যা অ্যারে সূচকের সীমা অস্তিত্ব না থাকলে তা সৃষ্টি করতে পারে। আরও ভাল চেক হবেarray_key_exists('check_list', $_POST) && !empty($_POST['check_list'])
টাইজয়েড

2
@ টাইজয়েড empty()এই ত্রুটি সৃষ্টি করে না। ম্যানুয়াল থেকে:empty() does not generate a warning if the variable does not exist.
মার্তেয় ব্রিডিস

22

নীচের মন্তব্যে @ মার্ক যা বলেছিলেন তা প্রতিফলিত করতে সম্পাদনা করুন

আপনি সমস্ত পোস্ট মান দ্বারা একটি লুপ করতে পারেন।

এইচটিএমএল:

<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />

পিএইচপি:

foreach($_POST['check_list'] as $item){
  // query to delete where item = $item
}

1
অদ্ভুত ত্রুটি: সতর্কতা: অবৈধ যুক্তি 30 = / লাইনে /home1/mountgam/public_html/zombiewrath/reports.php মধ্যে foreach () জন্য সরবরাহ করা
জেমস অ্যান্ড্রু

2
[]ক্ষেত্রের সংজ্ঞাতে সিনট্যাক্সটি ব্যবহার করলেই এটি কাজ করবে , যা পিএইচপি এই অ্যারে হিসাবে $ _POST মান তৈরি করে। নাহলে এটি একক অ-অ্যারে মান হবে, যার ফলে ভবিষ্যদ্বাণী () লুপটি ফুঁসে উঠবে।
মার্ক বি বি

1
আমি উভয় চেষ্টা করেছিলাম, তবে ঠিক আছে আমি আবার চেষ্টা করব (ফর্ম / নাম ব্যতীত)
জেমস অ্যান্ড্রু

16

সেই অনুযায়ী আপনার চেকবক্সগুলির নাম দিতে হবে:

<input type="checkbox" name="check_list[]" value="…" />

তারপরে আপনি এর সাথে সমস্ত চেক করা চেকবক্সগুলিতে অ্যাক্সেস করতে পারেন

// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
   // do something
}

পুনশ্চ. আপনার আউটপুট ( htmlspecialchars()) সঠিকভাবে পালাতে ভুলবেন না


12
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">

এবং পোস্টের পরে, আপনি এগুলির মাধ্যমে লুপ করতে পারেন:

   if(!empty($_POST['check_list'])){
     foreach($_POST['check_list'] as $report_id){
        echo "$report_id was checked! ";
     }
   }

অথবা পূর্ববর্তী পৃষ্ঠা থেকে পোস্ট করা একটি নির্দিষ্ট মান পান:

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}

12

দুঃখিত, পুরানো বিষয় তবে এটির জন্য উল্লেখ করার জন্য এটি একটি গুরুত্বপূর্ণ বিষয়, যা @ জেমসরেট্রে এবং অন্যান্যদের সাথে সমস্যা ছিল।

আপনি যখন পিএইচপি স্ক্রিপ্টে একাধিক মান পোস্ট করার চেষ্টা করছেন তখন স্বয়ং inputট্যাগটি বন্ধ করবেন না (ব্যবহার করে />)। আপনি যখন ট্যাগটি স্বয়ংক্রিয়ভাবে বন্ধ করেন, এটি অ্যারের সংজ্ঞাটি শেষ করে এবং জমা দেওয়ার সময় আপনার স্ক্রিপ্টে কেবলমাত্র একটি মান দেওয়া হবে। কার্যত @ স্কোন এর উত্তর />পরিবর্তন না হওয়া পর্যন্ত কাজ করতে পারে না ।

Warning: Invalid argument supplied for foreach() in /home1/...এই ক্ষেত্রে পিএইচপি ত্রুটির কারণ এটি ।

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


ত্রুটিপূর্ণ. স্ব-সমাপনী ইনপুট ট্যাগ পিএইচপি-তে পাস হওয়া মানগুলিকে প্রভাবিত করবে না।
র‌্যাপটার

@ রেপটার আরও গবেষণার বিষয়ে, হ্যাঁ এটি আপনার শব্দকে প্রভাবিত করতে পারে এবং আপনি যেমনটি বলেন, তা তা করে না। তবে আরও গবেষণায়, এটি কেবলমাত্র ডক্টইপিইপি সেট করা থাকলে প্রভাবিত হয়। এইচটিএমএল 5 টি ট্যাগটি বন্ধ থাকার হিসাবে স্বীকৃতি দেয় না (এবং এটি বন্ধ হয়ে গেলে এটি অবৈধ হবে), তবে এইচএইচটিএমএল ট্যাগটি বন্ধ করার প্রয়োজন নেই। এখানে ডাব্লু 3 স্কুল স্কুল তথ্য পৃষ্ঠা দেখুন: লিঙ্ক
জন গ্যালাপ

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

5

এটা বেশ সহজ। মনোযোগ দিন এবং আপনি এটি এখনই পাবেন! :)

আপনি একটি এইচটিএমএল অ্যারে তৈরি করবেন, যা পরে পিএইচপি অ্যারেতে প্রেরণ করা হবে। আপনার এইচটিএমএল কোডটি দেখতে এমন হবে:

<input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked">

কোথায় [1] [2] [3]হয় IDআপনার বার্তাগুলির গুলি, যার মানে হল আপনি হবে echoআপনার $row['Report ID']তাদের জায়গায়।

তারপরে, আপনি যখন ফর্মটি জমা দেবেন, আপনার পিএইচপি অ্যারেটি দেখতে এমন হবে:

print_r($check_list)

[1] => checked [3] => checked

কোনটি পরীক্ষা করা হয়েছিল এবং কোনটি ছিল না তার উপর নির্ভর করে।

আমি নিশ্চিত আপনি এই জায়গা থেকে এগিয়ে যেতে পারেন।


6
মনে রাখবেন যে পরিবর্তে check_list[]দিয়ে শুরু হবে । check_list[0]check_list[1]
আরবিটার

1
মান = "পরীক্ষিত" প্রতি-উত্পাদনশীল। যদি কোনও মান নির্দিষ্ট না করা থাকে তবে আপনি 'চালু' পাবেন। মান বৈশিষ্ট্যগুলিতে আপনি যে মানগুলি জমা দিতে চান তা উল্লেখ করার সুবিধাটি হ'ল আপনি প্রায় স্বেচ্ছাচারিত ডেটা প্রেরণ করতে পারেন যা পিএইচপি অ্যারে সূচক হতে হয় না। ফোরচ সহ অ্যারের মানগুলির সাথে আইট্রেট করা কীগুলির উপর দিয়ে পুনরাবৃত্তি করার চেয়েও সহজ।
রুডিগার ডাব্লু।

0

এন ম্যাসা ক্যাসো নেসেসিটো কুই ভেনগা এন আন সলো বীরত্ব, পোর লো ট্যানটো না মাই ওয়েলে উনা ম্যাটরিজ।

    // Primero paso las matrices del post a valores separados por coma.
    foreach($_POST as $n => $v) if (is_array($v)) $_POST[$n] = implode(",", $v);

কন ইস্টো আমার এসেগুরো কুই লস ভালোরস শন 1 ওয়াই বিচ্ছিন্নভাবে কোমা। যেমন মাইএসকিউএল পিউডো হ্যাকার লা পরামর্শ, আপনার ম্যাট্রিজ না:

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