Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zachowanie danych POST przy przekierowaniu
Forum PHP.pl > Forum > Przedszkole
lukasamd
Witam,
chciałbym zrobić tak, że strona obrabiająca formularz automatycznie przekierowuje przez header użytkownika na inny plik, ale zachowuje przekazywanie danych metodą POST.
Jak mogę zachować elementy POSTa podczas takiego przekierowania?
darko
  1. foreach($_POST as $k => $v) {
  2. $_SESSION[$k] = $v;
  3. }


window.location.href = 'inny_skrypt.php';
smile.gif
nie zauważyłem dwóch wyrazów: "przez header";
  1. header('Location: inna_strona.php');

albo przekierowanie na get:
  1. $add = "";
  2. foreach($_POST as $k => $v) {
  3. $add.=$k.'='.$v.'&';
  4. }
  5. header('Location: inna_strona.php?'.$add);


~lukasamd zależy gdzie przekierowuje ?
~altruista2 - zobaczymy smile.gif
altruista2
@darko: przypuszczam, że on chyba spamować jakaś inną stronę więc twoje rozwiązanie się nie sprawdzi biggrin.gif

Edyta:
@darko:
nie zapominaj o tym:
  1. $add.=urlencode($k).'='.urlencode($v).'&';


bo ktoś wyśle "&" i wszystko szlag trafia biggrin.gif
erix
~altruista2 - niekoniecznie - być może chce przejść do innego kroku w pseudokreatorze.

Cytat
albo przekierowanie na get:

Dlaczego tyle osób zapomina, że istnieje coś takiego, jak http_build_query?
darko
Cytat(erix @ 17.02.2010, 19:35:05 ) *
~altruista2 - niekoniecznie - być może chce przejść do innego kroku w pseudokreatorze.


Dlaczego tyle osób zapomina, że istnieje coś takiego, jak http_build_query?

Przepraszam smile.gif
lukasamd
@darko:
Wolałbym tego nie trzymać ani w GET, ani w sesjach. Nie można spowodować czegoś a'la wysłanie formularza w PHP, aby mieć te POSTy nadal dostępne?

@altruista2:
Nie, nie zamierzam spamować smile.gif

@erix:
Tak nawiasem, dzięki za info o http_build_query - funkcji nie znałem, a na pewno niejednokrotnie się przyda smile.gif
altruista2
via http://www.hotscripts.com/forums/php/37750...-post-data.html
  1. <?php
  2.  
  3. /**
  4.  * @author
  5.  * @copyright 2007
  6.  */
  7.  
  8. class curl
  9. {
  10. var $channel ;
  11.  
  12. function curl( )
  13. {
  14. $this->channel = curl_init( );
  15. // you might want the headers for http codes
  16. curl_setopt( $this->channel, CURLOPT_HEADER, true );
  17. // you may need to set the http useragent for curl to operate as
  18. curl_setopt( $this->channel, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  19. // you wanna follow stuff like meta and location headers
  20. curl_setopt( $this->channel, CURLOPT_FOLLOWLOCATION, true );
  21. // you want all the data back to test it for errors
  22. curl_setopt( $this->channel, CURLOPT_RETURNTRANSFER, true );
  23. // probably unecessary, but cookies may be needed to
  24. curl_setopt( $this->channel, CURLOPT_COOKIEJAR, 'cookie.txt');
  25. // as above
  26. curl_setopt( $this->channel, CURLOPT_COOKIEFILE, 'cookie.txt');
  27. }
  28. function makeRequest( $method, $url, $vars )
  29. {
  30. // if the $vars are in an array then turn them into a usable string
  31. if( is_array( $vars ) ):
  32. $vars = implode( '&', $vars );
  33. endif;
  34.  
  35. // setup the url to post / get from / to
  36. curl_setopt( $this->channel, CURLOPT_URL, $url );
  37. // the actual post bit
  38. if ( strtolower( $method ) == 'post' ) :
  39. curl_setopt( $this->channel, CURLOPT_POST, true );
  40. curl_setopt( $this->channel, CURLOPT_POSTFIELDS, $vars );
  41. endif;
  42. // return data
  43. return curl_exec( $this->channel );
  44. }
  45. }
  46.  
  47. $curl = new curl( );
  48. // you should not execute both of these, but either way works
  49. echo $curl->makeRequest( 'post', 'http://yourdomain.com/path/to/php.php', 'message=my message goes here' );
  50. echo $curl->makeRequest( 'post', 'http://yourdomain.com/path/to/php.php', array('message=my message goes here', 'type=text') );
  51. ?>


wymaga cURL
lukasamd
Niestety, tam gdzie chcę to zrobić, curl nie jest dostępny...
altruista2
Spróbuj tego (via manual php) :
  1. $host = "www.example.com";
  2. $path = "/path/to/script.php";
  3. $data = "data1=value1&data2=value2";
  4. $data = urlencode($data);
  5.  
  6. header("POST $path HTTP/1.1\r\n" );
  7. header("Host: $host\r\n" );
  8. header("Content-type: application/x-www-form-urlencoded\r\n" );
  9. header("Content-length: " . strlen($data) . "\r\n" );
  10. header("Connection: close\r\n\r\n" );
  11. header($data);


Próbowałem tego wcześniej, ale to na niektórych serwerach działa, a na niektórych nie. (dlatego najpierw Ci dałem skrypt z cURLa) Szczerze mówiąc nie znam przyczyny smile.gifsmile.gif

Jak to Ci nie zadziała to ostatnie rozwiązanie to wysyłać POST przez javascript sad.gif
lukasamd
Powiedzmy tak - chcę odebrać z formularza w POST pewne dane, dodać do nich nieco a nieco zmodyfikować, a następnie wszystko przesłać do dotpay.
Chciałbym to zrobić tak, aby użytkownik nie musiał robić żadnego potwierdzenia, a zarazem aby był do dotpay przekierowywany (czyli curl wykonujący posta "w tle" i tak by odpadał).
altruista2
No to możesz np. zrobić stronę przejściową (wyświetlenie napisu "za chwile będziesz przekierowany na dotpay") z javascriptem który wysyła dane POST).

Pewne rozwiązanie i w miarę eleganckie smile.gif)
erix
Cytat
dodać do nich nieco a nieco zmodyfikować, a następnie wszystko przesłać do dotpay.

Oczadziałeś?!

Temat zamykam.
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.