PHP: Lição 3

Postado por 4luada, 31 de março de 2014, às 21:52

0 Comentários

Continuando com meu estudo de PHP, comecei a estudar MySQL para manipular database. Segui pelo guia de PHP do w3schools, que tem uma seção de Database que explica o básico de MySQL. O site tem um tutorial voltado completamente para SQL, mas deixarei para outro momento.

O PHP tem a capacidade de manipular databases, e MySQL é um sistema de database frequentemente usada em conjunto com PHP para se manipular databases na web. O MySQL roda no servidor, é rádpido e confiável, compilável em várias plataformas, e é gratuito.

O MySQL guarda dados em tabelas, de forma a ser muito útil na hora de classificar os dados. Ele usa queries para fazer pedidos de dados.

No meu caso, o WAMP já instalou o MySQL no servidor PHP.

Conexão com servidor MySQL

A primeira coisa a se fazer antes de qualquer acesso ao database é estabelecer uma conexão ao servidor MySQL através da função:
mysqli_connect([<servidor>],[<username>],[<senha>],[<db_name>]).
A conexão é interrompida automaticamente ao final do script, mas para fechar a conexão antes, há a função:
mysqli_close(<conexão>).

<?php
$conection = mysqli_connect("example.com","peter","abc123","my_db");
if (mysqli_connect_errno()){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_close($conection); ?>

OBS: SQL não é case-sensitive, ou seja, não diferencia letras maiúsculas de minúsculas.

Criando Database, Tabelas, Chaves Primárias e Registros

Antes de tudo, qualquer comando em SQL é feita em PHP através do comando:
mysqli_query(<conection>, <sql_statement>);

Novo database
O comando para se criar um novo database é:
CREATE DATABASE <db_name>

Nova tabela
Ao se criar uma nova tabela, já se define os nomes das colunas (campos) e os tipos de dados que cada uma irá conter. O comando para se criar uma nova tabela é:
CREATE TABLE <table_name>(<col_name> <type>, ...)
Dentro do parênteses se define as colunas da tabela. Confira os tipos dos dados aqui. Os principais tipos são:

  • String de tamanho fixo (até 255): CHAR(<max_length>)
  • String grande: TEXT
  • Inteiro: INT[(<max_digits>)]
  • Ponto flutuante: FLOAT[(<max_digits>, <max_decimal_digits)]
  • Data (formato YYYY-MM-DD): DATE()
  • Hora (formato HH:MM:SS): TIME()
  • Data e Hora (formato YYYY-MM-DD HH:MM:SS): DATETIME()

Chave Primária
Toda linha da tabela deve ter um campo "Chave Primária", usada para identificar de modo único e exclusivo cada linha da tabela. Portanto cada valor de Chave Primária deve ser único, não pode repetir e nem ser null. Normalmente a "chave primária" é um número ID (de identificação), cujo valor é criado automaticamente, e incrementado automaticamente ao se criar um novo registro, tudo isso adicionando AUTO_INCREMENT depois de definir o tipo de dado da coluna. E para garantir que o valor do campo não é nulo com NOT NULL. Essas declarações podem ser usadas para qualquer campo, não só para o campo da Chave Primária. Para definir um campo como Chave Primária, utiliza-se a declaração PRIMARY KEY(<coluna>).

$sql_statement = "CREATE TABLE Persons (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    name CHAR(30),
    age INT )";

Novo Registro
Um registro corresponde a uma linha da tabela de database, contendo valores para os campos (colunas). Para se inserir um novo registro, utiliza-se o comando:
INSERT INTO <table> [(<column>,...)] VALUES (<value>)

Manipulando dados

Selecionar Registros
Para se selecionar dados do database, utiliza-se o comando:
SELECT <colunas> FROM <table>
as colunas do comando determinam quais dados de cada registro é necessária (se forem todas as colunas, pode-se usar o asterisco '*'). Após obter a seleção de dados, pode-se usar a função mysqli_fetch_array(<sql_selection>) para obter uma linha como uma array, usando o nome da coluna como chave. Note o exemplo:

$selection = mysqli_query($conection,"SELECT * FROM Persons");
while($row = mysqli_fetch_array($selection)){
    echo $row['name'] . " is " . $row['age'] . &quto;years old.";
    echo "<br>";
}

