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.

Komentarze

 

Dodaj komentarz

 

Dostępne bbcode: b, u, i, url, code, php, css, html, sql, js

Ostatnio komentowane

  1. Mysql - FAQ Paweł
  2. Pager 2.5.1 oraz EPa... Na szybko2
  3. Pager 2.5.1 oraz EPa... Sławek
  4. Mysql - FAQ Piotr
  5. Liczba dni roboczych Na szybko2
  6. Liczba dni roboczych Naszybko
  7. Klasa widoku nospor

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer