微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP XML 保存对单个项目的更改

如何解决PHP XML 保存对单个项目的更改

我正在尝试创建一个带有按钮更新的简单网页。按钮的状态显示用户,但我不想将数据库用于这么小的事情。我正在尝试使用 XML 解析。我非常接近正确,但它似乎没有将我的更改保存到 xml 文件中。我一直在使用 var dump 并且得到了我期望的输出。我对 PHP 不是最好的,即使有朋友帮助我,我们也迷路了。

查询

$( ".switch" ).click(function() {
            var id =$(this).attr("id");
            if( $(this).hasClass("on")){
                    $(this).removeClass("on");
                    $(this).addClass("off");
                    $.get("API.PHP?"+ id + "=off");
            }else if( $(this).hasClass("off")){
                    $(this).removeClass("off");
                    $(this).addClass("on");
                    $.get("API.PHP?"+ id + "=on");
            }
});

XML 数据.xml

<switches>
        <switch>
                <name>Phase Two Side Door</name>
                <id>phasetwosidedoor</id>
                <state>on</state>
        </switch>
        <switch>

                <name>WIFI</name>
                <id>wifi</id>
                <state>on</state>
                <timestamp> </timestamp>
        </switch>

</switches>

PHP API.PHP

<?PHP
/*
get from jq asks for this info
finds the item and returns value
*/

$switches = simplexml_load_file('data.xml');

//var_dump($switches);
echo $switches->count();
for( $i = 0; $i < $switches->count(); $i++){

        $item = $switches->switch[$i];
        //var_dump($item->id == "wifi" && isset($_GET["wifi"]));
        //var_dump($item->id == "phasetwosidedoor" && isset($_GET["phasetwosidedoor"]));
        //var_dump( $switches->switch[$i]);
        echo $i;

        if($item->id == "wifi" && isset($_GET["wifi"])){

                $item->state = $_GET["wifi"];
                //var_dump($_GET["wifi"]);
        }
        else if($item->id == "phasetwosidedoor" && isset($_GET["phasetwosidedoor"])){
                 $item->state = $_GET["phasetwosidedoor"];

        }else{

                echo "data error :(";
        }
}
$switches->asXML("data.xml");

/*
loading xml
changing xml
saving xml
*/`enter code here`


?>

没有 500 错误,我所有的调试都是正确的。我需要用简单的 xml 保存。

解决方法

它可能不会让您感到惊讶。但是你不能用简单的xml写文件。简单 XML 是只读 API。以下解决方案可能更有效一些,因为您不必遍历已找到元素的节点列表。

<?php
// contains the state of the switch (on/off)
$state = $_GET['state'];

// contains the id of the switch
$id = $_GET['id'];

$doc = new DOMDocument();
$doc->load('switches.xml');

$xpath = new DOMXPath($doc);
$elements = $xpath->query('switch[id/text()="' . $name . '"]/state');

if ($elements->length > 0) {
    $elements->item(0)->nodeValue = $state;
}

$string = $doc->save('switches.xml');

使用 DOMDocument 类加载 xml 文件。之后,我使用 DOMXpath 类通过其 ID 查询请求的开关。如果在 xml 中找到开关,我们设置新状态并将其再次保存为文件。更少的代码。更有效。

如您所见,我使用了两个 GET 参数。参数 id 定义请求的开关。参数 state 定义了请求开关的新状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。