Para filtrar uma seleção, limitando-a para apenas registros que cumpram um determinado critério, utiliza-se o termo WHERE na seleção. Por exemplo:

SELECT * FROM Persons WHERE age=20

O termo ORDER BY <coluna> ASC/DESC ordena os registros selecionados de forma ascendente (default) ou descendente pelo campo determinado. É possível ordenar por mais de uma coluna - neste caso, a segunda coluna é usada apenas se os valores da primeira coluna forem iguais.

Atualizar Registros
Para se editar um dado em um registro, utiliza-se o comando:
UPDATE <table> SET col1=val1, col2=val2, ... [WHERE colX=valX AND/OR colY=valY]
o termo WHERE especifica quais registros devem ser editados. Se o termo for omitido, todos os registros serão modificados.

Deletar Registros
Para deletar registros, há o comando:
DELETE FROM <table> WHERE col=value
onde o WHERE especifica os registroa a serem deletados. Se o termo for omitido, todos os registros serão deletados.

Marcadores: ,


PHP: Lição 2

Postado por 4luada, 25 de março de 2014, às 20:54

0 Comentários

Como continuação do meu aprendizado de PHP, resolvi usar o tutorial de um dos meus sites favoritos para HTML, CSS, Javascript e JQuery, o W3Schools. Não farei um passo a passo desta vez, apenas anotações e resumo do tutorial disponível no site.

Sintaxe

Script
Um script pode ser colocado em qualquer parte da página, e fica sempre entre as tags "<?php" e "?>".
Cada linha de código deve ser finalizada com um ponto-vírgula ';', assim como em javascript.
Funções, classes e palavras-chaves (if, else...) não são case-sensitive. Ou seja, "echo", "Echo" e "ECHO" são iguais. Contudo, todas as variáveis são case-sensitive

Comentários
Há três formas de se comentar um bloco de texto do código. Eles são:

  • // Comentário de 1 linha
  • #Comentário de 1 linha
  • /* Comentário de n linhas, sendo n >= 1 */

Variáveis

Variáveis server para guardar informações. Toda variável tem o formato "$<nome_da_variavel>", ou seja, iniciar com um '$'. Seu nome pode ser constituído por letras, números ou '_', exceto a primeira letra, que não pode ser um número. O nome das variáveis são case-sensitive.

Não há como declarar uma variável, a não ser atribuindo um valor a ela. E não é necessário especificar o tipo de informação que essa variável irá guardar. O tipo da variável é definido pelo tipo de dado que ela está guardando no momento.

Abrangência da variável
A abrangência da variável pode variar dependendo de onde ela tiver sido declarada. Se dentro de uma função, ela é uma variável local e só poderá ser acessada dentro de tal função. Se fora de qualquer função, ela será uma variável global, e só será acessada fora de funções, a não ser que seja através de um método especial: todas as variáveis globais são guardadas numa Array especial $GLOBALS[<index>], e você pode acessá-las de qualquer lugar usando o nome da variável global como index. Exemplo: uma variável global $glub pode ser acessada de dentro de uma função usando $GLOBALS['glub'].

Variável estática
É um tipo de variável que persiste, mesmo depois da função terminar, de modo que, caso a função seja chamada novamente, o valor final da última chamada ainda estará mantido na variável na nova chamada.

Variáveis globais - Superglobais
Várias das variáveis pré-definidas são Superglobais, ou seja, são sempre acessíveis de qualquer lugar do código normalmente, sem precisar usar nenhum método especial. Saiba mais. São elas:
$GLOBAL - array usada para acessar variáveis globais de qualquer lugar do script, sendo a Key o nome da variável global.
$_SERVER - guarda informações sobre cabeçalhos, paths e localizações de scripts, sendo a Key a palavra-chave da informação procurada.
$_REQUEST - usado para coletar dados submetidos por um formulário. Quando o usuário submete dados ao clicar no botão de submit, os dados do formulário são enviados para o arquivo especificado pelo atributo action da tag form. E esse arquivo pode acessar os dados por essa variável global, usando o nome (atributo name) do campo do formulário como índice.
$_POST - normalmente utilizado para coletar dados de formulários cujo método é post. Ou também é usado para passar variáveis. O índice pode ser o nome do campo do formulário.
$_GET - também pode coletar dados de formulários que usam o método get. E também pode coletar valores enviados pela url.

