Просмотр полной версии : mysql -> php -> xml заместо тегов ><
darksranger
27.06.2008, 04:55
собствено рылся поиском, нашел подобную тему, но там наоборот человеку нужно было то что есть у меня :)
собствено привожу код
$file = 'flashanswer2.xml';
$a = new DOMDocument('1.0','utf-8');
$aEntire=$a->firstChild;
$aEntire = $a->appendChild($a->createElement('entire'));
$aFlashanswer = $aEntire->appendChild($a->createElement('news'));
$aFlashanswer->setAttribute('date',$datenews);
$aFlashanswer->setAttribute('titl',$titl);
$aFlashanswer->setAttribute('short_story',$short_story);
$aFlashanswer->setAttribute('full_story',$full_story);
$aFlashanswer->setAttribute('autor',$autor);
$aFlashanswer->setAttribute('category',$category);
$a->save($file);
переменные получаются выше в коде из mysql ( если отоброжать через echo в браузере все норм отоброжается
как сохранить теги в xml, для последущего отображения текста, в flash уже учитывая теги
Внутри <![CDATA[]]> флеш теги не парсит.
darksranger
27.06.2008, 05:19
не немного нетак изьяснился я сори
вобщем проблема вот в чем
после обрабатывания данных, данные в xml получаются такого вида
<br />СПб, 9-ая Советская, д.5.</p>
а нужно чтобы было вот так
<br />СПб, 9-ая Советская, д.5.</p>
Еще раз говорю, помещаете данные с тегами, которые не надо парсить, в cdata.
darksranger
27.06.2008, 05:45
это не flash :) проблема на скоко я понял, парсит php создавая xml, попробовал cdata не помогло
я привел создания xml в php, текст в переменные можно самому даже задать тоесть неважно откуда они, всеравно выведенно будет без тегов
Тогда переезжаем в другой раздел.
darksranger
27.06.2008, 05:56
прошлый вопрос актуален
попутный вопрос ( как альтернатива решения проблемы )
если я создам xml вот таким способом
$fp = fopen ("flashanswer2.xml", "a+");
fputs($fp,"\n");
fputs($fp,"\n");
fputs($fp,"<news>\n");
fputs($fp,"<full_story>".$full_story."</full_story>\n");
fputs($fp,"<autor>".$autor."</autor>\n");
fputs($fp,"</news>\n");
fputs($fp,"\n");
fclose($fp);
будут ли у меня проблемы при получении данных из этого xmla ?
PS iNils ты когда нибудь спишь ? :)
Флешу не важно каким образом создается xml, главное чтобы он был валидным. Однако не понятно, зачем физически создавать xml на диске, а не выводить через echo?
PS. Конечно сплю, но мой образ жизни позволяет делать это когда хочется, а не когда надо.
darksranger
27.06.2008, 07:07
а где прочитать про то как вывести flashy данные через echo ?
я вот тоже думал что это глупо создавать xml и потом брать из него данные, но не смог просто разобратся с echo( пробовал видно не так ), если можно маленький наглядный пример
проблема с тегами так и осталась, приведу немного кода
в php создаю так
$testing = "<![CDATA[<sender>John Smith</sender>]]>";
$file = 'flashanswer2.xml';
$a = new DOMDocument('1.0','utf-8');
$aEntire=$a->firstChild;
$aEntire = $a->appendChild($a->createElement('entire'));
$aFlashanswer = $aEntire->appendChild($a->createElement('news'));
$aFlashanswer->setAttribute('date',$testing);
и xml получается вот такой
<?xml version="1.0" encoding="utf-8"?>
<entire><news date="<![CDATA[<sender>John Smith</sender>]]>"/></entire>
PS )))) я тоже :) при таком графике кпд больше :)
Делается все просто.
Флешовая часть.
var xml:XML = new XML ();
xml.ignoreWhite = true;
xml.onLoad = function (flag:Boolean) {
if (flag) {
trace (this.firstChild.firstChild.firstChild.nodeValue);
}
};
xml.load ("http://ihome/data.php");
Серверная часть. Я использую двухфайловую схему, мне так удобнее кодировать данные в utf-8.
data.php
<?
header("Content-type: application/xml");
ob_start();
include 'main.php';
$utf = iconv("cp1251", "UTF-8", ob_get_contents());
ob_clean ();
echo "\xEF\xBB\xBF".'<?xml version="1.0" encoding="utf-8" ?>'."\n".$utf;
?>
main.php
<entire><news><![CDATA[<br />СПб, 9-ая Советская, д.5.</p>]]></news></entire>
Обратите внимание где и как пишется CDATA, а не в составе содержимого атрибута.
как добавить CDATA:
$dom->createCDATASection($content)
$dom - объект типа DomDocument
$content - содержание CDAT"ы
возвращает объект типа DomElement
Вместо того, чтобы посылать BOM таким способом можно так:
header('Content-Type: text/xml; charset=utf-8');
Вместо того, чтобы посылать BOM таким способом можно так:
header('Content-Type: text/xml; charset=utf-8');Так BOM не посылается, а хедер только браузер читает. А ты попробуй потом из браузера сохранить, открыть в редакторе и увидешь кашу, так как без BOM редактор кодировку файла не знает.
Сорри, виноват, использовал utf8_encode, а не iconv, а она сама добавляет BOM, вот и не обратил внимания.
darksranger
28.06.2008, 17:20
;) inils very fnks ! работает, доделал до свзяи с базы, итог, все отображается ;)
попутный вопрос про безопастность !
если сделать так
из flash ( можно впринцепи и не из нее, не принципиально ) посылать криптованный ключ в php, далее расшифровываем ключ и отдаем его в базу, в этом случае реально его перехватить ?
и вобще я много слышал о не безопастности flash-> php-> mysql, но так и не понял пока, почему ?
ведь из flash, максимум мы посылаем запросы, только, я так вобще из flash передаю только имя php скрипта и переменую, содержащую дату
если стоит вопрос безопастности в плане имени скрипта, то можно его зашифровать и с помощью другого скрипта расшифровать, дальше перенаправить куда уже нада, но все это смутно, так, как если брать обычные сайты, то там не кто не мешает взять teleport ( )))) это прога для скачки с инета страниц ) и скачать весь сайт
Флеш можно взломать и посмотреть алгоритм кодирования.
Если на ПХП скрипт не стоят права на просмотр, а только на выполнение - ничем его не скачаешь =) А идея СКуэЛ инъекции заключается примерно в следующем:
простой способ - послать СКуэЛ запрос вместо какого-нибудь параметра, который серверный скрипт коннектящийся к базе ожидает получить от пользователя, классический пример - в поле с юзернейм вводиться 1=1; и дальше какой-нибудь уже зловредный контент типа создание нового пользователя с супер полномочиями / удаления базы и т.п. Что довольно просто пресечь на этапе валидации - т.е. исключить не цифробуквенные символы и командные последовательности типа GRANT, DROP и т.п.
еще вариант - часто забывают закрыть коннекшн к базе после обработки запроса - ну, это вообще позволяет теоретически сделать с базой все что угодно прикинувшись очередным "запросом" к ней =) Ессно - после обработки надо закрывать соединение (например mysql_close($connection)).
Еще варианты - там где разрешается загрузка каких либо пользовательских файлов... но это уже понятно, что не ахти безопасно, для разных форматов существуют валидаторы и т.п...
Флеш в этом смысле не представляет большей или меньшей опасности... Т.е. флеш (начиная с АС3) может коннектится напрямую к СКуэЛ - но если вы на это пошли, то, наверняка представляете себе риски... Более ранние версии напрямую к СКуэЛ коннектится не могут - поэтому в принципе потенциально опасными быть не могут.
darksranger
28.06.2008, 21:38
Флеш можно взломать и посмотреть алгоритм кодирования.
Не, тут, как разтоки смысл раскодирование делать средствами php, а flash просто передает переменую, например с датой, в php ключ зашифрованный расшифровывается и передается в базу, вместе с датой полученной из flash, к примеру для получения новости в эту дату, тоесть flash выступает только в качестве передачи даты.
wvxvw
Спасибо за инфо!, суть уловил :)
PS везет мне с базами :) не давно ради интереса осуществил работу с базой через драйвер, средствами ассма :) забавненько, но быстренько, например тот же аналог в аксесе в 4 раза медленнее :))))))
Если делать через драйвер аксесса, тут никакой асм не поможет.
У меня такая же проблема образовалась, только вот решить я ее не могу, используя данные методы. Подскажите в чем трабла
php код utf-8
include 'xml_work.php';
if ($_POST['_type']=="edit_profile") {
$_POST['profile_prevtext'];
$xml = initXML("profile.xml");
$profName = $_POST['profile_name'];
$prevText = '<![CDATA['.$_POST['profile_prevtext'].']]>';
$fullText = '<![CDATA['.$_POST['profile_fulltext'].']]>';
editElementInProfile($xml, $_POST['_id'], $profName, 'name');
editElementInProfile($xml, $_POST['_id'], $prevText, 'prevText');
editElementInProfile($xml, $_POST['_id'], $fullText, 'fullText');
}
echo $xml->saveXML();
Выводит <![CDATA[Текст с <br>]]>
содержание xml_work.php
function initXML($name) {
$xml = new DOMDocument('1.0','utf-8');
$xml->load( $name );
return $xml;
}
function editElementInProfile($xml, $index, $newText, $elName) {
$xml->formatOutput = TRUE;
$xpath = new DOMXPath($xml);
$pics = $xpath->query('profile/'.$elName);
$i=0;
foreach($pics as $pic)
{
if ($i==$index) {
$pic->nodeValue = $newText;
}
$i++;
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.