Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] kasowanie wartosci zapamietanych w sesji
Forum PHP.pl > Forum > Przedszkole
lnn
witam

mam problem otoz, w sesji po zalogowaniu przechowuje id i jeszcze 3 inne dane
a gdy w innym formularzu wprowadzam dane poprzez formularz i zapamietuje je w sesji to po przeladowaniu strony sie one kasuja, co moze byc zrobione nie tak? ;/ skoro jedne wartosci pamieta a drugich nie

dodam że w pliku add1.php - wprowadzam dane
w add2.php - sa one odbierane poprzez $_POST[], czy byc moze dlatego one sie zeruja po ponownym przeladowaniu dlatego ze nic nie jest odebrane poprzez POST??
blooregard
Cytat
w add2.php

A masz session_start() na początku add2.php ?

BTW, nic prócz unset() nie usunie Ci żadnych danych z sesji.
lnn
wiem juz w czym rzecz, jesli w pliku add2.php ktory wczesniej odbieral dane poprzez $_POST[] znajduja sie wlasnie te zmienne to po np wczytaniu samego add2.php ponownie sa one kasowane dlatego ze nie przekazuje sie nic w POST i wartosci sa zerowe

zrobilem eksperyment i wyslalem dane w formularzu bez akcji ale zeby zapamietywalo do sesji i odczytalem w add2.php i moge odswiezac i odswiezac i mi sie one nie kasuja.. czy koniecznie dane z formularza trzeba odbierac poprzez POST skoro inicjuje sesje?

  1. $_SESSION['nazwa'] = $_POST['nazwa'];
  2. $_SESSION['adres1'] = $_POST['adres1'];
  3. $_SESSION['adres1_nr'] = $_POST['adres1_nr'];
  4. $_SESSION['adres2'] = $_POST['adres2'];
  5. $_SESSION['adres2_kod'] = $_POST['adres2_kod'];
  6. $_SESSION['wojewodztwo'] = $_POST['wojewodztwo'];
  7. $_SESSION['tel1'] = $_POST['tel1'];
  8. $_SESSION['tel2'] = $_POST['tel2'];
  9. $_SESSION['fax'] = $_POST['fax'];
  10. $_SESSION['email'] = $_POST['email'];
  11. $_SESSION['www'] = $_POST['www'];
  12. $_SESSION['typ_obiektu'] = $_POST['typ_obiektu'];
blooregard
A po co w ogóle tak robisz, tzn. od razu bezpośrednio zapisujesz zmienne z POST do SESSION?

Sprawdzaj, czy wartości z $_POST nie są puste i/lub mają oczekiwane wartości i wtedy dopiero zapisuj je do sesji.
lnn
Cytat(blooregard @ 23.12.2009, 21:19:10 ) *
A po co w ogóle tak robisz, tzn. od razu bezpośrednio zapisujesz zmienne z POST do SESSION?

Sprawdzaj, czy wartości z $_POST nie są puste i/lub mają oczekiwane wartości i wtedy dopiero zapisuj je do sesji.

to teraz nie ma znaczenia czy sa puste czy nie, umiem zrobic walidacje...

chodzi o to ze chce zrobic formularz dajmy na to 5 etapowy, kazdy etap ma byc zapamietywany w sesji by na samym koncu zapisac wszystko do bazy (chce uniknac zeby niepotrzebne dane nie byly zapisywane po drodze do db)

czyli jedyny sposob na odebranie danych z formularza to $_POST, a ewentualne przeładowanie strony nie poprzez odswiez gdzie jest opcja zeby przeslalo jeszcze raz dane tylko przeladowanie poprzez wywolanie adresu skasuje te dane?

