Javascript XML和PHP—如果节点存在,则覆盖数据,如果不存在,则创建一个新节点

Javascript XML和PHP—如果节点存在,则覆盖数据,如果不存在,则创建一个新节点,javascript,php,xml,Javascript,Php,Xml,我正在使用HTML5画布、PHP和XML的混合构建某种签名生成器。我需要的是,当输入的“名字”已经存在于XML文件中时,它会检测它是否已经存在于XML文件中,并通过确认javascript窗口询问我是否要替换该部分,或者取消。如果输入的“名字”是新的,并且它还不在xml文件中,它会自动创建一个包含输入数据的新节 这是我的HTML代码(仅限于表单部分) 名字: 姓氏: 拯救 我的PHP代码: <?php $xml = simplexml_load_file('test2.xml');

我正在使用HTML5画布、PHP和XML的混合构建某种签名生成器。我需要的是,当输入的“名字”已经存在于XML文件中时,它会检测它是否已经存在于XML文件中,并通过确认javascript窗口询问我是否要替换该部分,或者取消。如果输入的“名字”是新的,并且它还不在xml文件中,它会自动创建一个包含输入数据的新节

这是我的HTML代码(仅限于表单部分)


名字:
姓氏:
拯救
我的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');

?>
signature=”“;
$xml->signature->fname=$fname;
$xml->signature->lname=$lname;
如果(isset($xml->signature->fname=$fname)){
echo“返回确认('这个名字已经存在,是否覆盖?');
}否则{
echo“警报($fname+‘另存为新签名’);”;
}
$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=$\u POST['firstname']$lname=$\u POST['lastname'];当我这样做时,它似乎不起作用。请看我的完整代码:(PHP代码在JS部分,XML代码在CSS部分)…我做错了什么?太棒了!现在一切正常。非常感谢。你添加的评论真的帮助我更好地理解我一开始做错了什么。很高兴能帮上忙。祝你好运
$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); 
   }
$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); 
   }