Tipos de dados

String
Sequência de caracteres delimitados por aspas (simples ou duplas).
Strings possuem métodos próprios:

  • strlen(<string>): retorna o comprimento de uma string (número de caracteres)
  • strpos(<string1>,<string2>): retorna a posição da string2 na string1 (contagem a partir do zero). Se não encontrar a string2, a função irá retornar FALSE.
  • ...(etc)...

Integer
Um número inteiro, seja positivo ou negativo. Pode ser especificado em três formatos: decimal, hexadecimal (prefixo: 0x) ou octal (prefixo: 0).

Float
Um número com parte decimal ou na forma exponencial (ex.: 2.3e3 = 2.3^3).

Boolean
Um valor booleano é TRUE (verdadeiro) ou FALSE (falso), apenas. São normalmente usados em testes condicionais.

Arrays
Uma array é capaz de guardar vários valores numa única variável, e você pode acessar cada um ao se referir a uma número de índice.
A função array() é usada para se criar uma array, e existem três tipos de arrays: índice numérico, associativo (Keys) ou multi-dimensionais (arrays que contém arrays). Para se descobrir o "comprimento" de uma array (número de elementos) de uma array, pode-se utilizar a função count(). Saiba mais. Dentre os métodos das Arrays, alguns servem para ordenar seus elementos (saiba mais).
Ex.: $lista = array("item 1", "item 2"); ou $lista[0] = "item1";
Ex.: $dict = array("key1"=>"val1", "key2"=>"val2"); ou $dict['key1']="val1";
(verifique o exemplo do uso de foreach() para rodar por todo $dict)
Ex.: $lista2 = array(
    array("lista2-1",1,2),
    array("lista2-2",2,3)
);

Objects/Class
É uma classe, uma estrutura que guarda dados (propriedades) E informações de como processar esses dados (métodos). É o único caso em que se deve ser explicitamente declarado usando a palavra-chave "class".
Ex.:
class Car {
    var $color;
    function Car($color="green"){
        this->color = $color;
    }
    function what_color(){
        return $this->color;
    }
}

Null
Esse é um valor usado para representar que uma variável não possui valor, ou para esvaziar uma variável.

Constants
Uma variável constante que guarda um valor simples que não pode ter seu valor modificado pelo script. Ela é definida pela função define(<string_name>, <value>[, <bool_case-sensitive>]). O terceiro parâmetro é opcional - seu valor-padrão é FALSE, e determina se NAME==name.
Ex.: define("GREETING", "Welcome!");

Formatação

Data
Leia aqui. Há uma função date() que imprime uma data numa determinada formatação.

Operadores

Operadores Aritméticos
- Adição: '+' (ou '+=' como operador de atribuição)
- Incremento: '++<var>' (pré-incremento*) ou '<var>++' (pós-incremento*)
- Subtração: '-' (ou '-=' para operação de atrobuição)
- Decremento: '--<var>' (pré-decremento*) ou '<var>--' (pós-decremento*)
- Multiplicação: '*' (ou '*=' como operador de atribuição)
- Divisão: '/' (ou '/=' como operador de atribuição)
- Resto da divisão: '%' (ou '%=' como operador de atribuição)

* No pré-(de/in)cremento, primeiro a conta é feita e então o valor é retornado. No pós-(de/in)cremento, o valor é retornado e só depois a conta é feita.

Operadores de Strings
- Concatenação: '.' (ou '.=' como operador de atribuição)

Operadores de Comparação
- Igualdade: '==' (TRUE se valor igual)
- Identidade: '===' (TRUE se mesmo valor e mesmo tipo)
- Inegualdade: '!=' ou '<>' (TRUE se valores diferentes)
- Não-Identidade: '!==' (TRUE se valor diferente OU tipo diferente)
- Maioridade: '>' (TRUE se maior), '>=' (TRUE se maior ou igual)
- Minoridade: '<' (TRUE se menor), '<=' (TRUE se menor ou igual)

Operadores Lógicos
- 'and' ou '&&' (TRUE se ambas as expessoões forem TRUE)
- 'or' ou '||' (TRUE se pelo menos uma das expessões for TRUE)
- 'xor' (TRUE se apenas uma das expressões for TRUE, não ambas)
- '!' (TRUE se a expressão for FALSE)

