2014-01-17 2 views
0

Я пытаюсь сохранить данные в файл XML.Данные не сохраняются должным образом в файл XML

if (isset($_POST['submit'])) { 

    $name = mysql_real_escape_string($_POST['name']); 


    $xml = new DOMDocument("1.0", "ISO-8859-1"); 
    $xml->preserveWhiteSpace = false; 
    $xml->load('/var/www/Report/file.xml'); 

    $element = $xml->getElementsByTagName('entries'); 
    $newItem = $xml->createElement('reports'); 

    $newItem->appendChild($xml->createElement('timestamp', date("F j, Y, g:i a",time()))); 
    $newItem->appendChild($xml->createElement('name', $name)); 
    $element -> item(0) -> appendChild($newItem);  

    $xml->formatOutput = true; // this adds spaces, new lines and makes the XML more readable format. 
    $xmlString = $xml->saveXML(); // $xmlString contains the entire String 
    $xml->save('/var/www/Report/file.xml'); 

} 

В любое время я использую mysql_real_escape_string(), чтобы экранирует специальные символы в моей строке или попытаться дезинфицировать мои данные, мой файл XML выглядит как-то в изображении ниже.

enter image description here

Я не понимаю, почему начало имени тега отсутствует в моем файле XML и почему мои данные $ имя не сохраняется в файл XML либо. Как я могу это исправить. Любая помощь будет оценена по достоинству. Заранее спасибо

ответ

0

1) Firefox не показывает xml by by by by by by by by by by by by a bot, а сам форматирует его. Поэтому пустые элементы появляются только с одним закрывающим тегом независимо от того, как они появляются в источнике xml. Если вы хотите увидеть точный вывод xml, откройте его в текстовом редакторе.

2) mysql_real_escape_string ускользает символы, которые являются проблематичными для MySQL, а не XML: например, он не убегает "<. Вместо этого вы должны использовать DOMDocument :: createTextNode. Таким образом, вместо

$newItem->appendChild($xml->createElement('name', $name)); 

использование

$nameElement = $xml->createElement('name'); 
$nameElement->appendChild($xml->createTextNode($name)); 
$newItem->appendChild($nameElement); 

3) Как вы видите, $name пуст, но я не знаю, что может быть проблема с данными вашей POST видящих только этот код, может быть, в вашей форме нет <input name='name' />: иногда я случайно устанавливаю атрибут id для входов вместо имя атрибут.

+0

Спасибо миллион за ответ @tzunghaor. Теперь теги XML полностью созданы, даже если в них нет данных. Итак, есть способ избежать жаргонов с пользовательского ввода перед сохранением данных в XML-файл? – user1444442

+0

Что вы подразумеваете под жаргоном? Вульгарные слова? Разбор человеческого языка - довольно сложная задача. – tzunghaor

+0

О, что я имел в виду, был особым символом, который пользователь мог бы ввести в качестве входной информации в веб-форму. Я бы не хотел сохранять эти данные в файле XML. т.е. ** ', /,:, **. Есть ли способ очистить пользовательские входы? – user1444442

Смежные вопросы