web-dev-qa-db-ja.com

PHP次のページに変数を渡す

それはとても単純に思えますが、私はそれをするための良い方法を見つけることができません。

最初のページで変数を作成します

$myVariable = "Some text";

そしてそのページに対するフォームのアクションは "Page2.php"です。では、Page2.phpでは、どのようにしてその変数にアクセスすることができますか?セッションでできることはわかっていますが、単純な文字列には多すぎると思います。単純な文字列(ファイル名)を渡すだけで済みます。

どうすればこれを達成できますか?

ありがとうございます。

180
Carlo

HTML/HTTPはステートレスです。つまり、前のページで行ったこと、または見たことは、現在のページとはまったく関係ありません。 セッション、クッキー、GET/POST変数のようなものを使う場合はを除いてください。セッションとクッキーはとても使いやすく、セッションはクッキーよりはるかに安全です。より安全ですが、完全には安全ではありません。

セッション:

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

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

$_SESSION配列にアクセスする前、および出力がブラウザに送信される前に、これら両方のページでsession_start();ステートメントを実行することを忘れないでください。

Cookie:

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

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

セッションとCookieの大きな違いは、セッションを使用している場合は変数の値がサーバーに保存され、Cookieを使用している場合はクライアントに保存されることです。セッション間でデータを保持したい場合を除いて、セッションの代わりにクッキーを使用することには正当な理由はありませんが、それでもDBに格納して、ユーザー名またはIDに基づいて取得する方がよいでしょう。

GETとPOST

次のページへのリンクに変数を追加できます。

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

これはGET変数を作成します。

もう1つの方法は、2ページに送信するフォームに隠しフィールドを含めることです。

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

そして2ページに:

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

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

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

あなたがpostを使ってやりたいのなら、フォームのメソッドをpostに変更するだけです。どちらも同様に安全ではありませんが、GETの方がハッキングが簡単です。

セッションデータを除いて、それぞれの新しいリクエストがスクリプトのまったく新しいインスタンスであるという事実は、私が最初にPHPでコーディングを始めたときに私を捕らえました。慣れれば、それは非常に簡単です。

413
Jrgns

上記の回答をありがとう。これが私のやり方です。フォローしている人に役立つことを願っています。登録番号をあるページから別のページに渡したいので、regNameおよびregValue

最初のページを作成し、それをset_reg.phpと呼びます。

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

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

2番目のページを作成し、それを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>

上記の答えほど包括的ではありませんが、私の目的のために、これはさまざまな要素間の関係を簡単に示しています。

30
Frank

リクエストでデータを渡す

フォームに隠しフィールドとして埋め込むか、フォームのアクションURLを追加することができます。

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

または

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

これは、データをやり取りするときに htmlentities および urlencode を使用することも示しています。 。

セッションでデータを渡す

データをクライアント側に渡す必要がない場合は、セッションの方が適切かもしれません。各ページの始めに session_start() を呼び出すだけで、データを取得して$ _SESSION配列に設定できます。

セキュリティ

あなたは自分の値が実際にはファイル名であると述べているので、あなたはセキュリティへの影響に気をつける必要があります。ファイル名がクライアント側から届いている場合は、ユーザーが値を改ざんしていると想定します。有効性を確認してください。ユーザーがパスを重要なシステムファイル、または自分の管理下にあるファイルに渡すとどうなりますか?スクリプトを使用して、存在するファイルまたは存在しないファイルについてサーバーを「調査」できますか

ここから始めようとしているので、これは$ _GET、$ _POST、または$ _COOKIEに届くすべてのデータに当てはまることを思い出してください。

16
Paul Dixon

Phpに値を渡す方法は3つあります。

  • 郵便で
  • 取得する
  • セッションを可変にすることによって

これら3つの方法は異なる目的のために使用されます。例えば、次のページで値を受け取りたい場合は、 'post'($ _POST)メソッドを次のように使用できます。

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

もしセッション変数を使うことができるよりも、複数のページでvariableの値を必要とするなら: -

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

この構文を使用してSESSION変数を作成する前に、まずphpページの最初にこのタグを追加する必要があります。

session_start(); 

GETメソッドは、一般に、ユーザーから入力を受け取るのと同じページにデータを印刷するために使用されます。その構文は次のとおりです。

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

POSTメソッドは、URLバーにデータを表示するよりもGetメソッドを使用する場合の方が一般的にGETよりも安全です。データがパスワードのように機密性の高いデータである場合は、それは不可解です。

9
ravi sharma

セッションが唯一の良い方法です、あなたはまたGET/POSTを使用することができますが、それは潜在的に安全ではないでしょう。

7
Alo

このコードを試してください

隠しフィールドを使用して、他のページにphp変数を渡すことができます

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>

隠しフィールド値にphp変数を渡して、この変数に別のページにアクセスできるようにする

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>
5
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

2ページ目

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