您可以进行 $_POST 变量吗? [复制]

Posted

技术标签:

【中文标题】您可以进行 $_POST 变量吗? [复制]【英文标题】:Can you carry on a $_POST variable? [duplicate] 【发布时间】:2012-03-19 13:22:12 【问题描述】:

可能重复:php Pass variable to next page

这是我当前的代码:

$search = $_POST['s'];
$search = strtoupper($search); 
$search = strip_tags($search); 
$search = trim($search); 
$search = mysql_real_escape_string($search);

我需要能够将 $search 变量传递到我的第二个、第三个等页面。

我是 php 的初学者,我有点卡在这里

【问题讨论】:

看看PHP sessions。 $_SESSION 超全局允许您在页面之间存储信息。 见***.com/questions/871858/… 【参考方案1】:

虽然建议使用$_SESSION,但另一种选择是在后续生成的页面上使用隐藏字段(具有相同的名称并填充适当的值)。然后,当这些页面被回发时,它们也会在$_POSTS 中提供可用的字段(这次由隐藏字段提供,而不是原始文本字段)。

优点:

"绑定到当前页面";对于一些 page 上下文相关的东西来说真的很棒! (会话的范围是浏览器,而不是页面。) 避免了对会话/cookies 的需要(如果会话已经被用于其他目的,这不是问题)。

缺点:

“绑定到当前页面”:当导航离开后退/下一个上下文之外时,值将丢失。 (正如 Bert 所说,稍作修改可以使用这种“面包屑”方法来更改 URL 并使用 GET 参数,这可以使数据普遍持久化,但会以“不太漂亮”的 URL 为代价。) 数据必须被视为不受信任和不安全,就像原始帖子一样。 需要填充其他 [隐藏] 字段。

编码愉快。

【讨论】:

mysql_real_escape_string 不是“hack-a-bout”。这个函数唯一的缺点是普通 PHP 用户不知道如何使用它。 @Col.Shrapnel 我不同意。它继续推广手动构建 SQL 字符串的不良做法。考虑到 both mysqli PDO 在许多 PHP 系统上都可用,我认为 没有理由 继续捍卫 旧方法没有被任何其他现代广泛传播的编程语言使用。 (哦,请确切地说为什么是-1,因为如果这是关于我对mysql_real_escape_string的厌恶,那与答案无关。) 哦,请不要向兜售那个老故事。好吗? @Col.Shrapnel 你可以随心所欲(包括忽略我);我相信我是有道理的,并且有很多关于该主题的帖子/答案。 mysql_real_escape_string 的出现是因为 add_slashesmysql_escape_string ... 都失败了。 我可以随心所欲地思考!思考!要考虑不同方法的真正含义,而不是盲目地遵循一些福音!并根据我的经验进行判断,而不是数百个“主题”只是相互复制/粘贴【参考方案2】:

假设它是一个搜索字符串,有只有健全的方法:

首先,将表单的方法更改为 GET 接下来,只需使用 GET 方法在查询字符串中传递您的搜索变量。

您必须应用的唯一修改是urlencode()

所以,代码应该是

$query_string = 'search='.urlencode($_GET['search']);
echo "<a href='?page=2&$query_string'>page 2</a>";

生成 html 代码

<a href="?page=2&search=search+string">page 2</a>

因此用户可以单击此链接,您将获得您的搜索字符串

【讨论】:

【参考方案3】:

在您要访问搜索变量的每个页面中使用session_start()

在第一页

$search = $_POST['s'];
$search = strtoupper($search); 
$search = strip_tags($search); 
$search = trim($search); 
$search = mysql_real_escape_string($search);

将会话变量设置为

$_SESSION['searchStr']=$search

然后在所有其他页面中

session_start(); // at the very begining

if(isset($_SESSION['searchStr'])) 

   $search=$_SESSION['searchStr']

【讨论】:

【参考方案4】:

看来会话在这里是你的朋友。在最简单的形式中,会话只会将数据放入发送到用户浏览器和从用户浏览器发送的 cookie 中。确保在对会话进行任何操作之前调用session_start(),这将启动或恢复用户的会话。之后,您可以将$_SESSION 用作将在页面之间持续存在的全局关联数组。

Xander 已将您链接到文档, Here are some simple examples。确保你理解session_start() 否则你会有一些错误。

注意不要将此基本会话格式用于敏感数据。考虑使用 memcache 之类的东西来存储数据,只需将 memcache 键放入 $_SESSION。此外,请考虑加密会话。这些是您在处理用户身份验证/登录时应该考虑的更高级的事情

【讨论】:

以上是关于您可以进行 $_POST 变量吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

您可以将 PHP $_POST 变量设置为数组吗?

您可以使用 NMAKE 为变量分配通配符吗? [复制]

您可以将字符串附加到 PHP 中的变量吗? [复制]

如何使用 $_GET 或 $_POST 变量来区分每种类型的请求? [复制]

您可以在类和构造函数中进行初始化吗?对吗? [复制]

可以将 JavaScript 变量保存为文件吗? [复制]