![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jestem nowy na forum i dopiero raczkuje w php. Mam taki problem jak w temacie, męczę się z tym już od paru dni i nie wiem jak to rozgryźć (IMG:style_emoticons/default/sciana.gif)
Przejdę może do konkretów, do zapisywania danych z formularza wykorzystałem skrypt z artkułu "Formularz i stronicowanie - pamiętanie stanu" nospora LINK po przekształceniu pod siebie mam taki kod:
...Formularz jest walidowany, a po przejściu walidacji prawidłowo dalsza część skryptu wysyła mail z serwera
i tu właśnie chciałbym żeby ta zmienna przyjęła wartość 0 i odniosła się do początku pliku, gdzie mamy if (!empty($_POST['wyslij']) && $jakas_zmienna==1). Żeby nie został spełniony warunek! Poproszę o jakieś sugestie jak to rozwiązać, z czego skorzystać i na czym się skupić. Może ktoś ma zupełnie jakiś inny pomysł na rozwiązanie problemu. Będę wdzięczny za jakąkolwiek pomoc. Ten post edytował Rafalll1984 29.10.2009, 11:43:06 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
nie rozumiem o co ci chodzi, ale odniose sie do kodu co tu napisales.
ten kod: powinien byc poza warunkiem a u ciebie jest w. Naprawde tak to u Ciebie ma być? Bo po kodzie co tu pokazales to jest to bez sensu |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Przecież nie możesz się w takiej sytuacji cofnąć do czegoś co już zostało zrobione. Jeśli już tak bardzo chcesz się pozbyć tych wartości po zrobieniu POST to wyczyść sobie zmienną sesyjną lub nie zapisuj do sesji wartości z POST zależnie od tego jak u Ciebie to wygląda. Bo to właśnie SESSION ma za zadanie trzymać wartości pół formularza w pamięci.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie jak patrze teraz na ten artykuł, zdaje się, że to twój nospor. To widzę, że popełniłem błąd i faktycznie kod miał być po za warunkiem. Wrzuciłem go do warunku przez pomyłkę ale spełniał swoje zadanie więc umkło mi to! A co do kodu który pokazałeś to nie wiem czy sam go do końca rozumie. Tablica $_SESSION['formularz'] zapisywana jest do zmiennej $dane_z_form która reprezentuje tablice.
A co do samego tematu. To problem przedstawia taką sytuacje: osoba wchodzi na stronę z formularzem, wypełnia go: 1) Jeżeli wypełniła błędnie pola(walidacja formularza) to dzięki temu skryptowi
nie musi wypełniać wszystkiego od nowa, stan pól jest zapamiętany 2) Po wypełnieniu wszystkiego poprawnie (walidacja formularza) zostaje wysłany formularz ( mail z serwera) i w tym miejscu chciałbym żeby dane nie były już zapamiętywane zaznaczę, że formularz ma opcje w actio="<?=$PHP_SELF; ?>" mam nadzieje, że to bardziej uzmysłowi problem Ten post edytował Rafalll1984 29.10.2009, 12:15:11 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
po prostu po poprawnym wypelnieniu wszystkiego i wysłaniu maila zrob:
unset($_SESSION['formularz']); |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przecież nie możesz się w takiej sytuacji cofnąć do czegoś co już zostało zrobione. Jeśli już tak bardzo chcesz się pozbyć tych wartości po zrobieniu POST to wyczyść sobie zmienną sesyjną lub nie zapisuj do sesji wartości z POST zależnie od tego jak u Ciebie to wygląda. Bo to właśnie SESSION ma za zadanie trzymać wartości pół formularza w pamięci. thek czyli mam wyczyścić w moim przypadku zmienna $dane_z_form, tak, dobrze rozumie to?? Próbowałem jakiego czyszczenia tablicy ale ze słabym skutkiem |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@Rafalll1984 napisalem ci przeciez co masz zrobic
|
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Rafalll1984 zrób cokolwiek by zmienna sesyjna nie zawierała nic lub została usunięta. Możesz to zrobić poprzez nadpisanie pól formularza wartościami domyślnymi, usunięcie zmiennej sesyjnej (co proponuje nospor z użyciem unset) lub całkowicie pomiń "zabawę" ze zmienną sesyjną w pliku i zamiast przepisywać wszystko z POST do SESSION a potem z jeszcze do $dane_z_form działaj tylko na zmiennej POST. Ów skrypt, którego autorem jest nospor, jest tak zaprojektowany by pamiętał dane po naciśnięciu submit. Jeśli chcesz ten efekt usunąć świadomie to większość rzeczy jest tam zbędna i możesz się do najprostszego forma w zasadzie cofnąć (oczywiście zostawiając walidację) i nospor oraz inni Ci sami to przyznają (IMG:style_emoticons/default/smile.gif) Bo najprostszy form bez czegokolwiek ma takie domyślne zachowanie - by nie pamiętać.
Ten post edytował thek 29.10.2009, 12:45:27 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Widzę Nospor ale napisałeś mi ostatnią wiadomość jak ja pisałem pytanie do Thek'a. I nie widziałem twoje odp.
Więc tak napisałem Ale niestety nie przyniosło to oczekiwanych rezultatów Nie wiem czy dobrze myślę ale może i unset($_SESSION['formularz']); zniszczy ta sessje ale po wysłaniu formularza następuje przeładowanie strony a pierwszy kod jaki jest to
więc ta sessja nie zostanie utworzona od nowa (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/snitch.gif) Sorry chłopaki, że tak Was męczę i rozumie co piszecie. Do Thek'a zastosowałem ten skrypt żeby osoba która wypełni błędnie formularz nie musiała wszystkiego od nowa wpisywać. A po naciśnięciu przycisku submit wyczyściły jej się dane z formularza żeby nie myliła tego z błędnym wypełnieniem Ten post edytował Rafalll1984 29.10.2009, 12:52:01 |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Nie widziałem tego w wymienionym kodzie z linku, ale powinieneś to rozwiązać tak, że w momencie gdy formularz zostaje przetworzony bez błędów niszczysz sesję i tylko wtedy. Dzięki temu jeśli nastąpił błąd, to będzie ona istnieć. Tylko prawidłowe przetworzenie danych sprawi, że ulegną one zniszczeniu. Dlatego nospor dobrze Ci radzi, tyle że to Ty musisz już wiedzieć gdzie w Twoim przerobionym kodzie możesz sobie na unset pozwolić. A jak już mówiłem... Robisz to dopiero po prawidłowym przebiegu całej walidacji, wysłaniu do bazy czy co tam jeszcze chcesz zrobić (IMG:style_emoticons/default/smile.gif)
EDIT: Poza tym zwróć uwagę, że te dane przechowuje u Ciebie także zmienna $dane_z_form. Zobacz która z nich jest wpisywana jako value formularza w miejscu CO_TUTAJ w kodzie:
I tę zmienna zniszcz poprzez unset po wysłaniu maila. Wtedy nie powinno nic wrzucić do pól. Ten post edytował thek 29.10.2009, 13:25:30 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Widzę Thek, że rozumiemy się (IMG:style_emoticons/default/smile.gif)
Nie widziałem tego w wymienionym kodzie z linku, ale powinieneś to rozwiązać tak, że w momencie gdy formularz zostaje przetworzony bez błędów niszczysz sesję i tylko wtedy. Dzięki temu jeśli nastąpił błąd, to będzie ona istnieć. Tylko prawidłowe przetworzenie danych sprawi, że ulegną one zniszczeniu. Dlatego nospor dobrze Ci radzi, tyle że to Ty musisz już wiedzieć gdzie w Twoim przerobionym kodzie możesz sobie na unset pozwolić. A jak już mówiłem... Robisz to dopiero po prawidłowym przebiegu całej walidacji, wysłaniu do bazy czy co tam jeszcze chcesz zrobić (IMG:style_emoticons/default/smile.gif) No i ja dokładnie idę tym "tropem", od początku szedłem (IMG:style_emoticons/default/smile.gif) u mnie właśnie po przejściu prawidłowo wszystkich warunków (Walidacja) następuje, wysłanie maila ( z serwera). Więc myślę, że to jest ten moment o który nam chodzi. A przedstawia się on w chodzie tak No i może to i działa ale po wysłaniu wiadomości strona przeładowywuje się. Ja to tak rozumie, nie wiem czy słusznie. Zaznaczam, że formularz posiada <form id="kontakt" method="post" action="<?=$PHP_SELF; ?>"> a pierwsze linijki kodu to
i nie powstaje w tym czasie na nowo $_SESSION['formularz'] (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/snitch.gif) A co do tego co pytałeś to, według twoich zaleceń próbowałem na dwa sposoby: z pominięciem zmiennej $dane_z_form <input type="text" id="imie" name="imieinazwisko" size="20" maxlength="30" value="<?php echo $_SESSION['formularz']['imieinazwisko']; ?>"/> i nią <input type="text" id="imie" name="imieinazwisko" size="20" maxlength="30" value="<?php echo $dane_z_form['imieinazwisko'];?>"/> Chciałem jeszcze zaznaczy, nie wiem czy to coś pomoże ale mój formularz ma schemat
ewentualnie Thek mógłbym Ci wysłać na pw linka do mojego formularza testowego (IMG:style_emoticons/default/winksmiley.jpg) Ten post edytował Rafalll1984 29.10.2009, 14:34:37 |
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
PHP_SELF nie jest potrzebne (IMG:style_emoticons/default/smile.gif) Zapis action="" powoduje odwołanie się pliku do samego siebie. W momencie gdy robisz unset, to wszystkie dane powinny zostać usunięte. Zauważ, że całość skryptu wykonuje się na serwerze i dopiero po jego przetworzeniu idzie plik html do klienta. Jeśli więc struktura jest taka jaką podałeś, to po przejściu walidacji wysyła maila niszczy zmienne wypisuje komunikat o powodzeniu i dopiero wtedy wypełnia formularz, a właściwie wtedy próbuje go wypełnić, bo w tym momencie sesja i $dane_z_forma powinny już być puste. Potem jest wysyłka dopiero do klienta kodu. Z poziomu logiki ten kod nie ma prawa się zachowywać inaczej. Mogłeś najwyżej gdzieś się porypać w nawiasach, ale wtedy byś miał problemy z jego wyświetlaniem jako czystego. Myślę, że najlepiej jeśli byś na PW mi lub tutaj wszystkim dał pełny kod tego pliku to może byśmy jakiś błąd znaleźli wszyscy. Bo w sytuacji gdy się przerabia czyjś kod, często można szczegółów nie zauważyć i utknąć na malutkim drobiazgu. Widząc cały kod formularza (nie tylko jego wynikowy html ) na bank znajdziemy przyczynę.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Thek zostawiłem Ci wiadomość na PW (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 13:26 |