Ir para conteúdo

Lição De Php & Mysql.


Raphael Lion

Posts Recomendados

Lição 1

 

Porquê PHP ?

 

Por que PHP?

 

* Seu chefe te pediu para deixar o site de sua empresa "dinâmico"?

* Você precisa lidar com banco de dados no seu site?

* Você não tem dinheiro para comprar/registrar SQL, IIS, Windows NT?

* Você quer aprender mais uma linguagem de programação só para dizer que sabe?

 

Se sua resposta for "sim" para pelo menos uma dessas perguntas, então eu diria que você não está tendo sexo o bastante. Então, aperte seus cintos e vamos pular para a próxima página.

Introdução

Regra #1:

Quando um empregado/cliente de porte te pergunta se você já trabalhou com software XYZ rodando em ambiente ABC, diga "Lógico!" rapidamente e com segurança. Logo depois, corra para casa, vai na internet e descobre que coisa é essa que ele estava falando!

 

A menos que você esteve morando em Marte pelos últimos seis à oito meses, você ouviu falar em open source software (OSS). Este movimento teve um impacto tão grande que até as grandes empresas estão investindo. Tais companias, como Oracle, Informix, e outras, estão colocando seus softwares disponívels para um dos criadores do movimento OSS, o Linux.

 

Ter um RDBMS (relational database management system) complexo é bom se você souber o que fazer com isso. Mas talvez você está apenas entrando no mundo de banco de dados. Supomos que você quer fazer um web site implementando banco de dados. Mas você não tem as ferramentas necessárias, ou o dinheiro para pagar por um servidor bom que suporte ASP. Você quer trabalhar com algo de graça, e você quer que isso funcione em qualquer plataforma.

 

Algo assim não é um sonho, é para isso que existe PHP e MySQL. Esses dois fazem a melhor combinação para montar web sites com acesso à banco de dados no mundo! Eu não estou "criando" esta informação. Uma pesquisa mostra que o uso de PHP pulou de 7,500 hosts em Junho de 1998 para 410,00 in Março de 1999.

 

MySQL é um pequeno servidor de banco de dados. Ideal para pequenos (e não tão pequenos) aplicativos. Além disso, MySQL suporta o SQL padrão (ANSI). Isso cria uma ótima performance em servidores Unix. MySQL pode rodar como um service no Windows NT e como um processo normal em Windows 95/98.

 

PHP é uma liguagem de server-side scripting. Se você já viu, ou trabalhou com Active Serve Pages (ASP), você deve estar familiar com o código encaixado dentro da página HTML. Como o ASP, PHP script é processado no servidor. Isto é, ao contrário de JavaScript e VBScript, ele performa ações no servidor e o cliente só vê o resultado, em HTML.

 

Além de ser de graça (MySQL tem restrições), a combinação de PHP / MySQL é cross-platform. Isto quer dizer que você pode desenvolver seus scripts dentro do Windows e serví-los em um ambiente Unix.

 

Se você estiver interessado, PHP também suporta vários tipos de banco de dados, incluindo Informix, Oracle, Sybase, Solid, PostgreSQL, e também ODBC.

 

Se você quiser saber mais sobre PHP, suas funções, novas versões, e etc, você pode visitar a página oficial do PHP.

 

Já basta de conversa! Vamos começar...

 

Seu Primeiro Script

 

Vamos dar uma olhada no seu primeiro script. Crie um arquivo text contendo o seguinte:

&lthtml>

 

&ltbody>

 

 

<?php

 

$meuvar = "Oi galera!";

 

echo $meuvar;

 

?>

 

 

</body>

 

</html>

 

Agora abra a URL (ex.: http://meuserver.com/teste.php3). Você deve ver uma página que contém o texto "Oi galera!". Se você receber uma mensagem de erro, dê uma olhada na documentação do PHP.

 

Pronto! Aí está o seu primeiro script de PHP. Se você tentar ver o código fonte de HTML, você apenas verá o texto. Oi galera! :)

 

Isso acontece porque interpretador do PHP examinou a página, processou o código dentro dos blocos encontrados e retornou apenas HTML.

 

A primeira coisa que você perceberá neste scrpt são os delimitadores (tags). Isto é, as linhas que começam com <?php. Isso indica o começo de um bloco de código PHP, e ?> indica o fim do bloco. O melhor de tudo é que o código pode ser colocado em qualquer lugar na página. Mais pra frente veremos algo interessante sobre isso. Se você quiser, você também pode configurar o PHP para usar tags simples, <? e ?>, mas essas não funcionam com XML. Se você está migrando de ASP, você pode até configurar o PHP para usar tags <% e %>.

 

Outra coisa que você vai perceber é o ponto-e-vírgula no fim de cada linha. Eles são conhecidos como separadores e servem para destinguir um grupo de instruções do outro. É possível escrever um script inteiro em uma linha e separar cada instrução com um ponto-e-vírgula, mas isso seria uma bagunça! Por isso, iremos adicionar uma linha depois de cada ponto-e-vírgula. Apenas lembre-se que cada linha deve terminar com um ponto-e-vírgula.

 

Finalmente você pode ver que a palavra meuvar começa com um cifrão. Este símbolo diz ao PHP que meuvar é um variável. Nós atribuímos as palavras "Oi galera!" ao variável $meuvar. Um variável também pode conter números ou um array. De qualquer maneira, todos os variáveis começam com um cifrão.

 

As melhores coisas no PHP são suas funções. Elas são basicamente instruções de processamento. Se você adicionar todos os add-ins opicionais do PHP, existem mais de 700 funções disponíves.

 

Agora vamos trabalhar um pouco com MySQL.



Configurando Banco de Dados

 

Agora iremos usar um pouco de MySQL. Um jeito fácil de saber as opções disponíveis no PHP e o que está acontecendo no servidor é usar a função phpinfo(). Crie um script com o seguinte:

<html>

 

<body>

 

 

<?php

 

phpinfo();

 

?>

 

 

</body>

 

</html>

 

