পিএইচপি পাসের পরিবর্তনশীল পরবর্তী পৃষ্ঠায়


196

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

প্রথম পৃষ্ঠায় বলুন আমি একটি পরিবর্তনশীল তৈরি করি

$myVariable = "Some text";

এবং সেই পৃষ্ঠাটির জন্য ফর্মটির ক্রিয়া হ'ল "Page2.php"। সুতরাং Page2.php এ, আমি কীভাবে সেই পরিবর্তনশীলটি অ্যাক্সেস করতে পারি? আমি জানি আমি এটি সেশন দিয়ে করতে পারি তবে আমি মনে করি এটি একটি সাধারণ স্ট্রিংয়ের জন্য অনেক বেশি এবং আমার কেবল একটি সরল স্ট্রিং (একটি ফাইলের নাম) পাস করতে হবে।

আমি কীভাবে এটি অর্জন করতে পারি?

ধন্যবাদ!


ভেরিয়েবলগুলি পাস করার সর্বোত্তম এবং সহজ জিনিসটি আমি এখানে এটি কীভাবে ব্যাখ্যা করেছি: stackoverflow.com/questions/14465464/…
Jaro

উত্তর:


450

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

সেশন:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

চালানোর জন্য মনে রাখুন session_start();উভয় এই পাতায় বিবৃতি আগে আপনি অ্যাক্সেস করতে চেষ্টা $_SESSIONঅ্যারে, এবং যে কোনো আউটপুট ব্রাউজারে পাঠাতে এছাড়াও আগে।

কুকি:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

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

GET এবং পোস্ট করুন

আপনি পরবর্তী পৃষ্ঠায় লিঙ্কে পরিবর্তনশীল যুক্ত করতে পারেন:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

এটি একটি জিইটি ভেরিয়েবল তৈরি করবে।

আরেকটি উপায় হ'ল কোনও ফর্মের মধ্যে একটি লুকানো ক্ষেত্র অন্তর্ভুক্ত করা যা পৃষ্ঠা দুটিতে জমা দেয়:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

এবং তারপরে দ্বিতীয় পৃষ্ঠায়:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

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

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


2
ধন্যবাদ এটির সাহায্যে, সমস্যাটি হ'ল আমার প্রথম পৃষ্ঠায় প্রচুর পরিমাণে ভেরিয়েবল ছিল, তাই আমি যা করেছি তা সমস্ত ভেরিয়েবলের সাথে একটি অ্যারে তৈরি করে সেশন ব্যবহার করে পরবর্তী পৃষ্ঠায় প্রেরণ করা হয়েছিল।
কার্লো

Schweet :) খুশি আমি সাহায্য করতে পারে।
Jrgns

4
নিতপিক: পিএইচপি-তে সেশনগুলি সাধারণত কুকি দ্বারা পরিচালিত হয়। সেশন কুকি একটি ধ্রুবক কুকি নয় এবং সাধারণত কেবল সেশন আইডি ধারণ করে। তবে এটি এখনও একটি কুকি।
ডিসেন্ট ড্যাবলার

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

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

30

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

আপনার প্রথম পৃষ্ঠাটি তৈরি করুন, সেট_রেগ.এফপি কল করুন :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

আপনার দ্বিতীয় পৃষ্ঠাটি তৈরি করুন, এটিকে get_reg.php বলুন :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

যদিও উপরের উত্তরের মতো বিস্তৃত নয়, আমার উদ্দেশ্যগুলির জন্য এটি বিভিন্ন উপাদানের মধ্যে সম্পর্কের সহজ ফ্যাশনে চিত্রিত করে।


13
আপনার উদাহরণটিও সেশন ছাড়াই কাজ করে এবং বাস্তবে সেশন-মেকানিজমের মাধ্যমে ডেটা না পাওয়া (get_reg.php এ) in Jrgns দ্বারা বর্ণিত গেট-পদ্ধতি সহ আপনি একটি ফর্মের মাধ্যমে RegName পাঠাচ্ছেন। চলকটি এভাবে get_reg.php পৃষ্ঠায় $ _GET অ্যারের মাধ্যমে অ্যাক্সেসযোগ্য।
मेटाট্রন

16

অনুরোধে ডেটা পাস হচ্ছে

আপনি হয় এটি আপনার ফর্মের একটি লুকানো ক্ষেত্র হিসাবে এম্বেড করতে পারেন, বা এটি আপনার ফর্ম ক্রিয়া URL যুক্ত করতে পারেন

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

অথবা

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

উল্লেখ্য এই ব্যবহারের প্রকাশ htmlentities এবং urlencode যখন প্রায় ডেটা ক্ষণস্থায়ী।

অধিবেশন পাসের তথ্য

যদি ডেটাটিকে ক্লায়েন্টের পাশ দিয়ে যাওয়ার প্রয়োজন না হয় তবে সেশনগুলি আরও উপযুক্ত হতে পারে। কেবলমাত্র প্রতিটি পৃষ্ঠার শুরুতে সেশন_স্টার্ট () কল করুন এবং আপনি get _SESSION অ্যারেটিতে ডেটা পেতে এবং সেট করতে পারেন।

নিরাপত্তা

