ďťż

[PHP] Jak wysłać formularze POST bez htmla Temat rozwiązany

       

Podstrony


telcocafe

Przykład:
1.Wchodzę na stronę index.php, wpisuję słowo X do formularza i klikam OK.
2.Przekierowuje mnie na stronę send.php i wysyła słowo X np. na maila.
3.Następnie przekierowuje mnie na stronę end.php na której chcę ponownie wykorzystać te słowo.

Pierwsze dwa punkty są proste ale jak wysłać zmienną $_POST do pliku ostatniego? Nie wchodzi w grę zapisywanie jej do pliku ani do bazy danych.

Temat rozwiązany
<?php $data = array ('foo' => 'bar', 'cow' => 'milk'); $data = http_build_query($data); $context_options = array ( 'http' => array ( 'method' => 'POST', 'header'=> "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n", 'content' => $data ) ); $context = stream_context_create($context_options); $fp = fopen('http://url', 'r', false, $context); $page = stream_get_contents($fp); fclose($fp); echo $page; ?>
Użytkownik Ghoost edytował ten post 07 styczeń 2008, 08:26


Przesłac GET`em? W pliku send.php tam gdzie przekierowywujesz do pliku end.php piszesz np tak:
<?php //jekis tam kod echo '<meta HTTP-EQUIV="Refresh" CONTENT="0; URL=end.php?jakastamnazwa='.$_POST["jakastamnazwa"].'">'; //jakis tam kod ?>
A w ostatnim tak
<?php //jakis tam kod echo $_GET['jakastamnazwa']; ?>
Może byc? ;)

Niestety na to bym sam wpadł, ale potrzebne mi jest przez POST, ze względu na dużą zawartość tekstu.

A przez ukryte pole
<?php //cos tam :P echo '<form id="ukryty" action="end.php" method="post"><input type="hidden" name="costam" value="'.$_POST['jakistamtekst'].'"/><input type="submit" value="Kliknij aby przejśc"/>'; ?>
Wiem, że będzie trzeba samemu kliknąc, ale... :P już jest coś.
//edit
ciacho odpada?
Użytkownik tomek10861 edytował ten post 08 styczeń 2008, 18:12


Hmm, teraz lepiej :) Jak nie będzie się dało inaczej to użyję tego.
Jak ktoś mógłby to rozwiązać inaczej to piszcie.

O ile dałoby się potem je skasować, a jeśli wyłączone to nie zbyt dobrze.
Wołałbym jednak coś innego, chcę by ta strona mogła sama odczytać zmienną $_POST.
Zamierzam tekst przepuścić przez mój skrypt a później wysłać na inny serwer, który by sam się zajął zmienną.
Ja nie mam dostępu do tego serwera :/
Użytkownik Ghoost edytował ten post 03 styczeń 2008, 14:03
Można je tak wyłączyc <?php SetCookie($_POST['costam'], jakastamnazwa, time()+20); ?>

A nie lepiej wrzucić do sesji i po kłopocie? Ja w swoim cmsie wydzielam komórke w tablicy sesyjnej na takie dane i przerzucam je. Jak są niepotrzebne to wywalem.

To bez sensu, mówiłem że nie mam dostępu do końcowej strony, jest na innym serwerze.

Zainteresuj się CURLem.
http://pl2.php.net/m...en/ref.curl.php

nie musisz klikać w tym formie z ukrytym polem :D
... <body onload="document.getElementById('form1').submit();"> <form id="form1" method="post" action="example.com"> <input type="hidden" value="<?=$_POST['pole']?>"> </form> ...

Znalazłem coś takiego:

<?php $curl = curl_init('http://www.domena.pl/plik.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, "tytul=costam&autor=costam"); $dane = curl_exec($curl); ?>

Dwa pytania:
Ten adres w pierwszej linii to adres na który chcę wysłać zmienne?

Jeśli ten skrypt się wykona to od razu przekieruje wysyłając zmienne? Jeśli nie to jak?


Jeśli nie to jak? header('Location: http://adres.pl');
Użytkownik DJ_ProG edytował ten post 03 styczeń 2008, 16:57
Nadal nie działa.
Mam 3 pliki:
index.php
second.php
end.php

Plik index.php zawiera formularz z id= TEXT
Plik second.php

<?php $curl = curl_init('end.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, "text=".$_POST['text'].""); $dane = curl_exec($curl); header('Location: http://ble/end.php'); ?>

Plik end.php zawiera
<?php echo $_POST['text']; ?>

Gdzie się podział błąd?
Użytkownik Ghoost edytował ten post 03 styczeń 2008, 17:05
curl jest czymś w rodzaju robota. On nie przesyła danych w ten sposób. Możesz najwyżej zapisać te dane przesłane przez curl i wyświetlić po przekierowaniu na end.php.
//edit
@down:
To właściwie prostsze użycie curla. Zadziała tak samo.
Użytkownik andrzej_aa edytował ten post 03 styczeń 2008, 18:03
Znalazłem też coś takiego - rzuć okiem i powiedz jak tam ustawić przekierowanie.

http://4programmers....tod%C4%85_POST_
Użytkownik Ghoost edytował ten post 03 styczeń 2008, 17:45
zastanów się czy nie mógłbyś wykorzystać jakiejś biblioteki AJAX, np. AdvAJAX gdzie możesz bez problemu wysyłać dane POST'em


zastanów się czy nie mógłbyś wykorzystać jakiejś biblioteki AJAX, np. AdvAJAX gdzie możesz bez problemu wysyłać dane POST'em
AJAX ma ograniczenie takie, że nie wysyła zapytań do serwera innego niż macierzysty.
BTW
@Ghoost:
Po co Ci w ogóle tak skomplikowana operacja? A może by był inny sposób na rozwiązanie tego? :-)

Po co? Chcę połączyć mój skrypt z innym serwerem.
To chyba nie jest skomplikowane - wysłać formularz w PHP na inną stronę jako POST. Tak jakby formularz bez formularza.
Póki co najlepszym pomysłem jest ukryte pole z #4 postu.


<?php $curl = curl_init('end.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, "text=".$_POST['text'].""); $dane = curl_exec($curl); //header('Location: http://ble/end.php'); echo $dane; ?>

I w ten sposób otrzymujesz treść pliku, do którego wysyłałeś dane.

A może by upchać tak dane do nagłówków i nimi przesłać dane ;) ?
Na stronie serwera byś tylko odpowiednio filtrować co trzeba :P

Czyli ma to wyglądać tak?
Plik index.php zawiera formularz z id=TEXT
Plik second.php
<?php $curl = curl_init('end.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, "text=".$_POST['text'].""); $dane = curl_exec($curl); echo $dane; ?>
Plik end.php zawiera
<?php echo $_POST['text']; ?>
Jeśli tak to chyba coś pomyliłem, niestety u mnie nie działa :(

Może nie działa bo nie masz curla?
Btw, http_build_query + stream_context_create. Pamiętaj tylko że i to, i curl będzie przesyłało przez serwer www -> opóźnienie.

Czyli ten kod jest poprawny? Te opóźnienia są duże?
edit:

<?php $data = array ('foo' => 'bar', 'bar' => 'baz'); $data = http_build_query($data); $context_options = array ( 'http' => array ( 'method' => 'POST', 'header'=> "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n", 'content' => $data ) ); $context = + stream_context_create($context_options); $fp = fopen('https://url', 'r', false, $context); ?>

Gdzieś znalazłem taki kod, tylko że to było na angielskiej stronie.
Da się tym na inny serwer połączyć?
Użytkownik Ghoost edytował ten post 06 styczeń 2008, 18:00
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.