<?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>Como Criar Sites &#124; Aprenda grátis como fazer seu site &#187; php</title>
	<atom:link href="http://www.comocriarsites.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.comocriarsites.com</link>
	<description>Aprenda a criar sites, html e manhas para fazer seu site.</description>
	<lastBuildDate>Wed, 06 Jan 2010 12:51:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Criando layout tableless (div), com Ajax.</title>
		<link>http://www.comocriarsites.com/ajax/criando-layout-tableless-div-com-ajax/</link>
		<comments>http://www.comocriarsites.com/ajax/criando-layout-tableless-div-com-ajax/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 20:09:39 +0000</pubDate>
		<dc:creator>Raoni Novellino</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tableless]]></category>

		<guid isPermaLink="false">http://www.comocriarsites.com/?p=224</guid>
		<description><![CDATA[Vamos fazer um site com Ajax, e para quem não souber o que é Ajax, vai um breve comentário.
Ajax significa Asynchronous Javascript And XML. Quer dizer que Ajax nada mais é do que uma capacidade (ferramenta, biblioteca), de fazer com que, em Javascript, eu possa fazer requisições HTTP (e, dependendo do navegador, posso fazer outros [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: xx-large; font-family: Algerian;">V</span>amos fazer um site com Ajax, e para quem não souber o que é Ajax, vai um breve comentário.</p>
<p>Ajax significa Asynchronous Javascript And XML. Quer dizer que Ajax nada mais é do que uma capacidade (ferramenta, biblioteca), de fazer com que, em Javascript, eu possa fazer requisições HTTP (e, dependendo do navegador, posso fazer outros tipo de conexões). As requisições que o Ajax faz, podem ser síncronas ou assíncronas. Se for síncrona, o script ficará esperando o retorno da requisição para continuar a executar o seu código. Se for assíncrona, o script enviará a requisição e continuará a sua execução normalmente, e o retorno dessa requisição deverá ser tratado por uma outra função.</p>
<p>O XML nem sempre é usado para trafegar as informações em Ajax, mas como o nome já pegou, então ficou assim mesmo, mas podemos utilizar qualquer tipo de protocolo texto (como <em><strong>JSON</strong></em>), para trafegar as informações via Ajax.</p>
<p>O principal motivo para desenvolver uma página (web site) com Ajax, é faze-la ficar mais interativa com o usuário, mais dinâmica e criativa.</p>
<p>Para saber um pouco mais sobre Ajax, acesse <a href="http://pt.wikipedia.org/wiki/AJAX_%28programa%C3%A7%C3%A3o%29">AJAX (programação)</a>.</p>
<h2>O Código <em>HTML</em> do Layout em <em>Div</em></h2>
<p>Vamos pegar o layout do post <a href="http://www.comocriarsites.com/html/definindo-um-layout-de-website-sem-tabelas-tableless/">Definindo um Layout de Website sem Tabelas (Tableless)</a>, e retirar a parte mais a direita dele, para que a parte do meio do layout, contenha somente o menu e o miolo.</p>
<p>O código ficará como abaixo (arquivo <em>index.html</em>):</p>
<div style="background-color: white; overflow-x: auto;">
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-type" content="text/html;charset=ISO-8859-1" /&gt;
&lt;title&gt;Exemplo Estrutura de Site Tableless&lt;/title&gt;

&lt;link rel="stylesheet" type="text/css" href="estilo.css" /&gt;
&lt;script language="javascript" src="script.js"&gt;&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div id="todo"&gt;
	&lt;div id="topo"&gt;
		&lt;div id="logo"&gt;Logo&lt;/div&gt;

		Aqui pode ser uma imagem de background e um texto.
	&lt;/div&gt;

	&lt;div id="meio"&gt;
		&lt;div id="esquerda"&gt;
			&lt;div id="menu"&gt;
				&lt;div&gt;&lt;a href="javascript: void(0);" onclick="ajaxHTMLmiolo('miolo', 'principal');"&gt;Principal&lt;/a&gt;&lt;/div&gt;
				&lt;div&gt;&lt;a href="javascript: void(0);" onclick="ajaxHTMLmiolo('miolo', 'empresa');"&gt;Empresa&lt;/a&gt;&lt;/div&gt;
				&lt;div&gt;&lt;a href="javascript: void(0);" onclick="ajaxHTMLmiolo('miolo', 'produtos');"&gt;Produtos&lt;/a&gt;&lt;/div&gt;

				&lt;div&gt;&lt;a href="javascript: void(0);" onclick="ajaxHTMLmiolo('miolo', 'servicos');"&gt;Serviços&lt;/a&gt;&lt;/div&gt;
				&lt;div&gt;&lt;a href="javascript: void(0);" onclick="ajaxHTMLmiolo('miolo', 'contato');"&gt;Contato&lt;/a&gt;&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;

		&lt;div id="miolo"&gt;
			&lt;div&gt;Seção 1&lt;/div&gt;
			&lt;div&gt;Seção 2&lt;/div&gt;

			&lt;div&gt;Seção 3&lt;/div&gt;
		&lt;/div&gt;

		&lt;div style="clear: both;"&gt;&lt;/div&gt;
	&lt;/div&gt;

	&lt;div id="rodape"&gt;
		&lt;div id="rodape_direita"&gt;
			Av. xxx yyy zzz, No 765&lt;br/&gt;
			Manaus - AM - CEP: 89000-000&lt;br/&gt;
			Email: &lt;a href="mailto:seuemail@seudominio.com.br"&gt;seuemail@seudominio.com.br&lt;/a&gt;

		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p>Maiores explicações sobre o layout, pode encontrar no link passado para o post.</p>
<p>As únicas mudanças foram a parte direita do layout que foi deletada, os menus agora são links (tag <em><strong>&lt;a&gt;</strong></em> com atributo <em>onclick</em> para chamada do <em><strong>Javascript</strong></em>), e foi inserida uma linha chamando o script <strong><em>script.js</em></strong>. Esse script contém a programação em <strong><em>Javascript</em></strong> para fazer a requisição em Ajax.</p>
<p>Uma outra mudança foi no arquivo de folhas de estilo <strong><em>estilo.css</em></strong>. Ele está sem os estilos da parte direita do layout e foi adicionado uma classe, para a frase que indica que o Ajax está carregando uma página, no nosso caso, a frase é simplesmente &#8220;Carregando&#8230;&#8221;, mas a classe está vazia, adicione os estilos que achar necessário.</p>
<h2>O Código <em>Javascript</em></h2>
<p>O código Javascript precisa fazer tudo que o navegador faz automáticamente quando se coloca um link no web site: enviar a requisição, esperar pela resposta, pegar a resposta quando essa estiver pronta, tratar a resposta e exibir o que for necessário.</p>
<p>O código do arquivo <strong><em>script.js</em></strong> vai abaixo:</p>
<div style="background-color: white; overflow-x: auto;">
<pre>function getNewHttpRequest() {
	try {
		xmlhttp = new XMLHttpRequest();
	} catch(ee) {
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(E) {
				xmlhttp = false;
			}
		}
	}

	return(xmlhttp);
}

oAjax = getNewHttpRequest();

//Fila de conexões
fila = [];
ifila = 0;

// funcao para altear o conteudo do miolo
function ajaxHTMLmiolo(id, conteudo) {
	ajaxHTML(id, 'conteudo.php?conteudo='+conteudo);
}

//Executa a próxima conexão da fila
function ajaxRun() {
	//Abre a conexão
	oAjax.open("GET", fila[ifila][1], true);
	//Função para tratamento do retorno
	oAjax.onreadystatechange = function() {
		if (oAjax.readyState == 4) {
			//Mostra o HTML recebido
			retorno = unescape(oAjax.responseText.replace(/\+/g, " "));
			document.getElementById(fila[ifila][0]).innerHTML = retorno;
			//Roda o próximo
			ifila++;
			if(ifila &lt; fila.length) setTimeout("ajaxRun()", 20);
		}
	};

	//Executa
	oAjax.send(null);
}

function ajaxHTML(id, url) {
	//Carregando...
	document.getElementById(id).innerHTML="&lt;span class='carregando'&gt;"+"Carregando...&lt;/span&gt;";
	//Adiciona à fila
	fila[fila.length] = [id, url];
	//Se não há conexões pendentes, executa
	if((ifila+1) == fila.length) ajaxRun();
}</pre>
</div>
<p>Agora vamos as explicações.</p>
<p>Começando pela função <em><strong>getNewHttpRequest</strong></em>, que não recebe parâmetro, e retorna um objeto <em>XMLHTTP</em>. Esse objeto é o responsável pelas requisições que iremos fazer. Os blocos <em>try {&#8230;} catch() {&#8230;}</em>, tentam pegar o objeto <em>XMLHTTP</em> de várias formas, por causa das várias formas de pegar esse objeto de navegadores diferentes. Se não conseguir nenhuma, retorna <em>false</em>.</p>
<p>Abaixo pego o objeto XMLHTTP e coloco na variável <em><strong>oAjax</strong></em> e logo abaixo defino as minhas variáveis da fila de requisições.</p>
<h3>Por que uma fila de requisições?</h3>
<p>Tenho uma fila de requisições para organizar as minhas requisições <strong><em>Ajax</em></strong>, pois sem ela, se o usuário clicar em vários links antes de esperar a resposta de uma requisição, ou eu tenho que instanciar vários objetos do <strong><em>Ajax</em></strong> (<em>XMLHTML</em>), ou vai dar um erro no script que executa a requisição, quando uma outra requisição é feita antes de esperar a primeira terminar. A fila resolve esse problema, pois somente uma requisição é feita por vez, e se houver outra requisição na fila, ela é chamada logo após a requisição atual terminar.</p>
<p>A função <strong><em>ajaxHTMLmiolo</em></strong> serve para fazer uma requisição em <em><strong>Ajax</strong></em> que pega o conteúdo do miolo da página, que é o conteúdo da tag <strong><em>div</em></strong> que tem o atributo <em>id</em> igual a <em>miolo</em>, nesse layout é onde o conteúdo do web site será exibido. Essa função recebe dois argumentos, o primeiro é o id do elemento que vai ser exibido o resultado da requisição, o segundo é uma string que é enviada para o servidor para saber qual conteúdo buscar para exibir. Ela chama a função genérica de requisição <strong><em>Ajax</em></strong>, a <strong><em>ajaxHTML</em></strong>, que recebe o id do elemento que vais ser alterado e a URL que vai ser requisitada.</p>
<p>A função <strong><em>ajaxHTML</em></strong> coloca uma requisição na fila de requisições e tenta fazer essa requisição, se a fila estiver vazia, chamando a função <em><strong>ajaxRun</strong></em>, se não estiver vazia, ela não faz nada, pois assim que for a vez da requisição colocada, ela será feita.</p>
<p>A função<em><strong> ajaxRun</strong></em> pega a requisição que está na vez, na fila de requisições, e a executa, pelo método<em> GET</em>. A linha</p>
<div style="background-color: white; overflow-x: auto;">
<pre>	oAjax.open("GET", fila[ifila][1], true);</pre>
</div>
<p>diz que é para abrir a conexão com a <em>URL</em> que está na fila, pelo método <em>GET</em>. O último parâmetro quer dizer que essa requisição tem que ser feita pelo modo assíncrono. Se o último parâmetro for <em>false</em>, a requisição seria feita no modo síncrono.</p>
<p>Para saber mais sobre o método GET, acesse <a href="http://www.comocriarsites.com/html/como-funciona-os-metodos-get-e-post-diferencas/">Como Funciona os Métodos GET e POST – Diferenças</a>.</p>
<p>Na linha</p>
<div style="background-color: white; overflow-x: auto;">
<pre>	oAjax.onreadystatechange = function() {</pre>
</div>
<p>estou informando ao objeto que a função seguinte é a função que eu quero que ele execute quando o estado da minha requisição mudar. Essa função normalmente é chamada de função de <em>callback</em>, ela fica esperando algum evento acontecer para executar, sem interromper a execução do código. Nesse caso, ela espera o evento de alteração de estado da requisição ocorrer para ser chamada, logo, ela provavelmente será chamada mais de uma vez, pois durante uma requisição o estado muda algumas vezes.</p>
<p>Essa função de <em>callback</em> vai testar se o estado atual da requisição é o estado que eu quero, com a linha:</p>
<div style="background-color: white; overflow-x: auto;">
<pre>		if (oAjax.readyState == 4) {</pre>
</div>
<p>O estado do objeto <strong><em>Ajax</em></strong> que eu quero é igual a 4, que é o estado onde a resposta foi lida por completo. Para ver uma lista dos estados do objeto <em><strong>Ajax</strong></em>, acesse <a href="http://www.w3.org/TR/XMLHttpRequest/">XMLHttpRequest</a>.</p>
<p>Após a resposta estar pronta, eu a pego e coloco em uma variável, fazendo uma substituição de todos os sinais de &#8220;mais&#8221; (&#8217;+'), por um espaço em branco. Se faz essa substituição, pois a resposta vem codificada como <em>URL</em>, e nessa codificação, os espaços são convertidos em sinais de &#8220;mais&#8221; (&#8217;+'). A linha que faz isso é a linha abaixo:</p>
<div style="background-color: white; overflow-x: auto;">
<pre>		retorno = unescape(oAjax.responseText.replace(/\+/g, " "));
		document.getElementById(fila[ifila][0]).innerHTML = retorno;</pre>
</div>
<p>A outra linha pega o elemento que tem o atributo <em>id</em> igual ao que foi passado para a requisição e coloca a resposta como conteúdo desse elemento, no caso do elemento em questão (<em>div</em>), faz o conteúdo ser exibido, mas pode ser feito para qualquer tipo de conteúdo, até um campo <em>hidden</em> (escondido) ou para preencher um <em>selectbox</em>.</p>
<div style="background-color: white; overflow-x: auto;">
<pre>		ifila++;
		if(ifila &lt; fila.length) setTimeout("ajaxRun()", 20);</pre>
</div>
<p>As linhas acima fazem o controle da fila, a primeira incrementa a posição da fila, fazendo a próxima requisição ser lida, se houver. A segunda linha verifica se o tamanho da fila é maior que a posição atual de leitura da fila, se for, é porque ainda existe requisição a ser feita, então ele programa um <em>timer</em> para em 20 milisegundos, para ser executada essa requisição.</p>
<p>Aqui termina a função de <em>callback</em>, ela será executada após o envio da requisição.</p>
<p>A última linha da função <em><strong>ajaxRun</strong></em></p>
<div style="background-color: white; overflow-x: auto;">
<pre>	oAjax.send(null);</pre>
</div>
<p>faz com que a requisição seja feita (enviada). O parâmetro dela, passado como <em>null</em>, indica que não estou enviando nada na requisição, porque já enviei o que eu queria pela <em>URL</em> passada.</p>
<h2>O Código <em>PHP</em></h2>
<p>O código em <strong><em>PHP</em></strong> serve para fornecer o conteúdo requisitado pelo <em><strong>Ajax</strong></em>, perceba que a nossa <em>URL</em> da requisição <em>Ajax</em> tem como endereço o arquivo <em><strong>conteudo.php</strong></em>, lá na função <em><strong>ajaxHTMLmiolo</strong></em>, e o código desse arquivo (<em><strong>conteudo.php</strong></em>), vai abaixo:</p>
<div style="background-color: white; overflow-x: auto;">
<pre>&lt;?php

$conteudo = $_GET["conteudo"];

if($conteudo == "principal") {
	$fileToRead = "conteudo/principal.html";
}
else if($conteudo == "empresa") {
	$fileToRead = "conteudo/empresa.html";
}
else if($conteudo == "produtos") {
	$fileToRead = "conteudo/produtos.html";
}
else if($conteudo == "servicos") {
	$fileToRead = "conteudo/servicos.html";
}
else if($conteudo == "contato") {
	$fileToRead = "conteudo/contato.html";
}

$conteudoArquivo = file_get_contents($fileToRead);

print(urlencode($conteudoArquivo));

?&gt;</pre>
</div>
<p>Ele simplesmente pega o valor do <strong><em>&#8220;conteudo&#8221;</em></strong>, que foi passado pelo método <em>GET</em> (olha novamente a <em>URL</em> passada na função <em><strong>ajaxHTMLmiolo</strong></em>), e compara com as strings acima. Cada <em>if</em> faz ele colocar na variável <strong><em>$fileToRead</em></strong> um caminho para um arquivo. Na penúltima linha ele joga todo o conteúdo do arquivo para a variável <em><strong>$conteudoArquivo</strong></em>, e na última linha ele codifica para <em>URL</em> e imprime na <em>&#8220;tela&#8221;</em> com a função <em><strong>print</strong></em>. A impressão na tela, é a resposta que o <strong><em>Ajax</em></strong> pega. QUALQUER coisa que você imprima na tela, vai ser o retorno da sua requisição <em><strong>Ajax</strong></em>, até mesmo se der um erro no script <em>PHP</em>, caso esteja configurado para exibir o erro na tela, o <em><strong>Ajax</strong></em> vai pegar como retorno.</p>
<p>Não vou colocar o conteúdo dos arquivos <em>HTML</em> de resposta, mas você pode ver o exemplo todo rodando em <a href="http://www.comocriarsites.com/exemplos/SiteTablelessAjax/">http://www.comocriarsites.com/exemplos/SiteTablelessAjax/</a>. Lá você mesmo pode pegar os arquivos <em>HTML</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.comocriarsites.com/ajax/criando-layout-tableless-div-com-ajax/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Iniciando programação HTML/PHP &#8211; Ferramentas</title>
		<link>http://www.comocriarsites.com/php/iniciando-programacao-htmlphp-ferramentas/</link>
		<comments>http://www.comocriarsites.com/php/iniciando-programacao-htmlphp-ferramentas/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 19:25:14 +0000</pubDate>
		<dc:creator>Raoni Novellino</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[servidor http]]></category>
		<category><![CDATA[sqlyog]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.comocriarsites.com/?p=200</guid>
		<description><![CDATA[Para tem um bom início com programação HTML/PHP, devemos ter boas ferramentas de trabalho e também saber do que precisamos para começar.
Esse post vai explicar um pouco sobre cada programa necessário para o desenvolvimento em PHP.
O PHP &#8211; Hypertext Preprocessor
Para programar em PHP, assim como em qualquer outra linguagem, precisamos do &#8220;compilador&#8221;, ou no caso [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: xx-large; font-family: Algerian;">P</span>ara tem um bom início com programação HTML/PHP, devemos ter boas ferramentas de trabalho e também saber do que precisamos para começar.</p>
<p>Esse post vai explicar um pouco sobre cada programa necessário para o desenvolvimento em PHP.</p>
<h2>O PHP &#8211; Hypertext Preprocessor</h2>
<p>Para programar em PHP, assim como em qualquer outra linguagem, precisamos do &#8220;compilador&#8221;, ou no caso do PHP, que é uma linguagem script, precisamos do processador do script, que executa o código fonte. Esse processador é o próprio PHP, <em><strong>Hypertext Preprocessor</strong></em>, ou <em><strong>Pré-Processador de Hipertexto</strong></em>, que processa dados vindo de páginas Web em um <em>servidor</em>.</p>
<p>O PHP pode também ser executado em uma linha de comando, e também pode ser usado para aplicações desktop (PHP/GTK), mas esse post se limitará a falar sobre o PHP executando em um servidor, processando páginas Web (Web Sites).</p>
<p>O PHP pode ser baixado em <a href="http://www.php.net">http://www.php.net</a> ou <a href="http://www.php.net/downloads.php">http://www.php.net/downloads.php</a> para ir direto a página de downloads.</p>
<p>No momento da escrita desse post, a última versão do PHP é a 5.3.1. Para baixar para o Linux, pegue o código fonte e compile. Para o Windows, o PHP se dividiu em <em>Thread-Safe</em> e <em>Non-Thread-Safe</em>, e também em 2 versões de compiladores diferentes, uma com o Visual Studio 6 (VC6) e outra com o Visual Studio 2008 (VC9).</p>
<p>Se você está usando o Apache no Windows, utilize a versão VC6, que é a compilada no Visual Studio 6. Se você estiver utilizando o IIS &#8211; Internet Infomation Service, que é o servidor HTTP da Microsoft, utilize a versão do VC9 do PHP. Esse post não vai mostrar como instalar o PHP no IIS e recomendação é utilizar o Apache HTTP Server.</p>
<p>A diferença entre as versões <em>Thread-Safe</em> e <em>Non-Thread-Safe</em> podem ser vistas em <a href="http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries">Difference between PHP thread safe and non thread safe binaries</a>, mas basicamente, a versão Non-Thread-Safe, serve para deixar o PHP mais rápido em servidores HTTP para Windows, leia o artigo do link. <img src='http://www.comocriarsites.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2><em> </em>O Servidor HTTP &#8211; Apache</h2>
<p>O PHP por si só, não serve como servidor de páginas da Web (Servidor HTTP), ele precisa ser instalado em um servidor HTTP para funcionar para esse propósito. Um dos servidores mais conhecidos no mercado é o Apache, da <em><strong>Apache Software Foundation</strong></em>, e ele é open-source, ou seja, tem o código-fonte aberto, para que quiser, poder baixar o fonte e modifica-lo ao seu bel prazer.</p>
<p>Para baixar o Apache HTTP Server, você deve entrar em <a href="http://www.apache.org">http://www.apache.org</a> ou <a href="http://httpd.apache.org">http://httpd.apache.org</a> para ir direto ao projeto do servidor HTTP.</p>
<p>O Apache HTTP Server tem 3 versões estáveis, no momento da escrita desse post: a versão 1.x.x (atualmente 1.3.41), a versão 2.0.x (atualmente 2.0.63) e a versão 2.2.x (atualmente 2.2.14). Todas essas versões funcionam muito bem. Eles mantem essas 3 versões por questão de compatibilidade com vários outros programas que utilizam uma dessas versões mas não utilizam as outras.</p>
<p>Eu recomendo baixar a versão 2.2.x, ela está bem legal e nunca me deu problema. Baixe o pacote binário com instalador MSI para Windows, e para o Linux, baixe o código fonte e compile, ou utilize alguma ferramenta (APT ou algo similar, dependendo do seu Linux), para instalar o apache.</p>
<h2>Eclipse IDE  PDT &#8211; PHP Development Tools</h2>
<p>O Eclipse IDE para <em>PHP</em> é uma ferramenta muito boa, tanto para escrever o código <em>PHP</em>, quanto para o <em>HTML</em>, <em>CSS</em> e Javascript. Ele tem um extra: pode fazer debug de código <em>PHP</em>.</p>
<p>Você pode baixar ele em <a href="http://www.eclipse.org/pdt/">http://www.eclipse.org/pdt/</a>, ou a versão dele com o Zend em <a href="http://www.zend.com/community/pdt?ecl=EclipseZend">http://www.zend.com/community/pdt?ecl=EclipseZend</a>.</p>
<p>O Eclipse é só descompactar e começar a usar, criar um projeto e já pode rodar com CTRL+F11.</p>
<h2>O Banco de Dados MySQL</h2>
<p>Se você precisa de um banco de dados confiável, rápido e robusto, o MySQL é a solução. Ele tem o código aberto também, então você pode baixar e, se precisar de uma nova funcionalidade, é só meter a mão na massa.</p>
<p>O MySQL pode ser baixado em <a href="http://www.mysql.com/">http://www.mysql.com/</a>, a versão da comunidade.</p>
<p>Para gerenciar o MySQL, eu recomendo o SQLyog, que é um frontend para o MySQL muito bom. Ele tem uma versão <em>FULL</em> e uma versão da comunidade. A versão da comunidade já faz muita coisa, mas para quem quer realmente trabalhar com o MySQL, a versão <em>FULL</em> vale a pena. Ele pode ser baixado em <a href="http://webyog.com/en/">http://webyog.com/en/</a>.</p>
<p>Com esse conjunto de ferramentas, você estará muito bem armado para programar em PHP, rápido e fácil.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.comocriarsites.com/php/iniciando-programacao-htmlphp-ferramentas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fazendo Formulário HTML (Como Fazer Fomulário HTML) &#8211; Form</title>
		<link>http://www.comocriarsites.com/html/fazendo-formulario-html-como-fazer-fomulario-html-form/</link>
		<comments>http://www.comocriarsites.com/html/fazendo-formulario-html-como-fazer-fomulario-html-form/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 15:41:12 +0000</pubDate>
		<dc:creator>Raoni Novellino</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[criar site]]></category>
		<category><![CDATA[enctype]]></category>
		<category><![CDATA[fazer site]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formulario]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[target]]></category>

		<guid isPermaLink="false">http://www.comocriarsites.com/?p=150</guid>
		<description><![CDATA[Para que serve um formulário? Um formulário serve para o usuário interagir de alguma forma com o site, enviando informações, escolhendo ou selecionando certas funções do site ou entrar em contato com o criador ou dono do site.
Como posso fazer um fomulário HTML? O HTML tem alguns elemento que ajudam na criação de formulários e [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: xx-large;">P</span>ara que serve um formulário? Um formulário serve para o usuário interagir de alguma forma com o site, enviando informações, escolhendo ou selecionando certas funções do site ou entrar em contato com o criador ou dono do site.</p>
<p>Como posso fazer um fomulário <em>HTML</em>? O <em>HTML</em> tem alguns elemento que ajudam na criação de formulários e na interação usuário-website. Esses elemento apresentam diversas formas de apresentar ao usuário informações que o site quer que o usuário preencha, selecione ou marque. Para quem programa em outras linguagens, os elementos <em>HTML</em> para fazer formulário são os padrões, de caixa de texto, seleção de um ou vários em uma lista, marcar opções e também escrever textos em várias linhas.</p>
<p>Vamos ver como fazer o elemento Form (tag <strong><em>&lt;form&gt;</em></strong>) do <em>HTML</em>, que é o elemento pai de todos os outros elementos de formulário <em>HTML </em>e no fim desse post teremos links para outros posts descrevendo os outros elementos <em>HTML</em> de formulário.</p>
<h2>A Tag <em><strong>&lt;form&gt;</strong></em> &#8211; Elemento Form</h2>
<p>A tag <em><strong>&lt;form&gt;</strong></em> é utilizada para fazer um formulário, nela define-se vários aspectos do formulário como para onde ele é enviado e que forma de envio é utilizado. Sempre que for fazer um formulário, todos os componentes do formulário devem ficar entre as tags <em><strong>&lt;form&gt;</strong></em> e <em><strong>&lt;/form&gt;</strong></em>.</p>
<p>Vamos ver alguns atributos da tag de fomulário <em><strong>&lt;form&gt;</strong></em>.</p>
<h4><em>Action</em></h4>
<p>- O atributo <em>action</em> da tag <em><strong>&lt;form&gt;</strong></em> diz para onde o formulário deve ser enviado. O valor desse atributo é o endereço, estático ou relativo, de onde está a página que vai tratar esse formulário.</p>
<h4><em>Method</em></h4>
<p>- O <em>method</em> diz como enviar os dados do formulário, pode ser pelo método <em>GET</em> ou <em>POST</em>. Se você não especificar o método (atributo <em>method</em>), o padrão é o <em>GET</em>.</p>
<p>Para saber mais sobre os métodos <em>GET</em> e <em>POST</em> acesse <a title="Como Funciona os Métodos GET e POST - Diferenças" href="http://www.comocriarsites.com/html/como-funciona-os-metodos-get-e-post-diferencas/">Como Funciona os Métodos GET e POST &#8211; Diferenças</a>.</p>
<h4><em>Name</em></h4>
<p>- Esse atributo nomeia o fomulário <strong><em>&lt;form&gt;</em></strong>, fazendo ele poder ser identificado por folhas de estilo e scripts (como Javascript). Esse atributo está em desuso, é utilizado somente para compatibilidade com códigos HTML antigos e os códigos HTML novos devem utilizar o atributo <em>id</em>.</p>
<h4><em>Id</em></h4>
<p>- Esse atributo pode ser utilizado em qualquer elemento HTML, ele define uma identificação única para o elemento HTML e deve ser único em um documento.</p>
<h4><em>Target</em></h4>
<p>- Indica onde o resultado da submissão do formulário HTML será exibida. Pode ser o nome de um frame (ou iframe, tag &lt;iframe&gt;), ou uma janela, ou uma dessas seguintes constantes:</p>
<p><strong><em> &#8211; _blank</em></strong> &#8211; O resultado do formulário HTML é exibido em uma janela nova e sem nome. alguns navegadores deixam a opção para o usuário, de exibir esse resultado em uma nova aba.</p>
<p><em><strong> &#8211; _self</strong></em> &#8211; Exibe a página referenciada na mesma página ou no mesmo frame que o link ou formulário está. Essa é a opção padrão.</p>
<p><em><strong>- _parent</strong></em> &#8211; Exibe a página referenciada no frame pai do frame que o link ou formulário está. Se o frame não tiver frame pai, essa opção fica igual a opção &#8220;<em><strong>_self</strong></em>&#8220;.</p>
<p><em><strong>- _top</strong></em> &#8211; Exibe a página referenciada na tela inteira do navegador, cancelando qualquer frame que a página anterior continha.</p>
<h4><em>Enctype</em></h4>
<p>- Esse atributo diz como o formulário HTML vai codificar os dados enviados. Se você não quiser enviar nenhum arquivo (upload) para o servidor, você pode não colocar esse atributo no seu formulário HTML (form), que ele vai ficar com o valor padrão, que vai funcionar normal.</p>
<p>Os valores para esse atributo podem ser:</p>
<p><strong><em>- application/x-www-form-urlencoded</em></strong> &#8211; Esse é o valor padrão, se você quiser saber como os dados são codificados, entre em <a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1">http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1</a>.</p>
<p><em><strong>- multipart/form-data</strong></em> &#8211; Se você quer fazer envio de arquivos (upload), via formulário HTML, você deve utilizar esse valor para o atributo <em><strong>Enctype</strong></em>. O valor padrão não é suficiente para enviar grandes quantidades de dados binários. Esse valor deve ser utilizado quando desejas enviar arquivos, dados binários ou caracteres não ASCII.</p>
<p>Para outros valores desse atributo, consulte: <a href="http://www.w3.org/TR/html401/types.html#type-content-type">http://www.w3.org/TR/html401/types.html#type-content-type</a>.</p>
<h4><a><em>Accept</em></a></h4>
<p>- Esse atributo define quais tipos de conteúdo (content types), que o servidor vai processar corretamente. Colocam-se os tipos separados por vírgula.</p>
<p>O atributo <em><strong>accept</strong></em> especifica que tipos de arquivos (<em><strong>&lt;input type=&#8221;file&#8221;&gt;</strong></em>), o navegador deve filtrar, para não enviar arquivos para o servidor que não seja correspondente a um dos tipos especificados nesse atributo.</p>
<p>Se você quiser uma lista dos tipos (MIME types) de conteúdo, entre em: <a href="http://www.w3.org/TR/html401/references.html#ref-MIMETYPES">http://www.w3.org/TR/html401/references.html#ref-MIMETYPES</a> e em: <a href="http://www.iana.org/assignments/media-types/">http://www.iana.org/assignments/media-types/</a></p>
<h4><a><em>Accept-charset</em></a></h4>
<p>- Esse atributo define qual tipo de codificação de caracteres (<em>charset</em>) o servidor vai identificar os dados enviados pelo formulário HTML.</p>
<p>Para ver uma lista de codificação de caracteres (<em>charset</em>), acesse: <a href="http://www.w3.org/TR/html401/references.html#ref-CHARSETS">http://www.w3.org/TR/html401/references.html#ref-CHARSETS</a>.</p>
<p>Até a data de escrita desse post, e mesmo sem testar, o Internet Explorer não aceita esse atributo.</p>
<h2>Exemplo de Formulário HTML (<em>&lt;form&gt;</em>)</h2>
<p>Vamos ver um exemplo simples do uso de formulário HTML. O exemplo irá mostrar alguns campos, onde todos devem ser preenchidos para o envio do formulário. Se algum campo não for preenchido, aparece uma mensagem de erro no campo que não foi preenchido.</p>
<p>O nosso arquivo para executar esse código é o <em><strong>contato.php</strong></em>.</p>
<h3>O Arquivo <em>contato.php</em>.</h3>
<p>Nesse arquivo temos o nosso código PHP que processa o fomulário HTML quando ele é enviado.</p>
<div style="background-color: #FFFFFF; overflow-x: auto;">
<pre>&lt;?php

$Enviar = $_POST["Enviar"];

if(strlen($Enviar) &gt; 0) { // o formulário foi enviado
	$nome = $_POST["nome"];
	$email = $_POST["email"];
	$telefone = $_POST["telefone"];
	$departamento = $_POST["departamento"];
	$mensagem = $_POST["mensagem"];

	if((strlen($nome) &gt; 0) &amp;&amp; (strlen($email) &gt; 0) &amp;&amp; (strlen($telefone) &gt; 0) &amp;&amp;
		(strlen($departamento) &gt; 0) &amp;&amp; (strlen($mensagem) &gt; 0)) { // todos os dados preenchidos
		print("&lt;strong&gt;Dados do Formulário:&lt;strong&gt;&lt;BR&gt;");
		print("&lt;strong&gt;Nome:&lt;/strong&gt;".$nome."&lt;BR&gt;");
		print("&lt;strong&gt;Email:&lt;/strong&gt;".$email."&lt;BR&gt;");
		print("&lt;strong&gt;Telefone:&lt;/strong&gt;".$telefone."&lt;BR&gt;");
		print("&lt;strong&gt;Departamento:&lt;/strong&gt;".$departamento."&lt;BR&gt;");
		print("&lt;strong&gt;Mensagem:&lt;/strong&gt;".$mensagem."&lt;BR&gt;");
	}
	else { // nem todos os dados preenchidos, voltar para o formulário
		// dizer em msg de erro o que falta no formulário
		if(strlen($nome) == 0)
			$erro_nome = "&lt;span class=\"msg_erro\"&gt;O campo Nome deve ser preenchido&lt;/span&gt;";
		if(strlen($email) == 0)
			$erro_email = "&lt;span class=\"msg_erro\"&gt;O campo Email deve ser preenchido&lt;/span&gt;";
		if(strlen($telefone) == 0)
			$erro_telefone = "&lt;span class=\"msg_erro\"&gt;O campo Telefone deve ser preenchido&lt;/span&gt;";
		if(strlen($departamento) == 0)
			$erro_departamento = "&lt;span class=\"msg_erro\"&gt;O campo Departamento deve ser preenchido&lt;/span&gt;";
		if(strlen($mensagem) == 0)
			$erro_mensagem = "&lt;span class=\"msg_erro\"&gt;O campo Mensagem deve ser preenchido&lt;/span&gt;";

		// colocando o departamento selecionado como selecionado
		$$departamento = "selected=\"true\"";

		require("contatoform.php");
	}
}
else { // o formulário não foi enviado
	require("contatoform.php");
}

?&gt;</pre>
</div>
<p>Onde tem a chamada do array <em><strong>$_POST</strong></em>, pegamos os dados enviados do formulário, pelo método <em>POST</em>. Para pegar os dados enviados pelo método <em>GET</em>, utilizamos o array <strong><em>$_GET</em></strong>. No nosso exemplo, somente enviamos dados pelo método <em>POST</em>, então somente utilizaremos o array <em><strong>$_POST</strong></em>.</p>
<p>No array <em><strong>$_POST</strong></em>, temos todos os nomes  das variáveis que enviamos do formulário, como chaves do array (array associativo), e seus valores como os valores do formulário. Se temos um campo tipo <em>text</em>, com nome <em>&#8220;email&#8221;</em> (<em>name=&#8221;email&#8221;</em>), e enviamos esse formulário pelo método <em>POST</em>, teremos no <em>PHP</em>, o array <strong><em>$_POST["email"]</em></strong> com o valor do que foi escrito no campo email.</p>
<p>No nosso exemplo, se o formulário foi enviado, ele pega todos os valores que foram enviados e testa, para ver se algum está em branco (com número de caracteres igual a zero). Se todos estiverem preenchidos, o programa mostra eles na tela. Se algum não tiver sido preenchido, o programa testa para ver quais não foram preenchidos e seta uma mensagem de erro personalizada para cada campo não preenchido, e volta a mostrar o fomulário.</p>
<p>A linha que faz o campo selecionável (<strong><em>selecbox</em></strong>) ficar como estava quando foi enviado, merece um pouco mais de explicação. A linha é a seguinte: <strong>$$departamento = &#8220;selected=\&#8221;true\&#8221;";</strong>. Ela está simplesmente, colocando na variável com o nome do valor da variável <strong>$departamento</strong>, o valor<strong> &#8220;selected=\&#8221;true\&#8221;"</strong>. Por exemplo, se a minha variável <strong>$departamento</strong> for igual a <strong>&#8220;comercial&#8221;</strong>, depois de executar essa linha, eu terei uma variável <strong>$comercial</strong> com o valor igual a <strong>&#8220;selected=\&#8221;true\&#8221;"</strong>. Isso tudo para, no arquivo <em>HTML</em>, eu poder selecionar automaticamente o que foi estava selecionado no fomulário, no campo de seleção (<strong>selectbox</strong>). Vamos entender isso mais a frente.</p>
<h3>O Arquivo contatoform.php.</h3>
<p>Nesse arquivo tem o nosso formulário em <em>HTML</em> e um pouco de <em>PHP</em> para deixar o formulário mais dinâmico.</p>
<div style="background-color: #FFFFFF; overflow-x: auto;">
<pre>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /&gt;
	&lt;title&gt;Exemplo de Formulário HTML/PHP&lt;/title&gt;

	&lt;link rel="stylesheet" type="text/css" href="estilo.css" /&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;form name="form_contato" action="contato.php" method="post"&gt;
	&lt;div&gt;Nome: &lt;?php echo($erro_nome); ?&gt;&lt;/div&gt;
	&lt;div&gt;&lt;input name="nome" id="nome" type="text" value="&lt;?php echo($nome); ?&gt;" /&gt;&lt;/div&gt;

	&lt;div&gt;Email: &lt;?php echo($erro_email); ?&gt;&lt;/div&gt;
	&lt;div&gt;&lt;input name="email" id="email" type="text" value="&lt;?php echo($email); ?&gt;" /&gt;&lt;/div&gt;

	&lt;div&gt;Telefone: &lt;?php echo($erro_telefone); ?&gt;&lt;/div&gt;
	&lt;div&gt;&lt;input name="telefone" id="telefone" type="text" value="&lt;?php echo($telefone); ?&gt;" /&gt;&lt;/div&gt;

	&lt;div&gt;Departamento: &lt;?php echo($erro_departamento); ?&gt;&lt;/div&gt;
	&lt;div&gt;
		&lt;select name="departamento" id="departamento"&gt;
			&lt;option value=""&gt;...&lt;/option&gt;
			&lt;option value="comercial" &lt;?php echo($comercial); ?&gt;&gt;comercial&lt;/option&gt;
			&lt;option value="financeiro" &lt;?php echo($financeiro); ?&gt;&gt;financeiro&lt;/option&gt;
			&lt;option value="juridico" &lt;?php echo($juridico); ?&gt;&gt;jurídico&lt;/option&gt;
			&lt;option value="suporte" &lt;?php echo($suporte); ?&gt;&gt;suporte&lt;/option&gt;
		&lt;/select&gt;
	&lt;/div&gt;

	&lt;div&gt;Mensagem: &lt;?php echo($erro_mensagem); ?&gt;&lt;/div&gt;
	&lt;div&gt;&lt;textarea name="mensagem" id="mensagem" rows="5" cols="25"&gt;&lt;?php echo($mensagem); ?&gt;&lt;/textarea&gt;&lt;/div&gt;

	&lt;div&gt;&lt;input name="Enviar" value="Enviar" type="submit" /&gt;&lt;/div&gt;
&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;/</pre>
</div>
<p>Esse arquivo simplesmente define 5 campos e um botão de submeter o formulário, sendo que um desses campos é um campo selecionável (<strong>selectbox</strong>).</p>
<p>Todos eles tem no atributo <em>value</em>, um trecho de código em <em>PHP</em>, por isso precisamos que a extensão desse arquivo seja reconhecida como extensão para processamento do <em>PHP</em>. Esse trecho serve para definir no formulário <em>HTML</em>, caso de erro, o que o usuário já tinha escrito antes, porque sem isso o fomulário viria todo em branco novamente, e isso é ruim, pois se eu errei somente uma coisinha no fomulário, e ele voltar em branco, terei que preenche-lo todo novamente.</p>
<p>No caso do <em><strong>selecbox</strong></em>, eu tenho que fazer com que a seleção do usuário volte a aparecer se o formulário der erro, então coloco um trecho <em>PHP</em> exibindo uma variável com o nome do <em>value</em> da opção (<strong>option</strong>) em questão, para no script de processamento, ele tratar isso, como foi explicado no arquivo <strong><em>contato.php</em></strong>.</p>
<p>Podes perceber que tenho várias classes de folha de estilo no documento, e o documento também chama um arquivo de folha de estilo, que eu colocarei somente para mostrar a mensagem de erro em destaque.</p>
<h3>O Arquivo estilo.css</h3>
<p>Esse arquivo é bem simples, abaixo o código:</p>
<div style="background-color: #FFFFFF; overflow-x: auto;">
<pre>.msg_erro {
	color: red;
	font-weight: bold;
}</pre>
</div>
<p>Com essa classe eu destaco as minhas mensagens de erro.</p>
<h2>O Exemplo Pronto</h2>
<p>Você pode ver esse exemplo pronto em <a href="http://www.comocriarsites.com/exemplos/formulariohtmlsimples/">http://www.comocriarsites.com/exemplos/formulariohtmlsimples/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.comocriarsites.com/html/fazendo-formulario-html-como-fazer-fomulario-html-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
