<?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>Varal de Bits &#187; PHP</title>
	<atom:link href="http://varaldebits.com.br/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://varaldebits.com.br</link>
	<description>pegando um solzinho para aclarar as idéias...</description>
	<lastBuildDate>Tue, 08 Feb 2011 15:45:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Usando Flex 4, PHP e SQlite3</title>
		<link>http://varaldebits.com.br/2011/01/04/usando-flex-4-php-e-sqlite3/</link>
		<comments>http://varaldebits.com.br/2011/01/04/usando-flex-4-php-e-sqlite3/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 23:56:19 +0000</pubDate>
		<dc:creator>Renato Ferraz</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQlite3]]></category>

		<guid isPermaLink="false">http://varaldebits.com.br/?p=433</guid>
		<description><![CDATA[Neste artigo estarei dando um pequeno exemplo de como você pode fazer uma integração de Flex, PHP e SQlite. Este exemplo é apenas um ponto de partida para você explorar sua criatividade e adentrar nos conceito mais avançados. Fiz o possível para trabalhar com o código de um forma simples para facilitar o entendimento. Bom [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo estarei dando um pequeno exemplo de como você pode fazer uma integração de Flex, PHP e SQlite. Este exemplo é apenas um ponto de partida para você explorar sua criatividade e adentrar nos conceito mais avançados.</p>
<p>Fiz o possível para trabalhar com o código de um forma simples para facilitar o entendimento. Bom chega de papo furado e mãos a obra. O Flex 4 basta uma pequena <a href="http://tinyurl.com/33m53ha" target="_blank">busca no google</a> e você já consegue baixar, já o PHP e SQlite acho que esse <a href="http://imasters.com.br/artigo/5373/php/php5_e_sqlite_no_windows/" target="_blank">link pode ajudar</a>, um pouco antigo mas te dá o caminho das pedras. Um &#8220;pouquinho&#8221; de esforço não mata ninguém.</p>
<p>Depois de criar um novo projeto WEB no Flash Builder 4. Você terá o seguinte código.</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"&gt;
	&lt;fx:Declarations&gt;
		&lt;!-- Place non-visual elements (e.g., services, value objects) here --&gt;
	&lt;/fx:Declarations&gt;
&lt;/s:Application&gt;</pre>
<p>Agora vamos adicionar um <strong>mx:HTTPService </strong>dentro de <strong>fx:Declarations</strong>. Agora nosso código cresceu um pouco e ficou assim.</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"&gt;

	&lt;fx:Declarations&gt;
		&lt;mx:HTTPService id="ControllerUsers" result="ControllerUsersResult(event)" useProxy="false" resultFormat="text" method="POST" /&gt;
	&lt;/fx:Declarations&gt;

&lt;/s:Application&gt;</pre>
<p>É importante que você adicione um id, result no <strong>mx:HTTPService</strong> conforme o código acima. Ao salvar irá aparecer um erro, mas não se preocupe com ele. Logo está erro irá virar história.</p>
<p>Adicione agora uma tag <strong>fx:Script</strong> dentro de <strong>s:Application</strong> onde iremos trabalhar nossas ações. Em <strong>fx:Script</strong> vamos adicionar alguns funções. <strong>ControllerUsersResult </strong>essa função irá capturar o resultado do <strong>mx:HTTPService</strong> e a outra função será <strong>InitSystem. </strong>Está irá apenas executar algumas ações ao carregar nossa aplicação. Iremos também adicionar duas variáveis e uma delas será <strong>Bindable. </strong>Vou explicar tudo isso em seguida, mas antes vamos ver como nosso código ficou.</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   creationComplete="InitSystem()"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"&gt;

	&lt;fx:Declarations&gt;
		&lt;mx:HTTPService id="ControllerUsers" result="ControllerUsersResult(event)" useProxy="false" resultFormat="text" method="POST" /&gt;
	&lt;/fx:Declarations&gt;

	&lt;fx:Script&gt;
		&lt;![CDATA[
			import com.adobe.serialization.json.JSON;
			import mx.rpc.events.ResultEvent;

			[Bindable]
			public var Users:Array;	

			public var UrlController:String = "http://varaldebits.com.br/sample/flex-php-sqlite/controller.php";

			private function InitSystem():void {
				ControllerUsers.url = UrlController;
				ControllerUsers.send();
			}

			private function ControllerUsersResult(event:ResultEvent):void {
				Users = JSON.decode(String(event.result)) as Array;
			}

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

&lt;/s:Application&gt;</pre>
<p>Resolvemos aquele erro, não foi? Mas agora apareceu outro erro. Este erro é porque precisamos adicionar dentro da pasta libs o arquivo &#8220;<a href="http://varaldebits.com.br/sample/flex-php-sqlite/corelib.swc" target="_blank">corelib.swc</a>&#8220;. Estou utilizando JSON para capturar os dados que o PHP irá retornar.  Adicione o arquivo na pasta libs e aguarde alguns segundos e&#8230; este erro também virou história.</p>
<p>Conforme prometido, vamos agora explicar o código.</p>
<p>Primeiro porque a variável Users é <strong>[Bindable]</strong> e a UrlController não? A variável Users nós iremos utilizá-la fora da tag <strong>fx:Script</strong> em um outro componente, que iremos criar ainda já a variável UrlController iremos apenas utilizá-la dentro da tag tag <strong>fx:Script.</strong></p>
<p>Na função <strong>InitSystem</strong> iremos apenas adicionar uma url em nosso <strong>mx:HTTPService </strong>e enviá-lo. Você precisa adicionar esse função na tag <strong>s:Application </strong>como<strong> creationComplete. </strong>Simples assim. Já na função <strong>ControllerUsersResult </strong>iremos capturar o resultado que foi retornado pelo PHP em formato JSON (iremos ver isto ainda) e converte-lo a um Array adicionando-o dentro da variável Users. Simples assim também.</p>
<p>Tendo explicado isso vamos exibir o Array. Você pode utilizar vários componentes. Neste caso irei utilizar um <strong>mx:DataGrid. </strong>Logo após a tag <strong>fx:Script </strong>adicione o seguinte código.</p>
<pre class="brush:as3">&lt;mx:DataGrid y="10" x="10" dataProvider="{Users}" height="250" width="580" id="DataGridUsers"&gt;
	&lt;mx:columns&gt;
		&lt;mx:DataGridColumn dataField="username" headerText="Nome do Usuário" /&gt;
		&lt;mx:DataGridColumn dataField="email" headerText="Email" /&gt;
	&lt;/mx:columns&gt;
&lt;/mx:DataGrid&gt;</pre>
<p>Repare que na tag <strong>mx:DataGrid</strong> temos o parametro <strong>dataProvider </strong>com a nossa variável Users. Por isso foi necessário colocá-lo como <strong>[Bindable]</strong>.</p>
<p>Bom com tudo isso a parte do Flex está pronta. Agora vamos para o PHP.</p>
<pre class="brush:php">&lt;?php

  $kind = isset($_GET["kind"]) ? $_GET["kind"] : "";

  switch ($kind) {
    case "SQLiteDatabase":
          $query = "SELECT * FROM users ORDER BY ID";
          $database = "sampleWebOthers.db3";
          $db = new SQLiteDatabase($database, 0666);
          $results = $db-&gt;query($query)-&gt;fetchAll();
        break;
    case "sqlite_open":
          $query = "SELECT * FROM users ORDER BY ID DESC";
          $database = "sampleWebOthers.db3";
          $db = sqlite_open($database, 0666, $error);
          $results = sqlite_array_query($db, $query, SQLITE_ASSOC);
        break;
    default:
        $query = "SELECT * FROM users ORDER BY RANDOM()";
        $database = "sampleWebPDO.db3";
        $dbh = new PDO("sqlite:$database");
        $sth = $dbh-&gt;prepare($query, array(PDO::ATTR_CURSOR =&gt; PDO::CURSOR_FWDONLY));
        $sth-&gt;execute();
        $results = $sth-&gt;fetchAll();
  }

  echo json_encode($results);

?&gt;</pre>
<p>Você precisa de tudo isso para que funcione? A resposta é não. Eu fiz desta maneira porque já tive vários problemas com formatos de banco de dados. Alguns bancos de dados só abrem utilizando PDO outro apenas com sqlite_open e outros ainda com SQLiteDatabase, então segue os 3 exemplos para você. Descobrindo o que funciona para você, utilize apenas o que está dentro do case.</p>
<pre class="brush:php">// Apenas o SQLiteDatabase":
$query = "SELECT * FROM users ORDER BY username";
$database = "sampleWebOthers.db3";
$db = new SQLiteDatabase($database, 0666);
$results = $db-&gt;query($query)-&gt;fetchAll();

// Apenas o sqlite_open
$query = "SELECT * FROM users ORDER BY username";
$database = "sampleWebOthers.db3";
$db = sqlite_open($database, 0666, $error);
$results = sqlite_array_query($db, $query, SQLITE_ASSOC);

// Apenas o PDO
$query = "SELECT * FROM users ORDER BY username";
$database = "sampleWebPDO.db3";
$dbh = new PDO("sqlite:$database");
$sth = $dbh-&gt;prepare($query, array(PDO::ATTR_CURSOR =&gt; PDO::CURSOR_FWDONLY));
$sth-&gt;execute();
$results = $sth-&gt;fetchAll();</pre>
<p>Configurado da sua maneira. retorne o resultado como JSON.</p>
<pre class="brush:php">echo json_encode($results);</pre>
<p>Segue aqui para download e o exemplo online. Adicionei algumas coisa simplesmente para testes.</p>
<p><a href="http://varaldebits.com.br/sample/flex-php-sqlite/corelib.swc" target="_blank">Download corelib.swc</a> | <a href="http://varaldebits.com.br/sample/flex-php-sqlite/" target="_blank">Exemplo Online</a> | <a href="http://www.varaldebits.com.br/sample/flex-php-sqlite/srcview/" target="_blank">Código Fonte</a></p>
]]></content:encoded>
			<wfw:commentRss>http://varaldebits.com.br/2011/01/04/usando-flex-4-php-e-sqlite3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP &amp; CodeIgniter</title>
		<link>http://varaldebits.com.br/2008/03/14/cakephp-codeigniter/</link>
		<comments>http://varaldebits.com.br/2008/03/14/cakephp-codeigniter/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 16:05:24 +0000</pubDate>
		<dc:creator>Renato Ferraz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://varaldebits.com.br/?p=10</guid>
		<description><![CDATA[Em se tratando de desenvolvimento em PHP. CakePHP é muito bom. Porém tem seus inconvenientes. Recentemente desenvolvi uma intranet com este framework e entreguei funcionando perfeitamente; porém, quando a empresa mudou seu servidor limitando a banda do sistema, foi que descobri um dos problemas do Cake. Seus relacionamentos entre tabelas retornam muito dados desnecessários. Ainda [...]]]></description>
			<content:encoded><![CDATA[<p>Em se tratando de desenvolvimento em PHP. <a href="http://www.cakephp.org/" target="_blank">CakePHP</a> é muito bom. Porém tem seus inconvenientes. Recentemente desenvolvi uma intranet com este <em>framework</em> e entreguei funcionando perfeitamente; porém, quando a empresa mudou seu servidor limitando a banda do sistema, foi que descobri um dos problemas do Cake. Seus relacionamentos entre tabelas retornam muito dados desnecessários.</p>
<p>Ainda não descobri uma solução para isso, porém, para falar a verdade, parei de procurar, pois foi me apresentado o <em><a href="http://codeigniter.com/" target="_blank">CodeIgniter</a>. </em>Ainda não desenvolvi nenhum projeto grande com ele, mas já andei fazendo minhas brincadeiras e tenho gostado. Se você é obrigado a mexer com PHP dê uma olhada neste <em>framework</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://varaldebits.com.br/2008/03/14/cakephp-codeigniter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

