Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przekazywanie danych POST
Forum PHP.pl > Forum > PHP
Kurdt
jak to zrobić, żeby po kliknięciu w link, przekazać do kolejnej strony dane POST uzyskane z formularza na stronie poprzedniej ? no bo za pomocą linku, można przekazywać jedynie dane GET ?
mortus
Wykorzystaj sesje.
Po zainicjowaniu sesji funkcją session_start() możesz zapisać w tablicy $_SESSION dane przekazane przez formularz. Na każdej kolejnej stronie (tam również musisz użyć funkcji session_start()) będziesz mógł te dane odbierać z tablicy $_SESSION. Możesz również te dane bez problemu usunąć.

EDIT
Funkcja session_strat() musi być umieszczona na początku każdego pliku PHP, który z sesji korzysta.
Kurdt
@mortus, wiem o sesjach. zastosuję to jeśli nie będzie się dało inaczej. póki co jeszcze drążę temat post. jeśli znajdę rozwiązanie, może być pożyteczne

@IceManSpy, ten link do 'skryptoteka' to nic mi tu nie daje. to jakiś ogólny opis post i get. to wszystko przecież wiem.

ten link do php.net, też mi nic nie daje. to jakaś podstawowa definicja POST. chyba że coś zauważyłeś ciekawego w komentarzach ? jest ich trochę, póki co nie przeglądałem, tylko pytam Ciebie
mortus
Tablicę post możesz przekazać dalej poprzez formularz z polami ukrytymi (hidden), ale wtedy wiąże się to z ponownym użyciem formularza. Alternatywnie możesz odpowiednio spreparować adres, aby przekazać dane w tablicy $_GET, co przy dużej liczbie danych z formularza nie będzie estetyczne, a i trzeba będzie dobrze zabezpieczyć skrypt.
Drugie rozwiązanie (mniej więcej) tak by wyglądało:
  1. <?php
  2. $query_string = '?';
  3. foreach($_POST as $key => $value) {
  4. $query_string .= $key . '=' . $value . '&';
  5. }
  6. echo '<a href="strona_2.php' . $query_string . '">Następna strona</a>';

Najlepszym wyjściem są sesje.

EDIT
Innych możliwości nie ma.

Jeśli formularz jest bardziej rozbudowany (np. umożliwia przesyłanie tablic), to trzeba zaprogramować funkcję do tworzenia $query_string.
Kurdt
ok, dzięki ale to też wiem, próbowałem takich rozwiązań. w moim przypadku mam dobre kilkaset elementów w tablicy. więc zależy mi na tym, żeby jednak zmusić przeglądarkę do wysłania danych POST po kliknięciu w link. z tego co wiem, zwykle przeglądarka wysyła dane POST jedynie po kliknięciu w przycisk submit formularza, który ma w nagłówku method=post . a może jest jakiś inny sposób ? do tego zmierzam.
mortus
Nie ma takiej możliwości.
Kurdt
@mortus, jeśli możesz zobacz tutaj: http://www.webmasterworld.com/php/3164561.htm ostatni post. istnieje sposób wysłania danych POST do serwera i odpowiedź otrzymujesz do zmiennej. to jeszcze tylko, żeby odpowiedź serwera nie do zmiennej, tylko do przeglądarki jako nowa strona. może wiesz, jak ?
mortus
Cytat(Kurdt @ 18.06.2011, 11:50:35 ) *
@mortus, jeśli możesz zobacz tutaj: http://www.webmasterworld.com/php/3164561.htm ostatni post. istnieje sposób wysłania danych POST do serwera i odpowiedź otrzymujesz do zmiennej. to jeszcze tylko, żeby odpowiedź serwera nie do zmiennej, tylko do przeglądarki jako nowa strona. może wiesz, jak ?

Nie da się. CURL-em (lub jakąś inną funkcją) trzeba by było tworzyć stronę HTML (bez kodu PHP) i przekierowywać do nowo utworzonego pliku, ale to nie ma prawa bytu, bo każde przesłanie formularza byłoby związane z utworzeniem na serwerze nowego pliku HTML. Te pliki trzeba by było na bieżąco usuwać.
Załóżmy, że wykorzystamy tę funkcję do_post_request() z odnośnika, który wkleiłeś. Wyglądałoby to tak:
  1. <?php
  2. $response = do_post_request('storna2.php', $_POST);
  3. $filename = 'strona2_'.time().'.html';
  4. file_put_contents('/strony_tymczasowe/'.$filename, $response);
  5. header("Location: nasza_strona.pl/strony_tymczasowe/".$filename);

No i tę stronę tymczasową należałoby usunąć zaraz po jej opuszczeniu. Ale to rozwiązanie jest bez sensu - co z transferem na serwerze, z prawami do katalogów, z bezpieczeństwem.