Operadores de Arrays
- União: '+' (une duas arrays, e Keys repetidas não se sobre-escrevem)
- Igualdade: '==' (retorna TRUE se ambas arrays tiverem as mesmas Keys e valores correspondentes iguais)
- Identidade: '===' (retorna TRUE se, além dos pares Keys-valores serem iguais, os pares estiverem na mesma ordem e forem dos mesmos tipos)
- Inegualdade: '!=' ou '<>' (retorna TRUE se as arrays não forem iguais)
- Náo-Identidade: '!==' (retorna TRUE se as arrays não forem idênticas)

Comandos

Outputs
ECHO - pode imprimir uma ou mais strings contendo texto ou código html que será interpretado pelo browser. Seu(s) parâmetro(s) pode(m) ser:

  • echo $str_var;
  • echo "<p>text</p>";
  • echo "text1", "text2", "text3";
  • echo "text $str_var";
  • echo "text {$array_var[0]}";

PRINT - imprime uma string e retorna 1 (portanto é um pouco mais lento que echo). Seus parâmetros são iguais ao do echo, exceto o terceiro caso, já que esse comando aceita apenas um único parâmetro.

Condicionais
IF()/[ELSE] - executa o bloco determinado pelo IF apenas se a condição for verdadeira, e executa o bloco do ELSE caso contrário (se especificado). Saiba mais.

SWITCH() - executa determinados blocos de códigos dependendo do valor atribuído à variável usada como parâmetro. Saiba mais.

Loops
[DO]/WHILE() - executa um bloco de código repetidamente enquanto a condição do WHILE for verdadeira. Se o DO for especificado, executa o código uma vez antes de fazer a primeira verificação, senão, faz a verificação antes mesmo da primeira execução do bloco. Saiba mais.

FOR() - é usado para rodar um código um número determinado de vezes. Existe a variância FOREACH(), que roda um loop para cada Key de uma Array. Saiba mais.

Includes/Require
Com os comandos include <file>; ou require <file>; é possível acrescentar scripts de PHP durante a execução. A diferença entre um e o outro é ao falhar, o primeiro produz um alerta mas o script continua executando, enquanto que o segundo gera um erro fatal e interrompe a execução.

Funções

Uma função não é executada automaticamente, mas sim, quando chamada. Ela é definida declarando-a com a palavra "function". Seu nome pode começar com letra ou '_', mas não com números, e os nomes são case-insensitive.

Argumentos
Informações passadas às funções, para variáveis locais da função. Pode-se passar inúmeros argumentos separados por vírgulas entre si.
Um argumento pode ter um valor padrão, que será adotado caso a chamada não atribua nenhum valor para o argumento.

Retorno
Pode-se usar a expressão "return" para que a função retorne um determinado valor à chamada.
Exemplo:
function <nome_da_funcao> ($<arg>, $<default_arg>=<default_val>, ...){
    <bloco_de_codigo>
    return <value/arg>;
}

Arquivos
fopen() - usado para abrir arquivos em determinados modos (read, write, ...). Para tratar erro ao tentar abrir o arquivo, pode-se usar OR <code_tratamento> na mesma linha de código. Usa-se a função fclose() para fechar um arquivo aberto. Lê-se uma linha do arquivo com a função fgets(), e pode-se ler uma letra de cada vez usando fgetc(), e é possível checar final de arquivo com a função feof(). Saiba mais sobre file system functions.

Cookies
Cookies são pequenos arquivos guardados no computador do usuário pelo servidor. Saiba mais.
setcookie() - define um cookie (deve ser usado antes da tag <html>). Essa função automaticamente codifica no formato URL - para prevenir isso, use a função setrawcookie().
Para acessar os cookies existentes, se utiliza a superglobal $_COOKIE. E para deletar um cookie, basta redefinir a data de validade para uma data passada.

Seções
Saiba mais.
session_start() - inicia a sessão (deve ser chamado antes da tag <html>).
Os dados de sessões podem ser acessados pela superglobal $_SESSION. E para se destruir uma única sessão, pode-se usar a função unset(<session>), ou pode-se destruir todas as sessões de uma vez com session_destroy().

