【问题标题】:Can you carry on a $_POST variable? [duplicate]您可以进行 $_POST 变量吗? [复制]
【发布时间】: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 html variables


【解决方案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。此外,请考虑加密会话。这些是您在处理用户身份验证/登录时应该考虑的更高级的事情

      【讨论】:

        猜你喜欢
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2021-03-31
        相关资源
        最近更新 更多