Salve e abra a URL para este script. Você verá uma página repleta com informações úteis. Estas informações dizem tudo sobre o seu servidor, os variáveis internos, as opções configuradas, entre ontras coisas. Na primeira seção, "Extensions", procure uma linha que comece com MySQL. Se esta linha estiver faltando, então por algum motivo, MySQL não foi instalado corretamente.

 

Se o MySQL estiver lá, então você está pronto para o próximo passo.

 

Antes de podermos visualizar dados do MySQL, nós temos que inserir dados. Não existe um jeito fácil de fazer isso neste ponto. A maioria dos scripts PHP vêm com um arquivo "dump" que contém todos os dados requeridos para criar um banco de dados do MySQL. Não vou dar mais detalhes sobre isso porque senão vou acabar te confundindo.

 

MySQL usa sua própria tabela de permissões. Na criação, um usuário padrão (root) é criado automaticamente sem nenhuma senha. Se o administrador do banco de dados quiser adicionar outros usuários com senha e diferentes permissões, ele pode. Só que eu poderia escrever um outro artigo inteiro sobre isso, por tanto vamos usar o usuário root mesmo. Se você criar seu próprio banco de dados, é importante que você atribua uma senha.

 

Bom, vamos começar logo! Para usuários de Windows, sinto muito, mas isso vai requerir um pouco de DOS. Você terá que abrir uma janela d DOS ou digitar tudo na janela Executar. Não se esqueça de digitar o caminho do MySQL/bin diretório com seus comandos. Usuários Unix podem trabalhar do diretório MySQL bin, mas talvez você tenha que começar cada comando com ./ para que os programas sejam executados.

 

A primeira coisa que precisamos fazer é criar o banco de dados. Digite:

mysqladmin -u root create mydb

 

Isso cria um banco de dados chamado "mydb". Isso diz ao MySQL que estamos usando o usuário "root".

 

Agora nós adicionaremos uns dados usando o exemplo favorito de tods: o banco de dados "employees"! Vamos precisar o arquivo .dump que eu mencionei mais cedo. Se você quiser saber mais sobre isso, dê uma olhada no manual que vem com o MySQL, ou vai em http://www.turbolift.com/mysql/.

 

Copie e cole o texto setguinte em um arquivo e salve no diretorório bin do MySQL. (Vou chamar o arquivo de mydb.dump).

 

CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, nome varchar(20), sobrenome varchar(20), endereco varchar(255), posicao varchar(50), PRIMARY KEY (id), UNIQUE id (id));

 

INSERT INTO employees VALUES (1,'João','Oliveira','Rua do Cara, Cidade','Administrador de marketing');

 

INSERT INTO employees VALUES (2,'Marcos','Silva','Rua do Silva , Marcosland','Telefonista');

 

INSERT INTO employees VALUES (3,'Luiz','Santanna','Rua Santanna','Programador');

 

Se as linhas quebrarem, certifique-se de que cada indicação insert fique em uma linha nova. Agora vamos colocar isso no banco de dados. No prompt, digite:

 

mysql -u root mydb < mydb.dump

 

Nenhum erro deve ocorrer ao fazer isto. Se tiver, veja se a quebra de linha está certa.

 

Funções Básicas do MySQL

 

Bom, agora temos nossos dados no banco de dados. Agora vamos fazer algo com isso. Copie e cole o texto seguinte e salve-o com a extensão .php3 (dentro do diretório de seu web server, de preferência).

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

printf("Nome: %s<br>\n", mysql_result($resultado,0,"nome"));

 

printf("Sobrenome: %s<br>\n", mysql_result($resultado,0,"sobrenome"));

 

printf("Endereço: %s<br>\n", mysql_result($resultado,0,"endereco"));

 

printf("Posição: %s<br>\n", mysql_result($resultado,0,"posicao"));

 

?>

 

 

</body>

 

</html>

 

Agora vamos explicar o que aconteceu aqui. A função mysql_connect() abre um link para um servidor no host especificado (neste caso é localhost) junto com o username (root). Se você precisasse especificar uma senha, você a adicionaria aqui também. O resultado da conexão é armazenado no variável $db.

 

mysql_select_db() diz ao PHP que qualquer comando que enviármos serão executados no banco de dados mydb. Nós poderíamos criar múltiplas conexões para banco de dados em servidores diferentes. Mas não quero complicar sua cabeça agora.

 

Agora, o mysql_query() faz todo o trabalho difícil. Usando o identificador da conexão do banco de dados, ele envia a linha de Structured Query Language (SQL) para o MySQL. Os resultados são retornados e armazenados no variável $resultado.

 

Finalmente, o mysql_result() é usado para mostrar os valores dos campos do nosso comando. Usando o $resultado, nós iremos à primeira linha (numerada como 0) e mostrar o valor dos campos especificados.

 

A sintaxe da função printf pode parecer um pouco esquisita caso você não tenha usado Perl ou C anteriormente. Em cada uma das linhas acima, o %s indica que o variável na segunda parte da expressão (ex.: mysql_result($resultado,0,"posicao")) deve ser tratado com uma string. Para mais informações sobre o printf, veja a documentação do PHP.

 

Aí, conseguimos! Nós compilamos, instalamos e configuramos o MySQL e o PHP, e executamos um script simples para obter informação de um banco de dadoss. Na segunda lição faremos algo útil de verdade para mostrar informações e até mesmo enviar dados para o banco de dados.

 

Revisão

 

Nesta lição aprendemos...

 

* ...que progamadores (de PHP) não fazem sexo o bastante;

* ...como o PHP surgiu;

* ...como inserir código PHP em uma página HTML;

* ...como configurar um banco de dados MySQL; e

* ...como mostrar o conteúdo de um banco de dados.

 

Lição 2

 

"Loopando"!

 

Nessa lição, nós iremos mergulhar logo no PHP e criar um script simples, e útil, usando PHP e MySQL. Vamos começar mostrando os dados do banco de dados que criamos ontem, mas com um pouco mais de complexidade.

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

echo "<table border=1>\n";

 

echo "<tr><td>Nome</td><td>Posição</tr>\n";

 

while ($linha = mysql_fetch_row($resultado)) {

 

printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $linha[1], $linha[2], $linha[3]);

 

}

 

echo "</table>\n";

 

?>

 

 

</body>

 

</html>

 

