Post veld met XML data uitlezen en verwerken via PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Van Sebas

Van Sebas

27/08/2019 19:25:53
Quote Anchor link
Hallo,

Ik probeer een simpel script te maken op een php pagina waar je d.m.v. een http post xml data kan posten en ik wil dat dan graag uitlezen en verwerken.

Wanneer ik het volgende in mijn script zet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$data
= empty( $_REQUEST['data'] ) ? '' : $_REQUEST['data'];
echo $data;
?>

Krijg ik netjes de post data te zien (en dat is de XML data) denk aan zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<info>
<voornaam>Sebas</voornaam>
<achternaam>...</achternaam>
<tel>06123456789</tel>
</info>


Maar wanneer ik het volgende gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$postData
= file_get_contents('php://input');
$xml = simplexml_load_string($postData);

echo $xml;
?>

Dan blijft alles leeg...

Wanneer ik dit doe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$postData
= file_get_contents('php://input');
$xml = simplexml_load_string($postData);

echo $postData ;
?>

Krijg ik het volgende te zien (wel meer maar dit is een deel van wat ik terugkrijg):
data=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3


Wat doe ik fout waardoor de simplexml_load_string niet werkt?
En hoe zou ik de XML data vanuit de post kunnen verwerken zodat ik kan gaan filteren op de tags die erin komt of die voldoen aan bepaalde waardes?

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 27/08/2019 19:45:35 door - Ariën -
 
PHP hulp

PHP hulp

15/09/2019 17:05:34
 
Thomas van den Heuvel

Thomas van den Heuvel

27/08/2019 20:04:55
Quote Anchor link
Quote:
Wat doe ik fout waardoor de simplexml_load_string niet werkt?

Dit komt omdat de superglobals $_POST en $_GET (waar je in feite (o.a.) uit leest als je $_REQUEST gebruikt) automatisch door urldecode() worden gehaald. Als je rechtstreeks van een stream leest krijg je gewoon de rauwe data omdat er geen echte context bijgeleverd wordt die aangeeft hoe de data geïnterpreteerd zou moeten worden. En als je daar dan vervolgens rechtstreeks mee aan de slag gaat met functies die valide XML verwachten (terwijl dit dit dus rauwe url-encoded data is) dan kunnen dat soort functies er logischerwijs ook geen chocola van maken.
Quote:
En hoe zou ik de XML data vanuit de post kunnen verwerken zodat ik kan gaan filteren op de tags die erin komt of die voldoen aan bepaalde waardes?

Het ophalen/uitlezen van XML en hier vervolgens in gaan spitten staan in principe los van elkaar. Zorg eerst dat het uitgelezen ding een valide XML-string is zodat je deze kunt importeren in simplexml. Vervolgens zal het een kwestie zijn van door de tags itereren of filteren met de functies waar SimpleXML over beschikt. Maar dat is een apart vraagstuk.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.