【发布时间】:2021-04-15 22:09:28
【问题描述】:
我正在尝试创建一个带有按钮更新的简单网页。按钮的状态会显示给用户,但我不想为这么小的东西使用数据库。我正在尝试使用 XML 解析。我非常接近做到这一点,但它似乎没有将我的更改保存到 xml 文件中。我一直在使用 var dump 并且得到了我期望的输出。我不是最好的 php,即使有朋友帮助我,我们也迷路了。
jQuery
$( ".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 而不是将其保存到文件似乎工作正常:3v4l.org/vPctH 可能文件的权限错误,脚本无法覆盖它?使用
file_put_contents进行测试,并尝试写入不同的文件或目录。 -
我刚刚运行了这个准确的 PHP 代码,包括读取和写入文件,它运行良好。所以还有其他问题 - 要么是权限错误,您没有查看正确的日志文件,要么它实际上正在保存文件,但您有多个文件副本并且正在查看错误一。
标签: php jquery xml simplexml saving-data