Você provavelmente notou que há código novo. O mais óbvio é o loop usando o while(). O loop diz que enquanto haver novas linhas de dados no $resultado (usando a função mysql_fetch_row()), aquela linha será atribuída ao variável $linha. Depois, executar as instruções entre {}. Olhe para o código por um minuto e você deve entender.

 

A função mysql_fetch_row() precisa de mais explicação. Um probleminha com esta função é que ela retorna um array, e suporta apenas referencias numéricas aos campos. Por tanto, o primeiro campo é referido como 0, o segundo como 1, e por aí vai.

 

Agora vamos examinar o loop com mais detalhes. As primeiras linhas você reconhecerá do exemplo na lissão 1. Depois, o loop while() pega uma linha do resultado e a atribui ao array $linha. Depois, nós mostramos os dados do array com a função printf. Depois disso, a função faz um outro loop, e outra linha é atribuida ao $linha. Isso acontecerá até não haver mais linhas para serem atribuidas ao $linha.

 

A coisa boa sobre o while() é que o seu resultado não retornar dados, você não receberá uma mensagem de erro.

 

Mas se o resultado não retornar dados, teremos que avisar o usuário. Para isso, provavelmente teríamos que mostrar um tipo de mensagem de erro. Isto é possível... Para saber como, continue lendo!

Fique Ligado

 

Dê uma olhada neste script...

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

if ($linha = mysql_fetch_array($resultado)) {

 

echo "<table border=1>\n";

 

echo "<tr><td>Name</td><td>Position</td></tr>\n";

 

do {

 

printf("<tr><td>%s %s</td><td>%s</tr>\n", $linha["nome"], $myrow["sobrenome"], $myrow["endereco"]);

 

} while ($linha = mysql_fetch_array($resultado));

 

echo "</table>\n";

 

} else {

 

echo "Nenhum registro encontrado!";

 

}

 

?>

 

 

</body>

 

</html>

 

Aqui eu usei algumas funções novas para você, mas elas são bem simples. Primeiramente, tem a função mysql_fetch_array(). Ela faz o mesmo que a mysql_fetch_row(), com uma pequena excessão: com esta função, podemos nos referir aos campos pelo nome deles (ex.: $linha["nome"]). Isso vai diminuir bastante suas dores de cabeça! Também usei aqui um loop do/while e uma condição usando if e else.

 

Se a condição disser que podemos atribuir uma linha ao $linha, então continue; ao contrário, pule para a seção else e faz o que estiver lá.

 

O loop é uma variação do loop while() que usamos na página anterior. Nós precisamos do do/while aqui por um motivo: com a condição no começo, nós atribuimos a primeira linha que retornou do query ao variável $linha. Se tivéssemos executado um while normal (tipo while ($linha = mysql_fetch_row($resultado)), nós estaríamos tirando o primeiro registro do variável e sobreescrevendo-o com o segundo. Mas o loop do/while nos permite testar a condição após o código foi executado. Assim não há chances de acidentalmente pularmos um registro.

 

Finalmente, se não há registros retornados, o código contido na seção else será executado. Para ver esta seção sendo executada, modifique o código SQL para SELECT * FROM employees WHERE id=9 ou algo que não retornará nenhum registro.

 

Agora iremos extender código de loops e if-else para fazer uma página "animal". Você vai adorar!

Simplesmente "Linkar"

 

Aqui nós iremosm pegar todo o poder de loops que acabamos de aprender e usá-lo de um jeito mais prático. Mas antes de prosseguirmos, você deve saber trabalhar com formulários (forms), querystring, e o método GET e POST.

 

Agora eu irei trabalhar com querystrings. Existem três jeitos de colocar dados na querystring. O primeiro é usar o método GET em um formulário. O segundo é digitar a informação na URL do seu browser. E no terceiro, você pode colocar a querystring em um link comum. Algo mais ou menos assim: <a href="http://servidor.com/pagina.php3?id=2">. Nós iremos usar isso agora.

 

Primeiro de tudo, vamos conectar novamente ao banco de dados. O script a seguir deve parecer bem familiar para você agora.

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

if ($linha = mysql_fetch_array($result)) {

 

do {

 

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $linha["id"], $linha["nome"], $linha["sobrenome"]);

 

} while ($linha = mysql_fetch_array($resultado));

 

} else {

 

echo "Nenhum registro encontrado!";

 

}

 

?>

 

 

</body>

 

</html>

 

Tudo está mais ou menos igual, com a excessão da função printf.

 

Note que a àspas é seguida com uma barra ao contrário. A barra diz ao PHP para mostrar o caractere seguinte à ela, ao invés de tratá-lo como parte do código. Também note o uso da variável $PHP_SELF. Essa variável contém o nome da página PHP. Ela nos ajuda porque só queremos que o script chame ele mesmo. Usando o $PHP_SELF, nós podemos ter certeza que isso irá acontecer, mesmo que o arquivo seja movido para um outro diretório, ou até mesmo outra máquina.

 

Como acabei de mencionar, estes links chamarão a própria página.

 

Quando o PHP vê algo=valor em uma querystring, ele automaticamente cria uma variável com o mesmo nome e valor da querystring. Assim dá pra saber se é a primeira vez que script é rodado, ou se o script chamou ele mesmo. É só checar pra ver se $id existe!

 

Depois que eu souber a resposta para aquela questão, eu posso mostrar um conjunto de dados diferentes na segunda vez que o script é rodado. Assim:

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

// mostrar os dados de um registro (caso id exista)

 

if ($id) {

 

$resultado = mysql_query("SELECT * FROM employees WHERE id=$id",$db);

 

$linha = mysql_fetch_array($resultado);

 

printf("Nome: %s\n<br>", $linha["nome"]);

 

printf("Sobrenome: %s\n<br>", $linha["sobrenome"]);

 

printf("Endereço: %s\n<br>", $linha["endereco"]);

 

printf("Posição: %s\n<br>", $linha["posicao"]);

 

} else {

 

// mostrar lista de employees

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

if ($linha = mysql_fetch_array($resultado)) {

 

// mostrar lista se há registros

 

do {

 

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $linha["id"], $linha["nome"], $linha["sobrenome"]);

 

} while ($linha = mysql_fetch_array($resultado));

 

} else {

 

// nenhum registro à ser mostrado

 

echo "Nenhum registro encontrado!";

 

}

 

}

 