W tym właśnie sęk, że nie możesz najpierw wysłać tablicy $_POST CURL-em, AJAX-em, fopen, czy czymkolwiek innym do pliku PHP, a później przejść do tego pliku i liczyć na to, że dane w $_POST tam będą. Nie będzie ich.

Możliwe, że Twój problem można rozwiązać inaczej, ale za mało wiemy o całym tym procesie przesyłania danych z formularza.
Kurdt
anyway, dzięki za Twój czas. może ktoś jeszcze przyjdzie na ten wątek.
aachi
Standardowo dane POST wysyła przeglądarka i robi to tylko, gdy klikniesz submit w odpowiednim formularzu. Bez względu na to jak napiszesz swoje skrypty, nie zmusisz przeglądarki do wysyłania POST kiedy tylko zechcesz (bo to ona decyduje kiedy ma na to ochotę).
Więc jeśli potrzebujesz wysłać na jakąś stronę dane POST, to... :

1) Serwer musi udawać przeglądarkę, otwiera jakąś stronę wysyłając dane POST (cURL) i później prześle wynik (np. to co sam odczytał ze strony) do przeglądarki użytkownika. W tym wypadku musisz jednak gdzieś zapamiętać dane POST, które otrzymałeś od użytkownika wcześniej (w pliku, w sesji, czy gdziekolwiek indziej)...

2) Modyfikujesz działanie przeglądarki użytkownika np. piszesz odpowiedni plugin (zapamiętujący dane POST i wysyłasz je do każdej nowootwieranej strony), albo piszesz własną przeglądarkę i zmuszasz użytkownika do używania jej.

Nie ma innej możliwości!

Jeśli jednak masz potrzebę na swoich stronach mieć po prostu dostęp do danych które przesłał Ci użytkownik, to użyj sesji (najłatwiejszy sposócool.gif, lub zapisuj dane w ciastku (wtedy przeglądarka użytkownika wyśle Ci dane z ciastek, ale to gorszy sposób, bo ciastka mają ograniczenia).

Cytat
@mortus, jeśli możesz zobacz tutaj: http://www.webmasterworld.com/php/3164561.htm ostatni post. istnieje sposób wysłania danych POST do serwera i odpowiedź otrzymujesz do zmiennej. to jeszcze tylko, żeby odpowiedź serwera nie do zmiennej, tylko do przeglądarki jako nowa strona. może wiesz, jak ?

Jak odpowiedź masz w zmiennej to zrób echo $zmienna; I już wysłałeś do użytkownika.
Bądź jednak świadomy tylko, że w tym linku co podałeś to nie użytkownik wysyła dane POST, tylko serwer na którym odpalony został skrypt.
by_ikar
Cytat(Kurdt @ 18.06.2011, 11:45:28 ) *
ok, dzięki ale to też wiem, próbowałem takich rozwiązań. w moim przypadku mam dobre kilkaset elementów w tablicy. więc zależy mi na tym, żeby jednak zmusić przeglądarkę do wysłania danych POST po kliknięciu w link. z tego co wiem, zwykle przeglądarka wysyła dane POST jedynie po kliknięciu w przycisk submit formularza, który ma w nagłówku method=post . a może jest jakiś inny sposób ? do tego zmierzam.

javascript i do linku podłączenie akcji która będzie wysyłać ukryty formularz. Za każdym razem wiąże się to z ukrytym formularzem na każdej podstronie do której ma kierować link. Najlepiej to rozwiązać jak koledzy wyżej pisali - sesja i w niej umieścić dane. Skoro całe koszyki sklepów internetowych są w sesji przechowywane, niekiedy z dość pokaźnymi ilościami elementów, nic nie stoi na przeszkodzie, abyś i ty trzymał tam trochę elementów wink.gif
jackraymund
Cytat(mortus @ 18.06.2011, 11:23:23 ) *
Wykorzystaj sesje.
Po zainicjowaniu sesji funkcją session_start() możesz zapisać w tablicy $_SESSION dane przekazane przez formularz. Na każdej kolejnej stronie (tam również musisz użyć funkcji session_start()) będziesz mógł te dane odbierać z tablicy $_SESSION. Możesz również te dane bez problemu usunąć.

EDIT
Funkcja session_strat() musi być umieszczona na początku każdego pliku PHP, który z sesji korzysta.

jeżeli masz strone skryptowaną tzn tam masz include to session_start() użyj tylko na index.php
co do tego linku, to nie trzeba żadnego javaskryptu jeżeli strona znajduje się na localhoscie
jeżeli to np.
index.php?id=1
to użyj GET
if
i wpis do bazy
i możesz to w SESION trzymać, po co w post?
Kurdt
dziękuję wszystkim, ciekawe rady i pomysły, jest co czytać, i pomogło.
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.