Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.08.2008, 16:54
jakim_denis вне форума Посмотреть профиль Отправить личное сообщение для jakim_denis Найти все сообщения от jakim_denis
  № 1  
Ответить с цитированием
jakim_denis

Регистрация: Aug 2008
Сообщений: 24
Attention ЗАМЕНА: XML >> PHP

Добрый день!
Подскажите, каким образом правильно генерить XML файл средствами PHP?
Я работаю с XML след. структуры:
Код:
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<images>
	<image>
		<title>My title</title>
		<img>contents/gallery/category2/img1.jpg</img>
		<tmb>contents/gallery/category2/tmb1.jpg</tmb>
		<desc><![CDATA[Desc goes hire]]></desc>
	</image>
</images>
я создал след PHP
Код:
<?
function db_connect()
{
   $result = @mysql_pconnect("localhost", "root", ""); 
   if (!$result)
      return false;
   if (!@mysql_select_db("studio"))
      return false;

   return $result;
}


$conn = db_connect();

$sql = "select * from gallery where id='1'";
$result = mysql_query($sql, $conn);
if (mysql_num_rows($result)) {
echo '<?xml version="1.0" encoding="ISO-8859-1" ?> '; 
echo '<images>'; 
while ($qry = mysql_fetch_array($result)) {



$item = '<image><title>'.$qry[title].'</title><img>'.$qry[img].'</img><tmb>'.$qry[thmb].'</tmb><desc><![CDATA['.$qry[desc].']]></desc></image>';
echo $item; 
} 
echo '/<images>'; 
}
?>
Который выдает при обработке браузером такой результат:
Код:
<?xml version="1.0" encoding="ISO-8859-1" ?> <images><image><title>My title</title><img>contents/gallery/category1/img1.jpg</img><tmb>contents/gallery/category1/tmb1.jpg</tmb><desc><![CDATA[Desc goes hire]]></desc></image>/<images>
И в скрипте обрабатывающем XML меняю адрес файла для обработки на свой PHP.

К сожалению результат получается нулевой ((((
Подскажите где я допускаю ошибку? она на уровне логистики или инструментария?

Спасибо огромное!

Старый 11.08.2008, 17:45
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Добрый день!
Официальная поддержка ПХП4 закончилась ровно 3 дня тому назад (8 августа), и поэтому... =)
Поэтому учимся пользоваться DOMDocument классом =)
Кроме того, во избежание дальнейших граблей сразу забываем про любые ASCII кодировки для ХМЛей и начинаем использовать UTF-8.

К сожалению, не видя неработающей скрипт вероятность угадать, что в нем не работает стремится к нулю, могу только предположить, что:
нужно порасставлять trace() в ключевых местах и проверить совпаение URL в запросе с реальным URL по которому расположен скрипт.

Кроме того, не используйте короткое обозначение включений скрипта, т.е.
<?php ?> а не <? ?>
<?php print "hi!" ?> а не <?="hi!" ?>
Цитата:
Сообщение от PEAR
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.

You are strongly encouraged to always use curly braces even in situations where they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.
Это значит не
Код:
if (condition)
	statement;
a
Код:
if (condition) {
	statement;
}
ЗЫ. И ну максимум 80 символов в строке =) (а вообще - 72)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 11.08.2008 в 17:50.
Старый 11.08.2008, 19:26
jakim_denis вне форума Посмотреть профиль Отправить личное сообщение для jakim_denis Найти все сообщения от jakim_denis
  № 3  
Ответить с цитированием
jakim_denis

Регистрация: Aug 2008
Сообщений: 24
Цитата:
Официальная поддержка ПХП4 закончилась ровно 3 дня тому назад (8 августа), и поэтому... =)
Поэтому учимся пользоваться DOMDocument классом =)
В смысле? я не совсем понял как закончилась? тоесть теперь флеш что не знает что такое пхп?

Косательно сокращений php - их там деже и не использовалось.
Вывод того что проблема не в скрипте я зделал из того что с XML все работает - трабл только с php

Если трабл с кодировками - то оно по ходу должно же было выдать ну хоть что-то, пусть даже кривой текст?

Старый 11.08.2008, 20:09
jakim_denis вне форума Посмотреть профиль Отправить личное сообщение для jakim_denis Найти все сообщения от jakim_denis
  № 4  
Ответить с цитированием
jakim_denis