-- edit --
moze zapodam lepiej zrodla, zeby zobrazowac problem, teraz gdy jest tak jak jest to dziala jakbym chcial
add.php
  1. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  2.  
  3. if($_SESSION['logged']==false) {
  4. echo 'Aby dodać obiekt <a href="index.php?p=login">zaloguj się</a>, ';
  5. echo 'jeżeli jeszcze nie posiadasz konta <a href="index.php?p=register">zarejestruj się</a>';
  6. } else {
  7.  
  8. }
  9.  
  10. if (isset($_POST['next'])) {
  11. // start sesji
  12. $_SESSION['dodawanie_obiektu'] = true;
  13.  
  14. $_SESSION['nazwa'] = $_POST['nazwa'];
  15. $_SESSION['adres1'] = $_POST['adres1'];
  16. $_SESSION['adres1_nr'] = $_POST['adres1_nr'];
  17. $_SESSION['adres2'] = $_POST['adres2'];
  18. $_SESSION['adres2_kod'] = $_POST['adres2_kod'];
  19. $_SESSION['wojewodztwo'] = $_POST['wojewodztwo'];
  20. $_SESSION['tel1'] = $_POST['tel1'];
  21. $_SESSION['tel2'] = $_POST['tel2'];
  22. $_SESSION['fax'] = $_POST['fax'];
  23. $_SESSION['email'] = $_POST['email'];
  24. $_SESSION['www'] = $_POST['www'];
  25. $_SESSION['typ_obiektu'] = $_POST['typ_obiektu'];
  26.  
  27. }
  28. ?>

add2.php ktore odbiera dane z sesji bez zmiennych z POST dane zachowuja sie
  1. <?php
  2.  
  3. echo 'id usera: ' .$_SESSION['id']. '<br />';
  4. $_SESSION['nazwa']. '<br />'
  5. .$_SESSION['adres1']. '<br />'
  6. .$_SESSION['adres1_nr']. '<br />'
  7. .$_SESSION['adres2']. '<br />'
  8. .$_SESSION['adres2_kod']. '<br />'
  9. .$_SESSION['wojewodztwo']. '<br />'
  10. .$_SESSION['tel1']. '<br />'
  11. .$_SESSION['tel2']. '<br />'
  12. .$_SESSION['fax']. '<br />'
  13. .$_SESSION['email']. '<br />'
  14. .$_SESSION['www']. '<br />'
  15. .$_SESSION['typ_obiektu']. '<br />';
  16.  
  17. ?>
blooregard
To może inaczej.
Po każdym etapie zapisuj zserializowaną całą tablicę $_POST do osobnej zmiennej sesyjnej:

  1. $_SESSION['etap_1'] = serialize($_POST);

itd.

A na ostatniej stronie ładnie sobie te zmienne zamień z powrotem na tablice (unserialize).
Pozwoli Ci to na ominięcie kilku problemów:
- powtarzające się nazwy elementów formularzy w poszczególnych etapach i związane z tym nadpisywanie wartości
- nie musisz w każdym etapie klepać kilka-kilkanaście razy $_SESSION['costam'] = $_POST['costam'];
- jeśli user będzie chciał powrócić do któregoś z kroków wcześniejszych, wystarczy, że odserializujesz tablicę $_POST z odpowiedniej zmiennej sesyjnej. To pozwoli userowi na powrót i poprawienie danych praktycznie na każdym etapie (np. w 5-tym kroku zorientuje się, że źle podał numer telefonu w 2-gim kroku, to sobie do niego wróci i poprawi).
lnn
zrobilem taka petle...

  1. $etap_1 = $_SESSION['etap_1'];
  2.  
  3. $unserialize = unserialize($etap_1);
  4. foreach($unserialize as $klucz => $element)
  5. {
  6. echo '$_SESSION[\''.$klucz.'\']='.$element.'<br />';
  7. }


ok poproboje z zapisem do bazy jak cos to sie odezwe
Mlodycompany
 
Cytat(blooregard @ 23.12.2009, 21:09:41 ) *
BTW, nic prócz unset() nie usunie Ci żadnych danych z sesji.


a przypadkiem session_destroy(); nie usuwa?


lnn
Cytat(Mlodycompany @ 23.12.2009, 22:47:50 ) *
a przypadkiem session_destroy(); nie usuwa?


usówa ale tego bym nawet nie wykorzystal bo by mi wylogowało usera tongue.gif
Wicepsik
Cytat(lnn @ 23.12.2009, 21:43:34 ) *
'$_SESSION[\''.$klucz.'\']


Czemu tak?
lnn
Cytat(Wicepsik @ 23.12.2009, 23:05:40 ) *
Czemu tak?


tzn chcialem sobie wyswietlic czy pokazuje sie w takiej formie jak pozniej do wywolania przed zapisem do bazy tongue.gif
jasna sprawa ze bym to zmienil zeby nie bylo widac tego $_SESSION itd
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.