Я импортирую автомобили с другого сервера по запросу XML POST. В заголовке файла XML есть 3 условия, которые называются 'actie'
: 'add', 'change' and 'delete'
. Когда я проверяю свой журнал, он говорит, что все работает, но ничего не меняется в моей базе данных. print("add");
также не выводится, когда коммутатор должен вызвать регистр 'add'
.
. Здесь вывод файла XML, который получает сервер.
<?xml version="1.0" encoding="UTF-8"?>
<voertuig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://eigenwebsite.doorlinkenvoorraad.nl/docs/2.16/voertuig.xsd" actie="add" versie="2.16">
<voertuignr_hexon>21467583</voertuignr_hexon>
<voertuignr>9574649-AWD</voertuignr>
<voertuignr_klant/>
<klantnummer>33898</klantnummer>
<invoerdatum>21-10-2019</invoerdatum>
<kenteken>HF499B</kenteken>
<merk>Audi</merk>
<model>A3</model>
<type>Sportback 1.4 e-tron PHEV Ambition Pro Line+ Trekhaak incl. BTW!</type>
<toevoeging/>
<merk_orig>Audi</merk_orig>
<model_orig>A3 Sportback</model_orig>
<type_orig>1.4 e-tron PHEV Ambition Pro Line+ Trekhaak incl. BTW!</type_orig>
<voertuigsoort>AUTO</voertuigsoort>
<carrosserie>Hatchback</carrosserie>
<aantal_deuren>5</aantal_deuren>
<tellerstand eenheid="K">184911</tellerstand>
<brandstof>B,E</brandstof>
</voertuig>
Вверху есть строка 'actie'
.
Вот мой код для анализа XML и отправки его в базу данных:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$servername = "localhost";
$username = "safetypurposes";
$password = "safetypurposes";
$database = "safetypurposes";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
if($_SERVER['REMOTE_ADDR'] != '90.145.213.154') {
// Aanvraag komt niet van Hexon Server
exit;
}
$xmldoc = file_get_contents('php://input');
$xml = parseXml($xmldoc);
switch((string)$xml['actie']) {
case 'add':
// Controles uitvoeren
controleer_voertuig($xml);
// Voertuig toevoegen aan database
$sql = 'INSERT INTO voertuigen (hexon_nr, kenteken, merk) VALUES ('. (string) $xml->voertuignr_hexon .', "'. addslashes((string) $xml->kenteken) .'", "'. addslashes((string) $xml->merk) .'")';
// ...
print("add");
// Foto's opslaan
verwerk_fotos($xml->afbeeldingen);
break;
case 'change':
// Controles uitvoeren
controleer_voertuig($xml);
// Voertuig wijzigen in database
$sql = 'UPDATE voertuigen SET kenteken = "'. addslashes((string) $xml->kenteken) .'", merk = "'. addslashes((string) $xml->merk) .'" WHERE hexon_nr = '. $xml->voertuignr_hexon .' LIMIT 1';
// ...
// Foto's opnieuw ophalen
verwerk_fotos($xml->afbeeldingen);
break;
case 'delete':
// Voertuig verwijderen uit database
$sql = 'DELETE FROM voertuigen WHERE hexon_nr = '. (string) $xml->voertuignr_hexon .' LIMIT 1';
// ...
break;
}
// Everything went ok
print("OK");
function parseXml($xmldoc) {
// XML inlezen met je favoriete XML-parser. Het voorbeeld gebruikt simpleXML.
$xml = @simplexml_load_string($xmldoc);
if(!$xml) {
// Foutmelding teruggeven aan server van Hexon
print("Geen geldige XML ontvangen");
exit;
}
}
function controleer_voertuig($xml) {
if(empty($xml->fotos)) {
// Foutmelding teruggeven aan server van Hexon
print("Op de eigen website zijn alleen voertuigen met foto toegestaan");
exit;
}
}
function verwerk_fotos($fotos) {
foreach($fotos as $foto_nr => $foto_url) {
$bestandsnaam = 'fotos/'. $_GET['hexon_nr'] .'-'. $foto_nr .'.jpg';
$imgdata = file_get_contents($foto_url);
file_put_contents($bestandsnaam, $imgdata);
}
}
Может кто-нибудь помочь мне выяснить, почему функция переключения не работает?
Спасибо!