Erros
Para interromper um script após o levantamento de um erro, existe a função die([<error_message>]). É comum também se criar funções customizadas para error handler, e de define a função de tal forma com a função:
set_error_handler(<nome_da_funcao_customizada>[, <tipo_de_erro>]) - se o tipo de erro não for especificado, a função será usada para manusear qualquer tipo de erro.
É possível levantar um erro pelo código com a função trigger_error(<msg_de_erro>[, <tipo_de_erro>]).
Quando um erro é levantado, o PHP automaticamente arquiva o log do erro (no sistema de logs do servidor, ou em um arquivo, dependendo de como estiver configurado em php.ini). Para arquivar o log em um arquivo específico ou um local remoto, existe a função error_log(). Saiba mais.

Exceções
Uma exceção muda o fluxo da execução do script quando um erro é levantado. Quando uma exceção é desencadeada, o estado do script é salvo, o programa irá executar o exception handler e depois, dependendo, o handler pode retornar ao ponto salvo do script, ou terminar a execução, ou retomar o script de um ponto diferente. Saiba mais. Os passos para se manipular uma exceção é:
1o: TRY - bloco que contém um código que pode desencadear uma exceção. Se a exceção não for ativada, a execução do script continuará normalmente, se não, a exceção será thrown.
2o: THROW - desencadeia uma exceção, e deve ter pelo menos um método catch.
3o: CATCH - um bloco que tratará a exceção, recebendo as informações referentes à exceção.
É possível definir uma função para manusear exceções que não têm catch, pela função set_exception_handler(<funcao>).

Formulários

Segurança: Método
É importante processar os dados de formulários com segurança, de forma a proteger os dados de seus usuários de hackers e spammers. Portanto, saiba quando usar $_GET e $_POST.
Informações passadas pelo método GET é visível a todos (na URL), e a quantidade de informação passada por esse método é limitada (2000 caracteres). Contudo ele permite que a página seja marcada (bookmark).
Já informações passadas por POST é inacessível para outros (valores são passados incorporados na solicitação da página), e o número de informações passadas é ilimitado. Além disso, o método suporta funcionalidades avançadas que podem aumentar ainda mais a segurança no envio de dados. Contudo, o método não possibilita a marcação (bookmark) da página. O método POST é o mais aconselhável para o envio de dados por formulário.

Validação
A página sobre validação de formulários dá várias dicas de segurança, e vale a pena dar uma relida. Citarei apenas os mais comuns ou importantes.
A função htmlspecialchars() converte caracteres especiais para o formato HTML. Isso ajuda a prevenir que hackers explorem o código, injetando códigos (cross-site scripting attacks) a formulários. Portanto, é crucial passar todas as variáveis através dessa função.
Outra coisa importante a se fazer com os dados submetidos é remover espaços em branco desnecessários (com a função trim()) e remover barras invertidas (com a função stripslashes()).

Erros e Campos obrigatórios
Pode-se verificar se um campo do formulário foi enviado vazio com a função empty().
Para se verificar se o campo possui apenas letras ou algum determinado conjunto de caracteres, pode-se usar a função preg_match(), que verifica se uma string (segundo parâmetro) segue um padrão (passado no primeiro parâmetro). Ex.: para verificar se um campo contém um e-mail válido (padrão de e-mail): preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email).

Uploading
É possível que um usuário carregue um arquivo através de um formulário. Neste caso, utiliza-se o atributo enctype na tag form para definir a o "content-type" dos dados submetidos pelo formulário. No caso de arquivos, recomenda-se usar dados binários, portanto, o valor do atributo seria "multipart/form-data". Já a entrada para se selecionar o arquivo é o <input type="file">, que já apresenta um botão "browse" para se selecionar um arquivo do computador ao lado do campo.
Para se acessar o arquivo uploaded usa-se a superglobal $_FILE[<name_of_input>][<atributo>], sendo o atributo um dado específico do arquivo, podendo ser "name" (nome do arquivo), "type" (tipo do arquivo), "size" (tamanho em bytes do arquivo), "tmp_name" (nome da cópia temporária guardada no servidor) e "error" (código do erro levantado ao fazer o upload do arquivo).
upload do arquivo cria uma cópia temporária dele na pasta temp do servidor, e a cópia some ao final do script. Para salvar o arquivo, é necessário copiá-lo para outro local. Primeiro, pode-se chegar se já existe uma cópia de mesmo nome com file_exists("<path>/<file_name>") que retorna um boolean. E para copiar: move_uploaded_file(<temp_file>,<new_file>).

