Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak utrzymać dane wysłane przez POST
Forum PHP.pl > Forum > PHP
damianooo
Witam,

Potrzebuję utrzymać dane wysłane w formularzu metodą POST ... utrzymać tzn. coś w stylu zapisu ... jednak wolałbym nie zapisywać ani do pliku ani do bazy tych danych ...
chciałbym utrzymać dane za pomocą sesji lub cookies ...

próbuję za pomocą sesji i cookies ale nic z tego .. jak przełączam się na następną stronę to dana z POSTa znika

przykład:

  1. <?php
  2. $_SESSION['zm_kk'] = $_POST['kk'];
  3. $zmienna2 = $_SESSION['zm_kk'];
  4. setcookie("kkkk", $zmienna2);
  5. ?>



jest może jakiś ciekawy trick na trzymanie danych wysłanych przez POST ?
phpion
Wystartowałeś sesję przez session_start?
nospor
No ale na następnej stronie nie możesz już robić:
$_SESSION['zm_kk'] = $_POST['kk'];
bo przecież $_POST['kk'] na następnej stronie już nie istnieje. Na następnej stronie dopierasz się już do sesji
echo $_SESSION['zm_kk'];

ps: session_start() robisz wszędzie?
damianooo
tak dokładnie ... o tym nie zapominam smile.gif

może coś robię nie tak .. robię to w następujący sposób :

index.php

  1. <?php
  2.  
  3.  
  4. $_SESSION['zm_kk'] = $_POST['kk'];
  5. $zmienna2 = $_SESSION['zm_kk'];
  6. setcookie("kkkk", $zmienna2);
  7.  
  8.  
  9. if (isset($_COOKIE['kkkk']))
  10. {
  11. naglowek_a.php
  12. content_a.php
  13. stopka_a.php
  14.  
  15. }
  16. else
  17. {
  18. naglowek.php
  19. content.php
  20. stopka.php
  21. }
  22. ?>


i na tych stronach naglowek, content nie robię już session_start()
nospor
Przeczytałes w ogole co ci napisalem?
Cytat
No ale na następnej stronie nie możesz już robić:
$_SESSION['zm_kk'] = $_POST['kk'];
bo przecież $_POST['kk'] na następnej stronie już nie istnieje. Na następnej stronie dopierasz się już do sesji
echo $_SESSION['zm_kk'];


Poza tym, skoro operujesz już na sesji to wywal ciacha. Nie mieszaj bez potrzeby dwóch mechanizmów.
I kolejne pozatym: jak się upierasz do ciach, to wiedz, ze setcookie() powoduje ze $_COOKIE zawiera ciacho dopiero przy następnym odwolaniu do strony
damianooo
tak ale chyba nie zrozumiałem tego:

Cytat
Na następnej stronie dopierasz się już do sesji
echo $_SESSION['zm_kk'];



czyli rozumiem że mój sposób jest zły i powinienem to zrobić tak:


index.php

  1. <?php
  2.  
  3.  
  4. $_SESSION['zm_kk'] = $_POST['kk'];
  5. $zmienna2 = $_SESSION['zm_kk'];
  6. setcookie("kkkk", $zmienna2);
  7.  
  8. echo "<a href='druga_strona.php'>nastepna strona</a>";
  9.  
  10. ?>


druga_strona.php
  1. <?php
  2.  
  3.  
  4. $_SESSION['zm_kk'];
  5. echo $_SESSION['zm_kk'];
  6. ?>



i wtedy będę widział daną z $_SESSION['zm_kk'] na każdej stronie
nospor
No to jeszcze raz:
Tam gdzie odbierasz dane z post masz mieć:
$_SESSION['zm_kk'] = $_POST['kk'];
I to wszystko.

Tam gdzie odbierasz dane z sesji masz mieć:
echo $_SESSION['zm_kk'];
czy cokolwiek innego co odbiera dane z sesji.
Proste jak budowa cepa.
damianooo
spoko ... ja to rozumiem że nie może być na tej samej stronie odbierania $_POST ... jednak chciałem aby struktura mojej aplikacji webowej była taka jak pokazałem w przykładzie ... jeśli tak to nie zadziała to faktycznie będę musiał to zbudować trochę inaczej
nospor
No to zrob warunek
  1. if (isset($_POST['kk']))
  2. $_SESSION['zm_kk'] = $_POST['kk'];

