forms all'altra passare - Usa GET o POST per un modulo di ricerca




4 Answers

I tuoi utenti useranno effettivamente tutti i 50-100 campi per fare le loro ricerche? Se ne usano solo pochi, perché non POST la ricerca in una pagina "in between" che header () - li reindirizza alla pagina dei risultati con solo i campi modificati dall'utente nell'URL? La pagina dei risultati utilizzerebbe quindi i valori predefiniti per i campi che non esistono nell'URL.

attributi tipi

Ho un paio di moduli di ricerca, 1 con ~ 50 campi e l'altro con ~ 100. In genere, come dice la specifica HTML, eseguo ricerche utilizzando il metodo GET in quanto non viene modificato alcun dato. Non ho ancora incontrato questo problema, ma mi chiedo se esaurirò presto lo spazio dell'URL?

Il limite di Internet Explorer è 2083 caratteri. Altri browser hanno un limite molto più alto . Sto eseguendo Apache, quindi il limite è di circa 4000 caratteri, che IIS è 16384 caratteri.

A 100 campi, diciamo che la lunghezza media del nome del campo di 10 caratteri, che è già 5000 caratteri ... incredibile sul modulo da 100 campi, non ho ancora avuto alcun errore. (25% dei campi sono selezioni multiple, quindi la lunghezza del campo è molto più lunga.)

Quindi, mi sto chiedendo quali sono le mie opzioni. (Accorciare i moduli non è un'opzione.) Ecco le mie idee:

  • Usa POST. Non mi piace così tanto perché al momento gli utenti possono aggiungere ai segnalibri le loro ricerche ed eseguirle di nuovo in seguito - una caratteristica davvero carina.
  • Avere il ciclo in JavaScript attraverso il modulo per determinare quali campi sono diversi da quelli predefiniti, compilare un altro modulo e inviarlo. L'utente vorrebbe ovviamente aggiungere la versione abbreviata.

Altre idee?

Inoltre, qualcuno sa se la lunghezza è la lunghezza codificata o semplicemente il testo?

Sto sviluppando in PHP, ma probabilmente non fa la differenza.

Modifica: non riesco a rimuovere alcun campo; Non riesco ad abbreviare il modulo. Questo è ciò che il cliente ha chiesto e spesso usano una serie di campi, nelle diverse categorie. So che è difficile pensare a un modulo che sia bello con questi molti campi, ma gli utenti non hanno problemi a capire come funziona.




In un commento si menziona che molti dei campi "sono nascosti e possono essere aperti come richiesto".

Se sei disposto a scartare il degrado aggraziato, puoi sempre aggiungere e rimuovere i campi dal modulo, piuttosto che nasconderlo e mostrarli: il browser non invierà quelli che non sono inclusi nel modulo.

Questa è una variante dei moduli "Marca e modello" utilizzati dalle pagine dell'assicurazione online ecc. - selezionare la marca, inviare di nuovo al server e ottenere l'elenco dei modelli per quel produttore.




Utilizza post e se l'utente aggiunge la ricerca ai preferiti, salvala in un database e assegnagli un token univoco, quindi reindirizza alla pagina di ricerca utilizzando GET e passando il token come parametro.

TinyURL è un bell'esempio: gli dai un URL molto lungo, lo salva in un DB, ti dà un identificatore univoco per quell'URL e in seguito puoi richiedere l'URL lungo usando quell'identificatore.

In PHP sarebbe qualcosa sulla falsariga di:

<?php
if (isset($_GET['token']))
{
    $token = addslashes($_GET['token']);
    $qry = mysql_query("SELECT fields FROM searches WHERE token = '{$token}'");
    if ($row = mysql_fetch_assoc($qry))
    {
        performSearch(unserialize($row['fields']));
        exit;
    }
    showError('Your saved search has been removed because it hasn\'t been used in a while');
    exit;
}
$fields = addslashes(serialize($_POST));
$token = sha1($_SERVER['REMOTE_ADDR'].rand());
mysql_query("INSERT INTO searches (token, fields, save_time) Values ('{$token}', '{$fields}', NOW())");
header('Location: ?token='.$token);
exit;
?>

E fai girare una sceneggiatura ogni giorno:

<?php
mysql_query('DELETE FROM searches WHERE save_time < DATE_ADD(NOW(), INTERVAL -200 DAY)');
?>



Si potrebbe filosoficamente considerare il POST di invio della ricerca come la creazione di una ricerca salvata (specialmente quando una ricerca è un oggetto complesso come quello che stanno facendo gli utenti). In questo caso, puoi accettare il post per la creazione di una ricerca e quindi reindirizzare utilizzando GET per recuperare i risultati di ricerca appropriati (post / reindirizzamento / ottieni).

Ciò consentirebbe inoltre agli utenti di aggiungere ai segnalibri i risultati della ricerca (GET) per tornare in qualsiasi momento a rieseguire la ricerca.




Related


Tags

forms   post   get