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


196

とてもシンプルに見えますが、良い方法が見つかりません。

変数を作成する最初のページで言う

$myVariable = "Some text";

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

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

ありがとう!


変数を渡す最も簡単な方法は、ここで説明した方法です。stackoverflow.com
questions

回答:


450

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

セッション:

//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'];

セッションとCookieの大きな違いは、変数の値は、セッションを使用している場合はサーバーに保存され、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ポスト経由で実行する場合は、フォームのメソッドをに変更するだけです。GETの方がハッキングしやすいですが、どちらも安全ではありません。

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


2
これが役に立ったおかげで、問題は最初のページにたくさんの変数があるということでした。そこで私がしたことは、それらすべての変数を含む配列を作成し、セッションを使用して次のページに送信することでした。
カルロ

Schweet :)助けてくれてうれしい。
2009年

4
Nitpick:PHPのセッションは通常、Cookieによっても処理されます。セッションCookieは永続的なCookieではなく、通常は単にセッションIDのみを保持します。しかし、それはまだクッキーです。
まともなダブラー2010年

私自身のコメントについて詳しく説明します。その理由は、あなたが言ったように、HTTPはステートレスだからです。そのため、PHPにはセッションを識別する方法が必要です。これは、セッションIDを使用してクライアントにCookieを保存することで行われます。クライアントサイドでCookieが無効になっている場合、PHPは$ _GET変数を使用して、セッションIDをページ間のリンクに追加します。しかし、これは一般的に安全ではないと考えられているため、ほとんどのWebサーバー(php.ini)では一般的に無効になっています。
まともなダブラー2010年

@fireeyedboy PHPセッションは、GETおよびPOST変数を使用して伝播することもできます。結局のところ、セッションでは、転送するデータの一部(セッションID)のみを使用することにより、変数をページ間で簡単に渡すことができます。そのセッションIDは、以前に保存されたデータを取得するために使用されます。
Jrgns

30

上記の回答をありがとう。ここに私がそれをした方法があります、それがフォローしている人々を助けることを願っています。あるページから別のページに登録番号を渡そうとしているので、regNameregValueです。

最初のページを作成し、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>

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


13
あなたの例もセッションなしで動作し、実際にはセッションメカニズム(get_reg.php内)を介してデータを取得していません。Jrgnsで説明されているように、getメソッドを使用したフォームを介してregNameを送信しています。したがって、変数は$ _GET配列を介してget_reg.phpページでアクセスできます。
メタトロン2012年

16

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

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

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

または

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

これは、データを渡すときのhtmlentitiesurlencodeの使用も示しています。

セッションでのデータの受け渡し

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

安全保障

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

明らかにここで始めたばかりなので、これは$ _GET、$ _ POST、または$ _COOKIEに到着するすべてのデータに当てはまることを思い出してください-最悪の敵がそれらの配列の内容を細工し、それに応じてコーディングしてください!


9

PHPで値を渡す方法は3つあります。

  • 郵便で
  • 得ることによって
  • セッション変数を作ることによって

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

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

複数のページで変数の値が必要な場合、セッション変数を次のように使用できます。

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

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

session_start(); 

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

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

Getメソッドを使用すると、URLバーにデータを表示できるため、POSTメソッドは一般にGETよりも安全に消費されます。データがパスワードなどの機密データである場合、データが不正になる可能性があります。


7

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


6

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

非表示フィールドを使用して、php varibaleを別のページに渡すことができます

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;
?>

1
**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

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

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

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

明らかにここで始めたばかりなので、これは$ _GET、$ _ POST、または$ _COOKIEに到着するすべてのデータに当てはまることを思い出してください。最悪の敵がこれらの配列の内容を巧みに作成し、それに応じてコーディングしてください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.