Wowczas wszystko moze byc w jednym pliku.
damianooo
nie wiem czemu ale mi to nie działa mimo wszystko ... może pokażę całość jak mam teraz:

jakasstrona.pl wysyła w POST dane "a", "b", "c" do strony mojastrona.pl ...

i tak w pliku index.php jest:

  1. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && (($_GET['a'] == 'e7') || ($_GET['a'] == 'e8')) && (isset($_POST['a'])) )
  2. {
  3. $_SESSION['zm_a'] = $_POST['a'];
  4. $_SESSION['zm_b'] = $_POST['b'];
  5. $_SESSION['zm_c'] = $_POST['c'];
  6.  
  7. naglowek_a.php
  8. content_a.php
  9. stopka_a.php
  10. }
  11. else
  12. {
  13. naglowek.php
  14. content.php
  15. stopka.php
  16. }


natomiast w pliku content_a.php jest:


  1. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && ($_GET['a'] == 'e7) && (isset($_SESSION['zm_a'])) )
  2. {
  3. ....
  4. }
  5. elseif( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && ($_GET['a'] == 'e8) && (isset($_SESSION['zm_a'])) )
  6. {
  7. ...
  8. }


tylko coś chyba źle mam zapisane ponieważ jeśli zrobię tak:

strona1.php

  1. <?php
  2.  
  3.  
  4. $_SESSION['zm_a'] = $_POST['a'];
  5. $_SESSION['zm_b'] = $_POST['b'];
  6. $_SESSION['zm_c'] = $_POST['c'];
  7.  
  8. echo "<a href='strona2.php?j=p1&conte=zzz&a=e7'>WITAMY NA STRONIE - Przejdź do części głównej</a>";
  9.  
  10. ?>



a na strona2.php tak:

  1. <?php
  2.  
  3.  
  4. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && (($_GET['a'] == 'e7') || ($_GET['a'] == 'e8')) && (isset($_SESSION['zm_a'])) )
  5. {
  6.  
  7. naglowek_a.php
  8. content_a.php
  9. stopka_a.php
  10. }
  11. else
  12. {
  13. naglowek.php
  14. content.php
  15. stopka.php
  16. }
  17.  
  18. ?>


to działa

tylko, że wolałbym jednak uniknąć wyświetlania takiego powitalnego INTRO
wNogachSpisz
Najprościej byłoby wyświetlać dane po otrzymaniu POST, czyli bez przekierowań.
Tyle ze wtedy F5 nie działa happy.gif
damianooo
mam prośbę do nospor'a ... możesz spróbować mi jeszcze pomóc ? ... chciałbym uniknąć pokazywania intro "Witamy ... " ...
co robię źle jeszcze w tym skrypcie ? ...

dzięki,
tomm
w linii

  1.  
  2. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && ($_GET['a'] == 'e7) && (isset($_SESSION['zm_a'])) )


masz nie zamknięty apostrof po e7.

Poza tym jesli includejesz plik content_a to w nim nie musisz już sprawdzać warunków

  1. ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz')


bo zrobiłes to juz kilka linii wczesniej, sprawdzasz jedynie czy jest to e7 czy e8 oraz zmienną sesyjną
damianooo
dzięki za uwagę , jednak apostrofu nie miałem tylko tu a normalnie w kodzie jest ... natomiast druga sprawa o której napisałeś i tak nie rozwiązuje problemu ...

nie wiem czemu nie chce utrzymać mi sesji jeśli zrobię to tak jak opisałem
tomm
a pokaż co wyświetli print_r($_SESSION) i print_r($_GET), daj to w pliku naglowek_a zamiast if'ow
damianooo
a więc tak ... nie wiem czemu prosiłeś abym to zrobił w pliku naglowek_a.php przecież tam nie ma IFów , są w content_a.php .... ale nie ważne zrobiłem tak jak mówiłeś i
w tablicy wszystko jest czyli zarówno dana z POST['a'] jak i z pozostałych dwóch ...

chodzi o to że jeśli teraz kliknę w menu na odnośnik z $_GET['a'] == 'e8' czyli inną stroną, to ta tablica staje sie pusta ... (nie utrzymuje w sesji danych zapisanych przez POST )

tomm
jeśli dobrze rozumiem to warunek w pliku content_a (wcześniej również chodziło mi o ten plik)

  1. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && ($_GET['a'] == 'e7) && (isset($_SESSION['zm_a'])) )

jest spełniony i robi się wszystko co w if'ie, masz tam również jakiś odnośnik do innej strony i po przejściu do tej strony zmiennej sesyjnej już nie ma. Czy tak?
damianooo
tak dobrze ...

po prostu jest tam też menu i jak wybierę opcję z $_GET['a'] == 'e8' to już nie widać tych zmiennych

Zbiorę wszystko do kupy żeby była większa jasność i zrobię małą symulację:

plik (strona w sieci do której mam oczywiście dostęp) jakasstrona.php ma:

  1. <form action="mojastrona.php?j=p1&conte=zzz&a=e7" method="POST" target="_blank">
  2. <input type='hidden' name='a' value='10'>
  3. <input type='hidden' name='b' value='20'>
  4. <input type='hidden' name='b' value='30'>
  5. <input type='submit' name='submit' value='Zamowienia' style="border:none;background-color:transparent;color:#198F57;font-size:11px;">
  6. </form>


plik (moja strona w sieci ) mojastrona.php ma:



  1.  
  2. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && (($_GET['a'] == 'e7') || ($_GET['a'] == 'e8')) && (isset($_POST['a'])) )
  3. {
  4. $_SESSION['zm_a'] = $_POST['a'];
  5. $_SESSION['zm_b'] = $_POST['b'];
  6. $_SESSION['zm_c'] = $_POST['c'];
  7.  
  8. naglowek_a.php
  9. content_a.php
  10. stopka_a.php
  11. }
  12. else
  13. {
  14. naglowek.php
  15. content.php
  16. stopka.php
  17. }


i teraz tak. Plik content_a.php zawiera w sobie menu oraz content i wygląda mniej więcej tak:


  1. echo "<div>";
  2. if ($_GET['a'] == 'e8')
  3. {
  4. echo "<a href='mojastrona.php?j=p1&conte=zzz&a=e7'><b>PAKIETY</b></a>";
  5. }
  6. elseif( ($_GET['a'] == 'e7') OR ($_GET['a'] == 'qqq8a1'))
  7. {
  8. echo "<a href='mojastrona.php?j=p1&conte=zzz&a=e8'><b>REGULAMIN</b></a>";
  9. }
  10.  
  11. echo "</div>";
  12.  
  13. echo "<div>";
  14.  
  15. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && ($_GET['a'] == 'e7') && (isset($_SESSION['zm_a'])) )
  16. {
  17. ....
  18. }
  19. elseif( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && ($_GET['a'] == 'e8') && (isset($_SESSION['zm_a'])) )
  20. {
  21. ...
  22. }
  23. echo "</div>";
tomm
Twój problem polega na tym że odnosnikiem
  1.  
  2. echo "<a href='mojastrona.php?j=p1&conte=zzz&a=e7'><b>PAKIETY</b></a>";

wywołujesz znowu stronę mojastrona.php ale nie przesyłając już do niej tablicy $_POST
a to sprawdzasz w pierwszym if'ie.
Wyciągnij ten warunek z tego if'a i wstaw troche ponizej tzn

  1. if ( ($_GET['j'] == 'p1') && ($_GET['conte'] == 'zzz') && (($_GET['a'] == 'e7') || ($_GET['a'] == 'e8')) )
  2. {
  3. if( (isset($_POST['a']) ){
  4. $_SESSION['zm_a'] = $_POST['a'];
  5. $_SESSION['zm_b'] = $_POST['b'];
  6. $_SESSION['zm_c'] = $_POST['c'];
  7. }
  8. naglowek_a.php
  9. content_a.php
  10. stopka_a.php
  11. }
damianooo
ok pomogłeś mi tomm ... teraz jest lepiej .. tylko trzeba jeszcze dodać ten kawałek:

  1. else
  2. {
  3. naglowek_a.php
  4. content_a.php
  5. stopka_a.php
  6. }



bo inaczej jak odświeżam stronę albo jak przełączam się na inną stronę to wyświetla się pusta strona

dzięki, pozdrawiam
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.