Cześć
Mam bardzo prostą stronkę wyświetlającą jakieś tam produkty w tabeli. Są one pobierane z bazy danych MongoDB. Stronicuję wyniki i wyświetlam po 20 na podstronę (to stronicowanie też bardzo proste).
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
$limit = 20;
$skip = ($page - 1) * $limit;
$next = ($page + 1);
$prev = ($page - 1);
$db = get_db();
$products = $db->products->find([], [[ 'skip' => $skip, 'limit' => $limit ]]);
?>
Dalej jest kod HTML wyświetlący tabelę i ew. <?= ?> z wartościami z bazy danych.
Do każdego produktu dorabiam pole typu checkbox, o value równym id produktu bazy danych i name: selected[].
Chciałbym aby po zaznaczeniu i kliknięciu jakiegoś tam przycisku pod tabelą zapisywało, które produkty zostały zaznaczone. Potem wykorzystuję to w takim prowizorycznym koszyku na innej podstronie (identyfikuję produkty przez te id).
Mój problem polega na tym, że obsługa zaznaczania tych pól działa tylko dla danej podstrony, jeśli na pierwszej zaznaczę ze 3 produkty i przejdę do kolejnej podstrony, a potem tam kliknę 'zapisz', to te z pierwszej nie są pamiętane.
Kod zapisujący dane po kliknięciu przycisku zapisz:
<?php
if (! isset($_SESSION['saved']))
$_SESSION['saved']=array();
if(isset($_POST['save']))
{
if(!empty($_POST['selected']))
{
unset($_SESSION['saved']);
$_SESSION['saved']=array();
foreach($_POST['selected'] as $selected)
{
array_push($_SESSION['saved'], $selected);
}
}
}
?>
Szukałem trochę w Internecie jak to ulepszyć, żeby zapisywało też z innych podstron. W jednym z tematów gość sugerował zmianę wysyłki formularza na GET, próbowałem i nic nie dało, z resztą nie wiem co to miałoby zmienić.
Chciałbym jakoś zapisywać w sesji (nie konkretnie od razu to tablicy 'saved' ale do jakieś tymczasowej, który potem dołączałbym po kliknięciu zapisz i ew. usuwałbym duplikaty) ale nie wiem jak zrobić, żeby wartości z pól typu checkbox były zapisane po samym ich kliknięciu, bez klikania zapisz (i wysyłania formularza) na każdej podstronie.