从提交的URL中忽略没有任何值的表单元素

时间:2011-05-01 07:01:58

标签: php

我想以domain.com/?product=value1&product2=value2 .....的形式创建一个网址。

有时文本框中可能没有值。如何编辑下面的代码以忽略这些表单元素?

我的表单

    <form action="customsearch.php">

    <input type="text" class="textfield" value="" id="product" name="product">
    <input type="text" class="textfield" value="" id="product2" name="product2">
.
.
.    
    <input type="submit" value="Send">

    </form>

3 个答案:

答案 0 :(得分:2)

  

更新您的更新问题:您可以从服务器端重定向到新的更好的网址,但我不确定这是否有意义。在JavaScript中执行此操作可能会更好。

您可以使用http_build_query()

$url = http_build_query($_POST);

正如@David Fells指出的那样,但这不会删除空值。

可以做一个

$post_elements = array_filter($_POST, "strlen");
$url = http_build_query($post_elements );

也是如此,但不要使用大量数据。

此外,如果我是你,我会使用$_GET代替$_POST来执行此操作。

请注意,如果您计划将此用于GET请求,则由于服务器端和浏览器端限制了URL的最大长度,数据的总大小不应超过2-4千字节。

答案 1 :(得分:1)

<?php
foreach ($_POST as $k => $v)
{
  if ('' == $v) {
    $url .= "&".urlencode($k).'='.urlencode($v);
  }
} 
?>

不要使用“if($ v)”,因为如果有人在字段中输入0,则不会添加它。你只想测试'',空字符串。

答案 2 :(得分:0)

自问题完全改变后添加新答案......

没有理由这样做。浏览器根据标准构造查询字符串。如果您想要忽略后端的空字段,请执行此操作。如果由于某些风格原因你无法忍受它们,那么使用jQuery并手动构建URL并在点击时重定向到它 - 但这不是提交表单的预期或正常方式。