web-dev-qa-db-ja.com

URLの別のページに複数の変数を渡す

このようなセッションを使用して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_idは2ページでUndefined variableを表示しますが、event_id$urlのみを使用する場合

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

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

32
Abuzzy

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

$url = "http://localhost/main.php?email=$email_address&event_id=$event_id";
//                               ^ start of vars      ^next var
104
JvdBerg

簡潔な答え:

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

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

長い答え:

クエリ文字列内のすべての変数は、適切に送信されるようにurlencodeする必要があります。 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() を呼び出すだけで使用可能になります。

22
Asaph

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

6
Crobzilla

非常に簡単ですが、別の人は、URLバーを介してセッション変数を渡してはいけないと言いました1.ヘッダーファイルに入れたときにヘッダーからウェブサイト全体にセッションが渡されるため、必要はありません2.セキュリティリスク
最初のページコード

$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サイト全体で実行できるので、いつでもどこでも変数を簡単に使用できます。お役に立てれば :)

3
<a href="deleteshare.php?did=<?php echo "$rowc[id]"; ?>&uid=<?php echo "$id";?>">DELETE</a>

複数の変数をあるページから別のページに渡す

1
Vijayendran.R

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

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

1
Mr. Alien

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

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

php.netから

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

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

注意してください。

0
Jamal Azizbeigi