【问题标题】:Empty GET variables displaying in the URLURL 中显示的空 GET 变量
【发布时间】:2014-02-11 20:06:25
【问题描述】:

这是我的表格:

<?php

echo '<form method="get" action="" name="formulaire">';
echo '<input type="text" name="info1" title="" value="" />';
echo '<input type="text" name="info2" title="" value="" />';
echo '<input type="text" name="info3" title="" value="" />';
echo '<input type="submit" value="Envoyer" />';
echo '</form>';

echo '$info1 = '.$_GET["info1"].'<br />';
echo '$info2 = '.$_GET["info2"].'<br />';
echo '$info3 = '.$_GET["info3"].'<br />';

?>

我的问题是提交后,所有变量都显示在url中,即使是空的。

我希望仅在 URL 中显示非空变量。

有没有办法用 PHP 做到这一点?

【问题讨论】:

  • 然后使用条件语句或者更好,使用ternary operator
  • 那么,为什么首先使用GET 方法;为什么不直接选择POST?这样它就不会在地址栏中显示任何内容。您使用GET 有什么特殊原因吗?
  • @Fred-ii- 我同意。通过发布表单,您可以避免丑陋的 url,并可以相应地处理空变量
  • 谢谢迈克。然而,OP 提到了将其用于动态内容的影响。如果由我决定,我只会使用条件语句,因为我从不曾经使用过GET,它有可能打开众所周知的“蠕虫罐”,包括潜在的安全问题。 @MikePurcell
  • (假设您使用的是数据库),对于您的查询是如何完成的以及您正在使用哪些功能会非常小心。那是 IF 您正在使用数据库。您不希望任何人放入一些漂亮的黑客角色来丢弃您的桌子。 @纪尧姆

标签: php forms get


【解决方案1】:

我们可以在没有 javascript 或其他插件的情况下轻松地使 url 为空,这里的代码将其放在会话代码之后的代码顶部,但请注意我们只能使用 post 方法。它是安全的,而不是更复杂的

header("Cache-Control: no cache");
    session_cache_limiter("private_no_expire");

干杯

【讨论】:

    【解决方案2】:

    可能可以优化,但这是我的建议,使用 PHP:

    if (!isset($_GET['clean'])) {
        $_GET['clean'] = 1;
        redirect($_SERVER['SCRIPT_URL'] . '?' . http_build_query(array_filter($_GET)));
    }
    unset($_GET['clean']);
    
    • 这是假设处理在同一页面上完成
    • redirect() 是一个自定义重定向函数

    【讨论】:

      【解决方案3】:

      正如其他人所说,解决方案是在提交时使用 Javascript 更改表单。这是您的示例,其中包含执行此操作的 javascript 函数:

      <html>
      <head>
      <script type="text/javascript">
      function myFunction()
      {
          var myForm = document.getElementById('form-id');
          var allInputs = myForm.getElementsByTagName('input');
          var input, i;
      
          for(i = 0; input = allInputs[i]; i++) {
              if(input.getAttribute('name') && !input.value) {
                  input.setAttribute('name', '');
              }
          }
      }
      </script>
      </head>
      
      <form id="form-id" method="get" action="" name="formulaire" onsubmit="myFunction()">
      <input type="text" name="info1" title="" value="" />
      <input type="text" name="info2" title="" value="" />
      <input type="text" name="info3" title="" value="" />
      <input type="submit" value="Envoyer" />
      </form>
      
      <?php
      echo '$info1 = '.$_GET["info1"].'<br />';
      echo '$info2 = '.$_GET["info2"].'<br />';
      echo '$info3 = '.$_GET["info3"].'<br />';
      ?>
      </html>
      

      【讨论】:

      • 是的!它完美地工作,即使我必须使用更多的 JS。这个解决方案非常适合我,非常感谢! :)
      • 干得好塞夫。要添加到这个 Guillaume,如果您不希望 $info1 = 等最初出现,您可以将 echo '$info1 = '.$_GET["info1"].'&lt;br /&gt;'; 更改/修改为 if(!empty($_GET["info1"])) { echo '$info1 = '.$_GET["info1"].'&lt;br /&gt;';} @Guillaume --- 然后为其他人做其余的事情。跨度>
      【解决方案4】:

      这不是 PHP 问题,而是填充表单的内容。发送表单中的所有值。您需要使用 Javascript 来检查。

      如果表单项设置为禁用,例如它不会被发送

      <script>
      $(function() {
           $('form').submit(function() {
              $(':input[value=""]').attr('disabled', true);
           }
      });
      </script>
      

      http://api.jquery.com/ready/ 如果放置在页面上的任何位置应该可以工作

      你也不需要回显 HTML

      <form method="get" action="" name="formulaire">
        <input type="text" name="info1" title="" value="" />
        <input type="text" name="info2" title="" value="" />
        <input type="text" name="info3" title="" value="" />
        <input type="submit" value="Envoyer" />
      </form>
      <?php
      echo '$info1 = '.$_GET["info1"].'<br />';
      echo '$info2 = '.$_GET["info2"].'<br />';
      echo '$info3 = '.$_GET["info3"].'<br />';
      
      ?>
      

      分离 PHP 和 HTML

      【讨论】:

      • 可以分离 PHP 和 HTML(我的真实代码更复杂)。我必须在哪里添加这段 JS ?我的知识有点有限,抱歉。
      • 假设您使用 jquery,将其插入到加载的 DOM 上。添加代码
      【解决方案5】:

      它不能用 php 来完成。这是 html 表单的标准行为。如果你想这样做,你将不得不使用表单的 javascript 和 onsubmit,循环并删除空元素或构建查询字符串和 location.href=myQueryString

      【讨论】:

      • location.href=myQueryString 不会用查询字符串替换整个 URL 吗?我猜你打算建立一个完整的 URL 并将其设置在那里......
      • @IMSoP 您可以创建一个链接或 javascript 重定向,它只指向以 ? 作为第一个字符的查询字符串。例如,location.href="?foo=1&amp;bar=2&amp;test=3" 可以正常工作。如果不包含页面名称,则假定为当前页面。如果您想转到另一个页面,那么是的,您需要包含该页面名称。
      • 啊,很公平。我试图表现得好像除了绝对和根相对之外没有有效的 URL 表示法,因为它们是造成事故的原因,所以我并没有真正考虑过领先的 ? 是什么意思。
      【解决方案6】:

      当您单击提交按钮时,浏览器将形成 URL。无法使用 PHP 更改浏览器的功能。您可以尝试将表单方法更改为POST

      或者,您可以使用 JavaScript 拦截提交表单,并使用 JavaScript 生成 URL 以转发到。

      【讨论】:

      • GET 是应用程序的要求,所以我不能这样做。我需要在 URL 中显示参数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多