Регистрация: Aug 2008
Сообщений: 24
Вот код функции если это облегчит понимание задачи
Код:
function loadImages () {
	var images:XML = new XML ();
	images.ignoreWhite = true;
	images.onLoad = function (success) {
		if (success) {
			var xml:XMLNode = this.firstChild;
			totalImages = xml.childNodes.length;
			for (i = 0; i < xml.childNodes.length; i++) {
				var imagesTitle:String = xml.childNodes[i].childNodes[0].childNodes[0].nodeValue;
				var imagesLarge:String = xml.childNodes[i].childNodes[1].childNodes[0].nodeValue;
				var imagesTmb:String = xml.childNodes[i].childNodes[2].childNodes[0].nodeValue;
				var imagesDesc:String = xml.childNodes[i].childNodes[3].childNodes[0].nodeValue;
				//
				bottomBar.rightSide.imageTxt.txt.autoSize = true;
				bottomBar.rightSide.imageTxt.txt.text = "1";
				//
				bottomBar.rightSide.totalTxt.txt.autoSize = true;
				bottomBar.rightSide.totalTxt.txt.text = totalImages;
				//
				displayPositions ();
				//
				imageTitleArr.push (imagesTitle);
				imagesArr.push (imagesLarge);
				imageDescArr.push (imagesDesc);
				//
				tmbs.containerTmbs.attachMovie ("attach","attach" + i,i);
				tmbs.containerTmbs["attach" + i]._x = i * 30;
				//
				loadThumbnails (imagesTmb,tmbs.containerTmbs["attach" + i].picture);
				loadThumbnails (imagesTmb,tmbs.containerTmbs["attach" + i].largeTmb.picture);
				//
				contentBox.contentBox_text.catText.text = categoryTitleForContent;
				contentBox.contentBox_text.titleText.text = xml.childNodes[0].childNodes[0].childNodes[0].nodeValue;
				contentBox.contentBox_text.descText.htmlText = xml.childNodes[0].childNodes[3].childNodes[0].nodeValue;
				contentBox.contentBox_text.descText.autoSize = true;
				myListenerload.onResize ();
				//
				tmbs.containerTmbs["attach" + i].bt.idInstance = i;
				//
				tmbs.containerTmbs["attach" + i].bt.onRelease = function () {
					//
					cursorArr = this.idInstance;
					//
					for (a = 0; a < totalImages; a++) {
						if(tmbs.containerTmbs["attach" + a].back._tint == color){
							tmbs.containerTmbs["attach" + a].bt.enabled = true;
							tmbs.containerTmbs["attach" + a].back._tint = 0x353535;
						}
						//
						if(a > 0){
							if(a == totalImages - 1){
								tmbs.containerTmbs["attach" + cursorArr].gotoAndPlay("close");
								tmbs.containerTmbs["attach" + cursorArr].bt.enabled = false;
								tmbs.containerTmbs["attach" + cursorArr].back._tint = color;
							}
						}
					}
					//
					abortSlideShow ();
					//
					bottomBar.rightSide.imageTxt.txt.autoSize = true;
					bottomBar.rightSide.imageTxt.txt.text = cursorArr + 1;
					//
					displayPositions ();
					//
					contentBox.contentBox_text.catText.text = categoryTitleForContent;
					contentBox.contentBox_text.titleText.text = imageTitleArr[cursorArr];
					contentBox.contentBox_text.descText.htmlText = imageDescArr[cursorArr];
					contentBox.contentBox_text.descText.autoSize = true;
					myListenerload.onResize ();
					//
					ZigoEngine.doTween (imageContainer,'_alpha',0,1,"easeOutExpo",0,function () {
						loadBitmapSmoothed (imagesArr[cursorArr],imageContainer);
					});
				};
			}
		}
		loadBitmapSmoothed (imagesArr[cursorArr],imageContainer);
	};
	images.load ("contents/data/gallery_category1.xml");
}

Старый 11.08.2008, 22:23
jakim_denis вне форума Посмотреть профиль Отправить личное сообщение для jakim_denis Найти все сообщения от jakim_denis
  № 5  
Ответить с цитированием
jakim_denis

Регистрация: Aug 2008
Сообщений: 24
Почти разобрался с помощью скрипта:
Код:
<?php 
//phpinfo();
if(!$dbconnect = mysql_connect('localhost', 'root', '')) {
   echo "Connection failed to the host 'localhost'.";
   exit;
} // if
if (!mysql_select_db('studio')) {
   echo "Cannot connect to database 'test'";
   exit;
} // if

$table_id = 'image';
$query = "SELECT * FROM $table_id";
$dbresult = mysql_query($query, $dbconnect);

// create a new XML document
$doc = new DomDocument('1.0');

// create root node
$root = $doc->createElement('images');
$root = $doc->appendChild($root);

// process one row at a time
while($row = mysql_fetch_assoc($dbresult)) {

 // add node for each row
  $occ = $doc->createElement($table_id);
  $occ = $root->appendChild($occ);
  // add a child node for each field
  foreach ($row as $fieldname => $fieldvalue) {
    $child = $doc->createElement($fieldname);
    $child = $occ->appendChild($child);
    $value = $doc->createTextNode($fieldvalue);
    $value = $child->appendChild($value);
  } // foreach
} // while


