Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sesje i dane z formularza
--pax--
post
Post #1





Goście







Witam serdecznie,
Tworzę prosty kreator testów jednokrotnego wyboru i napotkałem pewną przeszkodę. W pliku kreator.php mam switch:

  1. <?php
  2. switch ($krok)
  3. ?>

który prowadzi krok po kroku przez tworzenie testu. Przykładowo w pierwszym kroku wpisuje się do formularza informacje takie jak tytuł, czy liczbę pytań. W kroku 2 sprawdzam poprawność danych i w razie potrzeby wyświetlam link zwrotny, aby poprawić nieprawidłowe dane. Dostęp do kreatora mają tylko zalogowani użytkownicy, dlatego też skorzystałem z sesji, aby sprawdzać, czy użytkownik jest zalogowany. I tu pojawia się mój problem. Wcześniej, przed wprowadzeniem użytkowników, po kliknięciu przycisku przenoszącego wstecz, aby poprawić dane, wszystkie dane wpisane w pola input były zapamiętane. Teraz natomiast, po wprowadzeniu sesji, dane są kasowane i wszystko trzeba wpisywać od nowa. Czy to jest normalne zachowanie sesji? Zależy mi na tym, aby przy najmniejszym błędzie nie trzeba było wpisywać wszystkiego ponownie, tylko dane były zapamiętywane. Da się to jakoś zrobić? Może to zachowanie wynika z mojego błędu. Na początku skryptu umieściłem:

  1. <?php
  2. if (session_id() == "")
  3. ?>

Korzystam też z funkcji sprawdzającej, czy użytkownik jest zalogowany.
  1. <?php
  2. function sprawdz_uzyt()
  3. // sprawdzenie czy użytkownik jest zalogowany
  4. {
  5. if (isset($_SESSION['uzyt']))
  6. {
  7. echo 'Zalogowano jako '.stripslashes($_SESSION['uzyt']).'.';
  8. return true;
  9. }
  10. else
  11. {
  12. echo 'Nie jesteś zalogowany.';
  13. return false;
  14. }
  15. }
  16. ?>

Będę wdzięczny za wszelkie wskazówki, jak rozwiązać ten problem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
help_mee
post
Post #2





Grupa: Zarejestrowani
Postów: 244
Pomógł: 21
Dołączył: 10.02.2008
Skąd: Załęcze Wielkie

Ostrzeżenie: (0%)
-----


a wszędzie podtrzymujesz sesje, aby nie wygasły?
Go to the top of the page
+Quote Post
marcio
post
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


NOm to raz to co napisal help_me ale jest jeszcze jedna rzecz gdy ty dasz link zwrotny i ktos na niego kliknie to strona sie przeladowywuje wiec to jest normalne jednak jak zrobisz skrypt w js history.back(-1) czy jakos tak to to dziala na zasadzie wstecz w przegladarce i dane zostaja w cache wiec nic sie nie kasuje ale nie jestem pewny tego co mowie i czy o to ci chodzi
Go to the top of the page
+Quote Post
--pax--
post
Post #4





Goście







Link zwrotny mam w postaci
  1. <a href="javascript:history.back()">Wróć, aby poprawić dane.</a>

więc powinien działać prawidłowo.

Co do podtrzymywania sesji: na samym początku strony, jeszcze przed switchem, dałem session_start() " title="Zobacz w manualu PHP" target="_manual, nie wiem, czy to wystarczy. W switchu też muszę coś zapisać, aby sesje były poprawnie podtrzymywane?
Go to the top of the page
+Quote Post
help_mee
post
Post #5





Grupa: Zarejestrowani
Postów: 244
Pomógł: 21
Dołączył: 10.02.2008
Skąd: Załęcze Wielkie

Ostrzeżenie: (0%)
-----


każda strona musi podtrzymywać daną sesje ;x
Go to the top of the page
+Quote Post
--pax--
post
Post #6





Goście







Ale kod do wszystkich kolejnych kroków umieszczony jest w tym samym pliku, na jego górze jest rozpoczęcie sesji, sprawdzenie, czy użytkownik jest zalogowany i dopiero później switch z kodem do poszczególnych kroków, więc sesja jest już chyba podtrzymywana. Po dodaniu session_start() do każdego case'a i tak jest ten sam błąd.
Go to the top of the page
+Quote Post
help_mee
post
Post #7





Grupa: Zarejestrowani
Postów: 244
Pomógł: 21
Dołączył: 10.02.2008
Skąd: Załęcze Wielkie

Ostrzeżenie: (0%)
-----


http://pl.php.net/manual/en/function.ob-start.php
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




a ja do tego dołożę kodowanie utf-8 bez BOM
Go to the top of the page
+Quote Post
--pax--
post
Post #9





Goście