?>

 

 

</body>

 

</html>

 

Este código está ficando complexo. Por tanto comecei à usar comentários para saber o que está acontecendo. Você pode usar o // para fazer um comentário de uma linha só, ou /* e */ para fazer um comentário de várias linhas.

 

Aí está! Seu primeiro script útil de verdade! Agora vamos ver como usar formulários com o PHP e enviar dados ao banco de dados!

Usando Formulários



 

Bom, conseguimos ver dados do banco de dados sem crises. Agora, como faremos para enviar dados? Isso é um trabalho para Doctor Luiz!

 

Primeiro, vamos criar uma pagina com um formulário simples...

&lthtml>

 

&ltbody>

 

 

&ltform method="post" action="<?php echo $PHP_SELF?>">

 

Nome:&ltinput type="Text" name="nome">&ltbr>

 

Sobrenome:&ltinput type="Text" name="sobrenome">&ltbr>

 

Endereço:&ltinput type="Text" name="endereco">&ltbr>

 

Posicao:&ltinput type="Text" name="posicao">&ltbr>

 

&ltinput type="Submit" name="submit" value="Enviar">

 

</form>

 

 

</body>

 

</html>

 

Aqui usamos o $PHP_SELF novamente. Como eu falei na primeira lição, você pode usar PHP qualquer lugar dentro do código HTML. Você também deve ter notado que cada elemento do formulário tem o mesmo nome dos campos no banco de dados. Isso não é necessario--apenas te ajuda à se lembrar dos campos mais para frente.

 

Também note que eu atribui um nome ao botão submit. Eu fiz isso para poder ver se o variável $submit existe mais para frente. Deste jeito, quando a página for chamada novamente, saberei se o formulário foi usado.

 

Devo mencionar que você não tem que fazer com que a página faça um loop nela mesmo. Você pode usar duas, três, quatro, ou mais páginas caso queira. Fiz isto para que o tutorial fique menor.

 

Beleza, agora iremos adicionar código que vai checar as informações digitadas no formulário. Agora, o que vou fazer aqui é bem legal. Vou usar o $HTTP_POST_VARS para listar todos as variáveis. Se algum dia você precisar ver todos as variáveis de uma página, use $GLOBALS.

&lthtml>

 

&ltbody>

 

 

<?php

 

if ($submit) {

 

// processar formulário

 

while (list($name, $value) = each($HTTP_POST_VARS)) {

 

echo "$name = $value&ltbr>\n";

 

}

 

} else{

 

// mostrar formulário

 

?>

 

&ltform method="post" action="<?php echo $PHP_SELF?>">

 

Nome:&ltinput type="Text" name="nome">&ltbr>

 

Sobrenome:&ltinput type="Text" name="sobrenome">&ltbr>

 

Endereço:&ltinput type="Text" name="endereco">&ltbr>

 

Posição:&ltinput type="Text" name="posicao">&ltbr>

 

&ltinput type="Submit" name="submit" value="Enviar dados">

 

</form>

 

<?php

 

} // end if

 

?>

 

 

</body>

 

</html>

 

Agora que isso aqui está ficando bom! Vamos colocar os dados enviados no banco de dados...

&lthtml>

 

&ltbody>

 

 

<?php

 

if ($submit) {

 

// processar formulário

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

$sql = "INSERT INTO employees (nome,sobrenome,endereco,posicao) VALUES ('$nome','$sobrenome','$endereco','$posicao')";

 

$resultado = mysql_query($sql);

 

echo "Dados adicionados com sucesso!\n";

 

} else {

 

// mostrar formulario

 

?>

 

&ltform method="post" action="<?php echo $PHP_SELF?>">

 

Nome:&ltinput type="Text" name="nome">&ltbr>

 

Sobrenome:&ltinput type="Text" name="sobrenome">&ltbr>

 

Endereço:&ltinput type="Text" name="endereco">&ltbr>

 

Posição:&ltinput type="Text" name="posicao">&ltbr>

 

&ltinput type="Submit" name="submit" value="Enviar Dados!">

 

</form>

 

<?php

 

} // end if

 

?>

 

 

</body>

 

</html>



Agora você adicionou dados ao banco de dados. Ainda está longe de ficar perfeito... E se alguém deixar um campo em branco, ou digitar um texto onde queremos um valor numérico? E se houver um erro em algum lugar?

 

Calma... Chegaremos lá!

 

Formulários Inteligentes

 

Neste tutorial, eu estive armazenando o comando de SQL dentro de uma variável ($sql) antes de enviar o comando ao banco de dados com o mysql_query(). Isso é bom para depurar o código. Se algo causa um erro, você pode usar o comando echo para mostrar o comando e analisá-lo.

 

Já sabemos como adicionar dados ao banco de dados. Agora vamos tentar modificar os dados que já estão no banco de dados. Editando dados combina dois elementos que já conhecemos: mostrar os dados na tela e enviar os dados para o banco de dados através de formulários. Contudo, editar dados é um pouquinho diferente...

 

Bom, primeiramente vamos reciclar o código da lição 1 e mostrar os nomes dos empregados na nossa página. Mas dessa vez, nós iremos encher um formulário de informações. Algo mais ou menos assim:

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

if ($id) {

 

$sql = "SELECT * FROM employees WHERE id=$id";

 

$resultado = mysql_query($sql);

 

$linha = mysql_fetch_array($resultado);

 

?>

 

<form method="post" action="<?php echo $PHP_SELF?>">

 

<input type=hidden name="id" value="<?php echo $linha["id"] ?>">

 

Nome:<input type="Text" name="nome" value="<?php echo $linha["nome"] ?>"><br>

 

Sobrenome:<input type="Text" name="sobrenome" value="<?php echo $linha["sobrenome"] ?>"><br>

 

Endereço:<input type="Text" name="endereco" value="<?php echo $linha["endereco"] ?>"><br>

 

Posição:<input type="Text" name="posicao" value="<?php echo $linha["posicao"] ?>"><br>

 

<input type="Submit" name="submit" value="Enviar Dados">

 

</form>

 

<?php

 

} else {

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

while ($linha = mysql_fetch_array($resultado)) {

 

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $linha["id"], $linha["nome"], $linha["sobrenome"]);

 

}

 

}

 

