Formularz i stronicowanie - pamiętanie stanu

2007-10-22 17:37:21

 

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 zapobiedz, 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

1
2
3
4
5
<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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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:

1
2
3
<?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.

 

Komentarze

 

Dodaj komentarz

 

Dostępne bbcode: b, u, i, color, size, quote, img, url, list, il (tylko w list), code, php, css, html, sql, js