47

このようなセッションを使用して、URL の別のページに変数を渡していますが、別の変数を同じ URL に連結して次のページで正常に取得できないようです

ページ1

session_start();
$event_id = $_SESSION['event_id'];
echo $event_id;

$url = "http://localhost/main.php?email=" . $email_address . $event_id;     

ページ2

if (isset($_GET['event_id'])) {
$event_id = $_GET['event_id'];}
echo $event_id;

echo $event_id2ページ目にエラーが表示されますが、ここのようなものUndefined variableだけを使用するとevent_id$url

 $url = "http://localhost/main.php?event_id=" . $event_id;

それは問題なく動作しますが、ページ 2 がそれらを取得できるように、URL で両方の変数を使用できるようにする必要があります。

4

8 に答える 8

139

アンパサンド&を使用して変数を結合します。

$url = "http://localhost/main.php?email=$email_address&event_id=$event_id";
//                               ^ start of vars      ^next var
于 2012-10-27T17:36:33.637 に答える
30

短い答え:

これはあなたがやろうとしていることですが、セキュリティとエンコーディングの問題を引き起こすので、やらないでください。

$url = "http://localhost/main.php?email=" . $email_address . "&eventid=" . $event_id;

長い答え:

クエリ文字列内のすべての変数は、適切に送信されるようにurlencodingする必要があります。URLは非常に漏洩しやすいため、ユーザーの個人情報をURLで渡さないでください。URLは、ログファイル、閲覧履歴、参照ヘッダーなどに記録されます。リストはどんどん増えていきます。

適切なURLエンコードについては、またはのいずれurlencode()かを使用して実現できますhttp_build_query()。これらのいずれかが機能するはずです。

$url = "http://localhost/main.php?email=" . urlencode($email_address) . "&eventid=" . urlencode($event_id);

また

$vars = array('email' => $email_address, 'event_id' => $event_id);
$querystring = http_build_query($vars);
$url = "http://localhost/main.php?" . $querystring;

さらに、$event_idがセッションに含まれている場合、別のページからアクセスするために実際に渡す必要はありません。電話session_start()するだけで利用できるはずです。

于 2012-10-27T17:39:14.870 に答える
7

最初の変数宣言は while で開始する?必要があり、追加の宣言は a で連結する必要があります。&

于 2012-10-27T17:47:45.417 に答える
3


非常に単純ですが、別の人は、URLバーを介してセッション変数を渡さないと言いました

$url = "http://localhost/main.php?email=" . urlencode($email_address) . "&eventid=" . urlencode($event_id);

URL バーから変数を取得するときの 2 ページ目は次のとおりです。

if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['eventid']) && !empty($_GET['eventid'])){ ////do whatever here }

作成したセッションを適切な方法で使用したい場合は、上記のコードを無視して、2 番目のページでセッション変数を呼び出します。たとえば、最初のページでセッションを作成します。たとえば、次のように言います。

 $_SESSION['WEB_SES'] = $email_address . "^" . $event_id;

上記のコードでセッション変数にすでに値を割り当てていることは明らかです。セッション名を好きなように呼び出すことができます。例として web_ses を使用しました。2 番目のページでは、セッションを開始して、セッションがそこにあり、変数をチェックして、それらを使って何でもします。例:

 session_start();
 if (isset($_SESSION['WEB_SES'])){
 $Array = explode("^", $_SESSION['WEB_SES']);
 $email = $Array[0];
 $event_id = $Array[1]
 echo "$email";
 echo "$event_id";
 }

前に述べたように、セッションの良い点は、ロードされるすべてのページで呼び出されるヘッダー ファイルにこのタイプのコードを挿入すれば、Web サイト全体で実行できることです。変数をいつでもどこでも簡単に使用できます。お役に立てれば :)

于 2015-05-20T07:10:32.190 に答える
1

これには&を使用します。&を使用すると、必要な数の変数を配置できます。

$url = "http://localhost/main.php?event_id=".$event_id."&email=".$email;
于 2012-10-27T17:40:18.157 に答える
1

チェックしisset($_GET['event_id']ていますが、ハイパーリンクにget変数を設定していません。追加しているだけですemail

http://localhost/main.php?email=" . $email_address . $event_id

リンクに別のGET変数を追加します

$url = "http://localhost/main.php?email=$email_address&event_id=$event_id";

"引用符を使用している場合、文字列を連結するために使用しませんでした

于 2012-10-27T17:36:25.067 に答える
1

php.netから

警告 スーパーグローバル$_GET$_REQUESTは既にデコードされています。またはurldecode()の要素で使用すると、予期しない危険な結果が生じる可能性があります。$_GET$_REQUEST

リンク: http://php.net/manual/en/function.urldecode.php

気をつけて。

于 2016-04-29T14:37:29.410 に答える