Você está na página 1de 164

PHP Bsico

Hello World!

Hello World!

O PHP uma linguagem server side, ou seja, uma linguagem que executa no servidor, a parte da webapp que executa no servidor, em contraste com a parte que executa no navegador Se voc precisa gerar contedo dinmico, armazenar dados por longo perodo de tempo, processar requisies do usurio, ento voc precisa do PHP

Hello World!

O modo de execuo do PHP consideravelmente simples O usurio requisita uma dada URL que est no servidor web O servidor web verifica que a URL requisitada se refere a um contedo PHP e chama o handler do PHP para tratar o contedo O handler pode ser um mdulo do servidor web (caso do Apache) ou programa CGI separado do servidor que ser executado pelo mesmo

Hello World!

O handler ou interpretador PHP interpreta o cdigo PHP e gera a pgina HTML resultado O servidor web envia a pgina resultante do PHP para o navegador O navegador interpreta o HTML recebido e gera o resultado visual para o usurio

Hello World!

Todo contedo php deve estar dentro dos delimitadores php, para que interpretador saiba onde est o cdigo que ele deve executar
<?php ?>: modo padro ?> <? ?>: modo embebido, que pode ter problemas com alguns servidores web como o IIS

Um cdigo PHP no precisa necessariamente retornar algum contedo. Porm se o fizer, o contedo estar sempre em HTML

Hello World!

A sintaxe de php bem parecida com a da linguagem C Cada comando php deve ser precedido por um ; (ponto e vrgula)

comando_php_1; comando_php_2; comando_php_N;

Os blocos de cdigo como if, else, while, for, switch, etc devem utilizar as chaves { } para delimitar o bloco

A exceo a regra para quando o bloco contm apenas 1 comando, da mesma maneira que acontece em C Para a consistncia do cdigo, evite usar a exceo!

Hello World!

Os comentrios de cdigo podem ser de 2 maneiras

Linha nica: antecedidos pelos caracteres // ou #


// Este um comentrio de linha nica # Este tambm um comentrio de linha nica

Vrias linhas: antecedidos pelos caracteres /* e precedidos pelos caracteres */

/* Este um comentrio de vrias linhas */

PHP tambm suporta funes e classes, podendo utilizar tanto o paradigma funcional como o orientado a objetos

Hello World!

E tambm possui ponteiros, aqui chamados de referncias, com a diferena que so mais fceis de lidar do que os ponteiros em C

Ainda assim, voc no poder utilizar objetos no alocados!

Outro detalhe importante do php a verso do interpretador. De uma verso para outra, a API pode mudar consideravelmente, ento voc precisar se manter atento a isto Agora est na hora de fazermos nosso Hello World! em PHP

Hello World!

Abra o netbeans e aps ele carregar, v em Arquivo Novo Projeto (ou clique no boto Novo Projeto) Agora dentro de Categorias, escolha PHP Dentro de Projetos escolha Aplicativo PHP Clique em Prximo

Hello World!

Hello World!

Agora, em Nome do projeto, escreva o nome do projeto. No nosso caso ser curso_php Observe que em Pasta de cdigos-fonte est o caminho fsico (path) para o projeto do nosso site Em Verso do PHP est a verso do interpretador PHP e caso voc tenha mais de um interpretador PHP instalado, voc poder escolher qual usar

Isso muito til para dar manuteno em sistemas php mais velhos

Hello World!

Em Codificao padro voc fornece qual ser a codificao do sistema. Deixe em UTF 8. Clique em Prximo

Hello World!

Hello World!

Agora voc precisa apenas clicar em Finalizar

Hello World!

Agora com o projeto aberto, vamos entender algumas abas bem teis do netbeans Na parte superior esquerda, est a aba Projetos. Por ela possvel navegar dentro do diretrio do seu projeto (e ver arquivos e diretrios internos do mesmo)

Hello World!

Na parte inferior esquerda, est a aba de navegao dentro do seu arquivo: ela mostra estruturas HTML/XHTML, funes, classes, objetos alocados, etc Em arquivos maiores, essa aba ajuda e muito na navegao dentro do arquivo

Hello World!

Na parte centro-direita do seu editor est o editor de cdigo, ou seja, aqui que voc far a mgica acontecer

Hello World!

Um cdigo php deve sempre estar dentro de um <?php ?> ou <? ?> (esse ltimo, no caso de php embutido) Vamos agora ento, escrever nosso primeiro cdigo php. Dentro do <?php ?> escreva echo Ol mundo!; Se atente para as (aspas duplas) e o ; (ponto e vrgula). Eles so partes de linguagem e devem estar a.

Hello World!

Hello World!

Agora que temos nosso primeiro cdigo, vamos execut-lo. Abra o Firefox (pode ser qualquer outro navegador, mas vamos usar este por enquanto) e na barra de endereos digite: http:localhost/~aluno/curso_php Pressione Enter e ver que um Ol mundo! apareceu no site.

Hello World!

O que voc digitou na barra de endereos do navegador, a URI que representa o site:

localhost representa o nome do servidor onde est o site. No caso, o servidor local ~aluno a diretiva que informa o servidor web que o document root (ou raiz de documentos - memorizem esse termo!) est dentro de um diretrio de usurio (alguma coisa como /home/user/public_html) e no no document root padro (geralmente /var/www/htdocs). curso_php o diretrio onde est o site, a partir do document root

Hello World!

Quando voc pressiona Enter no seu navegador, ele dispara uma requisio HTTP para o servidor local, que ir buscar os dados referentes a URI passada e retorn-los par ao navegador Durante o processamento da URI, o servidor descobre que o site se trata de um programa php, ento ele executa o interpretador php interno ao servidor (como mdulo) para processar o cdigo php e gerar o HTML que ser enviado como resposta

Hello World!

Assim que o navegador receber os dados do servidor, ele ir process-los (processar o HTML) e lhe mostrar o resultado

Variveis em PHP

Variveis em PHP

Toda linguagem que se preze se utiliza de variveis para armazenar temporariamente a informao a ser processada Obviamente PHP no diferente Em php, uma varivel comea com o caractere especial $ (cifro)
$variavel;

E h algumas regras para se criar variveis em php

Variveis em PHP

A primeira delas que voc no pode criar uma varivel sem utilizar o caractere especial $

$variavel; - Isto uma varivel variavel; - Isto no uma varivel

A segunda que voc no pode comear o nome da varivel com nmeros A terceira, que o uso de caracteres especiais desaconselhvel

A varivel $o poder no executar em determinadas verses do php, ento evite este tipo de coisa!

Variveis em PHP

A quarta que php possui tipagem dinmica ento voc no precisa e nem deve declarar os tipos das variveis

int $var1; - Isto no um cdigo php vlido

Mesmo que a tipagem seja dinmica, voc ainda no poder realizar operaes exticas como somar uma string com um inteiro por causa deste tipo de situao que existe o casting

$var1 = (int) $var2; - Este cdigo coloca em var1 o casting para inteiro do que est em var2

Variveis em PHP

A quinta que toda declarao de varivel um comando php e deve estar seguida de ; (ponto e vrgula) H alguns tipos primitivos de dados em php como int, float, boolean e string O tipo int para armazenar nmeros inteiros

$var_int = 1; $var_float = 1.0;

O tipo float para armazenar nmeros reais

O tipo boolean para valores booleanos

Variveis em PHP

O tipo string para armazenar cadeias de caracteres (strings)

$var_string = string;