Filtros
Filtros servem para validar, testar e filtrar dados provenientes de fontes inseguras. Deve-se SEMPRE filtrar todo e qualquer dado externo! Existem diversas funções para se filtrar dados:
filter_var() - filtra uma variável com um filtro específico
filter_var_array() - filtra várias variáveis com o mesmo ou diferentes filtros
filter_input - obtém uma variável input e a filtra
filter_input_array - obtém várias variáveis e as filtra com o mesmo ou diferentes filtros
Essas funções podem aceitar parâmetros optativos, que são as opções ou bandeiras (flags), que adicionam novas opções de filtragem. Eles devem ser arrays associativas (objetos) com o nome "options".
Existem dois tipos de filtros: validating e sanitizing, sendo o primeiro para validar dados submetidos seguindo regras de formatação estritas e retornando true ou false; enquanto que o segundo permitem ou proíbem caracteres específicos numa string, e sempre retorna a string.
Ainda é possível usar uma função customizada para filtrar dados usando o filtro FILTER_CALLBACK (ou usar uma função pré-existente). A função customizada é especificada como se fosse uma opção, ou seja, numa array associativa na chave "options". Saiba mais e veja exemplos.

E-mail
É comum se enviar dados de um formulário para um endereço de e-mail, e essa tarefa é facilitada pela função:
mail(<destinatario>, <assunto>, <msg>[, <headers>][, <parametros>])
Contudo, usar um hardcoded e-mail é vulnerável a ataques de spammers. Um meio de evitar esse problema é "filtrar" (saiba mais) os dados inseridos com:
filter_var(<dado>, FILTER_SANITIZE_EMAIL) - remove caracteres ilegais (para um e-mail)
filter_var(<dado>, FILTER_VALIDATE_EMAIL) - valida um valor como um endereço de e-mail

Fim da segunda lição

Desta vez saí da lição sabendo muito mais. Infelizmente o tutorial não tem muitas tarefas práticas. O passo seguinte será aprender MySQL para finalmente tentar fazer um projeto próprio.

Marcadores: ,


PHP : Lição 1

Postado por 4luada, 10 de março de 2014, às 17:32

0 Comentários

Hoje comecei a aprender PHP por conta. PHP e MySQL são duas linguagens muito exigidas na área de desenvolvimento Web, então devo trabalhar bastante com elas por enquanto para poder ter mais chances de obter um emprego. Estou aprendendo por conta, já que não tinha nenhuma matéria sendo oferecida esse semestre que poderia pegar esse semestre que ensinasse alguma delas.

Procurei alguns tutoriais na internet. O Google me retornou vários sites com a procura "Tutorial PHP" e selecionei alguns que pareciam mais promissores. Eu prefiro tutoriais detalhados que prossigam passo a passo, e expliquem cada etapa, o por quê de fazer cada coisa. Assim eu aprendo melhor como fazer meus próprios códigos do que ficar só copiando códigos prontos.

Passo Zero: Antes de tudo...

PHP é uma linguagem de script de servidor, e é uma ferramenta poderosa para construir páginas da web dinâmicas e interativas rapidamente.
PHP é uma amplamente usada, gratuita, e eficiente alternativa à competidores como o ASP da Microsoft.
-- from w3schools 

Antes de se começar a aprender PHP, é imperativo que se tenha no mínimo um conhecimento básico de HTML, CSS e Javascript. Para saber mais sobre PHP, recomendo a página do w3schools.

A grande maioria dos tutoriais que eu uso estão em inglês. Saber inglês para se programar é muito bom, já que muitas das linguagens são em inglês, e a maioria da ajuda e tutoriais que você poderá encontrar pela internet estarão em inglês.

Primeiro passo: Pré-requisitos

Claro que não tenho nenhum servidor. Eu iria desenvolver tudo localmente, então iria precisar de um servidor web local, como o famoso Apache. E ainda iria precisar instalar o PHP e (apesar de opcional, é altamente recomendável) o MySQL. Há diversos caminhos a se seguir, e eu escolhi instalar os três (servidor, PHP e MySQL) de uma vez com o WAMP. Meu sistema é windows, então essa era uma boa opção. Mas existem outras opções.

