您可以进行 $_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 字符串的不良做法。考虑到 bothmysqli
和 PDO
在许多 PHP 系统上都可用,我认为 没有理由 继续捍卫 旧方法没有被任何其他现代广泛传播的编程语言使用。 (哦,请确切地说为什么是-1,因为如果这是关于我对mysql_real_escape_string
的厌恶,那与答案无关。)
哦,请不要向我兜售那个老故事。好吗?
@Col.Shrapnel 你可以随心所欲(包括忽略我);我相信我是有道理的,并且有很多关于该主题的帖子/答案。 mysql_real_escape_string
的出现是因为 add_slashes
和 mysql_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 变量吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章