2012-04-08 9 views
2

Ich verwende das folgende Formular als Teil einer erweiterten Suche in meiner WordPress-Installation.Gibt es eine Möglichkeit, ein GET-Formular zu stoppen, um leere Variablen zu senden?

<form action="/advanced-search/" method="get"> 

Das Formular korrekt funktioniert, aber URLs wie produzieren:

/advanced-search/page/3/?act=s&f=cichlidae&g&s&c&r&tmin&tmax&hmin&hmax&pHmin&pHmax&cmin&cmax&sF&sM&aL&aD&aH

Gibt es eine Möglichkeit, das Formular zu stoppen senden die leeren Variablen? Im obigen Beispiel wurde nur f gesucht (Wert cichlidae). Als solches würde ich es vorziehen, eine URL wie diese zu erzeugen:

/advanced-search/?act=s&f=cichlidae (plus die /page/3/ wenn notwendig).

Ich kann $_POST nicht verwenden, weil ich die WordPress paged Variable nicht mit $_POST Werte arbeiten kann.

Vielen Dank im Voraus,

Antwort

2

Warum Sie jQuery nicht verwenden serialize Methode alle Werte, die die Form in einer Zeichenfolge zu sammeln?

$('form').submit(function() { 
    var string = $(this).serialize(); 
    window.location.href = '/advanced-search/'+string; 
}); 

Es durch alle Ihre Formularelemente Schleifen, sammelt ihre Werte und wandelt sie in ein lesbares Format-String für die Verwendung in URLs.

1

nicht zu einer Form eingebaut, nein - wenn das Feld vorhanden ist, wird es gesendet werden.

Sie könnten stattdessen Javascript verwenden, um das Formular zu senden und leere Felder auszulassen.

1

Nein, es gibt keinen Weg (ohne JavaScript, das ist). Wenn dies der Fall wäre, wäre dies browserspezifisch, da der Browser entscheidet, was mit den Formulardaten zu tun ist.

Auch dies:

foo.php?a= 

... und:

foo.php 

... ist semantisch anders. Im ersten Fall wird a mit einem leeren String ("") übergeben, während der letzte, a überhaupt nicht bestanden wird (null).

Auch Wordpress ist hier korrekt, da das Formular ein Suchformular ist, so ist es Abfrage Daten und sollte GET verwenden; und nicht erstellen Daten wie POST sollte tun.

Eine Möglichkeit, dies zu ändern (ohne JavaScript), ist die Verwendung eines Gateway-Skripts, das leere Parameter aus der URL und der Umleitung entfernt.

Per Beispiel:

$newGET = array(); 
foreach ($_GET as $key => $value) { 
    if ($value !== '') $newGET[$key] = $value; 
} 

header('Location: some/url?'.http_build_query($newGET)); 
exit; 
Verwandte Themen