【问题标题】:PHP: url parametersPHP:网址参数
【发布时间】:2012-08-07 14:50:02
【问题描述】:

我有一个关于在 php 中格式化 URL 参数的问题

第1页可以有这2个url

http://somewhere.com/page1.php?foo=1
and
http://somewhere.com/page1.php

现在在第 1 页,当我单击一个按钮时,我希望它重定向到它自己,但在 URL 中添加一个额外的参数,就像这样

http://somewhere.com/page1.php?foo=1&bar=2
or
http://somewhere.com/page1.php?bar=2

取决于当前的网址。我如何在 php 中做到这一点?

谢谢, 维杜

【问题讨论】:

  • 看看 print_r($_SERVER); 的输出

标签: php redirect get string-formatting


【解决方案1】:

首先,检查是否设置了某个$_GET参数,使用isset
如果是,echo某个链接。如果没有,echo 另一个链接。

if( !isset($_GET['bar']) ){
    echo '<a href="?bar=2">link</a>';
}
else{
    echo '<a href="page1.php">link</a>';
}

【讨论】:

    【解决方案2】:

    你可以做一个简单的获取系统,所以你需要检查是否设置了?foo=1,如果你可以回显它的内容。如果您想显示 bar=2 的内容,请检查其是否设置并回显其内容。这只是一种简单的方法,但还有更多方法。

    【讨论】:

      【解决方案3】:

      以下表单将提交到添加参数的相同url。

      <form action="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>" method="get">
          <?php
              // Iterate through our query string and add each key value pair as a hidden input
              foreach ($_GET as $key => $value)
              {
                  ?>
                      <input type="hidden" name="<?php echo $key; ?>" value="<?php echo $value; ?>"/>
                  <?php
              }
          ?>
      
          <!-- new parameter to add -->
          <input type="hidden" name="foo" value="1"/>
          <input type="submit"/>
      </form>
      

      【讨论】:

        【解决方案4】:

        您只需使用$_SERVER['PHP_SELF']即可

        例如

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="get">
            <input type="hidden" name="foo" value="1"/>
            <input type="submit"/>
        </form>
        

        这里htmlentities() 用于避免 PHP_SELF 被利用作为安全预防措施

        如果您希望避免隐藏输入字段,您可以附加查询参数,例如 action="&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;?foo=1&amp;bar=2"

        【讨论】:

        • 我认为这也可以,但是当您提交表单时,操作中的查询字符串被删除。
        • @Samuel Ya,这是真的,它正在被替换。感谢指出。
        【解决方案5】:

        我正在使用这些 PHP 函数来帮助我正确构建 url:

        • parse_str()
        • parse_url()
        • http_build_query()
        • http-build-url()

        例子:

        <?php
        
        function add_parameters($parameters) {
            parse_str($_SERVER['QUERY_STRING'], $old_parameters_as_array);
            return $_SERVER['PHP_SELF'].'?'.http_build_query(array_merge($old_parameters_as_array, $parameters));
        }
        
        echo '<a href="'.add_parameters(array('bar' => 2)).'">Link</a>';
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-23
          • 2013-01-02
          • 2013-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 2019-02-18
          相关资源
          最近更新 更多