Avatar billede kwanstudios Nybegynder
23. februar 2003 - 12:26 Der er 30 kommentarer og
1 løsning

Avanceret PHP funktion til at POST('e) gennem PHP

Jeg ønsker at lave et script som kan lave en POST til igennem et andet script.

Altså vi siger du har en formular hvor method er sat som POST, og denne hedder ekstern.php, så ønsker jeg gennem min intern.php at sende data til ekstern.php gennem PHP. Jeg har set det før, men har ingen anelse om hvordan jeg selv skal få det til at virke.

Stil endelig spørgsmål, da jeg ikke selv er helt klar over hvordan jeg skal forklare det.
Avatar billede ahv Nybegynder
23. februar 2003 - 12:32 #1
Du har en fil som hedder ekstern.php hvor i du har en formular som kan udfyldes?
Så ønsker du at du kan sende dataer til denne formular via intern.php?
Altså du kunne have en variabel i intern.php hvor indholdet er "ahv" og dette ønsker du så at kalde i en af dine input felter på ekstern.php?

Er dette korrekt forstået eller?
Avatar billede swaxi Nybegynder
23. februar 2003 - 12:37 #2
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 12:38 #3
Ikke helt tror jeg. Lad os sige du laver en formular som smider data til en PHP fil ved navn ahv1.php, denne er sat med POST som method, den indeholder felterne FELT1 og FELT2. Jeg ønsker nu i ahv2.php at simulere en browser, altså udfra mine egne data submitte igennem PHP, uden at brugeren ser formularen, lidt samme princip som Newsgrapping osv.
( http://www.hotscripts.com/PHP/Scripts_and_Programs/Web_Fetching/ )

Er det mere forståeligt?
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 12:39 #4
swaxi, det kigger jeg lige på ;)
Avatar billede ahv Nybegynder
23. februar 2003 - 12:54 #5
Ok jeg tror jeg er med til at du:

(ahv.php)
Her har du en formular, den sender data til ahv1.php

(ahv1.php)
Her har du en ny formular, den modtager dataere fra ahv.php method er sat til post og den indeholder FELT1 og FELT2

Er dette rigtigt forstået hertil?
Det sidste forstår jeg ikke helt.
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 13:14 #6
swaxi's gør akkurat hvad jeg vil. Jeg har dog et spørgsmål, hvad sker der når funktionen bliver udført, hvis den side man nu har postet til har en funktion såsom redirect til en anden anden side, bliver brugeren så smidt til den side?
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 13:17 #7
Det jeg ønsker er en funktion magen til swaxi's sendToHost(), blot hvor den returnerer som en true eller false, hvor jeg kan lave en if sætning for hvis det har lykkedes at sende data, men jeg ønsker ingen data retur. Understandable?
Avatar billede swaxi Nybegynder
23. februar 2003 - 13:18 #8
nej brugeren vil aldrig nogensinde blive redirected. det er fordi det er php-scriptet, der foretager forbindelsen til fjernscriptet... i givet fald skulle php-scriptet blive redirected (hvad der ikke ville betyde noget for noget som helst) ... jeg kan ikke se nogen måde umiddelbart at løse det på andet end at skrive en hel HTTP-protokol løsning i php (hvad der ville være ret omfattende)

men forudsat at du véd at folk bliver redirected, kan du jo bare selv gøre det med et header('Location: ...');

du kan iøvrigt også få problemer, hvis fjernscriptet forventer cookies, session-id mv.
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 13:22 #9
Jamen hvis det script som jeg poster til giver noget respons såsom en takkeside som ligger indenfor den side man har postet til, så returnerer "return $buf;" vel det?
Avatar billede swaxi Nybegynder
23. februar 2003 - 13:34 #10
ja ... men det du får tilbage er _hele_ http svaret (altså inklusive http-headers) ... du ved om dit request er blever accepteret, hvis den første linie svarer med kode 200 ... prøv med :

function validateSendToHost($host,$method,$path,$data,$useragent=0)
{
    $buf = sendToHost($host,$method,$path,$data,$useragent);
    $lines = explode("\n", $buf);
    $words = explode(" ", $lines[0]);
    return ($words[1]=='200');
}
Avatar billede swaxi Nybegynder
23. februar 2003 - 13:45 #11
eller den her :

// return bool(true|false) | string('Location: ...')
function validateSendToHost($host,$method,$path,$data,$useragent=0)
{
    $buf = sendToHost($host,$method,$path,$data,$useragent);
    $lines = explode("\n", $buf);
    $words = explode(" ", $lines[0]);
    foreach ($lines as $line) {
        if ($line=='Connection: close') break;
        if (strpos($line, 'Location: ')!==false) return $line;
    }
    return ($words[1]=='200');
}
Avatar billede swaxi Nybegynder
23. februar 2003 - 13:58 #12
function validateSendToHost($host,$method,$path,$data,$useragent=0)
{
    $buf = sendToHost($host,$method,$path,$data,$useragent);
    $lines = explode("\n", $buf);
    $words = explode(" ", $lines[0]);
    foreach ($lines as $line) {
        if ($line=='Connection: close') break;
        if (strpos($line, 'Location: ')!==false) {
            $line = str_replace('Location: /','Location: http://'.$host.'/',$line);
            return $line;
        }
    }
    return $words[1];
}
$r = validateSendToHost('www.krak.dk','POST','http://www.krak.dk/scripts/ruteplan/krakdk_ruteplan_mellemresultat.asp','foo');
if (strpos($r, 'Location: ')!==false) { header($r); exit; }
else var_dump($r=='200');
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 15:02 #13
forklar lige nærmere det sidste eksempel?
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 15:43 #14
hvordan får jeg evt. ovennævnte script til gå til tak.html hvis data'ne er blevet postet okay, og fejl.html hvis der er en fejl el. lign?
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 15:55 #15
f.eks. burde noget som denne her jeg fandt på sitet kunne bruges:

<?
  $url = 'http://www.iloveyoursite.com/index.php';
  $lines_array = file($url);
  $lines_string = implode('', $lines_array);
  eregi("<html>(.*)</html>", $lines_string, $mydata);
  echo $mydata[0];
?>

her skal jeg bruge en der ligner noget ala til mit site:

<?
  $url = 'http://www.x.dk/formsubmitted.php';
  $lines_array = file($url);
  $lines_string = implode('', $lines_array);
  eregi("<h1>(.*)</h1>", $lines_string, $mydata);
  echo $mydata[0];
?>
Avatar billede swaxi Nybegynder
23. februar 2003 - 15:59 #16
hm ... vil du gå til din EGEN tak.html/fejl.html ... eller vil du følge de anvisninger (redirect) du får fra fjernsiden ?

det kommer jo lidt an på hvad det er du vil ...
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 15:59 #17
til min egen :)
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:00 #18
en funktion ala