যেহেতু আপনি উল্লেখ করেছেন যে আপনার মানটি আসলে একটি ফাইলের নাম, তাই আপনাকে সুরক্ষা সম্পর্কে জানতে হবে। যদি ফাইলের নাম ক্লায়েন্টের পক্ষ থেকে এসেছে তবে ধরে নিন যে ব্যবহারকারীর মানটির সাথে হস্তক্ষেপ করা হয়েছে। বৈধতার জন্য এটি পরীক্ষা করুন! যখন ব্যবহারকারী একটি গুরুত্বপূর্ণ সিস্টেম ফাইল, বা তাদের নিয়ন্ত্রণে থাকা কোনও ফাইলের পথ পাস করে তখন কী ঘটে? আপনার স্ক্রিপ্টটি বিদ্যমান বা অস্তিত্ব নেই এমন ফাইলগুলির জন্য সার্ভার "অনুসন্ধান" করতে ব্যবহৃত হতে পারে?

আপনি এখানে স্পষ্টভাবে শুরু করার সাথে সাথে এটি স্মরণ করিয়ে দেওয়ার মতো যে এটি any _GET, $ _POST বা CO _COOKIE - এ উপস্থিত কোনও ডেটার জন্য যায় - ধরে নিন যে আপনার নিকৃষ্টতম শত্রু সেই অ্যারেগুলির সামগ্রী এবং কোড অনুসারে কোড তৈরি করেছে!


9

পিএইচপিতে মান পাস করার জন্য তিনটি পদ্ধতি রয়েছে।

  • পোস্ট দ্বারা
  • পেয়ে
  • সেশন ভেরিয়েবল তৈরি করে

এই তিনটি পদ্ধতিটি বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয় example উদাহরণস্বরূপ আমরা যদি পরবর্তী পৃষ্ঠায় আমাদের মূল্য পেতে চাই তবে আমরা 'পোস্ট' ($ _POST) পদ্ধতিটি ব্যবহার করতে পারি: -

$a=$_POST['field-name'];

আমাদের যদি একের অধিক পৃষ্ঠায় ভেরিয়েবলের মান প্রয়োজন হয় তবে আমরা সেশন ভেরিয়েবলটি এর মতো ব্যবহার করতে পারি: -

$a=$_SESSION['field-name];

সেশন ভেরিয়েবল তৈরি করার জন্য এই সিনট্যাক্সটি ব্যবহার করার আগে আমাদের পিএইচপি পৃষ্ঠার একেবারে শুরুতে এই ট্যাগটি যুক্ত করতে হবে

session_start(); 

GET পদ্ধতিটি সাধারণত একই পৃষ্ঠায় ডেটা মুদ্রণের জন্য ব্যবহৃত হয় যা ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়ার জন্য ব্যবহৃত হত। এর বাক্য গঠনটি হ'ল:

$a=$_GET['field-name'];

পোষ্ট পদ্ধতিটি সাধারণত জিইটি-র তুলনায় বেশি সুরক্ষিত হয় কারণ আমরা যখন ইউআরএল বারে ডেটা প্রদর্শন করতে পারি তার চেয়ে বেশি সময় পান মেথড ব্যবহার করুন f


7

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


6

এই কোড চেষ্টা করুন

লুকানো ক্ষেত্র ব্যবহার করে আমরা পিএইচপি ভারিবেল অন্য পৃষ্ঠায় পাস করতে পারি

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

পিএইচপি ভেরিয়েবলকে লুকানো ক্ষেত্রের মানতে পাস করুন যাতে আপনি এই পরিবর্তনশীলটিকে অন্য পৃষ্ঠায় অ্যাক্সেস করতে পারেন

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

পৃষ্ঠা ২

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

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

সেশনে ডেটা পাস করা যদি ডেটা ক্লায়েন্ট-সাইডে পাস করার প্রয়োজন না হয়, তবে সেশনগুলি আরও উপযুক্ত হতে পারে। কেবলমাত্র প্রতিটি পৃষ্ঠার শুরুতে সেশন_স্টার্ট () কল করুন এবং আপনি get _SESSION অ্যারেটিতে ডেটা পেতে এবং সেট করতে পারেন।

সুরক্ষা যেহেতু আপনি উল্লেখ করেছেন যে আপনার মানটি আসলে একটি ফাইলের নাম, তাই আপনাকে সুরক্ষা সম্পর্কে জানতে হবে। যদি ফাইলের নাম ক্লায়েন্টের পক্ষ থেকে এসেছে, ধরে নিন যে ব্যবহারকারীর মানটির সাথে হস্তক্ষেপ করা হয়েছে। বৈধতার জন্য এটি পরীক্ষা করুন! যখন ব্যবহারকারী একটি গুরুত্বপূর্ণ সিস্টেম ফাইল বা তাদের নিয়ন্ত্রণাধীন কোনও ফাইলের পথটি পাস করে তখন কী ঘটে? আপনার স্ক্রিপ্টটি বিদ্যমান বা অস্তিত্ব নেই এমন ফাইলগুলির জন্য সার্ভার "অনুসন্ধান" করতে ব্যবহৃত হতে পারে?

আপনি যেহেতু এখানে স্পষ্টভাবে শুরু করছেন, এটি মনে করিয়ে দেওয়ার মতো যে এটি কোনও তথ্য যা $ _GET, $ _POST বা CO _COOKIE - এ আসে তার জন্য যায় - ধরে নিন যে আপনার নিকৃষ্টতম শত্রু সেই অ্যারেগুলির লিখিত সামগ্রী এবং কোড অনুসারে কোড তৈরি করেছে!

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