![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
(IMG:http://img193.imageshack.us/img193/1373/rejj.png)
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Druga rzecz to wspomniana wątpliwość. Chodzi o to, że nie jestem do końca przekonany do całego modelu rejestracji. Z podziału na etapy/kroki nie mogę zrezygnować z tego powodu, że to co będzie możliwe do wyboru w stepie trzecim jest zależne od tego co niedoszły użytkownik wybrał w stepie pierwszym itd. Moje wątpliwości budzi jednak wybór metody POST do obsługi tego skryptu. Pytanie moje brzmi, jak rozwiązać problem takiej kilkustopniowej rejestracji. Jakby to mogło przyzwoicie/profesjonalnie być rozwiązane? Dodatkowo powiem, że każdy z trzech kroków nie musi znajdować się w osobnym pliku, mogą być zawarte w jednym z zastrzeżeniem, że np. każdy 'etap' będzie osobnym if'em, czyli poniekąd będzie wyraźny podział rejestracji na trzy części. Z góry dziękuję za wszelkie odpowiedzi i komentarze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
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ł?
|
|
|
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Nie mam póki co doświadczenia w pisaniu aplikacji webowych i po prostu odniosłem wrażenie, że w takim stylu w jakim chciałbym to zaklepać się zwyczajnie nie pisze. Może jednak jestem w błędzie i takie 'przeplatanie' POST i sesji to częsta praktyka? No bo z jednej strony mam już coś w tablicy $_POST i mogę z tego skorzystać, a z drugiej jeszcze raz to zapisuję na serwerze z użyciem sesji...
Ten post edytował falcone 4.07.2009, 20:58:43 |
|
|
![]()
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ć?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Po co? Dobre pytanie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Jakbym mógł, to bym w ogóle nie używał tablicy POST do tego całego 'przesyłania'. Sęk w tym, że nie wiem jak inaczej miałbym odebrać dane wprowadzone w formularzu (np. z pierwszego kroku) jeśli właśnie nie przez $_POST - $_GET odpada z wiadomych powodów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ...
|
|
|
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#8
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Proponuję if zamienić na switch:
|
|
|
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Łaaał (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Skorzystałem z POST lecz, po czasie było to trochę denerwujące, jedno odświeżenie strony i nie ma nic, a więc myślałem jak naprościej napisać to na sesjach i wpadłem na:
+ 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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jeśli chodzi o czyszczenie danych sesji to:
Możesz je wykorzystać podczas wyświetlenia tekstu końcowego (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Czyli np dziękujemy za rejestrację (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:37 |