?>

 

 

</body>

 

</html>

 

Aqui, acabamos de colocar a informação do funcionário dentro de cada campo do formulário. Pode se dizer que foi fácil. Vamos criar um pouco mais... Precisaremos da habilidade de enviar o código editado para o banco de dados. Como foi feito antes, iremos usar o botão submit para ver se precisamos processar o formulário. Também note a diferença no comando de SQL.

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

if ($id) {

 

if ($submit) {

 

$sql = "UPDATE employees SET nome='$nome',sobrenome='$sobrenome',endereco='$endereco',posicao='$posicao' WHERE id=$id";

 

$resultado = mysql_query($sql);

 

echo "Dados atualizados.\n";

 

} else {

 

$sql = "SELECT * FROM employees WHERE id=$id";

 

$resultado = mysql_query($sql);

 

$linha = mysql_fetch_array($resultado);

 

?>

 

<form method="post" action="<?php echo $PHP_SELF?>">

 

<input type=hidden name="id" value="<?php echo $linha["id"] ?>">

 

Nome:<input type="Text" name="nome" value="<?php echo $linha["nome"] ?>"><br>

 

Sobrenome:<input type="Text" name="sobrenome" value="<?php echo $linha["sobrenome"] ?>"><br>

 

Endereço:<input type="Text" name="endereco" value="<?php echo $linha["endereco"] ?>"><br>

 

Posição:<input type="Text" name="posicao" value="<?php echo $linha["posicao"] ?>"><br>

 

<input type="Submit" name="submit" value="Enviar Dados">

 

</form>

 

<?php

 

}

 

} else {

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

while ($linha = mysql_fetch_array($resultado)) {

 

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $linha["id"], $linha["nome"], $linha["sobrenome"]);

 

}

 

}

 

?>

 

 

</body>

 

</html>

 

Voilá! Viu? Simples! Agora é hora de usar tudo junto e fazer um script "animal"!!!

 

Voilá

 

Vamos terminar esta lição colocando tudo que aprendemos dentro de uma página só que pode adicionar, editar e deletar dados do banco de dados. É uma extensão do que nós já cobrimos até agora e é bom para revisar. Vamos dar uma olhada:

<html>

 

<body>

 

 

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

if ($submit) {

 

// se não há ID, estamos adicionando ou editando

 

if ($id) {

 

$sql = "UPDATE employees SET nome='$nome',sobrenome='$sobrenome',endereco='$endereco',posicao='$posicao' WHERE id=$id";

 

} else {

 

$sql = "INSERT INTO employees (nome,sobrenome,endereco,position) VALUES ('$nome','$sobrenome','$endereco','$posicao')";

 

}

 

// executar SQL

 

$resultado = mysql_query($sql);

 

echo "Registro atualizado!<p>";

 

} elseif ($delete) {

 

// deletar

 

$sql = "DELETE FROM employees WHERE id=$id";

 

$resultado = mysql_query($sql);

 

echo "$sql Registro Deletado!<p>";

 

} else {

 

// isso acontece se a pessoa não apertar o "submit"

 

if (!$id) {

 

// listar os empregados

 

$result = mysql_query("SELECT * FROM employees",$db);

 

while ($linha = mysql_fetch_array($resultado)) {

 

printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PHP_SELF, $linha["id"], $linha["nome"], $linha["sobrenome"]);

 

printf("<a href=\"%s?id=%s&delete=yes\">(DELETAR)</a><br>", $PHP_SELF, $linha["id"]);

 

}

 

}

 

?>

 

<P>

 

<a href="<?php echo $PHP_SELF?>">ADICIONAR</a>

 

<P>

 

<form method="post" action="<?php echo $PHP_SELF?>">

 

<?php

 

if ($id) {

 

// Editar

 

$sql = "SELECT * FROM employees WHERE id=$id";

 

$resultado = mysql_query($sql);

 

$linha = mysql_fetch_array($resultado);

 

$id = $linha["id"];

 

$nome = $linha["nome"];

 

$sobrenome = $linha["sobrenome"];

 

$endereco = $linha["endereco"];

 

$posicao = $linha["posicao"];

 

// print the id for editing

 

?>

 

<input type=hidden name="id" value="<?php echo $id ?>">

 

<?php

 

}

 

?>

 

Nome:<input type="Text" name="nome" value="<?php echo $nome ?>"><br>

 

Sobrenome:<input type="Text" name="sobrenome" value="<?php echo $sobrenome ?>"><br>

 

Address:<input type="Text" name="endereco" value="<?php echo $endereco ?>"><br>

 

Position:<input type="Text" name="posicao" value="<?php echo $posicao ?>"><br>

 

<input type="Submit" name="submit" value="Enviar Dados!">

 

</form>

 

<?php

 

}

 

?>

 

 

</body>

 

</html>

 

Isso pode parecer um pouco complexo, mas para falar a verdade, não é. O script está divido em três partes. O primeiro if() vê se o botão "submit" foi clicado, e se ele foi, ele ve se o variável $id existe. Senão, então estamos adicionado um registro. Caso contrário, estaremos editando o registro.

 

Depois, nós vemos se o variável $delete existe. Se ele existir, deletaremos um registor. Veja que no primeiro if(), nós checamos um variável que veio como POST, e este está vindo como GET.

 

Finalmente, nós faremos a ação padrão que mostra a lista dos empregados e o formulário. Novamente, nós checamos a existência do variável $id. Se ele existe, nós vamos mandar um comando ao banco de dados para mostrar o registro. Caso contrário, um formulário em branco aparece.

 

Agora nós colocamos tudo que aprendemos dentro de um script. Usamos loops com o while() e o if(), e usamos o básico de SQL-- Select, Insert, Update e Delete. E, finalmente, nós consigos enviar dados de uma página à outra usando URL e formulários.

 