Para instalar o WAMP, você pode seguir esse tutorial: Aprenda a instalar um servidor Web completo com o WampServer. Mas a instalação é bem simples. E li o tutorial do Codelic Hackers para ter noção de configuração do WAMP, apesar de não tê-lo seguido fielmente. Por exemplo, não mudei a porta e nem coloquei senha no meu PHP. Mas não há muitos segredos e nem necessidades para se configurar o servidor, ainda mais inicialmente. Quem sabe no futuro. Para ter mais uma noção sobre o servidor, leia também esse tutorial do Home and Learn.

O mais importante a se saber nesta etapa é que qualquer projeto novo deve ser salvo na subpasta \www da pasta WAMP. E ele pode ser acessado pelo endereço http://localhost/<path>/<file.php>

Segundo passo: Editor

Bom, com tudo pronto para programar e testar minhas páginas em PHP, está na hora de começar a aprender o PHP em si.

Para desenvolver as páginas PHP, estou usando o Adobe Dreamweaver, que é o mesmo que uso para desenvolver meus sites em HTML, CSS e javascript. Mas no próprio tutorial há um link com diversos editores compatíveis com php.

Para iniciantes, eu recomendo um editor simples de texto, como o gEdit, que agora tem uma versão compatível para windows, e mais tarde, você mesmo pode escolher um editor de sua preferência.

Terceiro passo: Um Simples Tutorial

Primeiro, irei seguir o tutorial oficial do PHP.

O que eu preciso?
Nessa etapa, o tutorial lista os pré-requisitos para se começar a programar PHP. São as mesmas coisas que passei no Primeiro passo.

Sua Primeira Página PHP
Coloquei o script à prova, digitando caractere por caractere ao invés de copiar e colar. Salvei o arquivo direto na pasta \www do WAMP e acessei pelo endereço http://localhost/ola.php, e deu tudo certo.
Ler as páginas anexas, como a sobre Sintaxe básica do PHP, espalhadas pelo tutorial são muito importantes para o melhor entendimento da linguagem. Mas uma página importante para se ler é sobre as variáveis em PHP. Não entendi algumas coisas, e outras estavam muito complicadas, portando deixei para depois, quando eu tivesse mais conhecimento da linguagem.
Também verifiquei a função phpinfo(). Não dizia muito, todas aquelas configurações. Mas é bom saber que essa função existe.

Algo Útil
Nessa parte, li sobre Variáveis Superglobais e testei o exemplo dado, que identifica o navegador do visitante. O código deu diversas respostas estranhas, identificando diversos navegadores. Mas tudo bem, sem problemas. Também é importante saber sobre o Escopo de variáveis, ou seja, até onde uma variável tem .
Depois li sobre Variáveis Reservadas.
Essa seção também mostra como misturar php com html. Bem interessante, mas num código mais complexo, pode ser uma dor de cabeça...

Tratando Formulários
Nesta seção aprendi a lidar com informações obtidas através de um formulário, usando-as por variáveis auto-globais $_POST, se usado o método POST. Também é possível usar os métodos GET com a auto-global $_GET. Existe também a auto-global $_REQUEST, que contém todos os dados do formulário, não importando o método - ele contém a mescla de GET, POST, COOKIE e FILE.
A função import_request_variable(<string type> [, <string prefix>]) importa as variáveis GET, POST, COOKIE (se listadas no parâmetro type) para o escopo global.

É interessante ler sobre Variáveis de fontes externas, mas apenas de fazer os exemplos do tutorial para melhor entendimento. Essa página também leva à página sobre Tipos, que explica sobre a determinação dos tipos de variáveis, como verificar o tipo da informação contida na variável. e como forçar a conversão de uma variável para um certo tipo

Usando códigos antigos com a nova versão do PHP
Nesta seção eu revi as variáveis auto-globais, um dos itens que mudaram a partir do PHP 4.1.0, e sobre Escopos de variáveis. Também li um pouco sobre Variáveis Pré-definidas.

Fim da primeira lição

Obviamente não saí da primeira lição sabendo tudo de como programar em PHP, mas criei uma boa base, obtendo apenas alguma noção sobre a linguagem. A seguir, vou buscar guias mais completos de PHP.

Marcadores: ,