[英]XML and PHP - If node exists, overwrite the data, if not, create a new one
我正在使用HTML5 canvas,PHP和XML的组合构建某种签名生成器。 我需要的是,当输入的“名字”已经存在于XML文件中时,它会检测到XML文件中是否已存在该名字,并在确认javascript窗口中询问我是否要替换该部分,或者取消。 如果输入的“名字”是新的,并且不在xml文件中,它将使用输入的数据自动创建一个新部分。
这是我的HTML代码(仅表单部分)
<form name="signature">
First name:<input type="text" name="firstname">
Last name:<input type="text" name="lastname">
<button type="submit">Save</button>
</form>
我的PHP代码:
<?php
$xml = simplexml_load_file('test2.xml');
$fname = $_POST['firstname'];
$lname = $_POST['lastname'];
$xml->signature = "";
$xml->signature->fname = $fname;
$xml->signature->lname = $lname;
if(isset($xml->signature->fname = $fname)) {
echo "<script type='text/javascript'>return confirm('This first name already exists, overwrite it?');</script>";
} else {
echo "<script type='text/javascript'>alert($fname + ' saved as a new signature');</script>";
}
$doc->save('test2.xml');
?>
还有我的XML结构代码:
<?xml version="1.0" encoding="UTF-8"?>
<signatures>
<signature>
<fname>John</fname>
<lname>Doe</lname>
</signature>
<signature>
<fname>Bob</fname>
<lname>Funny</lname>
</signature>
</signatures>
例如,如果我在表单中输入“ John Testing”,它需要检测XML文件中已经存在“ John”,因此它会问我是否要用John Testing替换当前保存的John Doe。 例如,如果我输入“ Denis Tester”,那么由于没有Denis,XML文件将变成:
<?xml version="1.0" encoding="UTF-8"?>
<signatures>
<signature>
<fname>John</fname>
<lname>Doe</lname>
</signature>
<signature>
<fname>Bob</fname>
<lname>Funny</lname>
</signature>
<signature>
<fname>Denis</fname>
<lname>Tester</lname>
</signature>
</signatures>
我进行了一些研究,很确定我需要使用isset函数来扫描XML文件。 但是我不能使它工作。 非常感谢!
$fname = "John";
$lname = "Testing";
// find with xpath point to signature which fname is equal what we want
$signs = $xml->xpath('//signature[fname = "'.$fname.'"]');
// if (count($signs) > 1) // What to do if some Johns found ?
if (count($signs) == 1) $signs[0]->lname = $lname; // Found one element
else { // Not found - add
$sign = $xml->addChild('signature'); // Add signature child to root element
$sign->addChild('fname', $fname); // Add names as cildren of signature
$sign->addChild('lname', $lname);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.