я создаю очень простой CMS
Панель для моего сайта (я все еще lerning).
И у меня есть некоторые проблемы. Я создал панель в Flash-AS3
, который загружает php
файл, который открывается и сохраняет xml data
, Вот коды:
Код AS3:
function onClicked(e:MouseEvent):void
{
var myXmlString:String = "<?xml version=\"1.0\" encoding=\"utf-8\"?><NEWSCONTENT><NEWS ID=\"" + idTxt.text + "\" IMG=\"" + sourceTxt.text +"\" TITLE=\"" + titleTxt.text + "\" DATE=\"" + dateTxt.text + "\" CONTENT=\"" + contentTxt.text + "\"/></NEWSCONTENT>";
trace(myXmlString);
var myXml:XML = new XML(myXmlString);
var req:URLRequest = new URLRequest("phpXML.php");
req.data = myXml;
req.contentType = "text/xml";
req.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
function onPHPLoaded(e:Event):void
{
statusTxt.text = "Dane zostaly zaktualizowane!";
}
loader.load(req);
loader.addEventListener(Event.COMPLETE, onPHPLoaded);
}
send_btn.addEventListener(MouseEvent.CLICK, onClicked);
Код PHP:
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
$xml = $GLOBALS["HTTP_RAW_POST_DATA"];
$file = fopen("www.xml", "w");
fwrite($file, $xml);
fclose($file);
echo ($GLOBALS["HTTP_RAW_POST_DATA"]);
}
?>
XML-код:
<?xml version="1.0" encoding="utf-8"?>
<NEWSCONTENT>
<NEWS ID="1" IMG="galerry/1b.jpg" TITLE="Let's begin!" DATE="23-11-2014" CONTENT="This is the content"/>
</NEWSCONTENT>
Все отлично работает без errors
, но это не работает так, как я хочу.
Теперь, когда я положил data/"strings"
к text fields
это удаляет все xml data
и сохраняет его снова с текстом, который я написал. Но я хочу добавить следующую строку "<NEWS ID="1" IMG="galerry/1b.jpg" TITLE="Let's begin!" DATE="23-11-2014" CONTENT="This is the content"/>"
к xml
файл.
Я пытался изменить: $file = fopen("www.xml", "w");
в $file = fopen("www.xml", "a");
, но это добавило целое xml
Снова код для первого.
Кто-нибудь может помочь?
Если я понял вашу проблему, у вас есть XML-файл для сохранения новостей и каждый раз, когда вы хотите добавить новый. Если да, вам не нужно каждый раз отправлять весь контент XML, вы можете просто отправить новые атрибуты новостей и добавить их в существующий файл. Для этого возьмите этот код:
PHP-код:
<?php
if(count($_POST) == 5){
$xml_path = 'news.xml';
if(!file_exists($xml_path)){
// if our xml file didn't exist, create it
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->preserveWhiteSpace = FALSE;
$root = $xml->createElement('NEWSCONTENT');
$xml->appendChild($root);
} else {
// if our xml file exists, load it
$xml = new DOMDocument();
$xml->preserveWhiteSpace = FALSE;
$xml->load($xml_path);
// get our root element : NEWSCONTENT
$root = $xml->documentElement;
}
// create our news element
$news = $xml->createElement('NEWS');
// add atributes : ID, IMG, TITLE, DATE and CONTENT
$attr_id = $xml->createAttribute('ID');
$attr_id->value = $_POST['id'];
$attr_img = $xml->createAttribute('IMG');
$attr_img->value = $_POST['img'];
$attr_title = $xml->createAttribute('TITLE');
$attr_title->value = $_POST['title'];
$attr_date = $xml->createAttribute('DATE');
$attr_date->value = $_POST['date'];
$attr_content = $xml->createAttribute('CONTENT');
$attr_content->value = $_POST['content'];
$news->appendChild($attr_id);
$news->appendChild($attr_img);
$news->appendChild($attr_title);
$news->appendChild($attr_date);
$news->appendChild($attr_content);
$root->appendChild($news);
$xml->formatOutput = true;
// save our new xml file
$xml->save($xml_path);
}
?>
Код ActionScript:
var btn:Btn = new Btn();
btn.addEventListener(MouseEvent.CLICK, onClicked);
addChild(btn);
function onClicked(e:MouseEvent):void {
var url:String = 'phpXML.php';
var variables:URLVariables = new URLVariables();
variables.id = idTxt.text;
variables.img = sourceTxt.text;
variables.title = titleTxt.text;
variables.date = dateTxt.text;
variables.content = contentTxt.text;
var request:URLRequest = new URLRequest(url);
request.data = variables;
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, onPHPLoaded);
loader.load(request);
function onPHPLoaded(e:Event):void {
statusTxt.text = "Dane zostaly zaktualizowane!"
}
}
Конечно, этот минималистский рабочий код выполняет свою работу, он каждый раз отправляет новости и сохраняет их в news.xml
но вы должны добавить элементы управления …
Других решений пока нет …