Aproveita agora para descansar. Se você estiver no trabalho, abra o bloco de notas com um monte de códigos digitados. Coloque uma mão no mouse, e apoie sua cabeça com a outra. Desligue o protetor de tela. Aí dá para você dormir um pouco que ninguém vai perceber! :) Você vai precisar do descanso, por que na próxima lição, faremos a página ficar mais "inteligente"!

 

Revisão

 

Nesta lição, você aprendeu...

 

* ...como usar loops;

* ...como usar o mysql_fetch_row() e o mysql_fetch_array() para mostrar os dados de um bancod de dados;

* ...como usar formulários para adicionar e editar dados de um registro;

* ...como usar querystrings (ex.: http://server.com/script.php3?id=4);

* ...como usar tudo isso em um script só; e

* ...como dormir no trabalho sem ninguem perceber! :)



Um Lugar para Tudo

 

Bem-vindo à terceira e última lição deste tutorial. Se você já conseguiu passar pelas primeiras duas lições, você já sabe o basico. Você já deve conseguir escrever scripts de PHP usando MySQL bem úteis. Agora nós iremos dar uma olhada em algumas funções de PHP úteis que devem fazer sua vida bem mais fácil! Primeiro, vamos dar uma olhada em arquivos "include".

 

Nós já sabemos o básico de include, correto? O conteúdo de um arquivo externo é referenciado e importado para o arquivo principal. É bem fácil-você chama um arquivo e ele já incluído. Quando fazemos isso em PHP, existem duas funções que precisam ser estudadas-include() e require(). A diferença entre essas duas funções é pequena, porém importante, por tanto, vamos dar uma olhada mais detalhada. A função require() finciona como XSSI; os arquivos são incluídos como parte do documento original, assim que é chamada a função, sem se importar de onde, no script, foi chamado o arquivo. Então, se você decidir colocar um require() dentro de um loop condicional, o arquivo externo será incluído mesmo se parte do loop condicional é falsa.

 

A função include() importa o arquivo referenciado cada vez que é encontrado. Se não for encontrado, o PHP não vai fazer nada. Isto quer dizer que você pode usar include in loops e condições, e eles vão funcionar como planejado.

 

Por último, se você usar o require() e o arquivo que você está incluíndo não existe, o seu script vai parar e criar um erro. Se você usar o include(), o seu script vai criar um aviso, mas continuará. Você pode testar isso você mesmo tentando seguir o script a seguir. Execute o script e depois substitua o include() com o require() e compare os resultados.

<html>

 

<body>

 

 

<?php

 

include("vazio.inc");

 

echo "Oi gente!";

 

?>

 

 

</body>

 

</html>

 

Eu prefiro usar o sufixo .inc com os meus arquivos include. Daí eu posso separá-los dos scripts normais. Se você fizer isso, configure o seu servidor para executar arquivos .inc como arquivos de PHP. Ao contrário, é capaz de hackers adivinharem o nome dos seus arquivos include e vê-los no navegador como arquivos texto. Isso pode ser ruim se o arquivo contém informações importantes, tais como senhas de bancos de dados.

 

Então para que devemos usar arquivos include? Simples-colocar informações comuns à todas as páginas dentro deles. Coisas tipo cabeçalhos HTML, rodapés, código de conexão à banco de dados, funções feitas pelo desenvolvedor, etc. Vamos ver como eles funcionam. Copie o código a baixo, cole em um arquivo texto e salve como header.inc.

<?php

 

$db = mysql_connect("localhost", "root");

 

mysql_select_db("mydb",$db);

 

?>

 

 

<html>

 

<head>

 

<title>

 

<?php echo $title ?>

 

</title>

 

</head>

 

<body>

 

<center><h2><?php echo $title ?></h2></center>

 

Depois crie um outro arquivo chamado footer.txt e coloque tags como rodapés.

 

Agora vamos criar um terceiro arquivo que é o script. Coloque o código a seguir.

<?php

 

$title = "Testando 123";

 

include("header.inc");

 

$resultado = mysql_query("SELECT * FROM employees",$db);

 

echo "<table border=1>\n";

 

echo "<tr><td>Nome</td><td>Posição</tr>\n";

 

while ($linha = mysql_fetch_row($resultado)) {

 

printf("<tr><td>%s %s</td><td>%s</tr>\n", $linha[1], $linha[2], $linha[3]);

 

}

 

echo "</table>\n";

 

include("footer.inc");

 

?>

 

Viu o que aconteceu? Os arquivos são incluídos no arquivo principal e depois a coisa toda aparece como uma só! Veja como o variável $title foi definido antes. Veja o que aconteceu. O título da página mudou. Agora você pode usar o header.inc em todos os seus scripts, e só terá que modificar o variável $title de uma página para a outra.

 

Usando combinações de includes, HTML, condições, e loops, você pode criar scripts complexos com pouco código.

 

Validação Simples

 

Imagine por um momento que nós temos nosso banco de dados configurado tudo direitinho, e agora estamos recebendo informações de usuários que serão inseridas no nosso banco de dados. Agora, vamos imaginar que você tem um campo no banco de dados que requere entrada numérica, tipo preço. Finalmente, imagine que o seu aplicativo está se quebrando todo tentando descobrir o que fazer porque algum mongol colocou texto naquele campo! MySQL não quer ver texto naquela parte do comando SQL.

O que fazer? Validar!

 

Validação simplismente quer dizer que examinaremos dados, normalmente de um formulário HTML, e ver se ele cabe em um modelo. Isso pode ser ter certeza que um campo não está em branco ou até mesmo ver se um e-mail digitado em um campo é válido.

 

Validação pode ser feito no lado do servidor ou no lado do cliente. PHP é usado para o lado do servidor, enquanto JavaScript, VBScript, etc, foi feita para validar no lado do cliente. Já que este artigo é sobre PHP, nós vamos aprender validação para o lado do servidor.

 

Vamos ignorar nosso banco de dados por um momento e concentrar na validação em PHP. Se você quiser, você pode adicionar outros campos ao nosso banco de dados facilmente usando o comando ALTER do MySQL.

 

Existem várias funções úteis em PHP que nos deixam validar dados. Uma função simples que podemos usar é a strlen(), a qual nos fala o tamanho do variável.

 

