Avatar billede mnv_dk Praktikant
23. oktober 2006 - 09:29 Der er 14 kommentarer og
1 løsning

Den komplette POST streng.

Hej...

Jeg skal bruge en variabel med den komplette POST streng.

Jeg får postet noget XML med post, hvor det bare postes, og ikke er defineret som et parameter, det betyder at Der er et parameter der hedder:  $_POST["<?xml_version"] og indeholder resten af XML'en. Det burde betyde, at man kunne definere XML som:

$xml = "<xml version=" . $_POST["<?xml_version"];

Så er der en måde jeg kan tage den komplette POST streng og fortolke på, så jeg ikke skal drage det hele udfra et parameter?
Avatar billede Slettet bruger
23. oktober 2006 - 11:05 #1
Tjae, da POST jo er et array, vil den nok hedde $_POST["0"];

Du kan jo prøve at smide en print_r($_POST);
ind og se hvad resultatet af din post er, og derudfra tage den key der indeholder den værdi du gerne vil have ud.
Avatar billede mnv_dk Praktikant
23. oktober 2006 - 11:25 #2
Det er jeg med på, men hvis du f.eks. laver et POST der hedder foo => bar og bar=> baz

er den streng der postes
foo=bar&bar=baz

Det er den streng jeg skal bruge,
Avatar billede Slettet bruger
23. oktober 2006 - 11:46 #3
Hmm måske du kan gøre noget ala:

$string = "";
foreach ($_POST as $key => $value) {
  $string .= "$key=$value&";
}
echo $string;

Det må være i denne retning i hvert fald.
Avatar billede mnv_dk Praktikant
23. oktober 2006 - 11:50 #4
Det kan det så ikke da det der bliver postet til mig hedder noget ala <xml version=.....

Men med dit eksempel vil det komme til at hedde <?xml_version=....

Jævnfør den forklaring jeg gav øverst.
Avatar billede Slettet bruger
23. oktober 2006 - 12:43 #5
Der blev jeg tabt bag vognen.
Eller måske har jeg været det før, men det er lige gået op for mig :-)

Jeg forstår ikke hvad du egentlig vil ?
Avatar billede olebole Juniormester
23. oktober 2006 - 13:51 #6
<ole>

Er du sikker på, det bliver posted som XML? Prøv at vise, hvordan du poster  ;o)

Hele POST-array'et kan du i øvrigt få vist med:

<?php
var_dump($_POST);
?>

http://dk2.php.net/manual/da/function.var-dump.php

/mvh
</bole>
Avatar billede mnv_dk Praktikant
23. oktober 2006 - 14:04 #7
Jeg poster ikke...

En udbyder af noget der poster til mig, og ja jeg er sikker på det bliver postet som XML.

Men det de poster er jo:

Noget ala:

POST / HTTP/1.1
Host: domain.tld
<?xml version="1.0" encoding="iso-8859-1"?>
....
...
...
Avatar billede olebole Juniormester
23. oktober 2006 - 14:55 #8
Har du testet med var_dump($_POST) ?
Avatar billede mnv_dk Praktikant
23. oktober 2006 - 15:03 #9
Jeg siger ikke jeg får det, for det gør jeg....
Den vel returnere således:
array() {
  ['<?xml_version']=> "\"1.0\" encoding=\"iso-8859-1\"?>"
}

Og det er meget fint, men ikke det jeg har brug for. Jeg kunne godt udelade det med en foreach og det er jeg klar over... Problemet opstår dog i at de poster "<?xml version", og php har det registeret som en POST variabel der hedder <?xml_version, så jeg skal replace _ med et mellemrum, før det bliver til XML.

Jeg leder efter en måde hvorpå jeg kan udelade strengen direkte uden at skulle ind redigere i det jeg har fået ind.
Avatar billede olebole Juniormester
23. oktober 2006 - 16:01 #10
- a'hvad ...?!??!! Er det, hvad du tror, den returnerer - eller er det noget, du har prøvet?

Hvad er det, du gerne vil kunne - og hvordan? Jeg kan ikke få de ting, du skriver til at give mening. Noget kunne tyde på, der er noget, du har misforstået et eller andet sted  :)
Avatar billede mnv_dk Praktikant
23. oktober 2006 - 16:10 #11
Hej Ole,

Det er hvad den returnere hvilket også giver mening...
En normal POST paramter er et navn adskilt af et lighedstegn og en værdi, som f.eks foo=bar er $_POST["foo"] der indeholder værdien "bar".

Derfor når det er XML, er der et lighedstegn efter version, og dermed bliver navnet <?xml_version. Jeg forstår dog ikke hvorfor PHP Indsætter et underscore, og det gør at jeg er bliver nødt til at modificere strengen. Jeg vil gerne undgå dette, og have hele POST QUERY'en som en streng.

Sender du en form, med navnene foo og bar, der har værdierne bar og baz, vil din streng se således ud:
foo=bar&bar=baz
et var dump er således:
array() {
  ['foo']=> "bar",
  ['bar']=> "baz"
}

Jeg håber vi er enige så langt ?

Derfor vil jeg gerne have den streng der hedder foo=bar&bar=baz, uden at skulle bruge noget foreach el.l. Da PHP åbenbart modificerer navnet på parametret. Er du med nu?
Avatar billede coderdk Praktikant
24. oktober 2006 - 09:53 #12
Prøvet med:

$postData = file_get_contents( "php://input" );

?
Avatar billede coderdk Praktikant
24. oktober 2006 - 10:04 #13
(Jeg kan dog kun få det til at virke, hvis Content-Length bliver sendt med i POST-requestet)
Avatar billede mnv_dk Praktikant
24. oktober 2006 - 10:14 #14
Lige hvad jeg havde brug for. Kan du lægge det som et svar.

I øvrigt mener jeg at ifølge http RFC'en, skal Content-Length altid specificeres hvis man laver et POST.
Avatar billede coderdk Praktikant
24. oktober 2006 - 10:21 #15
Ok :) Ja, men jeg har selv været ude for at folk ikke sender Content-Length :\ Men så må man bare slå dem oven i hovedet med en RFC-udskrift! ;)
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

IT-JOB