将表单数据发送到XML

时间:2014-02-10 17:12:51

标签: php xml forms

我正在使用XML文件在Google Maps画布上显示标记点,并且我正在尝试实现一个页面,我可以将数据输入到表单中,并将其保存为我的data.xml文件中的新标记。我试图按照PHP手册,但似乎无法使它工作,所以想知道你是否能够帮助我。表单提交,但似乎没有任何内容进入XML文件。我在PHP中做错了吗?我错过了什么实际上将数据发送到我的XML文件?这是我到目前为止的代码:

HTML:

    <form name="input" action="map.php" method="post">
        <p>Name</p>
        <input type="text" name="name" placeholder="Name of road/junction"/>
        <p>Latitude</p>
        <input type="text" name="lat" placeholder="Latitude (should start with 54)"/>
        <p>Longitude</p>
        <input type="text" name="lng" placeholder="Longitude (should start with -2)"/>
        <p>Image</p>
        <input type="text" name="img" placeholder="include - images/"/>
        <p>Custom Marker</p>
        <input type="text" name="custommarker" placeholder="car.png"/>
        <p>Description</p>
        <input type="text" name="description" placeholder="Description of junction with tips"/>
        <input type="submit" value="send"/>
    </form>

PHP:

$sxe = new SimpleXMLElement($xmlstr);
$xmldoc->load('../data.xml');


$name = $_POST['name'];
$lat = $_POST['lat'];
$lng = $_POST['lng'];
$img = $_POST['img'];
$custommarker = $_POST['custommarker'];
$description = $_POST['description'];

$root = $xmldoc->firstChild;

$marker = $sxe->addChild('marker');
$root->addAttribute('name', $name);
$root->addAttribute('lat', $lat);
$root->addAttribute('lng', $lng);
$root->addAttribute('img', $img);
$root->addAttribute('custommarker', $custommarker);
$root->addAttribute('description', $description);

echo $sxe->asXML();
$xmldoc->save('../moredata.xml');

然后我的XML布局如下:

 <markers>
    <marker name="" lat="" lng="" img="" custommarker="" description "" />
 </markers>

1 个答案:

答案 0 :(得分:0)

我不了解PHP的第一行,但我这样做并且它有效。 您使用$ sxe添加子项而不是将其打印出来并将xmldoc保存到文件中。

<强> data.xml中

<?xml version="1.0" encoding="utf-8"?>
<markers/>

<强> map.php

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

$name = $_POST['name'];
$lat = $_POST['lat'];
$lng = $_POST['lng'];
$img = $_POST['img'];
$custommarker = $_POST['custommarker'];
$description = $_POST['description'];

$marker = $xmldoc->addChild('marker');
$marker->addAttribute('name', $name);
$marker->addAttribute('lat', $lat);
$marker->addAttribute('lng', $lng);
$marker->addAttribute('img', $img);
$marker->addAttribute('custommarker', $custommarker);
$marker->addAttribute('description', $description);

echo $xmldoc->asXML();
$xmldoc->asXML('moredata.xml');

moredata.xml 包含

<?xml version="1.0" encoding="utf-8"?>
<markers>
<marker name="[[$name]]" lat="[[$lat]]" lng="[[$lng]]" img="[[$img]]" custommarker="[[$custommarker]]" description="[[$description]]"/>
</markers>

所以区别在于。 您创建一个名为$ marker的变量,而不是将属性添加到$ xmldoc-&gt; firstChild。

$marker = $xmldoc->addChild('marker');
$marker->addAttribute('name', $name);
$marker->addAttribute('lat', $lat);
$marker->addAttribute('lng', $lng);
$marker->addAttribute('img', $img);
$marker->addAttribute('custommarker', $custommarker);
$marker->addAttribute('description', $description);

您的代码:

$marker = $sxe->addChild('marker');
$root->addAttribute('name', $name);
$root->addAttribute('lat', $lat);
$root->addAttribute('lng', $lng);
$root->addAttribute('img', $img);
$root->addAttribute('custommarker', $custommarker);
$root->addAttribute('description', $description);