【问题标题】:Multiple Variables in PHP URLPHP URL 中的多个变量
【发布时间】:2011-05-31 22:33:49
【问题描述】:

我是 PHP 新手,这个问题困扰了我。

我有这样的网址

http://www.test.com/test.php?month=5&year=5&pn=4&ItemsPerPage=15&sort=5

月份和年份表示日期,pn = 页码,ItemsPerPage = 每页项目数,排序 = ORDER BY。

我的问题是页面上有多个点可以更改不同的变量。

用户可以通过日历更改月份和日期...这会消除其余变量,因此用户会失去他们在页面上的位置以及页面上的项目数量以及页面的排序方式。

如何使用户可以更改其中一个变量...但其他变量保持不变?

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您可以在更改日期的地方发布代码示例吗?

标签: php url variables


【解决方案1】:

您需要在表单中添加隐藏字段,以说明您要保留的所有其他字段。

例如:

<input type=hidden name="sort" value=5 />

另一种(更好的)方法是初始化一个 php_session

【讨论】:

    【解决方案2】:
    【解决方案3】:

    虽然您的问题不清楚,但答案似乎是,对于每个可以更改 1 项的地方,您需要执行“重新加载”来更新多个项目,或者对于每个可以更改的地方,您需要使用新值发送缺失的变量。例如,将它们作为隐藏值放入表单中,或将它们编码为 URL 目标的一部分。

    【讨论】:

      【解决方案4】:

      我猜你的意思是改变 Javascript 中的东西。

      制作一个使用 window.location 更改它的脚本?

      【讨论】:

        【解决方案5】:

        要记住你的变量,你应该使用SESSION,查看这个链接http://www.php.net/manual/en/book.session.php

        简而言之,我推荐这个功能

        function remember($var,$default=null) {
          if(!session_id()) session_start(); // needed if session.auto_start is off
          if(isset($_GET[$var])) $_SESSION["remember"][$var] = $_GET[$var];
          if(!isset($_SESSION["remember"][$var])) $_SESSION["remember"][$var] = $default;
          return $_SESSION["remember"][$var];
        }
        

        然后你可以在你的代码中写这样的东西

        $sort = remember("sort");
        

        即使单击日历会从 URL 中清除变量也会被记住

        【讨论】:

          【解决方案6】:

          我个人使用一个函数来重新创建 URL 变量,除了选定的排除变量,您可能会发现它很有用。

          函数

          <?php
          function urlVarsRecreate ($exclude='') {
              $urlArray = array();
              foreach($_GET as $key => $val) {
                  if(!is_array($exclude)) {
                      if ($key != $exclude) {
                          array_push($urlArray, $key.'='.urlencode($val));
                      }
                  }
                  else {
                      if (!in_array($key, $exclude)) {
                          array_push($urlArray, $key.'='.urlencode($val));
                      }
                  }
              }
              return implode('&', $urlArray);
          }
          ?>
          

          现在,当您调用它时,您可以指定不需要的变量,无论是在数组中还是在字符串中,如下所示。

          调用它

          <?php
          //For excluding a single variable
          echo '<a href="test.php?'.urlVarsRecreate('sort').'&sort=newVal">sort by newVal</a>';
          
          //For excluding multiple variables
          echo '<a href="test.php?'.urlVarsRecreate(array('year','month','pn')).'&sort=newVal">Some link</a>';'
          ?>
          

          希望对你有帮助,我觉得它很有用,在制作搜索结果页面时经常使用它。

          【讨论】:

            猜你喜欢
            • 2016-04-14
            • 1970-01-01
            • 1970-01-01
            • 2016-12-30
            • 2011-06-23
            • 1970-01-01
            • 1970-01-01
            • 2016-05-27
            • 1970-01-01
            相关资源
            最近更新 更多