<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Зона 51</title>
	<atom:link href="http://www.bushnev.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bushnev.com/blog</link>
	<description>мои заметки на тему RIA, Flex и всего остального…</description>
	<lastBuildDate>Sat, 21 Nov 2009 22:47:49 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Кириллизация рунета</title>
		<link>http://www.bushnev.com/blog/2009/11/21/russian-internet/</link>
		<comments>http://www.bushnev.com/blog/2009/11/21/russian-internet/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 03:13:18 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[Всякое]]></category>
		<category><![CDATA[runet]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=42</guid>
		<description><![CDATA[Короткий пост об утреннем съезжании мозгов.
Последнюю неделю капитально выносят мозг в СМИ, какое нас ждет щастье &#8211; нармальные пацаны смогут набирать в адресной строке мегакомбинации, типа &#8220;проектов.нет&#8221;, &#8220;радости-полные-штаны.рф&#8221;, &#8220;я-пиарюсь.ру&#8221;. Мое мнение &#8211; полный привет. И как на такие сайты будут заходить люди у кого нет на клаве русских букав? Делать дубли на том же англицком? [...]]]></description>
			<content:encoded><![CDATA[<p>Короткий пост об утреннем съезжании мозгов.<br />
Последнюю неделю капитально выносят мозг в СМИ, какое нас ждет щастье &#8211; нармальные пацаны смогут набирать в адресной строке мегакомбинации, типа &#8220;проектов.нет&#8221;, &#8220;радости-полные-штаны.рф&#8221;, &#8220;я-пиарюсь.ру&#8221;. Мое мнение &#8211; полный привет. И как на такие сайты будут заходить люди у кого нет на клаве русских букав? Делать дубли на том же англицком? Не, я предлагаю сразу делать также дубли на японском, суахили, ну и клинопись можно взять.</p>
<p>Или домены &#8220;.рф&#8221; это первый шаг к цензуре интернета? Для начала типа клуба для своих, а дальше как у нас водится по рекомендации&#8230;</p>
<p>P.S. Update. Интересно если в имени домена будет часть букав, типа &#8220;у&#8221;, &#8220;е&#8221;, &#8220;а&#8221; на русском, а часть на англицком? Застрелиться <img src='http://www.bushnev.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/11/21/russian-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Модуль авторизации для Flex-приложений (part 2)</title>
		<link>http://www.bushnev.com/blog/2009/11/13/flex-authorization-part-2/</link>
		<comments>http://www.bushnev.com/blog/2009/11/13/flex-authorization-part-2/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 00:48:04 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Custom Event]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[TitleWindow]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=32</guid>
		<description><![CDATA[Продолжение по теме: &#8220;Модуль авторизации для Flex-приложений&#8221;
начало тут
Итак строим Flex-client side
Проект состоит из следующих файлов.
1. index.mxml &#8211; главное приложение в котором нам необходима авторизация
2. com/control/maincontrol.as &#8211; вся логика главного приложения по обработке событий авторизации
3. com/events/LoginEvent.as &#8211; Custom event при помощи которого передаем данные в главное приложение
4. com/view/LoginWindow.mxml &#8211; модуль авторизации, построенный на базе TitleWindow
5. com/vo/GALLuserVO.as [...]]]></description>
			<content:encoded><![CDATA[<p>Продолжение по теме: &#8220;Модуль авторизации для Flex-приложений&#8221;<br />
начало <a href="http://www.bushnev.com/blog/2009/11/10/flex-authorization-part-1/">тут</a></p>
<p>Итак строим Flex-client side</p>
<p>Проект состоит из следующих файлов.<br />
1. index.mxml &#8211; главное приложение в котором нам необходима авторизация<br />
2. com/control/maincontrol.as &#8211; вся логика главного приложения по обработке событий авторизации<br />
3. com/events/LoginEvent.as &#8211; Custom event при помощи которого передаем данные в главное приложение<br />
4. com/view/LoginWindow.mxml &#8211; модуль авторизации, построенный на базе TitleWindow<br />
5. com/vo/GALLuserVO.as &#8211; value-object класс содержащий все данные пользователя</p>
<p><span id="more-32"></span><br />
<strong>Логика:</strong><br />
- По нажатию кнопки &#8220;cbLogin&#8221; создается окно для авторизации<br />
- в LoginWindow по нажатию кнопки &#8220;cbSubmit&#8221; передаются данные (login/password) в файл login.php<br />
- login.php генерирует различные XML (смотри part1)<br />
- LoginWindow анализирует входящие XML и генерирует alert или объект с данными<br />
- объект с данными передается через CustomEvent главному приложению<br />
<strong><br />
Несколько замечаний:</strong><br />
- Естественно в реальном приложении данные об ошибках не выводятся пользователю, а пишутся в лог-файл.</p>
<div id="attachment_39" class="wp-caption aligncenter" style="width: 222px"><img src="http://www.bushnev.com/blog/content/2009/11/project.png" alt="Структура проекта" title="Структура проекта" width="212" height="293" class="size-full wp-image-39" /><p class="wp-caption-text">Структура проекта</p></div>
<p><strong>главный файл<br />
index.mxml</strong></p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
				layout=&quot;absolute&quot;&gt;

	&lt;mx:Style&gt;
		Application
			{
		    paddingLeft: 10px;
		    paddingRight: 10px;
		    paddingTop: 10px;
		    paddingBottom: 10px;
		    backgroundGradientColors: #2F3D45, #5B7685;
		    }
	    Alert
	    	{
			backgroundColor:#eeeeee;
			color: #323232;
			borderColor: #cc0000;
			fontWeight:bold;
			borderAlpha: 0.7;
			headerHeight:20;
			themeColor: #848484;
			titleStyleName:alertTitle;
			}
		.alertTitle
		{
		color:#ffffff;
		fontWeight:bold;
		}
	&lt;/mx:Style&gt;

	&lt;!-- базовая логика --&gt;
	&lt;mx:Script source=&quot;com/control/maincontrol.as&quot;/&gt;

   	&lt;mx:ApplicationControlBar id=&quot;appContolBar&quot; dock=&quot;true&quot; paddingTop=&quot;2&quot; paddingBottom=&quot;2&quot;  alpha=&quot;1.0&quot;&gt;
		&lt;mx:Spacer width=&quot;100%&quot; /&gt;
		&lt;mx:Button id=&quot;cbLogin&quot; label=&quot;Login&quot;
			   click=&quot;showLoginWindow()&quot;
			   icon=&quot;@Embed(source='assets/icons/user.png')&quot;
			   /&gt;

	&lt;/mx:ApplicationControlBar&gt;

&lt;/mx:Application&gt;
</pre>
<p>и файл базовой логики <strong>maincontrol.as</strong></p>
<pre class="brush: as3;">
/******************************************************************************
 *  импорт components
 ******************************************************************************/

// import своих компонент
import com.events.LoginEvent;
import com.view.LoginWindow;
import com.vo.GALLuserVO;

// Импорт Flex компонент
import mx.controls.Alert;
import mx.managers.PopUpManager;

/******************************************************************************
 * объявление переменных
 ******************************************************************************/

// переменная содержащая данные пользователя
private var userData:GALLuserVO;

// создание переменных для окон
private var loginWindow:LoginWindow;

/******************************************************************************
 * блок обработки кнопок
 ******************************************************************************/

// перехватчик нажатия кнопки Login
private function showLoginWindow():void{
	// добавляем окно авторизации в главное приложение
	var loginForm:LoginWindow = LoginWindow(PopUpManager.createPopUp(this, LoginWindow, false));
		loginForm.setStyle(&quot;borderAlpha&quot;, 0.8);

	// добавляем прослушку окна Login
	loginForm.addEventListener(&quot;user&quot;, loginFormHandler);
	}

// перехватчик события по авторизации
private function loginFormHandler(event:LoginEvent):void{
	// получаем данные из евента
	userData = event.userVO;

	//выводим на экран данные о пользователе
	var UserMessage:String = event.userVO.usersUsername;
		UserMessage += &quot;\n\n&quot; + event.userVO.usersFirstname;
		UserMessage += &quot;\n\n&quot; + event.userVO.usersLastname;
		UserMessage += &quot;\n\n&quot; + event.userVO.usersDepartment;
		UserMessage += &quot;\n\n&quot; + event.userVO.usersAppointment;
		UserMessage += &quot;\n\n&quot; + event.userVO.usersEmail;
		UserMessage += &quot;\n\n&quot; + event.userVO.usersPermission;

	Alert.show(UserMessage, &quot;Данные о пользователе&quot;);

	// в принципе здесь размещаем переход на действие которое мы планируем...
	// do it something with userdata

	// я в зависимости от содержания usersPermission открывал некоторые кнопки

	}
/******************************************************************************
 * конец
 ******************************************************************************/
</pre>
<p>В итоге получим примерно такую картинку:<br />
<img src="http://www.bushnev.com/blog/content/2009/11/MainWindow.png" alt="MainWindow" title="MainWindow" width="198" height="131" class="aligncenter size-full wp-image-38" /></p>
<p>Создаем новый MXML component<br />
<strong>LoginWindow.mxml</strong></p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:TitleWindow xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
	horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;
	layout=&quot;absolute&quot;
	width=&quot;200&quot; height=&quot;200&quot;
	title=&quot;Авторизация&quot;
	status=&quot;Close&quot;
	creationComplete=&quot;init();&quot;
	showCloseButton=&quot;true&quot;
	close=&quot;closeWin()&quot;
	&gt;

	&lt;!-- обязательный тег с метаданными где мы присваиваем имя нашему Custom Event --&gt;
	&lt;mx:Metadata&gt;
		[Event(name=&quot;user&quot;, type=&quot;com.events.LoginEvent&quot;)]
	&lt;/mx:Metadata&gt;

	&lt;mx:Script&gt;
		&lt;![CDATA[
			import com.events.LoginEvent;
			import com.vo.GALLuserVO;
			import mx.controls.Alert;
			import mx.managers.PopUpManager;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.http.HTTPService;

			private var tempUserName:String;

			private var myData:Object;

			private var UserData:GALLuserVO = new GALLuserVO();
			private var gateway:HTTPService = new HTTPService();

			private function init():void{

				PopUpManager.centerPopUp(this);
				username.setFocus();

			}

			private function closeWin():void{
				// сброс полей
				username.text = &quot;&quot;;
				password.text = &quot;&quot;;
				// убираем с экрана
				PopUpManager.removePopUp(this);
			}

			private function loginSubmitHanler():void {
				// объект содержащий поля с логином и паролем для отсылки
				var UserLoginObj:Object;
				UserLoginObj = {&quot;username&quot;:username.text, &quot;password&quot;:password.text};
				// отправка на проверку имени и пароля
				sendUser(UserLoginObj);
			}

			private function sendUser(setUser:Object):void
			{
				// сохраняем имя
				tempUserName = setUser.username;

				// заносим в запрос данные и отправляем на сервер
				gateway.url = &quot;assets/php/login.php&quot;;
				gateway.method = &quot;POST&quot;;
				gateway.useProxy = false;
				gateway.showBusyCursor = true;
				gateway.addEventListener(ResultEvent.RESULT, checkUser);
				gateway.addEventListener(FaultEvent.FAULT, faultHandler);
				gateway.request = setUser;
				gateway.send();
			}

			private function checkUser(event:ResultEvent):void
			{
				// загружаем данные из XML
				myData = event.result.data;

				// проверка ошибок соединения
				if (myData.error == &quot;yes&quot;)
					{
						// передаем в алерт описание ошибки
						mySQLAlert(myData.error_num, myData.error_desc);
					}
					else
					{
						// успешное соединение - пользователь есть в базе
						if(myData.loginsuccess == &quot;yes&quot;)
						{
							// наполнение объекта данными
							UserData.usersUsername = tempUserName;
							UserData.usersFirstname = myData.Ufirstname
							UserData.usersLastname = myData.Ulastname;
							UserData.usersEmail = myData.Uemail;
							UserData.usersDepartment = myData.Udepartment;
							UserData.usersAppointment = myData.Uappointment;
							UserData.usersPermission = myData.Upermission;

							// сброс полей
							username.text = &quot;&quot;;
							password.text = &quot;&quot;;

							// отправка данных через евент в главное приложение
							var e:LoginEvent = new LoginEvent(&quot;user&quot;, UserData);
							dispatchEvent(e);

							// закрываем окно
							closeWin();
						}
						else
						// успешное соединение - но пользователя нет в базе
						{
							// сброс полей
							username.text = &quot;&quot;;
							password.text = &quot;&quot;;
							Alert.show(&quot;Invalid username or password&quot;, &quot;Alert!&quot;);
						}
					}
			}

			/******************************************************************************
			 * отслеживание ошибок mySQl и при соединении
			 ******************************************************************************/
			private function mySQLAlert (num:String, message:String):void
				{
				Alert.show(message, &quot;mySQL Error! &quot; + &quot;Error #&quot; + num);
				}

			private  function faultHandler(event:FaultEvent):void
			{
				var errorMessage:String = &quot;Connection error: &quot; + event.fault.faultString;
				if (event.fault.faultDetail)
				{
					errorMessage += &quot;\n\nAdditional detail: &quot; + event.fault.faultDetail;
				}
				Alert.show(errorMessage);
			}

		]]&gt;
	&lt;/mx:Script&gt;

	&lt;mx:Label x=&quot;10&quot; y=&quot;10&quot; text=&quot;Login:&quot; width=&quot;160&quot;/&gt;
	&lt;mx:TextInput x=&quot;10&quot; y=&quot;36&quot; id=&quot;username&quot;  width=&quot;160&quot;/&gt;
	&lt;mx:Label x=&quot;10&quot; y=&quot;66&quot; text=&quot;Password:&quot; width=&quot;160&quot;/&gt;
	&lt;mx:TextInput 	id=&quot;password&quot;
					x=&quot;10&quot; y=&quot;92&quot;
					displayAsPassword=&quot;true&quot;
					enter=&quot;loginSubmitHanler()&quot;
				  	width=&quot;160&quot;/&gt;

	&lt;mx:Button 	id=&quot;cbSubmit&quot;
				label=&quot;OK&quot;
				click=&quot;loginSubmitHanler()&quot;
			   	x=&quot;10&quot; y=&quot;122&quot;
			   	width=&quot;75&quot;/&gt;

	&lt;mx:Button 	id=&quot;cbCancel&quot;
				label=&quot;Cancel&quot;
				click=&quot;closeWin()&quot;
				x=&quot;95&quot; y=&quot;122&quot;
				width=&quot;75&quot;
			    /&gt;

&lt;/mx:TitleWindow&gt;
</pre>
<p><strong>Внешний вид:</strong><br />
<img src="http://www.bushnev.com/blog/content/2009/11/LoginWindow.png" alt="LoginWindow" title="LoginWindow" width="217" height="220" class="aligncenter size-full wp-image-37" /><br />
Сопутствующие файлы: <strong>LoginEvent.as</strong> &#8211; Custom Event</p>
<pre class="brush: as3;">
package com.events
{
	import com.vo.GALLuserVO;

	import flash.events.Event;

	public class LoginEvent extends Event
	{
		public var userVO:GALLuserVO;

		public function LoginEvent(type:String, userVO:GALLuserVO)
		{
			super(type);
			this.userVO = userVO;
		}
	}
}
</pre>
<p>и <strong>GALLuserVO.as</strong> &#8211; value-object class</p>
<pre class="brush: as3;">
package com.vo
{
	public class GALLuserVO
	{
		public var usersUsername:String;
		public var usersFirstname:String;
		public var usersLastname:String;
		public var usersEmail:String;
		public var usersDepartment:String;
		public var usersAppointment:String;
		public var usersPermission:String;
	}
}
</pre>
<p>При успешном запросе мы получаем следующие данные в дебаге:<br />
<img class="aligncenter size-full wp-image-33" title="debuguserdata" src="http://www.bushnev.com/blog/content/2009/11/debuguserdata.png" alt="debuguserdata" width="431" height="233" /></p>
<p>или для отладки через Alert:<br />
<img class="aligncenter size-full wp-image-40" title="userdata" src="http://www.bushnev.com/blog/content/2009/11/userdata.png" alt="userdata" width="228" height="286" /></p>
<p>Для различных ситуаций с ошибками выводятся следующие алярмы.<br />
1. Не прошла авторизация<br />
<img class="aligncenter size-full wp-image-35" title="error_user" src="http://www.bushnev.com/blog/content/2009/11/error_user.png" alt="error_user" width="265" height="236" /><br />
2. Ошибка при коннекте с базой данных<br />
<img class="aligncenter size-full wp-image-36" title="error_usersql" src="http://www.bushnev.com/blog/content/2009/11/error_usersql.png" alt="error_usersql" width="431" height="231" /><br />
3. Ошибка в синтаксисе SQL<br />
<img src="http://www.bushnev.com/blog/content/2009/11/error_syntax.png" alt="error_syntax" title="error_syntax" width="447" height="242" class="aligncenter size-full wp-image-34" /></p>
<p>Вроде как все. Готов выслушать предложения по улучшению данного модуля <img src='http://www.bushnev.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/11/13/flex-authorization-part-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Модуль авторизации для Flex-приложений (part 1)</title>
		<link>http://www.bushnev.com/blog/2009/11/10/flex-authorization-part-1/</link>
		<comments>http://www.bushnev.com/blog/2009/11/10/flex-authorization-part-1/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 23:03:58 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[MySQLi]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=27</guid>
		<description><![CDATA[Приведу один из своих опытов, а именно: &#8220;Модуль авторизации для Flex-приложений&#8221;
Идея  сводится к одному &#8211; необходимо авторизовать пользователя в приложении и выдать ему какие-то права доступа.
База данных для пользователей &#8211; MySQL.
Данные передаются в формате XML через PHP.
На стороне Flex за передачу и прослушку отвечает HTTPService.
Оговорюсь сразу, данный  пример НЕ ИСПОЛЬЗУЕТ сессии. Хотя как [...]]]></description>
			<content:encoded><![CDATA[<p>Приведу один из своих опытов, а именно: &#8220;Модуль авторизации для Flex-приложений&#8221;</p>
<p>Идея  сводится к одному &#8211; необходимо авторизовать пользователя в приложении и выдать ему какие-то права доступа.</p>
<p>База данных для пользователей &#8211; MySQL.<br />
Данные передаются в формате XML через PHP.</p>
<p>На стороне Flex за передачу и прослушку отвечает HTTPService.</p>
<p>Оговорюсь сразу, данный  пример НЕ ИСПОЛЬЗУЕТ сессии. Хотя как будет время, я постараюсь его доработать для этого.<br />
<span id="more-27"></span><br />
Итак. Создаем базу данных MySQL:</p>
<pre class="brush: sql;">

CREATE DATABASE  `common` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE TABLE `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL DEFAULT '' COMMENT 'логин',
`password` varchar(50) NOT NULL DEFAULT '' COMMENT 'пароль',
`firstname` varchar(50) DEFAULT NULL COMMENT 'Имя',
`lastname` varchar(50) DEFAULT NULL COMMENT 'Фамилия',
`email` varchar(50) DEFAULT NULL COMMENT 'электронная почта',
`department` varchar(10) DEFAULT NULL COMMENT 'отдел',
`appointment` varchar(100) DEFAULT NULL COMMENT 'должность',
`permission` varchar(10) NOT NULL DEFAULT '' COMMENT 'разрешения',
PRIMARY KEY (`user_id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
</pre>
<p>Движок InnoDB так как возможно подключение других таблиц (например таблица разрешений по различным проектам).</p>
<p>Данные я забивал через phpmyadmin, у меня их было немного. А так, можно конечно сделать отдельную админку&#8230;<br />
Пароли хэшируются алгоритмом sha1. Для генерации хэша паролей пользователей на локальном серваке сделал страничку со следующим файлом pass-gen.php<br />
Затем результат присылали мне.<br />
код pass-gen.php :</p>
<pre class="brush: php;">
&lt;?php
if(!$_POST)
 {
?&gt;
 &lt;form method=&quot;post&quot;&gt;
 &lt;input type=&quot;text&quot; name=&quot;pass&quot;&gt;
 &lt;input type=&quot;submit&quot;&gt;
 &lt;/form&gt;
&lt;?php
 }
else
 {
 $data=$_POST['pass'];
 print sha1($data);
 }
?&gt;
</pre>
<p>За соединение с базой отвечает файл: login.php<br />
в качестве имени сервера используется &#8220;localhost&#8221;, пользователь &#8220;db_user&#8221;, пароль &#8220;db_pass&#8221;, которые вы замените на свои.</p>
<pre class="brush: php;">
&lt;?php
/***********************************************************************
*  - используется mySQLi
*  - XML формируется при помощи DOM
************************************************************************/

// описываем параметры соединения
define( &quot;DATABASE_SERVER&quot;, &quot;localhost&quot; );
define( &quot;DATABASE_USERNAME&quot;, &quot;db_user&quot; );
define( &quot;DATABASE_PASSWORD&quot;, &quot;db_pass&quot; );
define( &quot;DATABASE_NAME&quot;, &quot;common&quot; );
$table = &quot;users&quot;;

//содаем объект содержащий соединение с базой данных
$conn = @new mysqli(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);

// проверка ошибок соединения
if (mysqli_connect_errno() !==0 )
{
 // если ошибка при коннекте с базой данных
 $error_num = mysqli_connect_errno();
 $error_message = mysqli_connect_error();

 // передаем данные об ошибке в функцию
 sendErrorData($error_num, $error_message);

}
 else
{
 // если нет ошибки при коннекте с базой данных

 // устанавливаем кодировку соединения
 //$conn-&gt;query(&quot;SET CHARACTER SET 'utf8'&quot;);
 $conn-&gt;query(&quot;SET NAMES 'utf8'&quot;);

 // Данные из Flex передаются в переменную POST
 $username = mysqli_real_escape_string($conn, $_POST[&quot;username&quot;]);

 //для проверки скрипта, пока не готов Flex-модуль можно использовать предварительно забитый в базу testuser
 //$username = mysqli_real_escape_string($conn, &quot;testuser&quot;);

 // шифруем входящий пароль
 // sha1 - 40 знаков, md5 - 32 знака
 $password = sha1($_POST[&quot;password&quot;]);

 //для проверки скрипта, пока не готов Flex-модуль можно использовать предварительно забитый в базу пароль для testuser - &quot;testpass&quot;
 //$password = sha1(&quot;testpass&quot;);

 // запрос в базу данных
 $query_str = &quot;SELECT * FROM $table WHERE username = '$username' AND password = '$password'&quot;;
 $resultData = @$conn-&gt;query($query_str);

 // проверям на ошибки после запроса
 if ($resultData === FALSE)
 {
 $error_num = $conn-&gt;errno;
 $error_message = $conn-&gt;error;
 // передаем данные об ошибке в функцию
 sendErrorData($error_num, $error_message);
 // закрываем соединение
 $conn-&gt;close();
 }
 else
 // формирование ответа
 {

 $result_row = $resultData-&gt;fetch_object();
 // проверка есть ли такой пользователь
 if(!$result_row)
 {
 // нет записи
 sendLoginError();

 }else{
 // добавим авторизациооные данные
 sendLoginData($result_row);
 }
 // закрываем соединение
 $conn-&gt;close();
 }

}
// Функция возвращает данные об ошибках при соединении с базой данных или при выполнении запроса.
function sendErrorData($myerr_num, $myerr_desc) {

 $dom = new DOMdocument('1.0', 'utf-8');    # Создание XML DOM Document
 $dom-&gt;formatOutput = true;                # Форматируем вывод
 $rows = $dom-&gt;appendChild($dom-&gt;createElement('data'));    # Создадим root XML element
 $rows-&gt;appendChild($row = $dom-&gt;createElement('error', 'yes'));    # Создадим первый элемент - error
 $rows-&gt;appendChild($row = $dom-&gt;createElement('error_num', $myerr_num));    # Создадим второй элемент - номер ошибки
 $rows-&gt;appendChild($row = $dom-&gt;createElement('error_desc', $myerr_desc));    # Создадим третий элемент - описание ошибки

 // выводим ответ
 print $dom-&gt;saveXML();
}

// Функция возвращает данные  - авторизация не прошла.
function sendLoginError() {

 $dom = new DOMdocument('1.0', 'utf-8');    # Создание XML DOM Document
 $dom-&gt;formatOutput = true;                # Форматируем вывод
 $rows = $dom-&gt;appendChild($dom-&gt;createElement('data'));    # Создадим root XML element
 $rows-&gt;appendChild($row = $dom-&gt;createElement('error', 'no'));    # Создадим первый элемент - error
 $rows-&gt;appendChild($row = $dom-&gt;createElement('loginsuccess', 'no'));    # Создадим второй элемент - прошла ли авторизация

 // выводим ответ
 print $dom-&gt;saveXML();
}

// Функция возвращает данные  - авторизация прошла успешно + все данные пользователя.
function sendLoginData($my_result) {

 $dom = new DOMdocument('1.0', 'utf-8');    # Создание XML DOM Document
 $dom-&gt;formatOutput = true;                # Форматируем вывод
 $rows = $dom-&gt;appendChild($dom-&gt;createElement('data'));    # Создадим root XML element
 $rows-&gt;appendChild($row = $dom-&gt;createElement('error', 'no'));    # Создадим первый элемент - error
 $rows-&gt;appendChild($row = $dom-&gt;createElement('loginsuccess', 'yes'));    # Создадим второй элемент - прошла ли авторизация
 // добавление данных
 $rows-&gt;appendChild($row = $dom-&gt;createElement('Ufirstname', $my_result-&gt;firstname));     # Создадим элемент - FirstName
 $rows-&gt;appendChild($row = $dom-&gt;createElement('Ulastname', $my_result-&gt;lastname));         # Создадим элемент - LastName
 $rows-&gt;appendChild($row = $dom-&gt;createElement('Uemail', $my_result-&gt;email));             # Создадим элемент - Email
 $rows-&gt;appendChild($row = $dom-&gt;createElement('Udepartment', $my_result-&gt;department));    # Создадим элемент - Department
 $rows-&gt;appendChild($row = $dom-&gt;createElement('Uappointment', $my_result-&gt;appointment));# Создадим элемент - Appointment
 $rows-&gt;appendChild($row = $dom-&gt;createElement('Upermission', $my_result-&gt;permission));    # Создадим элемент - Permission

 // выводим ответ
 print $dom-&gt;saveXML();
}

?&gt;
</pre>
<p><strong>В итоге мы получим 4 вида XML данных.</strong><br />
<strong>1.</strong> Ошибка соединения с базой данных</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;data&gt;
  &lt;error&gt;yes&lt;/error&gt;
  &lt;error_num&gt;1045&lt;/error_num&gt;
  &lt;error_desc&gt;Access denied for user 'testuser'@'localhost' (using password: YES)&lt;/error_desc&gt;
&lt;/data&gt;
</pre>
<p><strong>2.</strong> Ошибка в коде запроса</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;data&gt;
  &lt;error&gt;yes&lt;/error&gt;
  &lt;error_num&gt;1064&lt;/error_num&gt;
  &lt;error_desc&gt;You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SEL#ECT * FROM users WHERE username = 'testuser' AND password = 'c06aa3f4a6aa99f' at line 1&lt;/error_desc&gt;
&lt;/data&gt;
</pre>
<p><strong>3.</strong> Авторизация не прошла</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;data&gt;
  &lt;error&gt;no&lt;/error&gt;
  &lt;loginsuccess&gt;no&lt;/loginsuccess&gt;
&lt;/data&gt;
</pre>
<p><strong>4.</strong> Авторизация прошла успешно</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;data&gt;
  &lt;error&gt;no&lt;/error&gt;
  &lt;loginsuccess&gt;yes&lt;/loginsuccess&gt;
  &lt;Ufirstname&gt;Василий&lt;/Ufirstname&gt;
  &lt;Ulastname&gt;Пупкин&lt;/Ulastname&gt;
  &lt;Uemail&gt;mail@microsoft.com&lt;/Uemail&gt;
  &lt;Udepartment&gt;FIN&lt;/Udepartment&gt;
  &lt;Uappointment&gt;финансовый директор&lt;/Uappointment&gt;
  &lt;Upermission&gt;RO&lt;/Upermission&gt;
&lt;/data&gt;
</pre>
<p>На днях опубликую вторую часть, где приведу код анализа этих данных, со стороны Flex.</p>
<p><strong>P.S. </strong> Сильно камнями не кидайте, так как это мой первый опыт использования <strong>mySQLi</strong> и <strong>DOM</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/11/10/flex-authorization-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Мастер класс по Adobe Flex от Farata Systems</title>
		<link>http://www.bushnev.com/blog/2009/11/09/master-class-flex/</link>
		<comments>http://www.bushnev.com/blog/2009/11/09/master-class-flex/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 15:29:57 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Farata Systems]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=26</guid>
		<description><![CDATA[Если кто еще не знает. 7-8 декабря этого года в Москве пройдет двухдневный мастер-класс по Adobe Flex, который проводят эксперты из Farata Systems. Программа мастер-класса здесь. 
Сегодня получил замечательное письмо от них: &#8220;Каждый зарегистрированный участник нашего мастер класса получит бесплатную лицензию Flex Builder 3 Pro для персонального использования.&#8221;
Достаточно приятное дополнение. А программа тренинга внушает уважение. [...]]]></description>
			<content:encoded><![CDATA[<p>Если кто еще не знает. 7-8 декабря этого года в Москве пройдет двухдневный мастер-класс по Adobe Flex, который проводят эксперты из Farata Systems. Программа мастер-класса <a href="http://www.eventbrite.com/event/458588651">здесь</a>. </p>
<p>Сегодня получил замечательное письмо от них: &#8220;Каждый зарегистрированный участник нашего мастер класса получит бесплатную лицензию Flex Builder 3 Pro для персонального использования.&#8221;</p>
<p>Достаточно приятное дополнение. А программа тренинга внушает уважение. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/11/09/master-class-flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Визит Дэвида Блатнера</title>
		<link>http://www.bushnev.com/blog/2009/11/04/david-blatner-in-moscow/</link>
		<comments>http://www.bushnev.com/blog/2009/11/04/david-blatner-in-moscow/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 06:00:05 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[InDesign]]></category>
		<category><![CDATA[Личное]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[InCopy]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=22</guid>
		<description><![CDATA[Жаль, что как то незаметно прошло одно замечательное событие. 2-3 ноября в Москве в рамках форума «Издательский бизнес 2009» проводили мастер-классы по Adobe InDesign гуру мирового масштаба: Рассел Виерс и Дэвид Блатнер.
Про первого ничего сказать не могу, но Дэвидом встречался раньше &#8211; супер-спец. Дэвид  – один из самых известных в мире специалистов по Adobe [...]]]></description>
			<content:encoded><![CDATA[<p>Жаль, что как то незаметно прошло одно замечательное событие. 2-3 ноября в Москве в рамках форума «Издательский бизнес 2009» проводили мастер-классы по Adobe InDesign гуру мирового масштаба: Рассел Виерс и Дэвид Блатнер.<br />
Про первого ничего сказать не могу, но Дэвидом встречался раньше &#8211; супер-спец. Дэвид  – один из самых известных в мире специалистов по Adobe InDesign. Сегодня он является автором 15 книг по программам InDesign и Photoshop, соучредителем сайта InDesignSecrets.com, а также главным редактором журнала InDesign Magazine.</p>
<p><span id="more-22"></span><br />
Узнал про форум абсолютно случайно, причем регистрировался ночью между первым и вторым днем конференции. Странно, что такому семинару не придали должной рекламы. Тем более участие было абсолютно бесплатным. В итоге в зале было 20-30 человек. <img src='http://www.bushnev.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Получил много инфы на переваривание по возможностям Adobe InDesign CS4. Не скажу, что меня все обрадовало. В частности, идеи устраивать весь предпечатный процесс в пространстве RGB, а конвертация в CMYK на финальной стадии (непосредственно при создании PDF). Для Америки это демократия, для нас чревато нехорошими последствиями. Идея понятна с одного источника – хочешь в печать, хочешь PDF для веба, а можно и просто flash-журнал сделать.</p>
<p>В России пока, чем меньше вмешиваются в пре-пресс — тем лучше.</p>
<p>Чем старше версия пакета Adobe, тем сильнее уклон в веб-технологии. Из ИнДизайна делают инструмент для создания интерактивных PDF и Flash. Для себя еще не определился хорошо это или плохо.</p>
<p>Новые возможности в InDesign по поддержке работе с переменными данными и GREP впечатлили.<br />
GREP &#8211; стили теперь можно забивать в документ и колбасить ими все что угодно. Например, корявый кернинг некоторых шрифтов (пары с первыми буквами Г и Т).</p>
<p>Приятный финал этого дня &#8211; я выиграл пакет Adobe CS4 Design Standard с автографом Дэвида. Будет время – начну его распиливать… Для начала конечно надо посмотреть, что изменилось в объектной модели документа, чтобы адаптировать свои старые скрипты.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/11/04/david-blatner-in-moscow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Мой первый баг</title>
		<link>http://www.bushnev.com/blog/2009/10/28/first-bug/</link>
		<comments>http://www.bushnev.com/blog/2009/10/28/first-bug/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 23:30:55 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=7</guid>
		<description><![CDATA[Ура!
Наконец я словил первую багу во флексе. Хотя она очень странная. Угораздило меня дома поставить новый Flex SDK 3.4. Начал делать простенькое приложение с использованием графиков. После прихода на работу, начал вносить правки &#8211; естественно Эклипс выдал кучу алярмов о несоответствии SDK (стоял 3.2). Исправил быстро, благо новый SDK был на флешке. Скопировал, указал пути [...]]]></description>
			<content:encoded><![CDATA[<p>Ура!</p>
<p>Наконец я словил первую багу во флексе. Хотя она очень странная. Угораздило меня дома поставить новый Flex SDK 3.4. Начал делать простенькое приложение с использованием графиков. После прихода на работу, начал вносить правки &#8211; естественно Эклипс выдал кучу алярмов о несоответствии SDK (стоял 3.2). Исправил быстро, благо новый SDK был на флешке. Скопировал, указал пути &#8211; все как обычно. Какое же было мое удивление, когда в режиме &#8220;design&#8221; из закладки Components полностью исчезла папка Charts. После переключения на 3.2 &#8211; вернулась обратно. Но дома все работает, на обеих версиях. Пока не разобрался, что к чему.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/10/28/first-bug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Первый пост</title>
		<link>http://www.bushnev.com/blog/2009/10/27/start-blog/</link>
		<comments>http://www.bushnev.com/blog/2009/10/27/start-blog/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 15:08:58 +0000</pubDate>
		<dc:creator>Alexey Bushnev</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Личное]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[PDT]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bushnev.com/blog/?p=18</guid>
		<description><![CDATA[Краткая предыстория, как я вообще познакомился с Flex.
В ноябре прошлого года я поехал на конференцию Adobe Max 2008, которая проходила в Милане. Главной целью поездки было желание познакомиться с таким интересным продуктом как InDesign Server, а также посетить прочие семинары на тему Photoshop, InDesign, и Acrobat. Что это конференция в основном для Flash-разработчиков, я узнал [...]]]></description>
			<content:encoded><![CDATA[<p>Краткая предыстория, как я вообще познакомился с Flex.</p>
<p>В ноябре прошлого года я поехал на конференцию Adobe Max 2008, которая проходила в Милане. Главной целью поездки было желание познакомиться с таким интересным продуктом как InDesign Server, а также посетить прочие семинары на тему Photoshop, InDesign, и Acrobat. Что это конференция в основном для Flash-разработчиков, я узнал  немного позднее <img src='http://www.bushnev.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Сейчас даже не могу вспомнить почему я оказался на одной из lab-session посвященных Flex. Вот тогда я и пропал&#8230;</p>
<p>Первые шаги начал делать только в этом году. Для первых экспериментов удачно подвернулись Новогодние праздники. Все таки 10 дней халявы. На конференции мне дали диск с первой демкой Flex Builder 4 (Gumbo) и установщиком TourDeFlex. Последнюю иметь для домашнего использования крайне желательно. В качестве первого туториала &#8211; must have. Самое ценное &#8211; что он регулярно обновляется.</p>
<p>Так как основная работа связана с препрессом, на изучение времени было мало. Все ограничивалось примерами а-ля &#8220;Hello World&#8221;. Потом сделал для себя вывод что Flex  прекрасно подходит для разработки продуктов с использованием внутри корпоративной сети.<br />
Здесь и начались долгие ночи с эротическими позами между мной и Flex. И продолжаются до сих пор <img src='http://www.bushnev.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Несколько замечаний:<br />
1. Я не спец во флексе &#8211; я только учусь.<br />
2. В качестве server-side выбрал PHP &#8211; дешево и сердито. До J2EE еще не дорос. Да и WAMPserver оказался очень кстати.<br />
3. Для связки Flex с PHP выбрал AMFPHP (на Zend и WebORB смотрю, но руки еще не дошли).<br />
4. В качестве редактора &#8211; остановился на Eclipse и Flex как плагин. Определенный плюс при прикручивании PDT (PHP Development Tools).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bushnev.com/blog/2009/10/27/start-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