hvis formularAfsendt = OK, så vis tak.html
hvis ikke formularAfsendt = OK, så vis fejl.html
Avatar billede swaxi Nybegynder
23. februar 2003 - 16:20 #19
$r = validateSendToHost('www.x.dk','POST',''http://www.x.dk/formsubmitted.php','data');
if ($r=='200') header('Location: tak.html');
else header('Location: fejl.html');
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:26 #20
er det korrekt antaget at den skal stå istedet for $r = validateSendToHost('www.krak.dk','POST','http://www.krak.dk/scripts/ruteplan/krakdk_ruteplan_mellemresultat.asp','foo');
if (strpos($r, 'Location: ')!==false) { header($r); exit; }
else var_dump($r=='200'); ?
Avatar billede swaxi Nybegynder
23. februar 2003 - 16:36 #21
øh ... ja
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:42 #22
Du er meget tæt på de 200 point, men min som ser nogenlunde sådan her ud (er censoret) giver mig en fejl med noget T-string:

$r = validateSendToHost('www.x.dk','post','/x.php','medlem=".$_GET['medlem']."&navn=".$_GET['navn']."&adresse=".$_GET['adresse']."&postnummer=".$_GET['postnummer']."&by=".$_GET['by']."&telefon=".$_GET['telefon']."&email=".$_GET['email']."&foedselsaar=".$_GET['foedselsaar']."&bemaerkning=".$_GET['bemaerkning']."&x=".$_GET['x']."');
Avatar billede swaxi Nybegynder
23. februar 2003 - 16:44 #23
syntax-fejl (aka fejl-40)

'medlem=".
->
'medlem='.
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:45 #24
så alle " skal være ' ?
Avatar billede swaxi Nybegynder
23. februar 2003 - 16:45 #25
... og stryg den sidste ."'
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:45 #26
eller skal jeg bare fjerne ". ('.) og ." (.')?
Avatar billede swaxi Nybegynder
23. februar 2003 - 16:46 #27
ja ... det er generelt en god idé, da php eksekverer hurtigere med ' end med "
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:47 #28
og hvad med "eller skal jeg bare fjerne ". ('.) og ." (.')?"
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:49 #29
Hov nu virkede det vist
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 16:50 #30
med at jeg bare ændrede ". og ." til '. og .'
Avatar billede kwanstudios Nybegynder
23. februar 2003 - 17:18 #31
jeg venter lige og ser om det virker 110%, også får du dine point
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester