[php] Problem $_POST

Robię księgę gości i mam taki oto problem.

Założeniem księgi jest, aby każdy mógł dodać tylko jeden wpis. Blokowanie wpisów z IP działa świetnie, ale problem pojawia się kiedy osoba dodająca wpis tuż po jego przesłaniu na serwer odświeży stronę wpis może zostać dodany nieskończoną liczbę razy.

Próbowałem paru rozwiązań. Jako, że nie wiem jak pozbyć się $_POST’a postanowiłem, aby przed zapisem wartość $_POST została przypisana do zmiennej, zmienna wpisana do pliku po czym unset’owana. Ale to także nie zadziałało. Co można zrobić?

Podstawa to nigdy, przenigdy nie zapisywać bezpośrednio zewnetrznych danych $_POST/GET itd. …tylko do zmiennej, sprawdzasz zawartość (filtrowanie) i dopiero potem zapis do pliku/bazy.

W przeciwnym wypadku byle pseudo hacker ci stronke rozwali :wink:

A co do blokowanie submita, cóż …zapisuj sobie ciacho albo do zmiennej sesyjnej że już był wysłany …potem tylko prosty IF i po ptokach :wink:

tak jak napisał adpawl - filtruj dane otrzymywane od użytkowników !

polecam stosować strip_tags() oraz mysql_escape_string() - jeśli używasz bazy danych …

Najłatwiej/prymitywniej będzie odświeżenie strony poprzez meta tag zaraz po dodaniu wpisu do księgi .

Tzn. dodajesz wpis, i następnie gdy jest info o poprawnym dodaniu rekordu -

Za pogrubione podstawiasz sobie czas (po jakim nastąpi przekierowanie - można dać 0) oraz dowolny adres strony :slight_smile:

Polecam bardzo rozwiązanie z sesjami …

na samym początku dokumentu inicjujesz sesję -

ini_set('session.use_cookies', 1);

session_set_cookie_params(43200);

session_start();

Po dodaniu wpisu do księgi - w sesji np. $_SESSION[‘ksiega’] podstawiasz wartość ‘dodano’ i przed wyświetleniem formularza robisz sprawdzanie sesji …

if(!isset($_SESSION['ksiega'])){

wyswietl formularz do dodawania wpisów;

}else{

echo 'Dodałeś już wpis.';

}

Albo możesz też sprawdzić przez zapisaniem wpisu czy identyczny spis już nie istnieje, tzn nick, email, treść. Wątpliwe jest ze 2 różnych użytkowników chciałoby dodać identyczne dane.