H dois tipos de strings em php: as que esto dentro de aspas simples (') e as que esto dentro de aspas duplas () A diferena est em como o php processa a string

Como o php possui por padro a operao de concatenao de strings, possvel concatenar uma string dentro de outra, como se fosse um fluxo de dados convencional

Variveis em PHP
$str1 = string 1; $str2 = vou concatenar com $str1; echo $str2; O cdigo acima produzir como sada: vou concatenar com string 1

Uma string entre aspas simples diz ao php que aquela string no contm caracteres especiais ou concatenao e que portanto no precisa ser processada a fim de gerar um resultado Uma string entre aspas duplas faz exatamente o contrrio

Variveis em PHP

Obviamente, strings entre aspas duplas, por exigirem pr-processamento, possuem execuo mais lenta do que strings entre aspas simples

Dica de desempenho: s utilize strings entre aspas duplas quando voc precisar que a string seja pr processada

Existem dois tipos de variveis no php: as do usurio e as do sistema As variveis do usurio so aquelas que voc cria quando est codificando em php

Variveis em PHP

As variveis do sistema so aquelas que ele mesmo fornece e que possuem um uso bem definido Das variveis do sistema, vamos nos ater a algumas, que so as mais utilizadas $_GET uma varivel que contem um array com todos os dados enviados pela requisio atravs do mtodo HTTP GET $_POST uma varivel que contem um array com todos os dados enviados pela requisio atravs do mtodo HTTP POST

Variveis em PHP

$_REQUEST uma varivel que contem um array com todos os dados enviados pela requisio HTTP, independente do mtodo utilizado $_SESSION uma varivel que contem um array com todos os dados de sesso da aplicao $_COOKIE uma varivel que contem um array com todos os cookies enviados no cabealho da requisio HTTP

Variveis em PHP

$GLOBALS uma varivel que contem um array com todos os dados globais da aplicao $_FILES uma varivel que contem um array com todos os arquivos enviados pelo requisio HTTP $_SERVER uma varivel que contem um array com todos os dados referentes ao servidor e o ambiente de execuo $argc uma varivel que contem o nmero de argumentos passados para o php

usada quando o php executado em linha de comando

Variveis em PHP

$argv uma varivel que contem um array com todos os dados passados para o php

usada quando o php executado em linha de comando

Cada uma destas variveis de sistema tem seu uso dentro de uma webapp As variveis $_SESSION e $_COOKIE podem ser utilizadas para guardar informaes de estado da aplicao (sesso), como por exemplo, usurio logado ou no

A diferena est onde a informao armazenada

Variveis em PHP

Informaes armazenadas na varivel $_SESSION ficam dentro do servidor Informaes armazenadas na varivel $_COOKIE ficam dentro do navegador

Em alguns casos a $_SESSION mais aconselhvel. Em outros, a $_COOKIE.

As variveis $_GET, $_POST, $_REQUEST e $_FILES servem para acessar os dados enviados pelo navegador ao servidor, como arquivos upados, dados de formulrios, dados de requisies AJAX, etc

Variveis em PHP

A varivel $_SERVER til quando voc precisa conferir algo no ambiente de execuo, como o suporte a uma tecnologia necessria a sua aplicao (um mdulo PHP por exemplo) ou mesmo a verso do PHP A varivel $GLOBALS til para acessar informaes que voc registrou como globais na aplicao

Nem sempre possvel registar uma varivel global em php, ento cuidado com isto!

Isto nos leva a outra questo importante no php que o escopo de uma varivel

Variveis em PHP

O escopo de uma varivel est relacionado a onde ela definida

Se ela uma varivel de funo ou mtodo ela s ser acessvel dentro da funo ou mtodo onde ela foi definida Se ela definida em um arquivo X, fora de objeto ou funo, ela valer dentro de todo o arquivo A regra geral que a varivel est disponvel para os cdigos seguintes a declarao dela

Considere o cdigo a seguir

Variveis em PHP
<?php $a = 1; function teste() { $b = 2; } ?>

No cdigo acima $a uma varivel global ao script e $b uma varivel local a funo teste. Se voc tentar acessar $b fora de teste() um erro ser gerado Essa questo do escopo das variveis importante, no s por causa dos erros decorrentes do mal uso, mas tambm porque se os escopos forem bem definidos, no necessrio utilizar a varivel $GLOBALS para se criar uma varivel global

Variveis em PHP

necessrio tambm um certo cuidado com o escopo, principalmente quando h incluso de arquivos

Considere o arquivo a.php:


<?php $a = 'valor A'; ?>

Considere o arquivo b.php:


<?php $a = 'valor B'; include 'a.php'; echo $a; ?>

O arquivo b.php define a varivel $a e depois inclui o arquivo a.php que tambm define a varivel $a. Ao tentar imprimir o valor de $a, no ser impresso 'valor B', mas sim 'valor A', visto que a.php redefine $a e o mesmo foi includo em b.php (o que equivale a copiar o cdigo de a.php e colar em b.php) aps a definio de $a

Variveis em PHP

Em webapps complexas, onde a incluso de arquivos acontece a todo momento, muito importante entender e definir adequadamente os escopos das variveis para evitar este tipo de erro Alm disso, tambm possvel criar variveis globais na aplicao sem a utilizao da varivel de sistema $GLOBALS, que dependendo da verso do php, vem bloqueada por padro Agora vamos nos divertir um pouco!

Variveis em PHP

Crie 2 variveis que recebam dois nmeros inteiros e apresente a soma (operador +) destes nmeros da tela

Para imprimir uma varivel, basta usar o comando: echo $variavel;

Crie 2 variveis que recebam dois nmeros reais e apresente a subtrao destes nmeros na tela Crie 2 variveis que recebem duas strings e apresente o resultado concatenado na tela

Para concatenar strings utilize o operador . (ponto): $var3 = $var1 . $var2

Variveis em PHP

Alm dos tipos primitivos, o php tambm possui alguns tipos mais elaborados como o array e o object O tipo array funciona como os vetores em C, com a diferena que o ndice no precisa ser necessariamente um nmero inteiro

No caso, o array cria um vetor associativo (equivalente ao mapeamento de C++)

Este tipo em especfico um dos mais teis do php, estando presente nas variveis de sistema e em nas de usurio em diversos momentos

Variveis em PHP

Geralmente, toda vez que voc precisar lidar com vrios dados ao mesmo tempo, voc provavelmente precisar utilizar arrays Alm disso, possvel tambm ter um array dentro de outro array, o que alis, bem til H basicamente duas maneiras de se utilizar um array em php

Alocando ele estaticamente, com todos os dados que faro parte dele de uma s vez Alocando ele dinamicamente, inserindo os dados a medida que eles forem necessrios

Variveis em PHP
$array1 = array (0 => 'a', 1 => 'b', 2 = 'c');

O cdigo acima, coloca em $array1 um vetor de trs posies alocado estaticamente


$array['c1'] = 0; $array['c2'] = 1; $array['c3'] = 3;

O cdigo acima, cria em $array um vetor dinmico de 3 posies

Observe que as regras utilizadas para as outras variveis, como a forma de nomear e a tipagem dinmica tambm valem para os arrays Observe tambm que em nenhum dos casos voc precisa declarar o tamanho do vetor

Variveis em PHP

Um detalhe importante que a regra das aspas para strings, quando o array usa strings como chave tambm vlida

$array['chave'] possui execuo mais rpida do que $array[chave]

E, por se comportar como um mapeamento, um array pode armazenar tipos diferentes


$arr[] = 0; $arr[] = 1.0; $arr[] = 'str'; $arr[] = array(0 => 'a', 1 => 'b');

$arr um array que contm um inteiro, um float, uma string e um outro array

Variveis em PHP

Para acessar uma informao dentro de um array, utiliza-se o nome da varivel que contm o array e a chave para a informao que se deseja acessar
$array = array('a' => 0, 'b' => 1, 'c' => 2); echo $array['a'];

O cdigo acima ir imprimir 0 na tela

Para arrays com chaves inteiras geradas dinamicamente, a contagem comea em 0


$arr = array(1, 2, 3, 4, 5, 6); echo $arr[0];

O cdigo acima ir imprimir 1 na tela

Variveis em PHP

Pelo exemplo anterior, observe que mesmo em arrays estticos a declarao da chave opcional

Quando a declarao de chave no feita, o prprio php se encarrega de gerar uma chave inteira, comeando a partir do 0

Se a informao acessada estiver dentro de um array que est em outro array, o acesso acontece de maneira similar
$array = array('a' => 0, 'b' => array(0 => 1)); echo $array['b'][0]; isso imprime 1 na tela

Variveis em PHP

Embora o php permita que voc acesse uma chave string sem utilizar aspas, isso fortemente desaconselhado visto que este caso consegue ter pior desempenho do que o uso de aspas duplas
$arr = array('a' => 0, 'b' => 1); echo $arr[b]; no faa isso!

Alm do array, temos como tipo complexo o object que na verdade apenas uma referncia, um ponteiro para a instncia de um objeto

Variveis em PHP

Estas variveis funcionam de maneira parecida com as correspondentes em C++


$obj = new Object(); $obj->method(); $obj->atrib;

Elas recebem em um primeiro momento um ponteiro para uma instncia de um objeto Acessam os mtodos e atributos do objeto atravs do operador -> (hfen seguido de maior)

As regras para estas variveis so as mesmas para os outros tipos de variveis

Variveis em PHP

PHP tambm possui um sistema gerenciador de memria que trata automaticamente as alocaes e desalocaes de objetos Entretanto, voc pode forar a desalocao de um objeto utilizando o comando unset()

$obj = new Object(); aloca $obj; unset($obj); desaloca $obj;

Em ocasies onde uma mesma varivel utilizada vrias vezes (em loops por exemplo) o comando unset() muito til, exatamente para evitar referncias perdidas

Variveis em PHP

Alm de utilizar o unset() para variveis de objeto, voc pode utiliz-lo com qualquer outra varivel

$a = 1; crie $a do tipo inteiro com valor 1 unset($a); limpe $a $a = array(0, 1, 2, 3, 4, 5); crie $a como array unset($a); limpe $a $a = new ClasseA(); crie $a como referncia de objeto unset($a); limpe $a

No curso avanado, veremos mais detalhes sobre orientao a objetos e variveis de objeto em php

Variveis em PHP

Crie um array que receba dois valores inteiros, dois floats, uma string e imprima o segundo valor float Crie um array dinmico que receba 1 array com trs nmeros inteiros, 1 array com dois nmeros floats e um inteiro e 1 array com uma string e um array com 3 nmeros inteiros. Depois imprima do primeiro array o terceiro nmero, do segundo o primeiro nmero e do terceiro, a string e o segundo nmero do array interno

Variveis em PHP

Crie um array que receba dois valores inteiros, dois floats, uma string e imprima o segundo valor float
$arr = array(0, 1, 2.0, 3.0, 'str'); echo $arr[3];

Variveis em PHP

Crie um array dinmico que receba 1 array com trs nmeros inteiros, 1 array com dois nmeros floats e um inteiro e 1 array com uma string e um array com 3 nmeros inteiros. Depois imprima do primeiro array o terceiro nmero, do segundo o primeiro nmero e do terceiro, a string e o segundo nmero do array interno
$arr[] = array(0, 1, 2); $arr[] = array(1.0, 2.0, 3); $arr[] = array('str', array(4, 5, 6)); echo $arr[0][2]; echo $arr[1][0]; echo $arr[2][0]; echo $arr[2][1][1];

Operadores em PHP

Operadores em PHP

PHP possui vrios operadores, aplicveis as variveis Os operadores aritmticos servem para realizar clculos e so aplicveis as variveis que contm dados inteiros ou floats, ou seja, nmeros O operador + (mais) realiza a soma entre duas variveis O operador (menos) realiza a subtrao entre duas variveis

Operadores em PHP

O operador * (asterisco) realiza a multiplicao entre duas variveis O operador / (barra) realiza a diviso entre duas variveis O operador % (porcentagem) realiza o mdulo (ou resto da diviso inteira) entre duas variveis O operador (menos) ainda pode ser utilizado com apenas uma varivel, para obter o oposto ou negao do valor:
$a = 7; echo -$a; isso imprimir -7 na tela

Operadores em PHP

O operador = (igual), evidentemente, serve para atribuir um valor a um varivel e pode ser utilizado em conjunto com outros operadores O conjunto += (mais e igual) realiza uma soma com atribuio

$var += algo equivale a $var = $var + algo


$a = 7; $a += 7; echo $a; isso ir imprimir 14

Os operadores de subtrao (-), multiplicao (*) e diviso (/) podem ser utilizados em conjunto com o operador de atribuio (=)

Operadores em PHP

O operador . (ponto final) o operador de concatenao de strings e s pode ser aplicado a variveis que contenham strings
$a = 'str1'; $b = ' str2'; $c = $a . $b; echo $c;

O cdigo acima ir imprimir str1 str2 na tela

Este operador tambm pode ser utilizado em conjunto com o operador de atribuio
$a = 'str1'; $a .= ' str2'; echo $a;

O cdigo acima ir imprimir str1 str2 na tela

Os operadores lgicos servem para aplicar operaes lgicas entre variveis booleanas

Operadores em PHP

O operador and serve para verificar se duas variveis so verdadeiras (AND lgico) O operador or serve para verificar se pelo menos uma de duas variveis verdadeira (OR lgico) O operador xor serve para verificar se uma de duas variveis verdadeira (XOR lgico) O operador ! (exclamao) serve para negar uma varivel (NOT lgico)

Operadores em PHP

O operador && (2x letra e comercial) faz a mesma coisa que o operador and, ou seja, serve para verificar se duas variveis so verdadeiras (AND lgico) O operador || (2x pipe) faz a mesma coisa que o operador or, ou seja, serve para verificar se pelo menos uma de duas variveis verdadeira (OR lgico) Esses dois operadores esto no php simplesmente para facilitar o aprendizado de php para quem conhece C/C++ ou java

Operadores em PHP

Os operadores de comparao servem para comparar valores de variveis, podendo as variveis comparadas serem do mesmo tipo ou no O operador == (2x igual) serve para verificar se duas variveis possuem o mesmo valor O operador === (3x igual) serve para verificar se duas variveis possuem o mesmo valor e so do mesmo tipo

Operadores em PHP

O operador != (exclamao igual) serve para verificar se duas variveis possuem valores diferentes O operador <> (maior menor) faz a mesma coisa do != O operador !== (exclamao 2x igual) verifica se duas variveis possuem valores diferentes e so de tipos diferentes O operador < (menor) verifica se o valor de uma varivel menor do que a outra

Operadores em PHP

O operador > (maior) verifica se o valor de uma varivel maior do que a outra O operador <= (menor igual) verifica se o valor de uma varivel menor ou igual do que a outra O operador >= (maior igual) verifica se o valor de uma varivel maior ou igual do que a outra Os operadores bit a bit servem para realizar operaes sobre os bits das variveis

Operadores em PHP

O operador & (letra e comercial) realiza a operao AND binria, retornando os bits 1 de duas variveis O operador | (pipe) realiza a operao OR binria, retornando os bits 1 de pelo menos uma de duas variveis O operador ^ (acento circunflexo) realiza a operao XOR binria, retornando os bits 1 de uma de duas variveis O operador ~ (til) realiza a operao NOT binria, invertendo os bits de uma varivel

Operadores em PHP

O operador << (2x menor) realiza a operao binria LSHIFT, o deslocamento dos bits para a esquerda de uma varivel O operador >> (2x maior) realiza a operao binria RSHIFT, o deslocamento dos bits para a direita de uma varivel Temos ainda em php os operadores de incremento e decremento O operador ++ (2x mais), dependendo de onde posicionado na varivel, realiza o pr incremento ou o ps incremento

Operadores em PHP

++$a; pr incremento $a++; ps incremento

O operador -- (2x menos), dependendo de onde posicionado na varivel, realiza o pr decremento ou o ps decremento

--$a; pr decremento $a--; ps decremento

Os operadores de array servem para aplicar determinadas operaes sobre variveis que contenham arrays

Operadores em PHP

O operador + (mais), realiza a unio entre dois arrays


$a = array(0,1,2); $b = array(1,2,3,4); $c = $a + $b;

O array $c ser composto pela unio de $a e $b, que (1,2,4) Lembre-se da teoria de conjuntos da matemtica!

O operador == (2x igual) verifica se dois arrays possuem os mesmos pares chave/valor O operador === (3x igual) verifica se dois arrays possuem os mesmos pares chave/valor e os pares chave/valor so do mesmo tipo em ambos

Operadores em PHP

O operador != (exclamao igual) verifica se dois arrays no possuem os mesmos pares chave/valor O operador <> (menor maior) faz a mesma coisa que o != O operador !== (exclamao 2x igual) verifica se dois arrays no possuem os mesmos pares chave/valor e os pares chave/valor no so do mesmo tipo em ambos E ainda h outros operadores em php, com funcionalidades diversas

Operadores em PHP

O operador @ (arroba) suprime mensagens de erro O operador instanceof verifica se uma varivel instncia de uma classe O operador `` (2x grave) executa um comando shell e retorna o resultado para uma varivel
$output = `ls -al`; echo $output;

O cdigo acima executa o comando ls -al no diretrio onde o script est sendo executado e imprime o resultado na tela

I/O em PHP

I/O em PHP

Por ser uma linguagem voltada a web, o I/O em PHP realizado considerando a realidade da web

Requisies HTTP so o mtodo de entrada Respostas HTTP so o mtodo de sada

Uma vez que sabemos isto, fica fcil perceber que os mtodos de input em PHP so equivalentes aos mtodos HTTP A sada evidente um contedo HTML

I/O em PHP

H alguns mtodos HTTP porm os mais comuns so o GET e o POST O PHP implementa ambos atravs de arrays

$_GET o array para os dados enviados atravs do mtodo HTTP GET $_POST o array para os dados enviados atravs do mtodo HTTP POST

Logo, se queremos enviar dados para o PHP devemos gerar uma requisio HTTP que contenha estes dados

I/O em PHP

Estas requisies podem ser geradas de algumas maneiras


Acessando uma url com parmetros via navegador Submetendo um formulrio Enviando uma requisio AJAX (que na verdade uma sub requisio)

Os parmetros de uma requisio esto sempre organizados na forma


param=valor

E o caractere & utilizado como separador de parmetros

I/O em PHP
param1=valor1&param2=valor2&paramN=valorN

Se os dados forem enviados via formulrio, o prprio navegador escreve a requisio com os parmetros, de acordo com a url fornecida no atributo action e os nomes dos elementos de entrada de dados dentro do formulrio
<form action=a.php method=get> <input type=text id=inpt0 name=inpt1 value=teste /> </form>

O cdigo acima gera uma requisio HTTP GET para a pgina a.php enviando como parmetro inpt1=teste Observe que foi utilizado o name do input no o id!

I/O em PHP

Uma observao importante sobre o atributo action que ele no precisa necessariamente conter uma url Ele tambm pode utilizar o caractere ? (interrogao) para fazer com que os dados do formulrio sejam enviados para a pgina atual
<form action=? method=get> <input type=text id=inpt0 name=inpt1 value=teste /> </form>

O formulrio acima gerar uma requisio para a url da pgina atual, seguida de ?inpt1=teste Esta mesma estrutura pode ser utilizada para outros elementos como as ncoras (<a>)

I/O em PHP

Se o formulrio anterior utilizasse o mtodo POST o navegador tambm faria o mesmo trabalho de escrever os parmetros, porm os mesmos seriam enviados em uma requisio secundria, ao invs de j serem embutidos na URL Se os dados forem enviados via URL ou AJAX, voc ter que escrever os parmetros manualmente

Via URL voc coloca o caractere ? (interrogao) para separar a URL dos parmetros

www.site.com?param=valor

I/O em PHP

Via AJAX voc usa a API

$.ajax({ url: 'www.site.com', data: 'param=valor'})

Para o PHP o mtodo s importa na hora de saber qual array utilizar, $_GET ou $_POST, para acessar os dados E mesmo assim, voc pode utilizar o $_REQUEST caso voc no saiba o mtodo HTTP utilizado para enviar os dados

S usem o $_REQUEST quando estritamente necessrio, pois acessos neste array, so mais lentos que no $_GET ou $_POST, visto que o mesmo contm mais dados que os outros dois

I/O em PHP

Para acessar um dado qualquer enviado via mtodo HTTP basta acessar a posio do vetor correspondente ao dado que deseja acessar

Considere a requisio GET


http://localhost?param0=0&param1=1

Para acessar param0: $var = $_GET['param0']; Para acessar param1: $var = $_GET['param1']; Se a requisio fosse POST, bastava trocar o $_GET por $_POST:

param0: $var = $_POST['param0']; param1: $var = $_POST['param1'];

I/O em PHP

H outros arrays para os demais mtodos HTTP, como o $_FILES que armazena os arquivos enviados pelo usurio ao servidor via HTTP Entretanto, vamos nos ater aos dois mais comuns: $_GET e $_POST Uma vez que os dados enviados esto acessveis dentro do PHP, voc poder utilizlos e process-los como qualquer outra varivel

I/O em PHP

A sada de dados no PHP realizada via HTML, sendo que h duas maneiras

Escreve o HTML via PHP (modo difcil) Embute o PHP no HTML (modo fcil)

Para escrever o HTML via PHP basta gerar o contedo HTML dentro de uma string e depois simplesmente imprimir esta string com o comando echo
$html = Contedo HTML aqui dentro; echo $html;

I/O em PHP

Esta forma de sada, embora funcional no a opo ideal Primeiro, ela te obriga a escrever toda a estrutura do HTML dentro do PHP, evitando que voc tire proveito do que IDE's como o Netbeans oferecem acerca de edio web Segundo, ela dificulta o entendimento do contedo da sada como um todo Terceiro, ela mistura cdigo PHP com cdigo HTML e muitas vezes, cdigo CSS

I/O em PHP

Dos trs contras, o pior o terceiro, especialmente quando voc precisa estilizar o HTML

Encontrar o elemento onde aplicar uma dada classe CSS ser consideravelmente mais complexo se o HTML estiver dentro de uma string PHP E de quebra, voc atrapalha o trabalho do webdesigner (caso no seja voc o responsvel pela parte visual da aplicao)

O ideal utilizar a forma embutida do PHP, porm obviamente, o custo disso maior

I/O em PHP

Na primeira forma, o interpretador PHP s ter que interpretar cdigo PHP, ou seja, no ter que realizar paradas e pular cdigo no PHP no documento Entretanto, os benefcios desta forma sobrepem os contras
<?php $html = Contedo HTML aqui dentro; echo $html; ?>

Quem mais entendvel? O cdigo que est acima ou que est abaixo?
<html> <head></head> <body> <?php ... ?> </body> </html>

I/O em PHP

Ao embutir o cdigo PHP dentro do cdigo HTML voc no s torna a implementao mais limpa, como no atrapalha o trabalho de outros provveis membros de sua equipe Para inserir um cdigo PHP dentro de um HTML basta inserir os tokens que indicam a presena de cdigo PHP dentro do contedo HTML e salvar o arquivo com a extenso *.php ou com a extenso que seu webserver reconhecer como sendo de arquivos com contedo PHP

I/O em PHP

importante ressaltar aqui a diferena entre embutir cdigo PHP dentro do cdigo HTML de PHP embutido

Embutir cdigo PHP dentro do HTML na verdade inserir cdigo HTML dentro de um arquivo PHP, porm fora do cdigo PHP, ou seja, fora dos tokens que indicam a presena de cdigo PHP, de maneira a indicar que tal cdigo deve ser desconsiderado pelo interpretador PHP PHP embutido inserir cdigo PHP dentro dos tokens de PHP embutido, que so simplesmente formas simplificadas do token padro

I/O em PHP

Uma vez que entendemos esta diferena, podemos falar a respeito dos tokens Um deles ns j vimos no incio deste curso

<?php Seu cdigo php aqui ?>

Este o token padro, que funciona sem qualquer problema em qualquer interpretador php, em qualquer SO, em qualquer webserver J os tokens de PHP embutido so mais simples, porm no em todo servidor, webserver ou SO em que eles funcionam

I/O em PHP

O token principal de PHP embutido basicamente o token padro em uma forma reduzida

<? Seu cdigo php aqui ?>

Outro token de php embutido o que possibilita a impresso de uma varivel ou contedo php
<?= $var ?>

Isto equivale a <?php echo $var; ?> ou <? echo $var; ?>

I/O em PHP

No apache e nginx, rodando em linux/unix os tokens de php embutido geralmente funcionam Ja n ISS/Windows, no, ento cuidado ao usarem os tokens para o php embutido

Uma vez que a maioria dos servers web so linux, voc no ter que se preocupar com isto, mas sempre bom lembrar deste detalhe caso a aplicao for rodar em servidor windows + IIS

I/O em PHP

Exerccio: construa um formulrio que receba nome, login e e-mail e envie os dados para um arquivo php, que dever acessar os dados enviados e imprimi-los

I/O em PHP

Contedo HTML:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <form action="a.php" method="get"> Nome: <input type="text" id="nome" name="nome" /> Login: <input type="text" id="login" name="log" /> E-mail: <input type="text" id="email" name="email" /> <input type="submit" value="Enviar" /> </form> </body> </html>

I/O em PHP

Contedo PHP:
<?php $nome = $_GET['nome']; $login = $_GET['log']; $email = $_GET['email']; echo 'nome: ' . $nome . '<br> login: ' . $login . '<br> email: ' . $email . '<br>'; ?>

I/O em PHP

Exerccio: construa uma pgina php com um menu com trs links. Ao clicar no link dever ser exibido na pgina em qual o usurio clicou

I/O em PHP

Dessa vez vamos embutir o PHP no HTML:


<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <a href="?click=link1">Link 1</a> <a href="?click=link2">Link 2</a> <a href="?click=link3">Link 3</a> <?php echo 'clicado em ' . $_GET['click']; ?> </body> </html>

Estruturas de controle em PHP

Estruturas de controle em PHP

Alm de variveis e I/O, PHP obviamente tem estruturas de controle E elas tem a mesma finalidade que as estruturas de controle em python, c/c++ ou qualquer outra linguagem: controlar e/ou modificar o fluxo de execuo do programa E pra ajudar mais ainda, a sintaxe bem prxima das estruturas de C/C++ e java

Temos if, else, for, while e switch e eles funcionam do mesmo modo que em C E temos algumas estruturas novas tambm

Estruturas de controle em PHP

O if em php segue a estrutura

if(condio) { } if(condio) { } else if (condio) { } else { } for(ndice; parada; incremento) { } while(condio) { } do { } while(condio);

E pode ser aninhado a else e else if

O for segue a estrutura

O while segue a estrutura

O do while segue a estrutura

Estruturas de controle em PHP

O switch segue a estrutura

switch($var) { case valor: break; default: break; }

O break continua servindo para quebrar loops O continue continua servindo para quebrar o fluxo de execuo dentro de um loop e iniciar a prxima iterao E ainda temos algumas estruturas novas Temos uma estrutura para atribuio condicional:

(condio) ? valor1 : valor2;

Estruturas de controle em PHP

Esta estrutura basicamente substitui o seguinte cdigo

if(condio) { $var = valor1; } else { $var = valor2; } $var = (condio) ? valor1 : valor2;

Por este cdigo

Outra estrutura legal o foreach, uma variao do for que permite a iterao atravs de objetos ao invs de ndices

O equivalente para o php do Iterator do C++ e/ou a estrutura for do python

Estruturas de controle em PHP


O funcionamento dele simples Primeiro, ele itera arrays, ento necessrio um array para utilizar nele Depois, basta escrever a estrutura iterando para cada elemento do array, com ou sem a chave do elemento no array Pra entendermos, vamos considerar o seguinte array
$arr = array(0 => 'a', 1 => 'b', 3 => 'c', 4 => 'd');

Estruturas de controle em PHP

Agora, vamos utilizar o foreach para imprimir o contedo do array


foreach($arr as $value) { echo $value . '<br>'; }

Se quisermos acessar as chaves de cada elemento do array, basta usar o foreach desta forma
foreach($arr as $key => $value) { echo 'key = '. $key . ' value = ' . $value . '<br>'; }

Estruturas de controle em PHP

O foreach na verdade uma combinao da estrutura for com a estrutura each A estrutura each serve para acessar e percorrer um array, retornando o par chave/elemento corrente (ou na cabea, se voc considerar o array como uma lista) e avanando o contador ou ponteiro para o prximo elemento caso ele exista Para entendermos a estrutura each, considere o array como se fosse uma lista qualquer, tipo as que construmos em C

Estruturas de controle em PHP

Cada lista formada por trs dados: uma chave de busca, um valor e um ponteiro para o prximo elemento Se queremos buscar um elemento nesta lista, basta percorrer a lista, elemento a elemento, at que encontremos o elemento com a chave desejada ou no haja mais elementos na lista Para realizarmos esta busca, precisaremos da lista e de um ponteiro ou referncia para o elemento corrente que estamos buscando

Estruturas de controle em PHP

Se considerarmos uma implementao em pseudo-C, teremos


struct lista { char* key; char* elem; struct lista* next; }; struct lista* lista, atual; lista = AlocacaoLista(); atual = lista; // atual o incio da lista while(atual->next != NULL) { if(AcheiElemento(atual)) { break; } atual = atual->next; }

Estruturas de controle em PHP

O array corresponde a parte


struct lista { char* key; char* elem; struct lista* next; }; struct lista* lista, atual; lista = AlocacaoLista();

E o each, corresponde parcialmente a


atual = lista; // atual o incio da lista while(atual->next != NULL) { if(AcheiElemento(atual)) { break; } atual = atual->next; }

Estruturas de controle em PHP

A correspondncia no total porque o each executa apenas uma iterao daquele while em pseudo-C e no executa o if() dentro do while(). Ele simplesmente acessa o elemento atual da lista e incrementa o ponteiro, ou seja
atual = lista; // atual o incio da lista while(atual->next != NULL) { RetornaAtual(atual); atual = atual->next; }

Estruturas de controle em PHP

Dessa maneira fica evidente porque necessrio utilizar o each() junto a outra estrutura de loop, para que o mesmo execute mais de uma vez Alm do for, possvel utilizar o each() junto ao while, porm pra isto, precisaremos da estrutura list O list, de maneira simples, serve para transformar elementos de um array em um conjunto de variveis separadas

Estruturas de controle em PHP

Considere o seguinte array


$arr2 = array('a', 'b', 'c', 'd');

Utilizando o list, poderemos colocar cada elemento de $arr2 dentro de uma varivel separada
list($v0, $v1, $v2, $v3) = $arr2; echo 'v0 = ' . $v0 . ' v1 = ' . $v1 . ' v2 = '. $v2 . ' v3 = ' . $v3;

Sendo assim, temos que a estrutura list perfeita para receber o par chave/valor retornado pelo each

Estruturas de controle em PHP

O que falta, iniciar o ponteiro, uma vez que se no o fizermos, poderemos criar um loop infinito Fazemos isto utilizando a funo reset() Deste modo teremos
$arr = array(0 => 'a', 1 => 'b', 3 => 'c', 4 => 'd'); reset($arr); while(list($k, $v) = each($arr)) { echo 'key = '. $k . ' value = ' . $v . '<br>'; }

Este cdigo equivalente ao foreach() de antes

Estruturas de controle em PHP

Exerccio: construa uma pgina com um filtro por idade, de maneira que usurios com menos de 18 anos no podero acessar o contedo

Dica: em PHP voc pode verificar se uma varivel foi setada utilizando a construo do sistema isset($var). Esta construo retorna true se a varivel foi setada e false em caso contrrio

Estruturas de controle em PHP

Exerccio: incremente o exerccio anterior, de maneira que no teste inicial, alm da idade, seja verificado o sexo do usurio. Se o for masculino, o fundo da pgina ser azul. Se for feminino, ser vermelho

Dica: assim como voc pode escrever contedo HTML com PHP, voc tambm pode escrever contedo CSS com PHP, desde que tal contedo esteja dentro de uma string em um arquivo php

Estruturas de controle em PHP

Exerccio: construa um pequeno e-commerce que atenda os seguintes requisitos

Exiba at 6 produtos com foto, nome, descrio, valor total e valor parcelado em at 6 vezes As parcelas possuem juros de 1,5% ao ms por parcela, que devem ser calculados via PHP Todos os produtos devero ser gerados dentro de um array no PHP e depois impressos no HTML Possua mecanismo de carrinho de compras e uma pgina para finalizar compras Na pgina de finalizao de compras, devero ser exibidos os nomes, descries, tipos de pagamento e valores totais ou parcelados que o usurio escolheu na pgina de produtos

Usando um SGBD no PHP

Usando um SGBD no PHP

Por ser uma linguagem web, to logo a requisio encerre, todos os dados manipulados pelo PHP so destrudos Embora isso seja fundamental para o bom funcionamento da web, no interessante quando se precisa que os dados permaneam para uso futuro, aps o encerramento da requisio Temos assim, o problema da permanncia dos dados no PHP

Usando um SGBD no PHP

Uma forma de resolver este problema utilizando sessions e cookies, para a permanncia dos dados por mais de uma requisio Entretanto, ambos possuem tempo de vida limitado e no caso dos cookies, eles podem ser bloqueados pelo navegador Outra opo utilizar arquivos comuns no servidor para armazenar os dados que precisamos manter aps o trmino da requisio

Usando um SGBD no PHP


Embora funcione, h problemas nesta soluo O primeiro est no prprio acesso ao sistema de arquivos do servidor, que, dependendo da configurao, no ser sempre possvel ou se possvel, ser consideravelmente limitado Alm disso, temos ainda um problema de desempenho quando estamos lidando com grande quantidade de dados Quanto maior o arquivo, mais lento ser uma busca por dados nele, visto que arquivos comuns no possuem indexao

Usando um SGBD no PHP

Para contornar isto, podemos utilizar arquivos que possuem indexao nativa e so bem suportado no PHP, como os arquivos XML comum esta soluo ser empregada para dados de configurao de webapps em php (e em outras linguagens tambm!) Porm, ela no resolve plenamente o problema da indexao, visto que seus ndices esto ligados a sua estrutura, que, para bom funcionamento, precisa estar adequadamente organizada

Usando um SGBD no PHP

Uma vez que um arquivo XML simplesmente um arquivo texto organizado (uma espcie de HTML para propsitos gerais), reorganizar os ndices significa mover grandes quantidades de strings, o que, dependendo do tamanho do arquivo, ser muito lento Resta-nos ento utilizar um sistema separado para gerenciar os dados da aplicao que necessitam de permanncia por pelo menos, duas ou mais requisies

Usando um SGBD no PHP

Estes sistemas so os SGBD's (Sistemas Gerenciadores de Banco de Dados DBMS em ingls), que so feitos para armazenar dados de maneira eficiente, independente da quantidade Existem vrios destes sistemas disponveis no mercado, porm, cada um deles possuem caractersticas especficas, que os tornam adequados ou no a uma webapp Os mais conhecidos e usados so o MySQL, o PostgreSQL, o MSSQL, o OracleDB e o DB2

Usando um SGBD no PHP

O MySQL e o PostgreSQL so software livres que possuem verses gratuitas J o MSSQL, OracleDB e DB2 so proprietrios com apenas algumas verses reduzidas que so gratuitas (que no prestam!) O OracleDB e o IBM DB2 so os sgbd's que melhor implementam o suporte a consultas avanadas (como consultas recursivas), sendo o PostgreSQL o sgbd livre mais prximo deles O MSSQL ou SQL server o sgbd mais utilizado em servidores windows + IIS + .NET

Usando um SGBD no PHP

E o MySQL o sgbd mais utilizado em todo mundo, estando presente na maioria dos servidores do mundo e sendo utilizado desde aplicaes mais bsicas, at as mais complexas, como o Facebook Embora seja o mais utilizado, o MySQL no possui todas as funcionalidades dos outros sgbd's, perdendo desempenho quando so necessrias consultas mais sofisticadas O grande uso do MySQL se deve mais pelo fato de sua simplicidade, do que pelo seu custo

Usando um SGBD no PHP

No MySQL voc pode, por exemplo, escolher no utilizar integridade referencial. No Postgres, Oracle e DB2, no! Embora tal escolha simplifique a vida do desenvolvedor (especialmente a do amador), no uma deciso sbia, visto as inconsistncias que decorrem do no uso da integridade referencial Alm disso, funcionalidades interessantes como gatilhos, vises e processos s foram implementados recentemente no MySQL

Usando um SGBD no PHP

Alm dos sgbd que implementam a linguagem SQL para o processo de comunicao, temos tambm o sgbd's no sql Estes sgbd's, como o prprio nome diz, no utilizam o sql na comunicao, utilizando um mtodo prprio para isto Geralmente, estes sgbd's implementam funcionalidades especficas, como armazenamento de dados por objetos ao invs de tabelas e relaes de tabelas

Usando um SGBD no PHP

Num primeiro momento isto pode parecer ruim, porm nem sempre o . Considere o exemplo A sua webapp ser organizada em objetos. Ento, toda e qualquer ao nela, ser executada em mtodos ou chamadas de funes sobre objetos Para ter permanncia de dados em um banco sql, voc precisa gerar um modelo de tabelas e relaes de tabelas (modelo EntidadeRelacionamento) de sua aplicao que est organizada em objetos

Usando um SGBD no PHP

Em aplicaes pequenas, no h nenhuma dificuldade em se conseguir tal modelo. J numa aplicao com algumas centenas de objetos, a 'converso' no ser assim to trivial Logo, seria muito mais fcil se fosse possvel armazenar objetos ao invs de tabelas Alm disso, tem-se ainda a questo de que na converso, voc poder criar um gargalo, onde se ter considervel perda de desempenho este tipo de problema que os sgbd's no-sql resolvem

Usando um SGBD no PHP

Com um sgbd no-sql possvel que voc use o mesmo modelo de dados tanto na aplicao propriamente dita (seu cdigo php) como no banco onde os dados sero armazenados 'permanentemente' Contudo, como dito antes, sgbd's no-sql possuem um mtodo prprio de comunicao, que voc ter que aprender caso v utiliz-los Alm disso, nem todas as webapps precisam de uma soluo no-sql

Usando um SGBD no PHP

O ideal que voc analise o uso de sua webapp e verifique se o desempenho dela ser melhor com um sgbd sql ou um sgbd no-sql A maioria das aplicaes, no necessita de uma soluo no-sql e mesmo as que necessitam, precisam dela parcialmente. Ex:

O Facebook utiliza solues no-sql nos casos onde h busca constante por um determinado tipo de dado, onde eles verificaram empiricamente, que o mysql gastava mais tempo processando o sql do que de fato gerando resultados

Usando um SGBD no PHP

Neste curso, vamos utilizar o mysql, um sgbd que (evidentemente) processa sql Para o PHP, no importa muito o sgbd utilizado, pois o tratamento ser o mesmo Voc usa um 'driver' para o sgbd que utiliza e ele se comporta da mesma maneira que os 'drivers' dos demais sgbd's Para o mysql, temos uma gama de funes que realizam a conexo com o mysql, enviam consultas e recebem resultados do mesmo

Usando um SGBD no PHP

Para conectarmos no mysql, precisamos saber o nome do servidor onde ele est, o nome de usurio e a senha de aceso. Se o mysql estiver na mesma mquina onde est o webserver, o servidor ser 'localhost' Caso contrrio, ser a url para o mysql O nome de usurio e a senha so os dados de login que o admin do mysql passou pra voc, ou, caso o admin do mysql seja voc, so os dados de um usurio mysql com permisses de acesso ao mesmo

Usando um SGBD no PHP

Depois que temos estes dados, usamos a funo mysql_connect() para realizarmos uma conexo com o mysql via php:

mysql_connect($host, $usuario, $senha)

Esta funo ir retornar a conexo com o mysql, ou false, em caso de falha Uma variao dela a funo mysql_pconnect(), que recebe os mesmo parmetros, porm, abre uma conexo persistente com o mysql

Usando um SGBD no PHP

Uma conexo persistente difere da convencional porque continua aberta aps o trmino do script Sendo assim, quando uma nova conexo for realizada, primeiro o php procura por uma j existente, para os dados de acesso fornecidos. Se existir, ele a retorna, seno, ele a abre No modo convencional, o php abre a conexo e a encerra aps receber o resultado do mysql Isso nos leva a uma questo: qual tipo de conexo devo usar?

Usando um SGBD no PHP

A resposta depende das necessidades da sua aplicao e de como funciona o seu webserver Se seu webserver executa o php atravs de cgi (um processo separado chamado pelo servidor web e destrudo ao final da requisio), a conexo persistente no servir para nada J se seu server utiliza processos filhos (caso do apache) ou threads, as conexes persistentes podem aumentar a eficincia no acesso a dados do sgbd

Usando um SGBD no PHP

Isso possvel porque o processo de abrir e fechar uma conexo no assim to trivial, tendo um custo considervel para a mquina Se sua aplicao roda em um webserver onde possvel compartilhar recursos entre um script e outro (webserver com processos filhos ou threads) a conexo persistente poder ajudar a reduzir o custo de conexo com o banco, pois a conexo s realizada uma vez, durante a primeira requisio, sendo reaproveitada em todas as demais

Usando um SGBD no PHP

Contudo, alguns cuidados devem ser tomados, como a carga do sgbd, o local onde o mesmo se encontra e o prprio tipo de consultas realizados Se voc ir utilizar transaes sql ou outra estrutura que cause lock em tabelas e a execuo de uma consulta falhar, voc poder ter um deadlock infinito que ir te forar a reiniciar o webserver ou o sgbd Outro problema o limite de conexes simultneas no sgbd, que pode ser atingido

Usando um SGBD no PHP

O ideal analisar se o uso de conexes permanentes iro ter algum impacto positivo na sua aplicao, dado o contexto onde ela ir executar Se o impacto for positivo, o uso aconselhado, desde que se tome as devidas precaues contra os deadlocks Caso contrrio, use apenas as conexes convencionais, j que o funcionamento de uma e outra idntico para o php

Usando um SGBD no PHP

importante observar nesta questo que os webservers construdos para resolver o problema C10K (de maneira simples, o problema de milhes de conexes simultneas), como o nginx, suportam o php apenas como CGI, logo, nestes casos, conexes persistentes so totalmente desnecessrias, uma vez que ao terminar a requisio, todos os recursos alocados pelo php, incluindo conexes persistentes, sero destrudos

Usando um SGBD no PHP

Para mais informaes sobre este assunto, acesse:


http://php.net/manual/pt_BR/features.persistent-connections.php

Agora que j sabemos como conectar e qual tipo de conexo iremos usar com o mysql, precisamos dizer a ele qual banco de dados iremos usar Isto pode ser feito com o uso da funo mysql_select_db():

mysql_select_db($banco, $conexao)

Usando um SGBD no PHP

A funo mysql_select_db() recebe como parmetros o nome do banco que ser acessado e a conexo com o mysql. O retorno booleano e true caso o mysql tenha encontrado o banco informado e o selecionado com sucesso e false, caso algum erro tenha acontecido Aps isto, estamos prontos para enviar consultas sql ao mysql, o que feito com a funo mysql_query()

mysql_query($consulta, $conexao)

Usando um SGBD no PHP

A funo mysql_query() recebe como parmetros a consulta sql e a conexo com o mysql. Seu retorno depende do tipo de consulta enviada ao mysql Caso a consulta no seja de busca de dados, como insert, delete, update, etc, o retorno booleano, sendo true em caso de sucesso e false em caso de falha Caso a consulta seja de busca de dados, como select, show, etc, o retorno um resource, em caso de sucesso ou false, em caso de falha

Usando um SGBD no PHP

O resource retornado na verdade um ponteiro para uma tabela de resultados que o mysql enviou e pode ser manipulado pelas vrias funes que o php oferece para isto Vamos usar a mysql_fetch_array() que converte linha a linha da tabela de resultados em um array php Se vamos obter linha a linha do resultado, fica evidente que precisaremos de um loop para pegar todos os resultados recebidos do banco de dados

Usando um SGBD no PHP

Neste sentido, utiliza-se um while() para se obter todos os registros recebidos do banco Logo, temos que a funo mysql_query() ter dois fluxos principais: um para o caso onde ela recebe dados do mysql e outro para o caso onde ela no recebe dados Para o caso onde ela no recebe dados, basta testarmos o retorno da funo mysql_query() para descobrirmos se a query enviada foi executada ou no com sucesso

Usando um SGBD no PHP


$ligacao = mysql_connect($host, $user, $pass); if(mysql_select_db($db, $ligacao)) { if(mysql_query(insert into tabela1 values (1,2,3), $ligacao)) { echo 'ok'; } else { echo 'no'; } }

O cdigo acima envia a query de insero de valores 1,2,3 na tabela1 pra o mysql. Em caso de sucesso, ele imprime 'ok' na tela. Caso contrrio, imprime 'no'

Usando um SGBD no PHP


$ligacao = mysql_connect($host, $user, $pass); if(mysql_select_db($db, $ligacao)) { $res = mysql_query('select * from tabela1', $ligacao); while ($linha = mysql_fetch_array($res)) { print_r($linha); } }

O cdigo acima envia a query de busca de todos os dados da tabela1 e os imprime, linha a linha na tela

Usando um SGBD no PHP

A funo mysql_fetch_array() retorna para cada linha da tabela, um array com os dados daquela linha, sendo que cada campo tambm um array associativo, onde o valor do campo o mesmo tanto para a chave numrica como para a chave stringo do campo Ex: se voc possui uma tabela que possui os campos a, b e c, cada campo ser representado com um array associativo onde as chaves so o nmero e o nome do campo

O campo a representado pelas chaves 0 e 'a'

Usando um SGBD no PHP


O campo b representado pelas chaves 1 e 'b' O campo c representado pelas chaves 2 e 'c'

Existem vrias outras funes na api do 'driver' php do mysql, porm vamos nos ater nestas, que so as mais simples e servem para a maioria das operaes que uma webapp necessita Agora hora de alguns exerccios

Usando um SGBD no PHP


Vamos comear por um exerccio resolvido: Construa uma pgina de autenticao de usurios que recebe login e senha e verifique se os dados fornecidos so vlidos. Se forem, imprima acesso concedido na tela. Caso contrrio, imprima acesso negado.

Usando um SGBD no PHP

Para resolvermos este exerccio, precisamos em primeiro lugar que os usurios a serem autenticados existam no banco. Pra isso, vamos precisar de uma tabela de usurios que armazene login e senha Para construirmos o banco, vamos acessar o phpmyadmin, uma ferramenta web de administrao do mysql
http://localhost/phpmyadmin

Usando um SGBD no PHP

Aps logados, vamos criar um banco nele, clicando em Banco de Dados Nesta rea, abaixo de Create database inserimos o nome do banco de dados, que ser test e clicamos em Colao, onde escolheremos uft8-general-ci

Nesta etapa estamos criando dentro do mysql um banco de dados que armazenar os dados da nossa aplicao. A 'colao' se refere ao charset utilizado. Como estamos usando utf-8 no html, vamos usar o charset equivalente no banco de dados

Usando um SGBD no PHP

Aps criarmos o banco, na aba esquerda, clicamos sobre o nome dele e o acessamos Agora, criamos em SQL onde colocaremos o cdigo sql da tabela de usurios Precisamos que a tabela armazene login e senha, ento precisaremos de pelo menos dois campos Alm destes, ainda precisaremos de um id para o usurio, que servir como chave primria

Usando um SGBD no PHP

Sendo assim, o cdigo SQL de criao da tabela ser:


create table usuarios ( id integer unsigned auto_increment primary key, login varchar(20), senha varchar(10) );

A instruo auto_increment uma instruo do mysql que permite a gerao automtica de valores em sequencia, como sequencias de nmeros inteiros. Usamos ela aqui para simplificar as coisas

Usando um SGBD no PHP

Alm da tabela, vamos inserir alguns usurios nela, para podermos valid-los.
insert into usuarios values ('', 'teste', 'teste'); insert into usuarios values ('', 'aluno', 'aluno');

Agora que temos nosso SQL pronto, vamos clicar em Executar Se tudo estiver ocorrido bem, ao clicar em Estrutura, ser possvel vermos nossa nova tabela Agora vamos para o cdigo php

Usando um SGBD no PHP

Para que o usurio possa fornecer seus dados de acesso, precisaremos de um form HTML
<form action="?" method="post"> <label>Login</label> <input type="text" id="login" name="login" /> <label>Senha</label> <input type="password" id="pass" name="pass" /> <input type="submit" value="Logar" /> </form>

Usando um SGBD no PHP

Agora, usamos o envio do formulrio como varivel de status, para sabermos o que devemos exibir
<? if(!isset($_POST['login'])) { ?> <form action="?" method="post"> . </form> <? } else { /* cdigo de validao aqui */ } ?>

Usando um SGBD no PHP

Para validarmos o usurio, basta verificarmos se o login e a senha recebidos do form existem no banco Podemos fazer isso atravs de um simples select sql
select id from usuarios where login = '$login' and senha = '$senha'

Vamos ento, primeiro, receber os valores de login e senha do formulrio e depois escrever a query sql e a enviar ao mysql

Usando um SGBD no PHP


$login = $_POST['login']; $senha = $_POST['pass'];

Agora, conectamos no mysql


$con = mysql_connect("localhost", 'muser', 'mpass');

Substitua muser e mpass pelos dados que usou para logar no phpmyadmin
if(mysql_select_db("test", $con)) {}

Selecionamos o banco Dentro o if acima, vamos inserir a gerao da query, a consulta ao mysql e a interpretao do resultado

Usando um SGBD no PHP


if(mysql_select_db("test", $con)) { $query = "select id from usuarios where login = '$login' and senha = '$senha'"; $res = mysql_query($query, $con); }

Adicionamos os cdigos que geram e executam a consulta SQL no mysql. Agora precisamos interpretar o resultado Como executamos um select, sabemos que o resultado ser false se algo der errado ou um resource, caso der certo

Usando um SGBD no PHP

Ento, aps a execuo da query sql, vamos adicionar o cdigo que realiza o teste do retorno
$res = mysql_query($query, $con); if($res) { $linha = mysql_fetch_array($res); if(isset($linha['id'])) { echo 'Acesso concedido'; } else { echo 'acesso negado'; } } else { echo 'erro'; }

Usando um SGBD no PHP

O cdigo verifica primeiro se o retorno false


if($res)

Se for, ele imprime 'erro' na tela Se no ele pega a primeira linha da tabela resultado enviada pelo mysql
$linha = mysql_fetch_array($res);

Como estamos fazendo a validao de um usurio, esta tabela dever, idealmente, ter apenas um registro, que contm o id do usurio com login e senhas iguais aos passados na consulta SQL

Usando um SGBD no PHP

Pra verificarmos se temos ou no um id, testamos se o valor relativo ao campo id nulo Se os dados de acesso fornecidos pelo usurio no existirem no banco, o id ser nulo. Caso existirem, ser no nulo Sendo assim, podemos construir uma estrutura if ... else para tratar esta questo
if(isset($linha['id'])) { echo 'Acesso concedido'; } else { echo 'acesso negado'; }

Usando um SGBD no PHP

E assim, resolvemos a questo da pgina de login claro que em uma situao real, teramos que incluir filtros e protees contra ataques XSS e SQL Injection, porm, isto tema para o curso avanado Agora que j terminamos o aquecimento, vamos passar para a parte realmente divertida!

Trabalho Final

Trabalho Final

Construir um twitter simplificado com as seguintes funcionalidades

Cadastro de usurios, sendo que o mesmo poder editar sua conta Login e logout de usurios Mural para postagem de mensagens com at 512 caracteres, onde todos os usurios podero postar seus comentrios, porm aps postadas, as mesmas no podero ser editadas ou apagadas

Este mural deve ser legvel o suficiente para que um usurio consiga identificar os posts dos outros usurios Este mural s pode ser visto e acessado por usurios logados

Você também pode gostar