仅在isset的情况下传递GET信息


Only pass GET information if isset

我正在使用一个带有GET方法的表单来添加到查询字符串中。

我遇到了一个问题。提交表单时,每个字段都会被发送并添加到查询中,包括没有值的字段。

示例:

http://web.com/?filter-types=news&filter-document-type=&filter-topics=we-have-a-topic&filter-featured=&filter-rating=

如果没有设置它们,我可以不将它们添加到查询字符串中吗?!isset()还是有其他方法?

您也可以通过javascript操作表单输入,正如Mike在评论中所说,在提交时检查字段,如果为空,请禁用它们,这样它们就不会包含在提交中。

这只是(jQuery)的基本想法:

<form method="GET" id="form_inputs">
    <input type="text" name="field1" value="field_with_value" /><br/>
    <input type="text" name="field2" value="" /><br/><!-- empty field -->
    <input type="text" name="field3" value="field_with_value" /><br/>
    <input type="submit" name="submit_form" id="submit_form" value="Submit" />
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$('input[name="submit_form"]').on('click', function(e){
    e.preventDefault();
    $('form').children().each(function(i, e){
        if($(e).is('input') && $(this).val() == '') {
            $(this).prop('disabled', true);
            // or $(this).attr('name', '');
        }
    });
    $('form').submit();
});
</script>

或者,如果您根本不想使用jquery:

document.getElementById('submit_form').addEventListener('click', function(e){
    e.preventDefault();
    var children = document.getElementById('form_inputs').childNodes;
    for(i = 0; i < children.length; i++) {
        if(children[i].type == 'text' && children[i].value == '') {
            children[i].disabled = true;
        }
    }
    document.getElementById('form_inputs').submit();
});

所有这些键显示在查询字符串中的原因是它们在表单中作为输入存在。如果不希望发送它们,请将它们从表单中删除,或者至少为它们提供一些有意义的默认值。

我想你正在寻找条件

 if (!empty($_POST['var'])) {
 }

 if (!isset($_POST['var']) && !empty($_POST['var'])) {
 }