সমস্ত ভেরিয়েবলগুলি পোস্ট সহ প্রেরণ করা যায়?


89

পোস্টের সাথে প্রেরিত সমস্ত ভেরিয়েবলগুলি আমার সন্নিবেশ করাতে হবে, তারা প্রতিটি ব্যবহারকারীর প্রতিনিধিত্বকারী চেকবক্স ছিল।

আমি যদি জিইটি ব্যবহার করি তবে আমি এরকম কিছু পাই:

?19=on&25=on&30=on

আমি ডাটাবেসে ভেরিয়েবল সন্নিবেশ করা প্রয়োজন।

কীভাবে আমি সমস্ত ভেরিয়েবলগুলি পোস্ট সহ প্রেরণ করব? কোন অ্যারে বা মানগুলি কোমাস বা অন্য কিছুর সাথে পৃথক করা হয়?


উত্তর:


167

পরিবর্তনশীল $_POSTস্বয়ংক্রিয়ভাবে পপুলেটেড।

var_dump($_POST);বিষয়বস্তু দেখার চেষ্টা করুন ।

আপনি এই জাতীয় স্বতন্ত্র মান অ্যাক্সেস করতে পারেন: echo $_POST["name"];

এটি অবশ্যই ধরে নেয় আপনার ফর্মটি টিপিকাল ফর্ম এনকোডিং ব্যবহার করছে (যেমন enctype=”multipart/form-data”

যদি আপনার পোস্টের ডেটা অন্য ফর্ম্যাটে থাকে (যেমন জেএসএন বা এক্সএমএল), আপনি এর মতো কিছু করতে পারেন:

$post = file_get_contents('php://input');

এবং $postকাঁচা তথ্য থাকবে।

ধরে নিই যে আপনি স্ট্যান্ডার্ড $_POSTভেরিয়েবল ব্যবহার করছেন , আপনি যদি চেকবক্সটি এভাবে চেক করা থাকে তবে আপনি পরীক্ষা করতে পারেন:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

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

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

[ ]চেকবক্সের নাম ব্যবহার করে ইঙ্গিত দেয় যে নির্বাচিত মানগুলি অ্যারে হিসাবে পিএইচপি স্ক্রিপ্ট দ্বারা অ্যাক্সেস করবে। এই ক্ষেত্রে $_POST['myCheckbox']একটি একক পংক্তি আসতে হবে না কিন্তু চেকবাক্সগুলি যে চেক করা হয়েছিল সব মান নিয়ে গঠিত একটি অ্যারের ফিরে আসবে।

উদাহরণস্বরূপ, যদি আমি সব বক্স চেক করা থাকে, $_POST['myCheckbox']এর মধ্যে রয়েছে একটি অ্যারের হবে: {A, B, C, D, E}। মানগুলির অ্যারেটি পুনরুদ্ধার এবং সেগুলি প্রদর্শন করার জন্য এখানে একটি উদাহরণ রয়েছে:

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }

4
আপনি কি শেষে কোনও উদাহরণ / লিঙ্ক যুক্ত করার পরিকল্পনা করছেন?

4
ধন্যবাদ, আমি আসলে প্রিন্ট_আর ($ _ পোস্ট) করার চেষ্টা করেছি এবং পুরো সময় GET ব্যবহার করার কারণে এটি কাজ করছে না। আমার খারাপ
লিজোভ্যাকারো

@ লিসো 22 কোনও উদ্বেগ নেই! আমাদের সকলের সাথেই ঘটে :)
কোড যাদুকর

4
; পোস্ট = ফাইল_জেট_কন্টেন্টস ('পিএইচপি: // ইনপুট'); আমার সময় বাঁচিয়েছে ধন্যবাদ ওহ god
শ্বর

4
100 এর জন্য Gratz!
অন্য

77

আপনার $_POSTপরিবর্তনশীল থেকে এগুলি অ্যাক্সেস করতে সক্ষম হওয়া উচিত :

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

আপনি কি শেষে কোনও উদাহরণ / লিঙ্ক যুক্ত করার পরিকল্পনা করছেন?

4
উত্তর শেষে কলোন লক্ষ্য।

এটি যা চাওয়া হয়েছিল তার উত্তর the
লিসান্দ্রো

13

এটি অবহিত করা হয়েছে এবং সরাসরি সুপারগ্লোবালগুলি অ্যাক্সেস করতে চান না (পিএইচপি 5.5 যেহেতু আমি মনে করি?)

প্রতিটি আধুনিক আইডিই আপনাকে বলবে:

সরাসরি সুপারগ্লোবালগুলি অ্যাক্সেস করবেন না। কিছু ফিল্টার ফাংশন ব্যবহার করুন (উদাঃ filter_input)

আমাদের সমাধানের জন্য, সমস্ত অনুরোধের প্যারামিটার পেতে, আমাদের পদ্ধতিটি ব্যবহার করতে হবে filter_input_array

একটি ইনপুট পদ্ধতি থেকে সমস্ত প্যারামগুলি পেতে এটি ব্যবহার করুন:

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

এখন আপনি এটি var_dumpবা আপনার foreachলুপগুলি ব্যবহার করতে পারেন

যা কাজ করে না তা হ'ল এই পদ্ধতির মাধ্যমে g $QUEST সুপারগ্লোবাল অ্যাক্সেস করা। এটি অলওয়েস ফিরে আসে NULLএবং এটি সঠিক।

আপনার যদি সমস্ত ইনপুট প্যারামগুলি পেতে প্রয়োজন হয় তবে বিভিন্ন পদ্ধতির মাধ্যমে আসা, কেবল নিম্নলিখিত পদ্ধতির মতো এগুলি মার্জ করুন:

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

সম্পাদনা করুন: এই পদ্ধতির বর্ধিত সংস্করণ (যখন অনুরোধের পদ্ধতিগুলির একটি সেট না করা হয় তখনও কাজ করে):

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}

আপনার পরামর্শ "$ postArray = ($ tmp = ফিল্টার_ইনপুট_আরে (INPUT_POST)) ব্যবহার করার চেষ্টা করার সময় আমি মারাত্মক ত্রুটি পেয়েছি $ tmp: অ্যারে ();"।
চূড়ান্ত ত্রুটিযুক্ত

@ অ্যাসটনমোরগান আমি এটি পরীক্ষা করেছি (কপি পেস্ট) এবং এটি দুর্দান্ত কাজ করে। আপনি কোন পিএইচপি সংস্করণ ব্যবহার করবেন?
mtizziani

9

সুতরাং, $_POSTঅ্যারের মত কিছু ?

http_build_query($_POST)এগুলি var=xxx&var2=yyyআবার স্ট্রিংয়ে পেতে আপনি ব্যবহার করতে পারেন । বা কেবল print_r($_POST)সেখানে কী আছে তা দেখতে।


6

এটি কেন নয়, এটি সহজ:

extract($_POST);

4
যেমন ভয়ঙ্কর ধারণা; দৈত্য সুরক্ষা গর্ত
কেউ কিছু

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

4
@ বুব্বাহুত ঠিক প্রোডাকশন কোডের জন্য কোনও পোস্টের সমস্ত ভেরিয়েবল চায় না।
কাউভয়সাইফ

5

এটি ব্যবহার করে আপনি সমস্ত পোস্টের ভেরিয়েবল পেতে পারেন

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