A função mais complexa seria a ereg(), a qual simplismente valida expressões regulares. Não vou ir fundo nesse assunto, pois vários livros já foram escritos sobre este assunto, porém darei alguns exemplos na próxima parte.

 

Vamos começar com um exemplo simples. Nós vamos ver se um variável existe ou não.

<html>

 

<body>

 

 

<?php

 

if ($submit) {

 

if (!$nome || !$sobrenome) {

 

$error = "Favor preencher todos os campos!";

 

} else {

 

// processar formulário

 

echo "Obrigado!";

 

}

 

}

 

if (!$submit || $error) {

 

echo $error;

 

?>

 

<P>

 

<form method="post" action="<?php echo $PHP_SELF ?>">

 

CAMPO 1: <input type="text" name="nome" value="<?php echo $nome ?>"><br>

 

CAMPO 2: <input type="text" name="sobrenome" value="<?php echo $sobrenome ?>"><br>

 

<input type="Submit" name="submit" value="Enviar Dados">

 

</form>

 

<?php

 

} // end if

 

?>

 

 

</body>

 

</html>

 

A chave para este script está nas condições. O a primeira vê se o botão submit foi apertado. Se foi, ele vai para a próxima condição, onde ele vê se os variáveis $nome e $sobrenome existem. O símbolo || quer dizer OR, e o símbolo ! quer dizer NOT. Nós poderíamos ler aquela condição da seguinte maneira: Caso os variáveis $nome e $sobrenome não existirem, então atribua o seguinte valor ao variávei $error.

 

Agora, vamos extender as coisas um pouquinho checando se uma string é de um certo tamanho. Isso seria ideal para senhas, já que você não quer que um preguiçoso digite uma senha de uma ou duas letras. Seria melhor se fosse seis, ou oito letras.

 

A função usada para isso, como você já sabe, é a strlen(). Ela simplismente retorna um número que é igual ao número de caracteres no variável que está sendo testado. Aqui eu modifiquei o script acima para ver qual é o tamanho do $nome e $sobrenome.

<html>

 

<body>

 

 

<?php

 

if ($submit) {

 

if (strlen($nome) < 6 || strlen($sobrenome) < 6) {

 

$error = "Favor preencher todos os campos!";

 

} else {

 

// processar formulário

 

echo "Obrigado!";

 

}

 

}

 

if (!$submit || $error) {

 

echo $error;

 

?>

 

<P>

 

<form method="post" action="<?php echo $PHP_SELF ?>">

 

CAMPO 1: <input type="text" name="nome" value="<?php echo $nome ?>"><br>

 

CAMPO 2: <input type="text" name="sobrenome" value="<?php echo $sobrenome ?>"><br>

 

<input type="Submit" name="submit" value="Enviar Dados">

 

</form>

 

<?php

 

} // end if

 

?>

 

 

</body>

 

</html>

 

Execute este script e tente digitar seis ou menos letras para ver o que acontece. É simples e ainda sim é eficiente.

 

Validação Não-Tão-Simples

 

Vamos conversar um pouco sobre expressões regulares com a dupla ereg() e eregi() (po, se fosse dupla certaneja faria sucesso!). Como falei antes, elas podem ser bem complexas ou simples, dependendo no que você precisa.

 

Usando expressoões regulares, você pode examinar uma string e procurar por modelos ou variações para ver se eles passam em um critério. O mais comum involve checar um e-mail para ver se ele é válido.

 

Não vou ir tão fundo nos mistérios de expressões regulares; darei exemplos. Você pode usar o mesmo formulário que criamos na página anterior.

 

Primeiro, vamos Ter certeza que apenas texto foi inserido no campo. Essa expressão regular retorna TRUE caso o usuário digitou caracteres de A à Z; números não são permitidos.

if (!ereg("[a-Z]", $nome) || !ereg("[a-Z]", $sobrenome)) {

 

Agora vamos extender essa expressão para ver se a string tem de quatro à seis caracteres. [[:alpha:]] ]e um jeito fácil para checar por caractéres alfabéticos. Os números são os números de ocorrência. E veja que o ^ e o $ indicam o começo e o fim da string.

