将多个变量传递到 url 中的另一个页面

Posted

技术标签:

【中文标题】将多个变量传递到 url 中的另一个页面【英文标题】:Passing multiple variables to another page in url 【发布时间】:2012-10-17 15:18:22 【问题描述】:

我正在使用这样的会话将变量传递到 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,但如果我只在 $url 中使用 event_id,就像这里

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

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

【问题讨论】:

使用这个:$url = "http://localhost/main.php?email=" . $email_address . "&event_id=" . $event_id; 【参考方案1】:

使用 & 符号 & 将变量粘合在一起:

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

【讨论】:

您应该注意一些安全警告。详情请见my answer。 你应该使用PHP函数来构建查询php.net/manual/en/function.http-build-query.php @JvdBerg,您能否提一下,在将这些变量传递到 url(在任何操作中)后如何访问它们? @Seeker $url = $_GET['email']【参考方案2】:

简答:

这是您想要做的,但它会带来一些安全和编码问题,所以不要这样做。

$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() 即可。

【讨论】:

作为简短的回答,为什么不张贴:$url = "http://localhost/main.php?email=" . urlencode($email_address) . "&eventid=" . urlencode($event_id); 没有解释。然后在 Long answer 你可以解释一下吗?无论如何,现在不推荐使用简短答案,因此与其他简短答案相比,它不会添加任何内容。 能否请您提及如何访问它们。我们可以这样做吗? $var= $this->params->fromRoute('event_id');和 $var2= $this->params->fromRoute('email_address'); tnkx @Seeker 这真的取决于您使用的 PHP MVC 框架。有很多。【参考方案3】:

您的第一个变量声明必须以 ? 开头,而任何其他变量必须与 & 连接

单变量网址

http://www.example.com/page?var=foo

多变量网址

http://www.example.com/page?var=foo&var2=bar

【讨论】:

【参考方案4】:

很简单,但另一个说你不要通过 url 栏传递会话变量 1.您不需要,因为当您放入头文件时,会话会从头文件传递到整个网站 2.安全风险 这是第一页代码

$url = "@987654321@" . urlencode($email_address) . "&eventid=" . urlencode($event_id);

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

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

就像我之前所说的,关于会话的好处是它们可以在整个网站中进行,如果将这种类型的代码放在头文件中并在所有加载的页面上被调用,您可以简单地在任何地方使用该变量,并且每当。希望这会有所帮助:)

【讨论】:

【参考方案5】:
<a href="deleteshare.php?did=<?php echo "$rowc[id]"; ?>&uid=<?php echo "$id";?>">DELETE</a>

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

【讨论】:

【参考方案6】:

您正在检查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";

如果您使用 " 引号,则您没有使用连接字符串

【讨论】:

你是明星【参考方案7】:

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

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

【讨论】:

【参考方案8】:

来自 php.net

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

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

小心点。

【讨论】:

这如何回答 OP 的问题? 我建议使用未加密的 GET 或 REQUEST 方法是危险的,通过页面将多变量发送到另一个非常容易,可以使用“&”。

以上是关于将多个变量传递到 url 中的另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

如何将 php 变量传递给同一页面中的另一个表单?

将变量传递到带有include的另一个页面

如何将数据从 Playground 页面传递到 Swift Playgrounds 中的另一个 Playground 页面?

如何将值从一个 html 页面传递到 PHONEGAP 中的另一个 html 页面?

如何将快照数据从 futurebuilder 传递到同一页面中的另一个 futurebuilder?

将大型 JSON 对象传递到新窗口中的另一个页面。