PDA

Pogčedajte punu verziju : Prenos podataka u php skriptu POST metodom


bojan_bozovic
04. 01. 2006., 00:38
Recimo da u HTML ubacim nesto.php ali umesto nesto.php?a=223 zelim da prenesem odmah a=223 POST metodom (treba mi za dinamicko generisanje grafikona sa GD i radije bih koristio $_POST nego $_GET dakle ne grafikon.php?Januar=115&Februar=112 itd.. nego sa POST ;) Da jos jednom vrsim SQL upit nema sanse (niti treba). Ovo sto imam radi sa GET, ali bi bilo dobro da ide POST metodom

Edit: XMLHttpRequest mi ne cini ovde dobro zbog binarnog fajla (GIF) morace sa socketima da se radi :( Ide u TO-DO listu ;)

dinke
04. 01. 2006., 01:26
Ukratko zelis da preneses a=223 POST metodom a ne GET metodom :) ?

Objasnio sam ovde (http://www.devprotalk.com/showpost.php?p=3823&postcount=3) kako se to radi. Pored gore opisanog primera mozes koristiti i curl.

Za curl k-du bi bilo:

curl -d a=223 http://gde-vec-hoces.com

Nesto (ali ne preterano) komplikovanije je koristeci curl php lib, ali to tebi prepustam.

ivanhoe
04. 01. 2006., 03:59
Malo me zbunilo sto pominjes Ajax koji je klijent side, a Dinke ti je odgovorio za server side resenje ?

Ali u svakom slucaju evo ti copy&paste upotrebe curla za postovanje podataka (inace ovo je funkcionalan komad paypal IPN koda, pa mozda nekom ustedim par sati citanja dokumentacije, nevezano za ovu temu...)

if ($payment_processor == 'paypal') {
# Send POST back to PayPal with cURL
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_TIMEOUT, 30);
curl_setopt ($ch, CURLOPT_URL, $pageToPost);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$resultpage = curl_exec ($ch);
curl_close ($ch);
}


imena promenjivih su prilicno jasna nadam se, a za detalje oko pojedinih opcija pogledaj help za cURL, narocito proveri da li je binary safe ili mora to da se podesi negde.. prva opcija u kodu gore je vezana za SSL vezu (za paypal), tebi to ne treba, izbaci je.... vraceni rezultat ti se nalazi u $resultpage promenjivoj..

bojan_bozovic
04. 01. 2006., 11:10
Izgleda de cu trebati da koristim php -q preko CGI (tj. prvo pitam host koja je putanja do PHP)

<?php

$postdata = "var1=332&var2=16";

$fp = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$out = "POST /debug.php HTTP/1.0\r\n";
$out .= "Host: localhost\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: ".strlen($postdata)."\r\n";
$out .= "\r\n$postdata\r\n\r\n";

fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}

?>

i debug.php

<?php
header ("Content-Type: text/html");
echo "<STRONG>".$_POST["var1"]."</STRONG>";
echo "<BR><STRONG>".$_POST["var2"]."</STRONG>";
?>

i izlaz (u browseru)


HTTP/1.1 200 OK Date: Wed, 04 Jan 2006 09:04:20 GMT Server: Apache/1.3.33 (Win32) PHP/5.0.4 X-Powered-By: PHP/5.0.4 Connection: close Content-Type: text/html 332
16 a isto dobijam i na serveru. Hederi su dvaput poslati, sem ako nema neko od vas resenje.

joj isto mu dodje i sa php -q :(

dinke
04. 01. 2006., 13:37
U čemu je tačno problem ? Koliko vidim dobio si post vrednosti (332, 16) ?

ivanhoe
04. 01. 2006., 13:45
pa mozes da preparsiras output od fgets i da preskocis deo sa headerom, uradis echo samo onoga sto ti treba...

bojan_bozovic
04. 01. 2006., 13:51
evo u cemu je problem - da li se heder zavrsava sa 'text/html' ili ima jos nesto iza sto moram preskociti? Tek toliko. jedan brzi odgovor ce mi pomoci da se ne udavim u HTTP protokol standardu sa w3.org

dinke
04. 01. 2006., 13:59
Header se završava sa "\r\n\r\n"

Dakle, imaš nešto ovako:

//parsing response
$end_header_pos = strpos($response, "\r\n\r\n");
$header = substr($response, 0, $end_header_pos);
$data = substr($response, $end_header_pos, strlen($response));
$data = trim($data);

gde je $response ceo odgovor servera($header i $data).

bojan_bozovic
04. 01. 2006., 14:39
Radi dobro, ali... moram da snimam GIF sa imagegif($im, 'grafikon.gif'); pa da vracam stazu do fajla. Prakticno, hocu <img src="grafikon.php" /> ali sa POST da mu prosledim argumente, sto nece ici iz html, nit mogu tek tako da ubacim GIF u html direktno. Morace ovde ili AJAX da radi, ili da se snima GIF, i mislim da cu ici na drugo zasad. Hvala puno!

Moze i HEAD zahtev sto mnogo pomaze ako clan npr. moze da specificira eksterni URL do slike ili fajla ;) Dobar kod, nema sta ;)

ivanhoe
04. 01. 2006., 23:54
a sto ne preneses te parametre preko sessiona, umesto preko POST-a, ako je fora da se ne vide parametri kao kod GET metode...

bojan_bozovic
05. 01. 2006., 00:18
Zato sto ce da mi posalje 'Headers already sent' evo o cemu se radi - korisnik se loguje i zatrazi svoju statistiku (sesija startovana, HTML izlaz je poceo) i ja sa <img ... /> tagom referenciram PHP koji generise grafikon u GIF on the fly, a to nece ici sa POST vec samo sa get, a inace mogu i da zaobidjem ovo i da napravim GIF sa imagegif pre nego sto HTML krene u browser i samo ubacim putanju u img tag. Trebace mi za HEAD zahtev, i to nadam se, skoro, ili uz AJAX (to ce ici valjda), s obzirom da mislim glasanje da implementiram sa AJAX. On the fly ne mogu tek dako da napravim POST zahtev kad je stranica vec pocela da se renderuje tj ubacim php u <img ... /> tag ali sa AJAXom ca mozda moci, i to cu da pogledam