![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
![]() A więc, mam pewien problem ze swoim skryptem rejestracji nowych użytkowników serwisu. Proces tworzenia nowego user'a jest taki jak na powyższym rysunku, tzn. składa się z trzech kroków, z których każdy jest osobnym plikiem PHP. Między kolejnymi etapami dane już podane są przesyłane metodą POST. Aby nie 'stracić' danych wprowadzonych w pierwszym kroku gdy dochodzimy do ostatniego, w pliku 'krok2.php' dane z tablicy $_POST wrzucam do ukrytych (atrybut hidden) znaczników <INPUT> jako ich wartość poniższą metodą:
Wszystko niby dobrze, ale mam z tym skryptem jeden problem i jedną wątpliwość na dokładkę. Po pierwsze, jeśli ktoś specjalnie bądź przez nieuwagę odświeży którąś ze stron to wszystko co do tej pory było w tablicy $_POST jak wiadomo 'gine'. Muszę taką okoliczność wyifować, delikwenta przerzucić do pierwszego kroku i wyświetlić informację, że niestety ale ma pecha bo wszystko zaczyna od początku ![]() ![]() -------------------- linux
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
A o sesjach, to Waść nie słyszał?
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
A właśnie, nie wspomniałem. Myślałem tu o sesjach, ale w pierwszej chwili wydało mi się, że gdy będę wprowadzane dane odbierał przez POST, a następnie przechowywał w tablicy $_SESSION to będzie to jakieś za bardzo przekombinowane
![]() Ten post edytował falcone 4.07.2009, 20:58:43 -------------------- linux
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Właśnie sesje są do tego celu, użyszkodnik ma tylko podstawiać, do którego kroku przechodzić, po co tyle danych niepotrzebnie przesyłać?
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Po co? Dobre pytanie
![]() ![]() -------------------- linux
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Najprostsza metoda, żeby step 2 czy 3 był odporny na odświeżanie to :
Ale jak pisze erix, jeśli zapiszesz sobie dane z POSTu do SESSION to będziesz mógł przejść dalej i nawet jak user odświeży stronę to spowrotem załadujesz sobie dane z tablicy SESSION Ten post edytował R4D3K 5.07.2009, 00:21:41 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
wkładaj po każdym kroku do bazy; i tak wszystkie przesłane dane wylądują w bazie więc po co bawić się w tymczasowe trzymanie ich w hidden albo w sesji? po kazdym kroku wrzucasz dane do bazy + oznaczasz, że są niekompletne, po ostatnim kroku zmieniasz flage na kompletne i juz
![]() -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Proponuję if zamienić na switch:
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
wkładaj po każdym kroku do bazy; i tak wszystkie przesłane dane wylądują w bazie więc po co bawić się w tymczasowe trzymanie ich w hidden albo w sesji? Chyba jednak zostanę przy POST i sesji. Takie wkładanie do bazy na raty nie za dobrze mi się kojarzy. Wierząc, że każdy kto przejdzie pierwszy krok, przejdzie i następne i z sukcesem zakończy proces rejestracji nie ma się o co martwić. Jeśli jednak nasz użyszkodnik przestraszy się tego, jakie informacje się chce od niego wyciągnąć na finish'u całego formularza i jednym kliknięciem opuści nasz serwis - o zgrozo - pozostajemy z niekompletnymi rekordami w bazie danych, które trzeba cyklicznie sprawdzać i sukcesywnie usuwać. A co gdy np. wspomniany wcześniej, niedoszły user serwisu się zreflektuje i zapragnie dokończyć rejestrację? Mamy się zaprzeć nawróconego grzesznika? Zatem dopuszczamy go do procesu rejestracji. Okazuje się jednak, że podaje on inny login niż w ostatnim niedokończonym procesie. Czyli tak, login podmieniamy na nowy w naszej bazie, email bez zmian i dalej puste pola... może się wkrótce zapełnią? A więc nadal czekamy, nie czyścimy wpisu w bazie. Albo usuwamy i zaczynamy od nowa? Jednym słowem, za dużo hałasu o nic. Jak dla mnie, jeśli wrzucać coś do bazy - to tylko w pełnym składzie, aż po lewego skrzydłowego - nigdy na raty. Co do ostatecznego rozwiązania, wybrałem zwyczajnie pobieranie danych z formularzy metodą POST, które zaraz potem trafiają do sesji (broń Boże do ciastek). Ustawiam na nią jakiś rozsądny czas, żeby niedokończona rejestracja nie odbiła się za bardzo czkawką całemu systemowi, natomiast, żeby można ją spokojnie doprowadzić do końca. If succeed - sru i nie ma sesji, dane trafiają do bazy i znika wszelki ślad po ostatniej działalności na formularzach. Teraz tylko poszukam na forum jakiegoś tematu o automatycznym czyszczeniu plików sesyjnych na serwerze i można by rzec... formularz gotowy ![]() ![]() -------------------- linux
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 1 Dołączył: 23.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio borykałem się z takim samym problemem
![]()
+ do tego wyświetlenie danych:
A jeśli chodzi o zapis danych aby nie tracić ich, to najlepsza będzie sesja. Tam gdzie u mnie w kodzie jest dodawanie sesji krok, możesz wstawić też zapis danych z formularza ![]() Jeśli chodzi o czyszczenie danych sesji to:
Możesz je wykorzystać podczas wyświetlenia tekstu końcowego ![]() ![]() Pozdrawiam ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 18:03 |