Przeczytałem o tej funckji ob_start w manualu, wyszukałem kilka przykładów jej użycia, ale nadal nie wiem, jak ją zastosować u siebie.

Może dam trochę więcej kodu.
  1. <?php
  2. if (session_id() == "")
  3. if (!sprawdz_uzyt())
  4. die(' Musisz się zalogować, aby dodawać nowe testy.');
  5.  
  6. $krok = intval($_GET['krok']);
  7.  
  8. switch($krok)
  9. {
  10. case '1':
  11.  ?>
  12.  <form action="index.php?go=kreator&krok=2" method="post">
  13.  <input type="text" name="tytul" size="80" />
  14.  //Reszta inputów do wpisania danych
  15.  <input type="submit" value="Dalej" /></form>
  16.  <?php
  17.  break;
  18. case '2':
  19.  //Sprawdzenie poprawności danych
  20.  if ( (strlen($_GET['tytul']) > 250) || (strlen($_GET['tytul']) < 5 ))
  21. {
  22. echo 'Wpisano niepoprawny tytuł.<br />';
  23. $popraw = 1;
  24.  
  25.  }
  26.  //Dalsze sprawdzanie danych
  27.  if ($popraw)
  28. echo '<a href="javascript:history.back()">Wróć, aby poprawić dane.</a>';
  29.  //Jesli dane sa poprawne, przeslanie do kroku 3
  30. ?>



Co w tym przypadku musiałbym objąć funkcjami ob_start i ob_end_flush, żeby dane nie zostały wykasowane przy cofnięciu się do poprzedniej strony?
Go to the top of the page
+Quote Post
help_mee
post
Post #10





Grupa: Zarejestrowani
Postów: 244
Pomógł: 21
Dołączył: 10.02.2008
Skąd: Załęcze Wielkie

Ostrzeżenie: (0%)
-----


ten kod chyba nie jest poprawnie napisany?! ;x
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
  1. <?php
  2. if (session_id() == "")
  3. ?>

Yyyyy...? Jest sens czegoś takiego?
Go to the top of the page
+Quote Post
--pax--
post
Post #12





Goście







Cytat
ten kod chyba nie jest poprawnie napisany?!

A konkretniej co jest niepoprawnego? To jest tylko wycinek, który miał sprecyzować, w jaki sposób działa ten kreator, wstawianie całego skryptu mija się przecież z celem.

Cytat
Jest sens czegoś takiego?

Znalazłem taki kod w jakimś przykładzie, gdzie była sugestia, że warto sprawdzić, czy sesja jest już rozpoczęta, nie wiem do końca, czy ma to sens. Zresztą, wcześniej rozpoczynałem sesję bez tego warunku i wynik był ten sam.
Go to the top of the page
+Quote Post
kosmos
post
Post #13





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


Cytat(-pax- @ 20.06.2008, 12:49:46 ) *
Wcześniej, przed wprowadzeniem użytkowników, po kliknięciu przycisku przenoszącego wstecz, aby poprawić dane, wszystkie dane wpisane w pola input były zapamiętane. Teraz natomiast, po wprowadzeniu sesji, dane są kasowane i wszystko trzeba wpisywać od nowa. Czy to jest normalne zachowanie sesji? Zależy mi na tym, aby przy najmniejszym błędzie nie trzeba było wpisywać wszystkiego ponownie, tylko dane były zapamiętywane. Da się to jakoś zrobić? Może to zachowanie wynika z mojego błędu.


Czy formularz tworzysz na takiej zasadzie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

  1. <?php
  2. .
  3. .
  4. .
  5. .
  6.  
  7. Imi&#281;*:
  8.  </td>
  9.  <td>
  10.  <input type=text size=50 maxlength=40 name=imie value="'.$_SESSION['imie'].'">
  11.  </td>
  12.  </tr>
  13.  <tr>
  14. <td>
  15. Nazwisko*:
  16. </td>
  17. <td>
  18.  <input type=text size=50 maxlength=40 name=nazwisko value="'.$_SESSION['nazwisko'].'">
  19. </td>
  20. .
  21. .
  22. .
  23. .
  24. .
  25. ?>


Nie wydaje mi sie ....
Aby dane były pamiętane po powrocie musisz dodać w formularzu tak jak w moim przykładzie wyraz VALUE gdzie jego wartością będzie zapamiętana w zmiennej sesyjnej wartość wpisana przez użytkownika w pole formularza.

Ten post edytował kosmos 20.06.2008, 22:20:13
Go to the top of the page
+Quote Post
--pax--
post
Post #14





Goście







Dzięki, pomogło. Co dziwne, wcześniej też ustawiałem value na zmienną zapisaną w sesji, ale nic to nie dało. Najwidoczniej robiłem coś źle. Dzięki za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.12.2025 - 17:33