Функция переключения документа XML не работает - PullRequest
0 голосов
/ 20 февраля 2020

Я импортирую автомобили с другого сервера по запросу 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);
    }
}

Может кто-нибудь помочь мне выяснить, почему функция переключения не работает?

Спасибо!

...