Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> przekazywanie danych POST
Kurdt
post 18.06.2011, 10:10:51
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 18.06.2011

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


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
IceManSpy
post 18.06.2011, 10:20:27
Post #2





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Tablica POST się wtedy przesyła -.-
http://php.net/manual/en/reserved.variables.post.php
http://porady.skryptoteka.pl/22,czym-sie-r...do-skryptu.html


--------------------
Go to the top of the page
+Quote Post
mortus
post 18.06.2011, 10:23:23
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 18.06.2011, 10:25:06
Go to the top of the page
+Quote Post
Kurdt
post 18.06.2011, 10:31:02
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 18.06.2011

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


@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
Go to the top of the page
+Quote Post
mortus
post 18.06.2011, 10:37:52
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 18.06.2011, 10:42:11
Go to the top of the page
+Quote Post
Kurdt
post 18.06.2011, 10:45:28
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 18.06.2011

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


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.
Go to the top of the page
+Quote Post
mortus
post 18.06.2011, 10:47:04
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie ma takiej możliwości.
Go to the top of the page
+Quote Post
Kurdt
post 18.06.2011, 10:50:35
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 18.06.2011

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


@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 ?
Go to the top of the page
+Quote Post
mortus
post 18.06.2011, 11:20:58
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 18.06.2011, 11:21:55
Go to the top of the page
+Quote Post
Kurdt
post 18.06.2011, 12:43:56
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 18.06.2011

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


anyway, dzięki za Twój czas. może ktoś jeszcze przyjdzie na ten wątek.
Go to the top of the page
+Quote Post
aachi
post 19.06.2011, 18:07:13
Post #11





Grupa: Zarejestrowani
Postów: 54
Pomógł: 12
Dołączył: 4.08.2007

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


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.
Go to the top of the page
+Quote Post
by_ikar
post 20.06.2011, 09:30:57
Post #12





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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
Go to the top of the page
+Quote Post
jackraymund
post 20.06.2011, 09:37:56
Post #13





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


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?

Ten post edytował jackraymund 20.06.2011, 09:44:41


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
Kurdt
post 26.06.2011, 08:10:07
Post #14





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 18.06.2011

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


dziękuję wszystkim, ciekawe rady i pomysły, jest co czytać, i pomogło.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:37