if (!ereg("^[[:alpha:]]{4,6}$", $nome) || !ereg("^[[:alpha:]]{4,6}$", $sobrenome)) {

 

Finalmente, vamos construir uma expressão regular que vai checar a validade de um endereço de e-mail.

 

Eu tirei esse de um site. Sim, é bem amedrontoso, não? J

if (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.

 

'@'.

 

'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.

 

'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) {

 

Não fique muito tempo olhando nisso. Apenas vá para a próxima página.

 

Funções

 

Opa! Gostou da doze de regex? Legal, não? Agora imagina usar isso em vários scripts... Imagine então encontrar um errinho naquela bagunça. Depois tendo que substituir o mesmo código em todas aquelas páginas. Mas, lógicamente, existe um jeito melhor.

 

Lembra quando conversamos sobre arquivos include no começo desta lição? Eles nos permitirão criar uma função e incluí-la em várias páginas. Deste jeito, quando quisermos modificar o código, nós precisamos modificar apenas um arquivo.

 

Mas para isso, precisaremos de usar funções.

 

Nós já usamos funções algumas vezes. Toda vez que mandamos um comando para o banco de dados, ou quando vimos o tamanho de uma string, estávamos usando funções. Estas funções são parte do PHP. Se você é um programador com mais experiência e sabedoria, você pode fazer suas próprias funções. Mas isto já um pouquinho avançado para este tutorial. Vamos criar funções que estarão dentro do nosso scirpt.

 

Uma função é simplismente um pedaço de código que passamos um ou mais valores, ou parametro. A função então processa a informação e retorna um valor. A função pode ser simples ou complexa, mas desde que podemos enviar um valor e receber um tambem, nós não precisamos nos preocupar sobre a complexidade da função.

 

Funções em PHP se comportam mais ou menos como funções em C. Quando definimos as funções, nós devemos especificar os valores que a função deve receber. Parece ser meio complicado, mas isso previne algumas coisas esquisitas de acontecerem no final das contas. Isso é feito por que as variáveis dentro de uma função são conhecidas como variáveis privadas. Ou seja, eles apenas existem dentro da função. Por exemplo, você pode ter uma variável chamada $var na sua função e uma outra com o mesmo nome no script. As duas poderiam ter valores diferentes e co-existirem sem problemas. Contudo, isto não é recomendável. Imagine, daqui a seis meses, quando você voltar para editar o scripts! Existem excessões para todas as regras, mas isso já está muito avançado para este tutorial.

 

Então vamos criar uma função. Vamos começar com algo bem simples. Vamos precisar dar um nome e dizer quais variáveis devem se enviados como parametros. Também precisaremos de definir a função antes de a chamarmos.

<html>

 

<body>

 

 

<?php

 

function addnum($prim, $seg) {

 

$novonum = $prim + $seg;

 

return $novonum;

 

}

 

echo addnum(4,5);

 

?>

 

 

</body>

 

</html>

 

Voilá! Primeiro criamos nossa função. Note como definimos dois novos variáveis; o $prim e o $Seg. Quando chamamos a função, cada variável será assinalado um valor, baseado na ordem que eles foram chamados. Neste caso, 4 vai para o $prim e 5 vai para $Seg. Depois, nós simplismente adicionamos os dois numeros e retornamos o resultado. Return quer dizer enviar o resultado. No final do script, deve aparecer o numero 9.

 

Vamos criar algo um pouco mais útil para nosso script de employees. Que tal algo que toma conta de todos os erros?

<html>

 

<body>

 

 

<?php

 

function do_error($error) {

 

echo "Houve um erro...<br>";

 

echo "$error.\n<br>";

 

echo "Contate o adiministrador do site.";

 

die;

 

}

 

if (!$db = @mysql_connect("localhost","user", "password")) {

 

$db_error = "Impossível conectar ao banco de dados";

 

do_error($db_error);

 

}

 

?>

 

 

</body>

 

</html>

 

Antes de executar isto, tente desligar o MySQL, ou use um username bem esquisito. Você vai receber um erro bem legal. Se você é do tipo que observa bastante, você deve ter notado a arroba (@) antes do mysql_connect(). Isso faz com que você obtenha dados só da função. Você também pode ver que passamos um variável dentro da função.

 

Se lembra que falei que funções usam seus próprios variáveis? Isso foi uma mentiririnha! Você pode criar variáveis fora de uma função que eles serão poderão ser acessados dentro da função. Você pode criar uma função para pegar os registros de um banco de dados e mostrar os resultados em várias páginas. Você não vai querer ter que um identificador para a conexão do banco de dados para a função toda hora. Nesta situação você pode fazer o código de conexão disponível como um variável global. Por exemplo.

<html>

 

<body>

 

 

<?php

 

function db_query($sql) {

 

global $db;

 

$resultado = mysql_query($sql,$db);

 

return $resultado;

 

}

 

$sql = "SELECT * FROM tabela";

 

$resultado = db_query($sql);

 

?>

 

 

</body>

 

</html>

 

Esta função é bem básica, mas o que estou tentando dizer é que você não precisa enviar o $db toda vez que você for chamar a função. Você pode fazê-la disponível usando a palavra global. Você pode definir outras variáveis como global na mesma linha; você só precisa separá-la com uma vírgula.

 

Finalmente, você pode parecer um profissional maneiro usando parametros opcionais. Para isso, você precisa definir o valor padrão para a variável, depois, quando você chamar a função sem especificar um valor para o parametro, o padrão será adotado. Mas se você especificar um valor, ele será passado.

 

Confuso? É simples; por exemplo, quando você conecta em um banco de dados, você quase sempre conecta ao mesmo servidor e, também, você provavelmente usará o mesmo username e senha. Contudo, algumas vezes você precisará conectar em um banco de daddos diferente.

<html>

 

<body>

 

 

<?php

 

function db_connect($host = "localhost", $user="username", $pass="senha") {

 

$db = mysql_connect($host, $username, $password);

 

return $db;

 

}

 

$dbvelho = db_connect();

 

$novo_host = "server.com";

 

$novo_db = db_connect($novo_host);

 

?>

 

 

</body>

 

</html>

Maneiríssimo, né? Pense como você poderia usar funções no seu script. Você poderia usá-las para checar dados, etc. Eu, pessoalmente, gosto muito de usá-las. São bastante úteis.

 

Agora, tudo que você tem que fazer é seguir meus conselhos! ;-)

 

Au Revoir

 

Quando o assunto é banco de dados, há muito o que aprender. Se você não aprendeu ainda, eu sugiro que você encontre um livro bom sobre designs de banco de dados e aprenda a montar um banco de dados sólido em qualquer plataforma. É muito útil e vai te tirar bastante dor de cabeça no final das contas. Também aprenda bastante sobre MySQl. É complexo, mas também é interessante. É de graça e tem bastante documentação. Aprenda sobre a estrutura das tabelas, tipos de dados, e SQL. Você pode conseguir coisas impressionantes com SQL, se você souber o bastante.

 

Finalmente, PHP. O site do PHP tem praticamente tudo o que você precisa. Desde manual de instruções até uma PHP mailing list. Um ótimo jeito de aprender PHP é estudar os exemplos do manual. Dê uma olhada nos links que eu coloquei. São bons, apesar de serem em inglês.

 

Boa sorte!

 

Créditos : 70% Luiz S. Barbosa & 30% Raphael Lion.

Tutorial Dedicado ao Chapolin.

 

Abraço;

Raphael Lion.

Link para o comentário
Compartilhar em outros sites

Putz ai ta certo... depois dessa explicação ultra relevante.. confirmei minha carreira hehehe Xtibia é Cultura xDD

Parabéns ae pelo tópico fico massa...

 

 

 

Abraços HenNEt :cool:

Link para o comentário
Compartilhar em outros sites

Tópico ótimo.

 

Depois faço a leitura completa.

 

Muito completo, como sempre Raphael Lion

sempre trazendo novidades pra nosso fórum.

 

 

Paulo

Editado por XPaulo
Link para o comentário
Compartilhar em outros sites

  • 2 years later...
  • 1 year later...
×
×
  • Criar Novo...