使用AJAX传递的数据编辑XML文件-正在删除XML数据


Editing XML file with Data passed from AJAX - XML data is being deleted

我正在做一个项目,在这个项目中,我将从googlemaps API读取数据,并将其转换为每个对象的XML,然后将该XML存储在数组槽中(在读取所有数据之前,这种情况将多次发生)。然后,我将向一个PHP文件发出Ajax POST请求,发送充满XML和布尔值的数组(让服务器知道是哪个请求)。然后,PHP将使用SimpleXML加载,用接收到的数据编辑XML,然后保存它

我的问题是,当我发出ajax请求时,Firebug会识别出POST请求,并且它正在发送所有正确的数据。它抛出一个302(错误?),说Moved Temporarily。然后发生一个GET请求(我认为是由服务器发起的),它在我询问布尔值(称为ajax)是否为真的行上输出一个错误,说Undefined inded: ajax。然后,当我检查我的XML文件时,所有数据都被删除了(文件仍然存在,但其中不再有任何XML),我非常困惑如何解决这个问题,我真的不知道该怎么办。以下是我的一些相关代码。

提前感谢您所能提供的任何帮助。任何帮助都将非常有帮助!

此外,如果你需要我澄清任何事情,请随时发表评论。

javascript

function sendData(result)
{
    $.ajax(
    {
        type:'POST',
        url:'getXML.php',
        traditional: false,
        data:
        {
            //Result is an array full of XML
            'myXML': result,
            //The ajax boolean is for letting the PHP know that it is this request
            'ajax' : true
        },
        success: function(data)
        {
            $('#output').text(data);
        }
    })
}

PHP

<?php
    //Set error reporting
    ini_set('display_errors', 1);
    ini_set('log_errors', 1);
    ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
    error_reporting(E_ALL);
    //Checks if the get request is from the AJAX call
    if($_POST['ajax'])
    {
        //////////////////////////////Code for editing XML/////////////////////////////////////////
        //Checks to see if the xml file exists.
        if (file_exists('business.xml')) 
        {
            //Loads the XML file
            $xml = simplexml_load_file('business.xml');
            $result = $_POST['myXML'];
            //Append XML to existing file using data loaded in from AJAX request
            appendXML($xml, $result);   
        } 
        else 
        {
            //Loading XML has failed
            exit('Failed to open business.xml.');
        }
    }
    function appendXML($xml, $xmlResult)
    {
        foreach($xmlResult as $result)
        {
            //Creates new business node
            $business = $xml ->addChild('business');
            //Adds XML to business node (Please oh dear god let this work)
            $business ->addChild($result);
            file_put_contents("business.xml", $xml);
            header('Location: getXML.php');
        }
    }
?>

您遇到的问题是这行:

header('Location: getXML.php');

在页面的第一次运行中,一切都很好,并且正在调用appendXML代码块。然而,当这种情况发生时,你正在进行一个标题重定向到同一个页面(我不知道为什么)。当THIS发生时,页面会重新加载,但在新页面中,您之前设置的所有post数据都没有设置。结果$_POST为空,而if语句失败,那么$_POST['myXML']也为空,这将清空您的XML。

如果出于某种原因需要重新加载页面,请考虑创建会话并将值存储在会话变量中。您还应该考虑对传入的数据进行清理,因为您当前的代码存在漏洞,有人可以将从浏览器传入的任何信息注入到服务器上的XML文件中。这可能不是什么大不了的事,但我总是担心有人会直接将任何未跳过的内容写入我系统上的文件。如果没有其他人可以用这个恶意地最大化你的驱动器空间。