显示URL中的空GET变量

时间:2014-01-21 23:54:37

标签: php forms get

这是我的表格:

<?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中显示非空变量。

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

6 个答案:

答案 0 :(得分:10)

像其他人所说的那样,解决方案是在提交时使用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>

答案 1 :(得分:3)

它不是一个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

答案 2 :(得分:1)

用PHP无法完成。这是html表单的标准行为。如果你想这样做,你必须使用表单的javascript和onsubmit,循环并删除空元素或构建查询字符串location.href=myQueryString

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我们可以轻松地将网址设置为空,而无需javascript或其他插件,此处代码将其放在会话代码之后的代码顶部,但请注意我们只能使用post方法。它是安全的而不是更复杂的

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

欢呼声