Formularz i stronicowanie - pamiętanie stanu
Pisząc wszelkiego rodzaju wyszukiwarki korzystamy z formularzy, w których wprowadzamy warunki wyszukiwania. Sprawa komplikuje się trochę, gdy użyjemy stronicowania znalezionych wyników. Przechodząc na kolejną stronę znalezionych wyników, tracimy warunki wyszukiwania (dane z formularza). Aby temu zapobiec, należy zapamiętać stan wyszukiwania. Można to zrobić na dwa sposoby:
Formularz
Załóżmy, że mamy formularz z dwoma polami do uzupełnienia
<form >
<label>Jakies pole1</label><input name="field1" value=""/><br />
<label>Jakies pole2</label><input name="field2" value=""/><br />
<input type="submit" name="oursubmit" value="Szukaj" />
</form>
Formularz ten, w zależności od wybranego sposoby zapisywania, będziemy wysyłać postem albo getem. Dane z formularza chcemy zapamiętać pomiędzy kolejnymi stronami wyników.
Zapisywanie danych w sesji
Powyższy formularz zostanie wysłany metodą post. W przypadku gdy go wyślemy, jego stan zapamiętamy w sesji. Wchodząc na kolejne strony wyników, będziemy starali pobrać się dane wyszukiwania z sesji.
<?php
session_start();
if (!empty($_POST['oursubmit'])){
//gdy wysłano formularz (kliknięto przycisk "oursubmit")
//zapisz jego stan w sesji
$_SESSION['form'] = array(
'field1' => $_POST['field1'],
'field2' => $_POST['field2']
);
}
//niezależnie, czy wysłano formularz, czy nie,
//pobierz jego stan z sesji
$formData = array(
'field1' => !isset($_SESSION['form']) ? null : $_SESSION['form']['field1'],
'field2' => !isset($_SESSION['form']) ? null : $_SESSION['form']['field2'],
);
?>
<form method="post">
<label>Jakies pole1</label><input name="field1" value="<?php echo $formData['field1'];?>"/><br />
<label>Jakies pole2</label><input name="field2" value="<?php echo$formData['field2'];?>"/><br />
<input type="submit" name="oursubmit" value="Szukaj" />
</form>
<?php
//a tu możemy korzystać z danych formularza zapisanych w $formData
?>
Przykład ten w pełni pokazany jest w pliku ex_form_ses.php począwszy od paczki Pager_v2.5.zip.
Przenoszenie danych w url
Powyższy formularz zostanie wysłany metodą get. Po wejściu na każdą stronę wyników, będziemy pobierali dane z url.
<?php
$formData = array(
'field1' => !isset($_GET['field1']) ? null : $_GET['field1'],
'field2' => !isset($_GET['field2']) ? null : $_GET['field2'],
);
?>
<form method="get">
<label>Jakies pole1</label><input name="field1" value="<?php echo $formData['field1'];?>"/><br />
<label>Jakies pole2</label><input name="field2" value="<?php echo$formData['field2'];?>"/><br />
<input type="submit" name="oursubmit" value="Szukaj" />
</form>
<?php
//a tu możemy korzystać z danych formularza zapisanych w $formData
?>
Kolejną rzeczą, którą musimy zrobić, to tworzenie linków do kolejnych stron z zapamiętaniem w url danych formularza.
Jeśli korzystamy z Pager 2.5 sprawa jest ułatwiona, bo wystarczy wywołać konstruktor z drugim parametrem ustawionym na null:
<?php
$pager = new Pager('idPagera', null);
?>
Powyższy kod będzie tworzyć linki do kolejnych stron z zapamiętaniem stanu url. My już nie musimy się oto martwić.
Przykład ten w pełni pokazany jest w pliku ex_form_get.php począwszy od paczki Pager_v2.5.zip.
Podsumowanie
Można swobodnie korzystać z obu metod. Którą wybierzemy zależy od nas i naszych potrzeb. Jeśli formularz będzie się składać z dużej ilości pól z dużą ilością danych to lepiej zastosować sesje.
Przenoszenie danych formularza w url umożliwia nam tworzenie linków, które bezpośrednio odsyłać nas będą do konkretnych danych z konkretnymi warunkami wyszukiwania.