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_idUndefined variable在第 2 页上显示错误,但如果我event_id$url这里只使用类似的

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

这很好用,但我需要能够在 url 中使用这两个变量,以便第 2 页可以检索到它们。

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;

长答案:

查询字符串中的所有变量都需要进行 urlencoded 以确保正确传输。你不应该在 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 栏传递会话变量 1.你不需要,因为当你放入头文件时,会话是从头文件传递到整个网站的 2.安全风险
这是第一页代码

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

从 url 栏中获取变量时的第二页是:

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

现在,如果您想以正确的方式使用您创建的会话,请忽略我上面的代码并在第二页上调用会话变量,例如在第一页上创建一个会话,例如:

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

很明显,您已经在上面的代码中为会话变量分配了值,您可以随意调用会话名称我只是使用了示例 web_ses,第二页您需要做的就是启动会话并查看是否会话在那里并检查变量并对它们做任何事情,例如:

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

就像我之前所说的,会话的好处是它们可以在整个网站上运行,如果将这种类型的代码放在头文件中,在所有加载的页面上都会被调用,那么您可以随时随地简单地使用该变量。希望这可以帮助 :)

于 2015-05-20T07:10:32.190 回答
2
<a href="deleteshare.php?did=<?php echo "$rowc[id]"; ?>&uid=<?php echo "$id";?>">DELETE</a>

将多个变量从一页传递到另一页

于 2015-07-21T11:48:53.567 回答
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

使用 & 为此。使用 & 您可以放置​​任意数量的变量!

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

来自 php.net

警告超全局变量$_GET$_REQUEST已经解码。urldecode()在元素上使用$_GETor$_REQUEST可能会产生意外和危险的结果。

链接: http: //php.net/manual/en/function.urldecode.php

当心。

于 2016-04-29T14:37:29.410 回答