// get completed xml document
$xml_string = $doc->saveXML();

echo $xml_string;
?>
Только вот трабл в том что не сильно специалист в PHP ((
Подскажите плизз, как отконфигурировать ячейки которые будут выводиться и отредактировать порядок строк?
Спасибо!

Старый 11.08.2008, 23:14
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
То, что закончилась поддержка значит, что php.net больше не отвечает за корректную работу / не принимает багрепорты, не гарантирует обратной совместимости и т.п.
Проблема по всей видимости не с PHP, а с AS, а он ну просто ужасный =)
1. Читаем про mx.utils.Delegate класс.
2. Объявлять функции внутри тела другой функции - это самый верный путь навредить себе самому.
3. Вот так в цикле обращаться к узлу - это безбожное расточительство ресурсов:
Код:
xml.childNodes[0].childNodes[3].childNodes[0].nodeValue
4. Нетипизированый доступ - еще один хороший способ не увидеть ошибки:
Код:
tmbs.containerTmbs["attach" + i].picture
Максимум, что из этого сможет понять читающий, что у вас есть какой-то динамический объект с динамическими свойствами containerTmbs, но вот что такое picture - этого уже не поймет никто.
5.
Код:
contentBox.contentBox_text.descText.htmlText
аналогично - вы сами себе усложняете жизнь, а что если contentBox_text не существует, как вы об этом узнаете?
6.
Код:
images.load("contents/data/gallery_category1.xml");
Вы пытаетесь общаться с ПХП скриптом, а при этом очень похоже на то, что пытаетесь загрузить ХМЛ файл. Если вы не трогали настройки сервера, и сохранили ваш ПХП файл с расширением .XML, то сервер не выполнит ПХП файл, а просто отдаст его в виде текста.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 11.08.2008 в 23:16.
Старый 11.08.2008, 23:28
jakim_denis вне форума Посмотреть профиль Отправить личное сообщение для jakim_denis Найти все сообщения от jakim_denis
  № 7  
Ответить с цитированием
jakim_denis

Регистрация: Aug 2008
Сообщений: 24
Это только фрагмент скрипта - это галерея которую я подключаю к сайту
Значение это я менял на адрес к пхп файлу:
Код:
images.load("contents/data/gallery_category1.php");
К сожалению знаний чтоб написать такую галерею самуому нехватит (((
К сожалению все это не устраняет необходимость админить галерею (
DOM XML на половину решил задачу.
Не трогая AS я вгрузил место XML файл PHP
Код:
<?php 
//phpinfo();
if(!$dbconnect = mysql_connect('localhost', 'root', '')) {
   echo "Connection failed to the host 'localhost'.";
   exit;
} // if
if (!mysql_select_db('studio')) {
   echo "Cannot connect to database 'test'";
   exit;
} // if

$table_id = 'image';
$query = "SELECT * FROM $table_id";
$dbresult = mysql_query($query, $dbconnect);

// create a new XML document
$doc = new DomDocument('1.0');

// create root node
$root = $doc->createElement('images');
$root = $doc->appendChild($root);

// process one row at a time
while($row = mysql_fetch_assoc($dbresult)) {

 // add node for each row
  $occ = $doc->createElement($table_id);
  $occ = $root->appendChild($occ);
  // add a child node for each field
  foreach ($row as $fieldname => $fieldvalue) {
    $child = $doc->createElement($fieldname);
    $child = $occ->appendChild($child);
    $value = $doc->createTextNode($fieldvalue);
    $value = $child->appendChild($value);
  } // foreach
} // while


// get completed xml document
$xml_string = $doc->saveXML();

echo $xml_string;
?>
Который из базы
Код:
CREATE TABLE IF NOT EXISTS `image` (
  `title` text NOT NULL,
  `img` varchar(255) NOT NULL,
  `thmb` varchar(255) NOT NULL,
  `desc` text NOT NULL
  PRIMARY KEY  (`title`)
)
Генерил код который прекрасно обработался галереей.
Осталось только следующие:
1) Отрегулировать порядок в котором будут выводиться строки из базы
Как я понимаю это проще зделать еще при вызове данных тут:
Код:
$query = "SELECT * FROM $table_id";
2) Отфильтровать ячейки которые будут входить в результат работы скрипта
На пример я ходу добавить перед title поле id, которое будет использоваться только панелью администрирования а скриптом не обрабатываться. Вопрос только в том как это зделать.
[b]3) Название второй ноды соответствует названию таблицы в базе - это тоже хочетсья изменить[b]

На сервере у меня PHP 5
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.6.16
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:43.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.