500 Desenvolvimento Web com PHP
www.4linux.com.br
Capítulo 1 Introdução
Capítulo 1 Introdução
4Linux – www.4linux.com.br
Introdução
1.1 Sobre Sobre o cur curso so Neste curso iremos aprender o que é o PHP, entender como a linguagem funciona e conhecêconhecê-la la a fundo. fundo. O curso é recomend recomendado ado para qualquer qualquer um interess interessado ado em começar a desenvolver desenvolver aplicações aplicações para a web. web. Se você já possui experiência com alguma outra linguagem de programação, você entenderá os conceitos apresentados aqui rapidamente, mas o curso e a apostila irão assumir que você não possui nenhuma experiência com desenvolvimento de software. O curso Desenvolvimento Web com PHP (500) é o primeiro curso da Formação PHP da 4Linux. 4Linux. Este curso curso de PHP foi foi desenv desenvolv olvido ido para apresenta apresentarr o poder do PHP a quem teve algum contato com a linguagem ou programadores PHP que desejam aprimorar seus conhecimentos e se atualizar. Ao longo do curso de PHP da 4Linux serão desenvolvidos dois projetos: um microblog (similar ao Twitter) e um sistema de blog (similar ao Wordpress), conhecendo a fundo e aplicando as funcionalidades da linguagem PHP. Além de preparar o aluno para o mercado de trabalho, as aulas são estruturadas de forma orma que que dura durant ntee todo todo curs cursoo o alun alunoo rece receba ba dica dicass e mace macete tess rela relaci cion onad adas as a parte parte do conteúdo para a Certificação Zend PHP 5.3. Com os três cursos da Formação PHP da 4Linux o aluno tem 100% do conteúdo necessário para a prova da Certificação Zend. PHP 5.3. Durante as aulas o instrutor apresentará conceitos e através de exercícios práticos fixará o conteúdo. conteúdo. Ao final deste curso o aluno estará pronto para criar aplicações aplicações web com a linguagem de programação PHP, utilizando os principais bancos de dados open source como MySQL, PostgreSQ PostgreSQLL e SQLite, SQLite, além de conhecer e poder decidir qual a melhor ferramenta ferramenta para o trabalho trabalho certo. cer to.
Desenvolvimento Web com PHP
Página 2
4Linux – www.4linux.com.br
Introdução
1.2 Sobre a 4Linux Há mais de 10 anos a 4Linux oferece cursos, soluções e serviços de T.I. baseados em softwares livres e padrões abertos para ambientes de missão crítica. Já treinou mais de 40.000 alunos e possui a maior oferta mundial de cursos baseados em softwares livres (mais de 50 cursos) nas modalidades presenciais e e-learning (à distância pela internet). Desde 2006 presta suporte a softwares livres em ambientes de missão crítica para a Caixa Econômica Federal, um dos principais cases mundiais de uso de padrões abertos: atualmente quando um cidadão faz uma aposta nas loterias, saca um dinheiro em um ATM (caixa eletrônico), recebe um SMS com o saldo de seu FGTS ou simula o valor de um financiamento imobiliário no ’feirão’ da casa própria, ele está usando uma infraestrutura baseada em softwares livres com serviços prestados pela 4Linux. Além da Caixa a 4Linux realizou algumas das mais conhecidas implementações de software livre do Brasil, entre eles: Metrô de São Paulo, Casa da Moeda do Brasil, Ceagesp e Projeto CDTC (Centro de Difusão de Tecnologia e Conhecimento) – uma parceria entre a IBM e o ITI – que envolveu, entre outras ações, a maior capacitação em Linux do Brasil: 785 educadores do MEC foram treinados em Linux pela 4Linux. Conheça nossos cases e clientes. Idealizadora do HackerTeen – projeto de edutainment (entretenimento educacional) para jovens da geração internet sobre segurança da computação, empreendedorismo na Internet e ética hacker – que, com uma metodologia inovadora, foi avaliado como “primeiro e único no mundo” pela Harvard Business School.
Desenvolvimento Web com PHP
Página 3
4Linux – www.4linux.com.br
Introdução
1.3 Aula Zero O foco principal do PHP como linguagem é a web, portanto, é necessário que você tenha um conhecimento sobre outras tecnologias para a web, como HTML e CSS. Além disso, para facilitar seu aprendizado, ter boas noções de lógica de programação é ideal. Para suprir essa necessidade a 4Linux preparou o Aula Zero, um conteúdo digital exclusivo com tudo que você precisa saber sobre lógica de programação, HTML e CSS.
Desenvolvimento Web com PHP
Página 4
4Linux – www.4linux.com.br
Introdução
1.4 A linguagem PHP Sem mais delongas, bem-vindo ao mundo do PHP, a 5º linguagem de programação mais utilizada no mundo segundo o TIOBE e a mais popular no desenvolvimento de aplicações para web. Segundo o Netcraft, mais de 30 milhões de servidores web possuem o PHP instalado. Se formos pensar em grandes casos de uso, podemos citar os gigantes Yahoo, Wikipedia, Facebook, Flickr, Digg, entre outros. Com o lançamento da versão 5.3, o PHP nunca esteve mais pronto para o desenvolvimento sério e robusto de aplicações, contando com um suporte sólido e moderno ao paradigma de programação orientada a objetos e inúmeras extensões disponíveis para diversas tecnologias. O PHP surgiu em meados de 1994, criado por Rasmus Lerdorf como um pacote de programas CGI. Em 1997, dois desenvolvedores israelitas, Zeev Suraski e Andi Gutmans, entraram no projeto e reescreveram grande parte do código do PHP. Junto com Rasmus, lançaram a versão 3.0 do PHP em junho de 2008. Para a próxima versão, Zeev e Andi decidiram reescrever o core do projeto do zero, chamando-o de Zend Engine. Esta nova versão, PHP 4, foi lançada em maio de 2000, contando com funcionalidades novas como gerenciamento de sessão, buffer de saída e suporte a vários servidores web. Infelizmente, a versão 4 ainda sofria com uma péssima implementação do paradigma de programação orientada a objetos, então em julho de 2004, foi lançada a versão 5 do PHP, que trouxe várias novidades para a linguagem e um jeito completamente novo de programar PHP.
Desenvolvimento Web com PHP
Página 5
Capítulo 2 Servidor Web
4Linux – www.4linux.com.br
Servidor Web
2.1 Como funciona um servidor web Um servidor web é um programa de computador, responsável por receber requisições do protocolo HTTP, tomar ações com base nessas requisições e enviar respostas também no protocolo HTTP. Por exemplo, quando digitamos uma URL em nosso browser, estamos pedindo um arquivo que está em algum computador com um servidor web instalado. Este computador pode estar localizado na casa ao lado ou em um gigantesco datacenter. O servidor web irá interpretar seu pedido, localizar a página no sistema de arquivos da máquina e entregar o conteúdo da página para seu navegador, que irá intepretar o código HTML da página e mostrá-lo para você. No caso de arquivos de música, vídeo, etc, o navegador vai oferecer o download ao invés de mostrar o conteúdo.
Desenvolvimento Web com PHP
Página 7
4Linux – www.4linux.com.br
Servidor Web
2.2 Como funciona o PHP Quando uma página é requisitada ao nosso servidor web, ele irá procurar pela página requisitada no sistema de arquivos, e caso ele encontre, o conteúdo desta página será exibido. Se esta página possuir hipertexto (HTML), vocês já sabem o que acontece: teremos uma página web sendo exibida. O PHP funciona como uma etapa extra. Caso uma página PHP seja requisitada, o servidor web irá procurar pela página no sistema de arquivos e, caso exista algum código PHP dentro desta, ele irá chamar o PHP, que interpretará o código e retornará os dados. A sigla PHP é um acrônimo recursivo que significa PHP: Hypertext Preprocessor, que mostra claramente o intuito da linguagem processar informações e gerar hipertexto (HTML). Abaixo podemos ver um exemplo de uma página HTML simples:
1 2 3 4 5 6 7 8
Teste < p > Ho je é d ia 1 / 1 / 2 1 < / p >
E aqui, um exemplo do PHP em ação:
1 2 3 4 5 6
Teste < p > Ho je é d ia p hp e ch o d at e ( ’ d/ m / Y ’) ; ? > p >
Desenvolvimento Web com PHP
Página 8
4Linux – www.4linux.com.br
Servidor Web
7 8
Desenvolvimento Web com PHP
Página 9
4Linux – www.4linux.com.br
Servidor Web
2.3 Instalando o Apache Antes de começarmos a programar, precisamos instalar um servidor web em nosso computador para que ele aceite requisições de nosso navegador e entregue páginas. Vamos instalar o Apache, um software servidor web 100% livre e open-source. No Debian, podemos instalar utilizando o pacote apache2.
1 apt- get install apache2
Pronto, nosso servidor web está instalado. Para termos certeza que ele está funcionando, vamos entrar em nosso endereço web local:
1 http://localhost
O diretório /var/www contém os arquivos que são mostrados em nosso localhost. Lá está a página index.html que contém a mensagem exibida quando entramos no endereço localhost em nosso navegador.
Desenvolvimento Web com PHP
Página 10
4Linux – www.4linux.com.br
Servidor Web
2.4 Instalando o PHP Uma vez que temos o Apache instalado, ele já pode servidor páginas e arquivos. Mas ele ainda não consegue intepretar arquivos PHP porque nós não instalamos o PHP nesta máquina. Vamos fazer isso, instalando o pacote php5.
1 a pt - g e t i n st a ll p hp 5
Para que o apache possa começar a intepretar nossas páginas PHP, precisamos reiniciá-lo. Vamos fazer isso rodando o seguinte comando:
1 /etc/init.d/apache2 restart
Está na hora de testar. Renomeie o arquivo index.html na pasta /var/www para index.php. Agora, abra o arquivo e coloque o código a seguir dentro dele:
1
Vamos acessar o endereço localhost em nosso navegador. Se aparecer uma mensagem dizendo "Oi mundo", tudo está instalado corretamente e pronto para começarmos a nos divertir com o PHP!
Desenvolvimento Web com PHP
Página 11
Capítulo 3 PHP
4Linux – www.4linux.com.br
PHP
3.1 Sintaxe básica A sintaxe do PHP deriva de várias linguagens diferentes, predominantemente C. A linguagem Perl foi responsável por influenciar a sintaxe do PHP. Com as novas funcionalidades de programação orientada a objetos, o PHP incorpora elementos de Java e C#. Embora o PHP incorpore elementos de linguagens tão diferentes, sua sintaxe se mantém simples e fácil de entender. Quando criamos uma página, geralmente utilizamos a extensão .html. Quando criarmos páginas que possuem código PHP, vamos utilizar a sessão .php. Dentro desta página, podemos colocar HTML e PHP misturados, desde que utilizemos algumas tags específicas para delimitar o que é um código PHP. Para definirmos o que é um código PHP dentro de uma página, utilizamos as tags: 1
Existem também outras tags, como as short tags: 1 2 ?>
As ASP tags, "roubadas"do ASP: 1 <% 2 %>
E também, a tag <script>: 1 <script language="php">
Desenvolvimento Web com PHP
Página 13
4Linux – www.4linux.com.br
PHP
• As short tags ( ?>) precisam ser ativadas no arquivo de configuração do PHP antes de serem utilizadas. A opção é short_open_tags. O seu uso, no entanto, não é recomendado, já que elas conflitam com as tags de XML e foram depreciadas em versões futuras. • As tags ASP e script serão depreciadas nas versões futuras do PHP, portanto, não as use! • Caso você esteja criando uma página que só possua código PHP, não é necessário utilizar a tag de fechamento (?>). Olá Mundo
Em todos os cursos de programação, temos um exemplo cujo objetivo é ensinar o aluno a colocar um texto na tela. Não podemos fazer diferente! O código abaixo faz uso do comando echo, que permite que você envie dados para a tela. A tela, no nosso caso, é o navegador. Note que o comando print faz a mesma coisa que o echo.
1
Comentários
Também podemos adicionar comentários em nossos códigos. Comentários serão ignorados pelo PHP e são importantíssimos para manter nosso código limpo e organizado.
1
Desenvolvimento Web com PHP
Página 14
4Linux – www.4linux.com.br 3 4 5 6 7 8 9 10 11
PHP
# C om en t á ri o d e u ma l in ha /* Comentário c om v á r ia s linhas */ e ch o " t e st e " ; / / C o me nt á r i o
Desenvolvimento Web com PHP
Página 15
4Linux – www.4linux.com.br
PHP
3.2 Variáveis e constantes Variáveis são essenciais em qualquer linguagem de programação. Elas servem para guardar informações. Pense nelas como gavetas onde guardamos coisas e essas gavetas possuem etiquetas de nome. No PHP, nomes de variáveis são precedidos do símbolo $.
1 2 3 4
Em nossas gavetas imaginárias, $nome $email $time, estamos guardando algumas informações. No exemplo abaixo, iremos colocar na tela o nome do time do João:
1
Nomes válidos
Precisamos ter alguns cuidados ao nomear nossas variáveis. São eles: • Nunca inicie o nome de uma variável com um número • Nunca use espaços em branco
Desenvolvimento Web com PHP
Página 16
4Linux – www.4linux.com.br
PHP
• Nunca use caracteres especiais, apenas underline • Evite criar variáveis com nomes gigantes, abrevie sempre que possível • Evite criar nomes sem sentido, como $a ou $xyz. O nome da variável deve ajudar o programador, não confundi-lo • Evite utilizar letras maiúsculas Variáveis variáveis
No PHP, podemos definir variáveis cujos nomes são... variáveis! Isso pode ser feito de maneira bastante simples:
1 2 3 4
Observe que o valor da variável $var está sendo utilizado como nome de variável durante a atribuição de valor, criando de forma dinâmica a variável $time. Constantes
Uma constante é como uma variável, mas como seu nome pode indicar, seu valor é sempre constante, invariável. O valor de uma constante jamais poderá ser alterado em tempo de execução. Para definirmos uma constante, utilizamos a função define() do PHP.
1
Desenvolvimento Web com PHP
Página 17
4Linux – www.4linux.com.br
PHP
Constantes estão disponíveis por todo nosso script, inclusive dentro de funções que veremos logo logo. As regras de nomenclatura das constantes são as mesmas das variáveis. Contudo, é uma boa prática usar sempre letras maiúsculas e underline. Ex.: MELHOR_TIME, LIMITE_CAMPOS
Desenvolvimento Web com PHP
Página 18
4Linux – www.4linux.com.br
PHP
3.3 Tipos de variáveis Variáveis podem guardar qualquer informação. E cada informação possui um tipo diferente. Em outras linguagens de programação, é necessário declarar este tipo junto com o valor e o nome da variável. Mas o PHP possui tipagem dinâmica, o que significa que ele sabe o que é um texto (string) e um número (integer, float), dependendo do contexto onde essa informação é utilizada. O PHP possui os seguintes tipos: Boolean, Integer, Float, String, Array, Objeto, Recurso, NULL Boolean
Uma variável booleana pode conter apenas dois valores, true ou false. Booleanos são a base das operações lógicas em nossas aplicações. Já que no PHP temos tipagem dinâmica, um valor booleano por ter várias formas. True pode ser 1, false pode ser 0, null ou uma string vazia. Integer
Um integer é um número inteiro, podendo ser negativo ou positivo. Números inteiros possuem formas de notação diferentes: • Decimal: 10, -11, 1452 • Octal: 0666, 0100 • Hexadecimal: 0x123, 0XFF, -0x100 Float
Um float, também chamado de double, é um ponto flutuante, um formato digital para representar números reais. Assim como os inteiros, possuem formas de notação:
Desenvolvimento Web com PHP
Página 19
4Linux – www.4linux.com.br
PHP
• Decimal: 0.12, 1234.43, -.123 • Exponencial: 2E7, 1.2e2 String
Uma string é geralmente um texto, mas para sermos mais corretos na definição, é uma sequência ordenada de caracteres. Podemos usar como texto, mas seu conteúdo também pode ser binário, como o conteúdo de um arquivo MP3 ou JPG. Array
Um array é uma estrutura de dados ordenados, que mantém uma série de elementos que podem ter diferentes tipos. Arrays são importantíssimos e saberemos mais sobre eles mais na frente. Objeto
Um objeto é uma estrutura de dado e código, formando a base da programação orientada a objetos. Recurso
Um recurso é um recurso externo utilizado nativamente pelo PHP. São, por exemplo, conexões abertas com um banco de dados ou conexões abertas com um arquivo no sistema. NULL
Uma variável NULL indica que ela não possui valor algum. Uma variável é considerada nula quando recebe o valor NULL ou nunca recebeu valor algum. Confira no exemplo abaixo os tipos de variáveis em ação no PHP:
Desenvolvimento Web com PHP
Página 20
4Linux – www.4linux.com.br 1 2 3 4 5 6 7 8 9
PHP
3.3.1 Pseudo-tipos Durante a leitura desta apostila, exercícios em aula e até mesmo pesquisas na internet, você encontrará vários menções a alguns tipos de variáveis conhecidos como pseudo-tipos. Eles são utilizados como referências a situações específicas que ocorrem durante o desenvolvimento de uma aplicação. mixed
O tipo mixed é utilizado para indicar que uma função pode esperar ou retornar mais de um tipo de variável ao mesmo tempo. Por exemplo, uma função pode retornar uma string ou um booleano, enquanto pode receber como parâmetro um array ou string. number
O tipo number é utilizado para indicar que a variável pode ser um inteiro ou um float. callback
Algumas funções no PHP podem esperar como parâmetro uma outra função definida pelo usuário. Chamamos essas funções passadas como parâmetro de callbacks.
Desenvolvimento Web com PHP
Página 21
4Linux – www.4linux.com.br
PHP
3.3.2 Manipulação de tipos Como vimos, a tipagem do PHP é dinâmica. Isso significa que, dependendo do contexto, a linguagem fará uma conversão automática entre os tipos de variáveis conhecidos, escolhendo a mais apropriada para a situação. No exemplo abaixo, podemos analisar o comportamento de linguagem enquanto utilizamos o operator de soma com algumas variáveis.
1 2 3 4 5 6
// $var é uma string
$var += 2;
// $var agora é um inteiro
$var = $var + 1.3;
// $var agora é um float
$var = 5 + " 1 carros ";
// inteiro ( $var = 15)
$var = " 1 casa " + " 1 c asa ";
// i nt ei ro ( $var = 2)
3.3.3 Conversão de tipos Embora a tipagem do PHP seja dinâmica, podemos forçar os tipos de nossas variáveis utilizando uma técnica conhecida como type casting , ou conversão de tipos. Veja no exemplo abaixo como podemos forçar os tipos de algumas variáveis:
1 2 3 4 5 6 7 8 9 10
Desenvolvimento Web com PHP
Página 22
4Linux – www.4linux.com.br
Desenvolvimento Web com PHP
PHP
Página 23
4Linux – www.4linux.com.br
PHP
3.4 Operadores Bom, até agora aprendemos o que são variáveis, como criá-las e como associar valores a elas. Mas a vida de um desenvolvedor seria muito chata se isso fosse tudo que pudéssemos fazer com elas. Vamos conhecer agora operadores, que permitem que nós manipulemos o conteúdo de uma ou mais variáveis, produzindo novas variáveis. Operadores Aritméticos
Podemos utilizar operadores aritméticos para efetuar cálculos com os valores de variáveis, transformando os resultados desses cálculos em variáveis, que por sua vez, também podem ser manipuladas. Por exemplo:
1 2 3 4 5 6
Os operadores aritméticos disponíveis são: • Adição: + • Subtração: • Multiplicação: • Divisão: / • Módulo: %
Desenvolvimento Web com PHP
Página 24
4Linux – www.4linux.com.br
PHP
Lembrando que o PHP possui tipagem dinâmica. Portanto:
1 2 3 4
Operadores de Atribuição
No PHP, utilizamos operadores de atribuição para definir variáveis e seus valores. Contudo, também podemos mesclar os operadores de atribuição com operadores aritméticos, deixando o código mais limpo e seu trabalho mais ágil.
1 2 3 4 5 6
Podemos também incrementar ou decrementar variáveis utilizando os operadores de incrementação, herdados da linguagem C.
1 2 3 4 5 6
Operadores Relacionais
Desenvolvimento Web com PHP
Página 25
4Linux – www.4linux.com.br
PHP
Operadores relacionais são usados para comparar valores ou expressões, retornando um valor booleano (true ou false). São eles: • Igual: == • Idêntico: === • Diferente: != ou <> • Menor que: < • Maior que: > • Menor ou igual: <= • Maior ou igual: >= Devido a tipagem dinâmica do PHP, você deve tomar alguns cuidados quando estiver criando expressões lógicas envolvendo valores booleanos. Se você fizer uma comparação utilizando o operador ==, o número inteiro 0 será igual ao booleano false, assim como NULL e uma string vazia. Isso pode não trazer bons resultados. Portanto, utilize sempre o operador ===, que checará não somente o conteúdo da variável, e sim, o tipo dela. Operadores Lógicos
Existem também os operadores lógicos, que são utilizados para combinar expressões lógicas, criando testes condicionais. São eles: • $a and $b E: enquanto A e B forem verdadeiros • $a or $b
Desenvolvimento Web com PHP
Página 26
4Linux – www.4linux.com.br
PHP
OU: enquanto A ou B forem verdadeiros • $a xor $b XOR: enquanto A ou B forem verdadeiros, mas não os dois • ! $a NOT: Verdadeiro se A for falso • $a && $b E: enquanto A e B forem verdadeiros • $a || $bb OU: enquanto A ou B forem verdadeiros
Desenvolvimento Web com PHP
Página 27
4Linux – www.4linux.com.br
P HP
3.5 String Strings s Uma string é, nada mais nada menos, que um texto. Para declarar uma string, utilizamos aspas simples ” ou aspas duplas .
1
Existe uma diferença bem clara entre a utilização de aspas duplas e aspas simples: O modo modo como como o PH PHP P inte interpr rpret etaa o cont conteú eúdo do dela delas. s. Dif Diferen erente teme ment ntee das das aspa aspass simp simple les, s, as aspas duplas permitem que você faça uso de caracteres de escape e variáveis dentro de uma string.
1 2 3 4
"; "; e ch ch o ’ $ no no me m e e M ar a r ia ia a nd nd am a m p el el a r u a ’ ;
Ao contrário do que muitos pensam, não existe diferença alguma de performance entre o uso de aspas duplas ou simples. O fato das aspas duplas fazerem fazerem substituição substituição de variáveis pelos seus respectivos respectivos valores não torna o código mais lento. Caracteres de escape
Ao usar aspas duplas, duplas, é necessári necessárioo conhecer conhecer alguns alguns caracteres caracteres de escape. escape. São eles:
1 Q ue u e br b r a d e l in in ha ha : \ n Tabulação: \t 2 Tabulação: e t or o r no n o d o c ar ar ro ro : \ r 3 R et
Desenvolvimento Web com PHP
Página 28
4Linux – www.4linux.com.br
P HP
r ó p ri ri a b ar ar ra ra : \ \ 4 A p ró 5 A s pa pa s s i mp mp l es es : \ ’ 6 A s pa pa s d u pl pl a s : \ "
Vamos entender melhor usando o exemplo abaixo:
1 2 3 4 5 6
V ou ou q u eb eb r ar ar a l in i n h a \ n" n" ; echo echo "\tEstou "\tEstou tabulado\n"; tabulado\n"; e ch ch o " M os o s tr t r ar a r a sp s p as as d up up la la s , s em em q ue u e br b r ar a r o c ó di d i go go \ " \n \n " ; e ch ch o " M os o s tr t r ar a r a b ar ar ra ra \ \" \" ; echo echo ""; "";
Navegadores Navegadores,, por padrão, não exibem exibem caracteres caracteres de escape. Novas Novas linhas e tabulatabulações que forem colocadas em strings só serão exibidas em texto puro, isto é, caso você salve a string em um arquivo de texto. Para mostrar caracteres de escape no navegador, é comum utilizar a tag HTML
. Concatenação
Ao se trabalhar com strings, podemos concatená-las e obter resultados interessantes.
1 2 3 4 5 6 7 8 9
Desenvolvimento Web com PHP
Página 29
4Linux – www.4linux.com.br
P HP
Evite concatenar string quando seu único objetivo é colocar o valor de uma variável dentro da outra. Para Para esse fim podemos utilizar as aspas duplas.
Desenvolvimento Web com PHP
Página 30
4Linux – www.4linux.com.br
PHP
3.6 Estruturas de controle No PHP, assim como em outras linguagens, possuímos estruturas de controle que permitem que criemos um fluxo em nosso programa. Uma dessas estruturas é a condição. Caso algo seja verdadeiro, faça isto, senão, faça aquilo. No PHP, isso é o IF/ELSE.
1 2 3 4 5 6 7
Observe que estamos comparando o valor de uma variável utilizando os operadores relacionais. Se o valor da variável $idade for menor que 18, executaremos o bloco de código contido entre as chaves do if. Caso contrário, executaremos o bloco de código contido entre as chaves do else. Podemos também utilizar os operadores lógicos junto dos operadores relacionais, criando expressões mais complexas que atendem melhor nossos problemas:
1 2 3 4 5 6
1 8 & & $ ca rt ei ri nh a = = t ru e ) { echo ’Bem- vindo!’; }
Elseif
Desenvolvimento Web com PHP
Página 31
4Linux – www.4linux.com.br
PHP
Além do IF/ELSE básico, podemos fazer uso do controle ELSEIF, que permite que criemos uma outra condição, além da principal. 1 2 3 4 5 6 7 8 9
Switch
O ELSEIF pode ser muito útil, mas e quando tivermos muitas condições? Fica ruim de manter um código cheio de ELSEIF’s. É aí que entra o SWITCH. O switch permite que criemos infinitas condições de forma bastante simples e organizada: 1
Desenvolvimento Web com PHP
Página 32
4Linux – www.4linux.com.br
PHP
e ch o ’ Ea í C u ri n ga ! ’ ; 17 18 break; 19 default: 20 21 e ch o ’ Ea í r ap á ? ’ ; 22 break; 23 }
Operador Ternário
Existe no PHP uma forma mais "curta"de criar condições. Ele é chamado de Operador Ternário. Embora ele deixe o código menos legível para programadores menos experientes, ele nos salva tempo e o código torna-se mais limpo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
$b) { $c = ’A é ma ior que B ’; } else { $c = ’A n ão é maior que B ’; } $d = ( $a > $b ) ? ’A é maior que B ’ : ’A n ão é maior que B ’; e ch o $ c ; e ch o $ d ;
Desenvolvimento Web com PHP
Página 33
4Linux – www.4linux.com.br
PHP
3.7 Loops Os loops no PHP são estruturas de controle muito importantes. Eles permitem que efetuemos um laço de repetição enquanto uma determinada condição for verdadeira. Temos quatro tipos de loop no PHP: while, do while, for e foreach. O foreach foi construído especialmente para lidar com arrays, portanto, vamos conhecê-lo mais tarde. while
O while permite que executemos um bloco de código enquanto a expressão que foi passada como parâmetro seja verdadeira.
1 2 3 4 5 6 7 8
Neste caso, contamos até 10. Observe que estamos incrementando o valor da variável logo depois de colocá-la na tela. Fiz dessa maneira para que ficasse mais claro para vocês, mas poderíamos fazer o mesmo da seguinte forma:
1
Desenvolvimento Web com PHP
Página 34
4Linux – www.4linux.com.br
PHP
8 9 }
do while
O do while funciona da mesma forma que o while, com apenas uma diferença: Ele avalia a expressão depois de fazer algo. Isso garante que o código seja executado ao menos uma vez, mesmo que a expressão não seja verdadeira.
1 2 3 4 5 6 7 8 9 10 11
" ; $contador++; } w hi le ( $ c on ta do r <= 1 ) ;
Esse exemplo é similar ao exemplo anterior. Mas vamos supor que a variável $contador não seja 0, seja 12 (maior que 10, portanto, falhando nossa condição). O do while garantirá que nosso bloco de código será executado apenas uma vez, mesmo a condição sendo falsa. for
O for é uma estrutura de controle muito similar ao while e ao do while. Contudo, ele é mais sofisticado e permite que executemos três expressões em sua condição, separadas por ponto e vírgula. A primeira é executada ao início do loop, a segunda é a condição (enquanto ela for verdadeira, o loop continuará), e a terceira é executada ao fim de cada repetição.
Desenvolvimento Web com PHP
Página 35
4Linux – www.4linux.com.br
PHP
1 " ; 6 7 8 }
Quebrando loops
Enquanto estamos dentro de um loop, podemos utilizar duas instruções: continue e break. Elas permitem que nós quebremos os laços de repetição. O continue irá ignorar todas as instruções após sua inserção e irá para o próximo elemento no loop. O break irá quebrar o loop onde for inserido e nenhum outro elemento será interpretado.
1 " ; 8 9 10 }
Note que nosso contador irá pular o terceiro item do loop. Nosso if retornou verdadeiro, portanto, o bloco de código contido nele foi executado. O bloco de código era o continue, que fez com que a execução do loop fosse pulada naquele momento, deixando de executar a conta do quadrado e nosso echo.
Desenvolvimento Web com PHP
Página 36
4Linux – www.4linux.com.br
PHP
1 " ; 8 9 10 }
Observe agora que, ao invés de pular o terceiro item, nosso contador parou por ali. O break finaliza a execução do loop.
Desenvolvimento Web com PHP
Página 37
4Linux – www.4linux.com.br
PHP
3.8 Arrays Arrays são mapas de dados, guardados em forma de chave = valor. Arrays podem conter vários tipos diferentes de variáveis, até mesmo arrays. Se formos manter nossa analogia de gavetas, arrays são grandes gavetas que possuem mais gavetas dentro de si, etiquetadas ou não. A melhor forma de explicar o que eles são e como funcionam, é através de código:
1
No código acima, nós criamos um array chamado $pessoas e colocamos três valores dentro dele. Esses valores são como variáveis, contidos dentro de uma grande variável chamada $pessoas. Ela é a nossa grande gaveta e as pequenas gavetas contidas nela podem possuir qualquer valor: string, inteiro, float, etc. Note também que não utilizamos echo, e sim, uma função chamada print_r. A função print_r lista as chaves e os valores de um array. Existe também a função var_dump:
1
Observe que a função var_dump irá exibir não só a estrutura do array, mas os tipos dos valores contidos dentro dele. Caso utilizemos echo $pessoas, o PHP irá retornar "Array()". Porque? Porque um array é um mapa de dados e o echo não pode retornar o mapa inteiro. Para podermos utilizar o echo com arrays, precisamos especificar qual chave queremos acessar.
Desenvolvimento Web com PHP
Página 38
4Linux – www.4linux.com.br
PHP
1
3.8.1 Associativos Por padrão, quando criamos um array, ele recebe chaves numéricas, incrementadas automaticamente de acordo com novos valores. Contudo, podemos criar chaves que são strings. Chamamos isto de arrays associativos. Para explicar melhor, faremos um exemplo em que mostraremos a temperatura média de alguns meses do ano. 1 3 , ’ F ev er ei ro ’ = > 3 2 , ’ M ar ç o ’ = > 2 9) ;
Observe que nossos valores, nossas pequenas gavetas dentro de uma grande gaveta, agora possuem nomes. Podemos utilizar estes nomes para nos referenciarmos a um valor específico dentro de um array, permitindo que manipulemos nossos arrays de maneira mais precisa. 1 3 , ’ F ev er ei ro ’ = > 3 2 , ’ M ar ç o ’ = > 2 9) ;
3 e ch o " A t em pe ra tu ra m é di a e m J an ei ro f oi d e: {$temperaturas [’Janeiro ’]} graus";
Existem maneiras diferentes de se utilizar variáveis dentro de strings e vice-versa Essas maneiras dividem-se em concatenadas e não-concatenadas, sendo a forma não-concatenada a mais "limpa"
Desenvolvimento Web com PHP
Página 39
4Linux – www.4linux.com.br
1 2 3 4 5 6 7 8 9 10 11 12
PHP
’ G r êm io ’ , ’ pi or ’ = > ’ C ur in ti a ’ ) ; / / N ã o c o nc a te n ad a s e ch o " $ n om e t o rc e p ar a o { $ t im e [ ’ me lh or ’ ]} " ; e ch o " { $ n om e } t o rc e p ar a o { $ t im e [ ’ m el ho r ’ ]} " ; // Concatenadas e ch o " " . $ n om e . " t or c e p ar a o " . $ t im e [ ’ me lh or ’ ] . " " ; e ch o ’ ’. $ n om e . ’ t or c e p ar a o ’. $ t im e [ ’ me lh or ’ ] . ’ ’ ;
Portanto, nunca utilize concatenação para acessar valores dentro de um array. Faça uso das chaves e evite sujar seu código e diminuir sua manutenibilidade.
3.8.2 Multidimensionais Arrays multidimensionais, por mais complexo que o nome seja, são basicamente, arrays dentro de um array. Lembram que os valores de um array podem ter qualquer tipo? String, float, inteiro? Bom, também podemos ter arrays! Podemos ter infinitos arrays dentro de outros arrays para controlar e armazenar diversos dados diferentes. Mas, seguindo o nosso exemplo anterior, podemos ter os dados de temperatura para vários anos:
1 a rr a y ( ’Janeiro ’ => 3, 5 ’Fevereiro ’ => 32, 6
Desenvolvimento Web com PHP
Página 40
4Linux – www.4linux.com.br
PHP
’ Ma r ço ’ = > 2 9) , 7 8 ’ 2 9 ’ = > a rr a y ( 9 ’Janeiro ’ => 31, ’Fevereiro ’ => 34, 10 11 ’ Ma r ço ’ = > 3 ) , 12 ’ 2 1 ’ = > a rr a y ( ’Janeiro ’ => 32, 13 ’Fevereiro ’ => 34, 14 15 ’ M ar ç o ’ = > 2 8) ); 16 17 18 echo "Janeiro de 28 foi de: {$temperaturas[’28’][’Janeiro ’]} graus";
Note que fiz uso de uma estrutura identada, similar a da saída do print_r, para visualizar melhor os dados do array. Eu poderia colocar tudo em uma linha, mas ficaria difícil de entender no futuro. Sempre que você for trabalhar com arrays multidimensionais, procure identar sua definição para manter o código limpo e fácil de entender.
3.8.3 Foreach Aprendemos anteriormente alguns loops, mas faltou o foreach. O foreach está ligado diretamente a arrays. A ideia do foreach é que você possa iterar entre cada elemento de um array. Por exemplo:
1 " ; 6
Desenvolvimento Web com PHP
Página 41
4Linux – www.4linux.com.br
PHP
7 }
Além de iterar entre os elementos e pegar os valores, podemos também pegar as chaves. Para cada elemento em nosso array (Mês e Temperatura) nós daremos um echo com a chave e valor desse elemento:
1 3 , ’ F ev er ei ro ’ = > 3 2 , ’ M ar ç o ’ = > 2 9) ;
4 5 f o re a ch ( $ t e mp e ra t ur a s a s $ c ha v e = > $ va l or ) { 6 e ch o " A t em pe ra tu ra m é di a d e $ ch av e f oi de $ va lo r g ra us < b r / > "; 7 }
Mas e arrays multidimensionais? Fácil. Se arrays multidimensionais são simplesmente arrays dentro de arrays, foreachs multidimensionais são simplesmente foreachs dentro de mais foreachs.
1 a rr a y ( ’Janeiro ’ => 3, 5 6 ’Fevereiro ’ => 32, 7 ’ Ma r ço ’ = > 2 9) , ’ 2 9 ’ = > a rr a y ( 8 9 ’Janeiro ’ => 31, 10 ’Fevereiro ’ => 34, ’ Ma r ço ’ = > 3 ) , 11 ’ 2 1 ’ = > a rr a y ( 12 13 ’Janeiro ’ => 32, ’Fevereiro ’ => 34, 14 ’ M ar ç o ’ = > 2 8) 15
Desenvolvimento Web com PHP
Página 42
4Linux – www.4linux.com.br
PHP
); 16 17 18 f o re a ch ( $ t e mp e ra t ur a s a s $ an o = > $ m es es ) { e ch o " < s tr on g > T e m p e ra t ur a s e m $ an o < / s tr on g > < b r / > " ; 19 20 21 f or ea ch ( $ me se s a s $ me s = > $ te mp ) { e ch o " $ m es : $ te m p g ra us < b r / > " ; 22 } 23 24 }
3.8.4 Sintaxe alternativa Podemos criar arrays de forma simples e rápida utilizando o operador []. Dessa forma, iremos apenas jogar dados dentro do nosso array, sem nos preocuparmos com a chave.
1 2 3 4 5 6 7 8 9
Podemos também alterar os valores de um array usando os colchetes:
1 ’ Jo ã o ’ , ’ t im e ’ = > ’ n en hu m ’ ) ; 4
Desenvolvimento Web com PHP
Página 43
4Linux – www.4linux.com.br
PHP
5 $array[’time ’] = ’Grêmio’;
Desenvolvimento Web com PHP
Página 44
4Linux – www.4linux.com.br
PHP
3.9 Funções Uma função é um pedaço de código, que tem um objetivo específico, encapsulado em uma estrutura única que recebe parâmetros e retorna um dado. Ela é essencial para permitir reuso de código. O PHP possui várias funções "built-in", isto é, já vem com ele. Você já viu algumas nos exemplos anteriores, como a função date(). Abaixo, criaremos uma função simples para que você entenda como elas funcionam e para que servem.
1 2 3 4 5 6 7 8
$valor "; } echo negrito("Olá mundo!"); e ch o n e gr i to ( " O l á m un do , n o va m en t e ! " );
Observe que a função tem dois parênteses e dentro deles temos uma variável, chamamos isso de parâmetro. Os parâmetros de uma função são somente valores, mas sempre criamos apelidos para eles. A variável $valor poderia ter qualquer outro nome, optamos por esse para ficar mais claro. O conteúdo dela sempre será o valor que está sendo passado para a função durante a chamada de função. Chamadas de função são muito simples. Basta você colocar o nome da função e passar quaisquer parâmetros para ela. Algumas funções podem não possuir parâmetros.
1 2 3 4 5
Desenvolvimento Web com PHP
Página 45
4Linux – www.4linux.com.br
PHP
6 l is ta ( " It em 1 " , " I te m 2 " , " I te m 3 " );
3.9.1 Retorno No PHP, nossas funções podem simplesmente executar um bloco de código, sem retornar qualquer valor. Mas, em vários momentos, você vai precisar que ela retorna um valor para você. Esse valor pode ser o resultado de uma operação matemática, uma manipulação de string, uma manipulação de arrays ou até mesmo um valor booleano, indicando se a operação foi bem sucedida ou não. Para fazer uma função retornar um valor, precisamos utilizar a palavra-chave return , seguida do valor que desejamos retornar. Veja o exemplo:
1 2 3 4 5 6 7 8 9 10 11
3.9.2 Parâmetros opcionais Funções também podem possuir parâmetros opcionais. Esses parâmetros podem ser omitidos durante a chamada de função e nossa função trabalhará com um valor padrão no lugar dessa parâmetro obtido. Observe o código abaixo:
Desenvolvimento Web com PHP
Página 46
4Linux – www.4linux.com.br
1 2 3 4 5 6 7 8 9 10 11 12
PHP
3.9.3 Escopo Quando estamos trabalhando em um script PHP, temos variáveis. Essas variáveis estão disponíveis no escopo global de nosso script. Ela sempre pode ser acessada. Contudo, dentro de nossas funções, existe um outro escopo, o escopo local. Funções, que agem no escopo local, não podem acessar variáveis do escopo global. Para podermos utilizar uma variável que está disponível no escopo global dentro de nossas funções, precisamos alocá-las no escopo local utilizando a palavra-chave global . Observe o código abaixo:
1
Desenvolvimento Web com PHP
Página 47
4Linux – www.4linux.com.br 8 9 10 11 12 13 14 15
PHP
$ va lo r = $ va lo r * $ ta xa ; return $valor; } $ pr ec o = 2 5; $comtaxa = taxar($preco); e ch o " O p re ç o d es te l iv ro é $ pr ec o . C om t ax a , f ic a : $ co mt ax a " ;
3.9.4 Passagem por referência Quando passamos um valor para uma função, um parâmetro, aquele valor passa a existir no escopo local da função. As alterações feitas nesse valor só existem no escopo local, portanto, precisamos retornar algo em nossa função para fazer essas alterações, se necessários, aparecerem no escopo global. Com a passagem por referência, qualquer alteração feita no escopo local em um valor passado por referência será refletida no escopo global. Utilizamos o operador & em frente a um parâmetro para especificar passagem referência. Por exemplo:
1 2 3 4 5 6 7 8 9 10 11
Desenvolvimento Web com PHP
Página 48
4Linux – www.4linux.com.br
PHP
A variável $laranjas só existe no escopo global. Mas estamos passando essa variável para uma função por referência, o que irá alterar o valor da variável em ambos os escopos, sem que eu precise dizer que o valor da variável é igual ao retorno da função.
3.9.5 Funções anônimas e Closures Funções lambda, ou funções anônimas como são comumente conhecidas, são funções que podem ser definidas a qualquer momento, geralmente a uma variável e disponível somente no escopo desta. Este conceito vem do cálculo lambda, introduzido por Alonzo Church nos anos 30, que inspirou a criação de linguagens funcionais como Lisp e Scheme. Lambdas são muito úteis em conjunto com funções como array_filter e array_map. Como podemos ver no exemplo abaixo, que monta um array somente com os valores ímpares de outro:
1
5 6 print_r($impares);
Closures, são muito similares a lambdas, mas acabam sendo mais úteis já que eles podem interagir com o escopo global. Podemos importar variáveis do escopo global para o escopo local do closure utilizando a palavra-chave use , que neste caso funciona como a global que vimos anteriormente. Podemos ver no exemplo abaixo um simples Closure:
Desenvolvimento Web com PHP
Página 49
4Linux – www.4linux.com.br
1 2 3 4 5 6
PHP
Desenvolvimento Web com PHP
Página 50
Capítulo 4 Funções Nativas
4Linux – www.4linux.com.br
Funções Nativas
4.1 Funções para variáveis
4.1.1 Função empty
A função empty verifica se a variável é considerada vazia, ou seja, caso seu conteúdo seja , 0, "0", NULL, FALSE, um array vazio, ou uma variável declarada porém sem valor em uma classe.
1 2 3 4 5 6
4.1.2 Função isset
Esta função informa se determinada variável foi iniciada.
1 2 3 4 5 6
Podemos também utilizar a função unset para destruir determinada variável.
Desenvolvimento Web com PHP
Página 52
4Linux – www.4linux.com.br
Funções Nativas
4.1.3 Função is_array is_array Como o próprio nome já diz, esta função verifica se determinada variável é um array:
1
4.1.4 Função is_bool is_bool Verifica se a variável é booleana. No exemplo abaixo, como o conteúdo da variável é false, a frase será mostrada na tela.
1 2 3 4 5 6
4.1.5 Função is_ca is_callabl llable e Verifica se o conteúdo de uma variável é uma função válida.
1
Desenvolvimento Web com PHP
Página 53
4Linux – www.4linux.com.br 3 4 5 6 7 8 9 10
Funções Nativas
f u nc nc t io io n t e st st e ( ) { } $variavel $variavel = ’teste ’teste ’; var_dump(is_call var_dump(is_callable($vari able($variave avel l , false, false, $nome)); $nome)); e ch c h o $ no no me me , " \ n " ;
A saíd saídaa será será true true,, pois pois test testee é de fato ato o nome nome de uma uma funç função ão váli válida da e logo logo depo depois is será será apresentado na tela o nome da função, encontrada na variável. Teste este mesmo exemplo modificando o conteúdo da variável para teste1 por exemplo. A saída deverá ser falsa, tendo em vista que não há função com este nome.
4.1.6 Função is_float is_float A função is_float verificará verificará se o conteúdo de uma variável variável é um valor em ponto flutuante.
1 2 3 4 5 6 7
4.1.7 Função is_int Verifica se o número em questão é um inteiro.
Desenvolvimento Web com PHP
Página 54
4Linux – www.4linux.com.br
1 2 3 4 5 6 7
Funções Nativas
4.1.8 Função is_null is_null Esta função indica se a variável variável é nula.
1 2 3 4 5 6 7 8
4.1.9 Função is_numeric is_numeric Indica se a variável variável é numérica
1
Desenvolvimento Web com PHP
Página 55
4Linux – www.4linux.com.br
Funções Nativas
4 if(is_int($variavel)) { 5 e ch o " É u m n ú m e r o !\ n " ; 6 } else { e ch o " N ão é u m n ú me ro ! \ n" ; 7 8 }
4.1.10 Função is_object Verifica se a varíavel em questão é um objeto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
students; } $ ob j = n ew s t dC l as s ( ) ; $obj-> students = array(’Kalle ’, ’Ross’, ’Felipe ’); var_dump(get_students(null)); var_dump(get_students($obj));
4.1.11 Função is_resource Verifica se uma determinada variável é um resource.
Desenvolvimento Web com PHP
Página 56
4Linux – www.4linux.com.br
1 2 3 4 5 6
Funções Nativas
4.1.12 Função is_scalar Indica se a variável em questão é escalar.
1 2 3 4 5 6 7 8 9 10 11 12
4.1.13 Função is_string Verifica se determinado conteúdo é considerada uma string.
1
Desenvolvimento Web com PHP
Página 57
4Linux – www.4linux.com.br 2 3 4 5
Funções Nativas
var_dump(is_string (’teste ’)); var_dump(is_string("5")); var_dump(is_string(13)); var_dump(is_string(true));
Saída: bool(true) bool(true) bool(false) bool(false) Perceba que os valores dentro das aspas (simples ou duplas) são consideradas strings, mesmo que se trate de números ou palavras reservadas.
4.1.14 Função settype A função settype atribui um tipo a uma variável.
1
Saída: variavel is now "1"(string) Veja então que a variável que antes era booleana, foi convertida para seu correspondente em string, "1".
4.1.15 Função gettype Esta função retorna qual o tipo da variável, analisando seu conteúdo:
Desenvolvimento Web com PHP
Página 58
4Linux – www.4linux.com.br
Funções Nativas
1
4.1.16 Função unset Esta função apaga da memória determinada variável.
1 2 3 4 5
4.1.17 Função var_dump Esta é uma das funções mais importantes para quem desenvolve em PHP. Ela apresenta detalhes a respeito de uma variável, o que torna mais fácil o reconhecimento de problemas no código. Muito utilizada para compreender o funcionamento de arrays.
1
O código acima irá exibir:
Desenvolvimento Web com PHP
Página 59
4Linux – www.4linux.com.br
Funções Nativas
1 a r ra y ( 3) { 2 []=> 3 int(1) [1]=> 4 5 int(2) 6 [2]=> a r ra y ( 3) { 7 []=> 8 9 string(1) "a" [1]=> 10 string(1) "b" 11 12 [2]=> string(1) "c" 13 } 14 15 }
4.1.18 Função var_export Muio parecida com a função var_dump, porém a saída é um código PHP válido.
1 2 3 4
O código acima irá exibir:
1 a r ra y ( => 1, 2 3 1 => 2, 2 => 4 a r ra y ( 5
Desenvolvimento Web com PHP
Página 60
4Linux – www.4linux.com.br
Funções Nativas
=> ’a’, 6 7 1 => ’b’, 8 2 => ’c’, ), 9 10 )
Desenvolvimento Web com PHP
Página 61
4Linux – www.4linux.com.br
Funções Nativas
4.2 Funções para strings O PHP possui muitas funções nativas para se trabalhar com strings e manipulá-las. A partir de agora, veremos algumas dessas funções, exemplos de como trabalhar com elas, e ver como elas são úteis no dia a dia de um programador PHP.
4.2.1 Função printf A função printf permite que formatemos uma string de diferentes formas.
1 2 3 4 5 6
Dependendo do tipo da variável, especificamos a chave de substituição: • %s = String • %f = Float • %d = Integer
4.2.2 Função sprintf A função sprintf é similar a função printf, mas ao invés de mostrar a string na tela, ela apenas monta a string.
Desenvolvimento Web com PHP
Página 62
4Linux – www.4linux.com.br
1 2 3 4 5 6 7
Funções Nativas
4.2.3 Função vsprintf A função vsprintf é similar a função sprintf, mas ela aceita um array de valores a serem substituídos, ao invés de uma série de parâmetros.
1 2 3 4 5
4.2.4 Função str_replace A função str_replace permite que você substitua uma ou mais strings por outras, dentro de uma string maior. Ela recebe três parâmetros: o que você quer substituir, pelo quê você quer substituir e onde você quer substituir. A função irá retornar a string com as substituições feitas. Veja o exemplo:
1
Desenvolvimento Web com PHP
Página 63
4Linux – www.4linux.com.br
Funções Nativas
3 $ s tr i ng = " O i m u nd o " ; 4 $ n ov a st r in g = s t r_ r ep l ac e ( " O i" , " T c ha u " , $ s tr i ng ) ; 5 6 echo $novastring;
Observe que é possível passar não só uma string para os dois primeiros parâmetros, mas arrays também. Podemos substituir mais de uma palavra por uma string, ou substituir igualmente:
1 2 3 4 5 6 7 8 9 10 11 12
4.2.5 Função htmlentities A função htmlentities transforma caracteres em entidades HTML equivalentes. Um exemplo de quando observamos este comportamento é ao digitar caracteres em editores de texto na web que permitem formatação. Quando escrevemos no editor ’<’ e clicamos para ver como ficou o código HTML, verificamos que o caractere que representa sinal de menor, foi identificado como ’<’. É exatamente isso que esta função faz. Para realizar o processo contrário, ou seja, decodificar os caracteres, usamos a função html_entity_decode ou htmlspe-
Desenvolvimento Web com PHP
Página 64
4Linux – www.4linux.com.br
Funções Nativas
cialchars_decode. 1 2 3 4 5
bo m < / b > d ia ! " ; echo htmlentites($string); / / A s aí da s er á : T en ha u m & lt ; bo m &g t; d ia !
Também podemos enviar outros parâmetros a esta função, se queremos ou não que aspas na string sejam convertidas, bem como indicar qual o tipo de codificação utilizado. No exemplo abaixo com o parâmetro ENT_QUOTES, estamos indicando que as aspas utilizadas na string também devem ser convertidas. 1 2 3 4 5
b om d ia < / b >’ e e u t iv e ." ; echo htmlentities($string , ENT_QUOTES); / / A s aí da s er á : E e la m e d is se : & # 3 9; t e nh a u m & lt ; bo m &g t ;& # 39 ; d ia e eu t iv e.
Observe que para verificar se a saída está correta você precisa ver o código fonte da página.
4.2.6 Função htmlspecialchars Esta função é praticamente idêntica com a função htmlentitles. O diferencial é que na função htmlentitles, todos os caracteres que tem entidades HTML equivalentes, serão convertidos.
1 4 l i nu x < /a > " ;
Desenvolvimento Web com PHP
Página 65
4Linux – www.4linux.com.br
Funções Nativas
3 echo htmlspecialchars ($string , ENT_QUOTES);
Observe que para verificar se a saída está correta você precisa ver o código fonte da página!
4.2.7 Função htmlspecialchars_decode Podemos também realizar o processo inverso, ou seja, ao obter um texto que esteja codificado, podemos transformá-lo em caracteres comuns.
1
Observe que para verificar se a saída está correta você precisa ver o código fonte da página!
4.2.8 Função trim Esta função retira espaços em branco no início e no final de uma string. Além de espaços, esta função remove tabulações e linhas em branco. Também é possível passar por parâmetro outros caracteres queremos remover.
1 2 3 4 5 6
:) " ;
echo $string; $trimmed = trim($string);
Desenvolvimento Web com PHP
Página 66
4Linux – www.4linux.com.br
Funções Nativas
7 echo $trimmed;
Veja que no exemplo acima, usando um simples echo, não conseguimos observar exatamente a saída e que os espaços foram removidos. Para visualizar com mais detalhes o comportamento da string, vamos utilizar a função var_dump, que nos mostrará o número de caracteres existentes na string original e na string modificada.
1 2 3 4 5 6 7
:) " ;
var_dump($string); $trimmed = trim($string); var_dump($trimmed);
Podemos também utilizar um segundo parâmentro para indicar quais caracteres do início e do final da string deverão ser removidos. No exemplo abaixo estamos removendo as letras "Te"do início e "do"do final da string. Assim a saída será "stan".
1 2 3 4 5
= " Te st an do " ;
$trimmed = trim($string , "Tedo"); var_dump($trimmed);
4.2.9 Função ucfirst Esta é uma função bem simples, que recebe como parâmetro uma string e retorna esta string com o primeiro caracter em maiúsculo.
Desenvolvimento Web com PHP
Página 67
4Linux – www.4linux.com.br
1 2 3 4 5 6
Funções Nativas
4.2.10 Função ucwords Parecida com ucfirst, porém a função ucwords converte para maiúsculo os primeiros caracteres de todas as palavras de uma string:
1 2 3 4 5 6
4.2.11 Função lcfirst O retorno desta função é o oposto do que vimos com ucfirst (upper case first). A função lcfirst (lower case first) transforma o primeiro caracter da string em minúsculo.
1
Desenvolvimento Web com PHP
Página 68
4Linux – www.4linux.com.br
Funções Nativas
6 / / S a í da h e ll o W or l d !
4.2.12 Função nl2br Esta função insere a tag
no lugar das newlines presentes na string.
1
Observe que para verificar se a saída está correta você precisa ver o código fonte da página!
4.2.13 Função str_split A função str_split transforma uma string em um array, ou seja, separa a string em pedaços e cada pedaço estará alocado em uma posição de um vetor. Recebe como parâmetro a string que será separada e como segundo parâmetro podemos indicar quantos caracteres deverão ficar em cada posição do vetor. Observe que por padrão, ele irá separar cada caracter em uma posição do vetor:
1 2 3 4 5 6 7
Desenvolvimento Web com PHP
Página 69
4Linux – www.4linux.com.br
Funções Nativas
8 9 // Saída: Array ( [] => O [1] => i [2] => , [3] => [4] => t [5] => u [6] => d [7] => o [8] => [9] => b [1] => e [11] => m [12] => ? )
Já neste segundo exemplo, estamos indicando que queremos separar os caracteres de 5 em 5:
1 2 3 4 5 6 7 8 9
// Sa ída : Arr ay ( [] = > O i , t [1] = > udo b [2] = > e m ? )
4.2.14 Função str_repeat
Esta é uma função simples, que repete a string de acordo com o valor indicado.
1 2 3 4 5
Saída: @@@@@@@@@@
Desenvolvimento Web com PHP
Página 70
4Linux – www.4linux.com.br
Funções Nativas
4.2.15 Função str_pad A função str_pad preenche uma string com espaços em branco ou determinados caracteres afim de que a string fique com o tamanho desejado.
1 2 3 4
Observe que para verificar se a saída está correta você precisa ver o código fonte da página! Podemos também escolher em que posição ficará e quais serão os caracteres de preenchimento:
1 2 3 4 5 6
4.2.16 Função str_shuffle Esta função recebe uma string e tem como retorno o contúdo desta string, porém com seus caracteres misturados.
1
Desenvolvimento Web com PHP
Página 71
4Linux – www.4linux.com.br
Funções Nativas
3 $string = ’labirinto ’; 4 $mix = str_shuffle($string); 5 e ch o $ mi x ;
4.2.17 Função str_word_count
Função simples e muito útil. Conta o número de palavras em uma string. Utilizando o parâmetro 0, mostrará apenas o de palavras. Com o parâmetro 1 mostrará um array com todas as palavras encontradas naquela string. E com o parâmetro 2 retorna um array onde a chave será a posição da palavra dentro da string.
1 2 3 4 5 6 7
Oi [1] = > como [2] = > vai [3] = > voce ) 4
Ou também:
1 2 3 4 5 6 7
Oi [4 ] = > c om o [ 9] = > v ai [ 13 ] = > v oc e ) 4
Desenvolvimento Web com PHP
Página 72
4Linux – www.4linux.com.br
Funções Nativas
4.2.18 Função strchr
Esta função é apenas um apelido para a função strstr
4.2.19 Função strstr
A função strstr encontra a primeira ocorrência de uma string. No exemplo abaixo, mostrará na tela apenas o que for encontrado depois do @:
1 2 3 4 5 6 7
= ’ li n us @ li n ux . o rg ’ ;
$ d om i ni o = s t rs t r ( $e ma il , ’ @ ’) ; echo $dominio; / / S a í da : l in u x . or g
Neste outro exemplo, será mostrado os caracteres encontrados antes do @:
1 2 3 4 5 6
Desenvolvimento Web com PHP
Página 73
4Linux – www.4linux.com.br
Funções Nativas
4.2.20 Função strcmp A funcão strcmp realiza uma comparação entre strings. No exemplo abaixo, como as duas strings são iguais, o retorno é 0. Se a string1 for maior que a string2 o retorno será um valor maior de zero, caso contrário o retorno será menor que zero.
1 2 3 4 5
4.2.21 Função strlen A função strlen retorna o número de caracteres dentro de uma string. Lembrando que espaços também são contabilizados!
1 2 3 4 5 6
4.2.22 Função strpos Retorna a posição onde se encontra determinada ocorrência dentro de uma string. Se a string for encontrada, retorna true, caso contrário, retorna false.
Desenvolvimento Web com PHP
Página 74
4Linux – www.4linux.com.br
1 2 3 4 5 6 7 8
Funções Nativas
= ’7 ’;
$pos = strpos($string , $procurar); i f ( $ p os = == f al se ) { e ch o " A s t ri ng ’ $ pr oc ur a r ’ n ã o f oi e n co n tr a da n a s tr i ng ’$string ’";
9 } else { 10 e ch o " A s t ri ng ’ $ pr oc ur a r ’ f oi e n co n tr a da n a s t ri ng ’ $ st ri ng ’ " ; e ch o " e e xi st e na p os i çã o $ po s "; 11 12 } 13 14 / / S a í da : A s tr in g ’7 ’ f o i e nc on tr ad a n a s t ri ng ’ 1 23 45 67 89 ’ e e xi st e n a p os i çã o 7
Apenas um detalhe. Ao realizar esta busca, use três sinais de igual para realizar a comparação (===). Ao usar apenas dois sinais de igual (==), quando o resultado for a posição 0, a função retornará que a string não foi encontrada, tendo em vista que o valor zero também equivale a false em booleano! Pode fazer o teste!
1 2 3 4 5 6 7 8
9 } else {
Desenvolvimento Web com PHP
Página 75
4Linux – www.4linux.com.br
Funções Nativas
e ch o " A s t ri ng ’ $ pr oc ur a r ’ f oi e n co n tr a da n a s t ri ng ’ $ st ri ng ’ " ; 10 11 e ch o " e e xi st e na p os i çã o $ po s "; 12 } 13 14 / / S a í da : A s t ri n g ’ ’ n ã o f oi e n co n tr a da n a s t ri n g ’ 1 23 45 67 89 ’
Agora usando três sinais de igual para realizar a comparação:
1 2 3 4 5 6 7 8
= ’ ’;
$pos = strpos($string , $procurar); i f ( $ p os = == f al se ) { e ch o " A s t ri ng ’ $ pr oc ur a r ’ n ã o f oi e n co n tr a da n a s tr i ng ’$string ’";
9 } else { 10 e ch o " A s t ri ng ’ $ pr oc ur a r ’ f oi e n co n tr a da n a s t ri ng ’ $ st ri ng ’ " ; e ch o " e e xi st e na p os i çã o $ po s "; 11 12 } 13 14 / / Sa í da : A s tr in g ’ ’ f oi e nc on tr ad a n a s tr in g ’ 1 23 45 67 89 ’ e e xi st e n a p os i çã o
4.2.23 Função strrpos Muito parecida com a função strpos, a função strrpos apresenta a última ocorrência de um caracter em uma string. No exemplo abaixo, observe que agora ao buscar o número zero, ele indica que sua posição é a 10 e não mais a zero.
Desenvolvimento Web com PHP
Página 76
4Linux – www.4linux.com.br
1 2 3 4 5 6 7 8
Funções Nativas
= ’ ’;
$pos = strrpos($string , $procurar); if ( $p os == f al se ) { e ch o " A s t ri ng ’ $ pr oc ur a r ’ n ã o f oi e n co n tr a da n a s tr i ng ’$string ’";
9 } else { 10 e ch o " A s t ri ng ’ $ pr oc ur a r ’ f oi e n co n tr a da n a s t ri ng ’ $ st ri ng ’ " ; e ch o " e e xi st e na p os i çã o $ po s "; 11 12 } 13 14 / / Sa í da : A s tr in g ’ ’ f oi e nc on tr ad a n a s tr in g ’ 12 3 45 6 78 9 1 2 34 5 67 8 9 ’ e e x is t e n a p os i ç ã o 1
4.2.24 Função strripos Faz a mesma coisa que a função strrpos, porém não é case sensitive. Ou seja, irá pesquisar pela última ocorrência de um caracter em uma string, ignorando se a letra está maiúscula ou minúscula.
1 2 3 4 5 6 7
= ’a ’;
$pos = strrpos($string , $procurar); i f ( $ p os = == f al se ) { e ch o " A s t ri ng ’ $ pr oc ur a r ’ n ã o f oi e n co n tr a da n a s tr i ng ’$string ’";
8 } else {
Desenvolvimento Web com PHP
Página 77
4Linux – www.4linux.com.br
Funções Nativas
e ch o " A s t ri ng ’ $ pr oc ur a r ’ f oi e n co n tr a da n a s t ri ng ’ $ st ri ng ’ " ; 9 10 e ch o " e e xi st e na p os i çã o $ po s "; 11 } 12 13 ?> 14 15 / / Sa í d a : A s t ri n g ’ a ’ f o i e n co n tr a da n a s t ri n g ’ a b cd e AB C DE a bc d eA B CD E ’ e e x is t e n a p os i ç ã o 1 5
Perceba então, que o caracter ’a’ apesar está na posição 0, 5, 10 e 15, é apresentado como última ocorrência na posição 15, mesmo que o ’A’ que está na posição 15 esteja em maiúsulo.
4.2.25 Função stripos Faz a mesma coisa que a função strpos, porém não é case sensitive. Ou seja, irá pesquisar pela primeira ocorrência de um caracter em uma string, ignorando se a letra está maiúscula ou minúscula.
1 2 3 4 5 6 7 8
= ’A ’;
$pos = stripos($string , $procurar); i f ( $ p os = == f al se ) { e ch o " A s t ri ng ’ $ pr oc ur a r ’ n ã o f oi e n co n tr a da n a s tr i ng ’$string ’";
9 } else { e ch o " A s t ri ng ’ $ pr oc ur a r ’ f oi e n co n tr a da n a s t ri ng ’ $ st ri ng ’ " ; 10 11 e ch o " e e xi st e na p os i çã o $ po s "; 12 } 13
Desenvolvimento Web com PHP
Página 78
4Linux – www.4linux.com.br
Funções Nativas
14 / / Sa í da : A s tr in g ’ a’ f oi e nc on tr ad a n a s tr in g ’ a b cd e AB C DE a bc d eA B CD E ’ e e x is t e n a p os i ç ã o
Perceba então, que o caracter ’A’ apesar está na posição 0, 5, 10 e 15, é apresentado como primeira ocorrência na posição 0, mesmo que o ’a’ que está na posição 0 esteja em minúsculo.
4.2.26 Função substr Esta função retorna uma parte de uma string. No exemplo abaixo, quero que a saída seja o caracter na posição zero até o caracter que está na penúltima posição (-1):
1 2 3 4 5 6
Agora quero retornar os valores da posição 1 até a posição 5:
1 2 3 4 5 6
Desenvolvimento Web com PHP
Página 79
4Linux – www.4linux.com.br
Funções Nativas
4.2.27 Função substr_replace A função substr_replace, como o nome já diz, substitui uma string por outra. No exemplo abaixo iremos substituir a palavra cedo por tarde:
1 2 3 4 5 6 7
\ n" ; e ch o s u bs t r_ r ep l ac e ( $ va r , ’ t ar de ’ , - 5, - 1) . " < br / > \ n" ; / / S a í da : h oj e a c or d ei m ui t o t a rd e .
Neste exemplo iremos substituir a palavra cedo por um espaço vazio, ou seja, estaremos deletando a plavra da string:
1 2 3 4 5 6 7
\ n" ; e ch o s u bs t r_ r ep l ac e ( $ va r , ’ ’, 1 2 , - 1) . " < br / > \ n" ; / / S a í da : h oj e a c or d ei .
4.2.28 Função strtoupper Função simples que retorna a string de entrada em letras maiúsculas.
1
Desenvolvimento Web com PHP
Página 80
4Linux – www.4linux.com.br
Funções Nativas
3 $ st ri ng = " Lu ke , e u s ou s eu p ai ! " ; 4 echo strtoupper($string); 5 6 / / Sa í da : L UK E , E U S OU S EU P AI !
4.2.29 Função strtolower Faz a mesma coisa que a função anterior porém ao contrário, ou seja, apresenta a string em caixa baixa.
1 2 3 4 5 6
Desenvolvimento Web com PHP
Página 81
4Linux – www.4linux.com.br
Funções Nativas
4.3 Funções para arrays 4.3.1 Ordenação de arrays Existem várias funções nativas no PHP para ordenarmos arrays. Na tabela abaixo você pode ver as funções mais comuns e suas diferenças, servindo de referência rápida na hora de ordenar um array.
4.3.2 Função array_map A função array_map permite que todos os elementos de um array sejam modificados por uma função, sem a necessidade de criar um loop, passando cada elemento para a função. Exemplo:
Desenvolvimento Web com PHP
Página 82
4Linux – www.4linux.com.br
1 2 3 4 5 6 7 8 9 10
Funções Nativas
No exemplo acima, a função cubo recebe um valor como parâmetro e retorna seu valor multiplicado por ele mesmo três vezes. Isso eqüivale ao número ao cubo. Logo depois encontramos um arras denominado $a com 5 valores. Abaixo encontramos um arras $b que chama a função array_map. Esta função está chamando a função cubo e passando o array $a para que cada número dentro deste array seja calculado dentro da função cubo. Como resultado, encontramos:
1 Array ( [] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
4.3.3 Função array_filter A função array_filter, filtra o conteúdo de um array de acordo com a ação de alguma função.
1
Desenvolvimento Web com PHP
Página 83
4Linux – www.4linux.com.br 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Funções Nativas
r et u rn ( $ v a ri a ve l & 1 ) ; } function par($variavel) { return(!($variavel & 1)); } $ ve to r = a rr ay (6 , 7 , 8 , 9 , 1 , 11 , 1 2) ; e ch o " I m p ar e s : \ n " ; print_r(array_filter($vetor, "impar")); e ch o " P a re s : \ n " ; print_r(array_filter($vetor, "par"));
O código acima irá exibir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Impares: Array ( [1] => 7 [3] => 9 [5 ] = > 11 ) Pares: Array ( [] => 6 [2] => 8 [4 ] = > 1 [6 ] = > 12 )
Desenvolvimento Web com PHP
Página 84
4Linux – www.4linux.com.br
Funções Nativas
4.3.4 Função array_chunk A função de array_chunk divide um array em pedaços, retornando assim um array multidimensional.
1
O código acima irá exibir:
1 Array 2 ( [ ] = > A rr ay 3 4 ( [] => 5 [1] => 6 7 [2] => 8 ) 9 10 [ 1] = > A rr ay 11 ( [] => 12 13 [1] => 14 [2] => ) 15 16 17 [ 2] = > A rr ay ( 18 [] => 19 20 [1] => h [2] => 21 ) 22
a b c
d e f
g i
Desenvolvimento Web com PHP
Página 85
4Linux – www.4linux.com.br
Funções Nativas
23 24 )
Perceba então que o array original com 9 itens foi separado em 3 arrays, com 3 itens cada.
4.3.5 Função array_combine Esta função une dois arrays, sendo um array usado para as chaves e outro para os itens.
1 2 3 4 5 6 7
Desta forma teremos o vetor1 indicando o índice do vetor e vetor2 indicando os valores. O código acima irá exibir:
1 Array 2 ( 3 [1] => um [2] => dois 4 5 [ 3] = > t rê s 6 )
Desenvolvimento Web com PHP
Página 86
4Linux – www.4linux.com.br
Funções Nativas
4.3.6 Função array_diff Usado para verificar diferenças entre os valores de um array.
1 2 3 4 5 6
" a m or " , " p a ix ã o " , " c a ri n ho " , " s a ud a de " ) ; $ v et o r2 = a r ra y ( " b" = > " a m or " , " p a ix ã o " , " s a ud a de " ) ; $resultado = array_diff($vetor1 , $vetor2); print_r($resultado);
O código acima irá exibir:
1 Array 2 ( [ 1] = > c a ri n ho 3 4 )
4.3.7 Função array_merge Faz a união/fusão entre um ou mais vetores, retornando o vetor resultante. Se os vetores tiverem a mesma chave string, o último valor irá sobrescrever o primeiro. Porém se a chave for numérica, o valor não será sobrescrito e sim adicionado ao vetor resultante.
1 " v er me lh o " , 2 , 4 ); 4 $ ve to r2 = a rr ay ( " a" , " b ", " c or " = > " v er de " , " f or ma " = > "trapezoide", 4);
Desenvolvimento Web com PHP
Página 87
4Linux – www.4linux.com.br
Funções Nativas
5 $resultado = array_merge($vetor1 , $vetor2); 6 print_r($resultado);
O código acima irá exibir:
1 Array 2 ( 3 [ c or ] = > v er d e [] => 2 4 5 [1] => 4 6 [2] => a [3] => b 7 [ f o rm a ] = > t r ap e zo i de 8 9 [4] => 4 10 )
Perceba que a cor verde sobrepôs a cor vermelha ao realizar o merge, pois estavam utilizando o mesmo índice (string). Quando o índice era numérico não houve sobreposição, então os demais valores foram apenas unidos, formando assim um novo array.
4.3.8 Função array_fill Preenche um array com valores pré-determinados.
1
O código acima irá exibir:
Desenvolvimento Web com PHP
Página 88
4Linux – www.4linux.com.br
1 Array 2 ( 3 [ 5] [ 6] 4 5 [ 7] 6 )
Funções Nativas
= > Pr ee nc he nd o = > Pr ee nc he nd o = > Pr ee nc he nd o
Onde o valor 5 indica o índice, ou seja, o vetor será preenchido a partir daquele índice. O valor 3 indica o número de itens a serem acrescentados.
4.3.9 Função array_flip Retorna um array com os valores invertidos, ou seja, ou índices passam a ser os valores e os valores passam a ser os índices 1 2 3 4 5 6
, " b" = > 1 , " c" = > 2) ; $vetor = array_flip($vetor); print_r($vetor);
O código acima irá mostrar: 1 Array 2 ( 3 [] => a [1] => b 4 [2] => c 5 6 )
Desenvolvimento Web com PHP
Página 89
4Linux – www.4linux.com.br
Funções Nativas
4.3.10 Função array_reduce
Esta função reduz o vetor a um único valor, utilizando para isso uma função.
1 2 3 4 5 6 7 8 9
Saída: 15
4.3.11 Função array_key_exists
Verifica se uma chave ou valor existe em um vetor.
1 2 3 4 5 6
1 , " b" = > 2) ; i f ( a r r a y_ k ey _ e xi s ts ( " b " , $ v et o r ) ) { e ch o " O e le me nt o ’ b’ e st á no a rr ay ! " ; }
Desenvolvimento Web com PHP
Página 90
4Linux – www.4linux.com.br
Funções Nativas
4.3.12 Função array_search Esta função faz uma busca em um vetor por um valor. Ao encontrá-lo, retorna a chave indicando a posição em que o valor se encontra.
1 2 3 4 5
’a ’ , 1 = > ’b ’ , 2 = > ’c ’ , 3 = > ’d ’) ; $ c ha ve = a r ra y _s e ar c h ( ’d ’ , $ v et o r ) ; echo $chave;
Saída: 3
4.3.13 Função array_slice Esta função retorna uma parte de um vetor.
1 2 3 4
Onde 0 indica o índice do primeiro valor e 3 indica o número de itens que deve ser apresentado. Saída:
1 Array 2 ( [] => a 3
Desenvolvimento Web com PHP
Página 91
4Linux – www.4linux.com.br 4 5 6 7 )
Funções Nativas
[1] => b [2] => c
4.3.14 Função array_splice Esta função remove uma parte do vetor e subsitui com outros valores.
1
Neste exemplo, o item amarelo será removido e substituído pelos valores preto e marrom. Sendo assim o valor do vetor será: ("vermelho", "verde", "azul", "preto", "marrom")
4.3.15 Função array_replace Substitui valores de um vetor
1 2 3 4 5
" a ba ca xi " , 4 = > " c er ej a " ); print_r(array_replace($vetor, $substituir)); ?>
Saída:
Desenvolvimento Web com PHP
Página 92
4Linux – www.4linux.com.br
Funções Nativas
1 Array 2 ( [ ] = > a b ac a xi 3 4 [ 1] = > b a na n a [ 2] = > m aç ã 5 [ 3] = > m am ã o 6 7 [ 4] = > c e re j a 8 )
4.3.16 Função array_sum Função simples, que retorna a soma dos valores do vetor.
1
Saída: 11
4.3.17 Função array_unique Pesquisa por valores duplicados no array, removendo-os.
1 " v er de " , 2 = > " v er me lh o ", 3 = > " ve rd e" , 4 = > " a z ul " , 5 = > " v e r me l ho " ) ;
Desenvolvimento Web com PHP
Página 93
4Linux – www.4linux.com.br
Funções Nativas
4 $resultado = array_unique( $vetor); 5 print_r($resultado);
O código acima irá mostrar:
1 Array 2 ( [ 1] = > v er de 3 4 [ 2] = > v e rm e lh o 5 [ 4] = > a zu l 6 7 )
4.3.18 Função array_walk
Aplica uma função a cada item do vetor.
1 2 3 4 5 6 7 8 9
\ n " ; } array_walk($frutas , ’test_print ’);
Desenvolvimento Web com PHP
Página 94
4Linux – www.4linux.com.br
Funções Nativas
4.3.19 Função in_array Mais uma função que verifica se determinado valor está presente em um vetor.
1 2 3 4 5 6
4.3.20 Função sizeof É sinônimo para a função count().
4.3.21 Função count A função count conta o número de itens em um vetor.
1 2 3 4 5
Saída: 4
Desenvolvimento Web com PHP
Página 95
4Linux – www.4linux.com.br
Funções Nativas
4.3.22 Função serialize A função serialize permite que você transforme um array em uma string, que pode ser armazenada de várias formas diferentes.
1
4 serialize($array);
No exemplo acima a variável contém um array multidimensional e utilizamos a função serialize para armazenar estes dados como uma string.
4.3.23 Função unserialize Faz o processo contrário ao serialize, ou seja, converte os dados armazenados no banco de dados, em PHP.
Desenvolvimento Web com PHP
Página 96
4Linux – www.4linux.com.br
Funções Nativas
4.4 Outras funções
4.4.1 Função mail
A função mail, como o próprio nome diz, permite o envio de e-mails através do PHP.
1
Onde: [email protected] refere-se ao destinatário Assunto é a string que indica o assunto do e-mail E no parâmetro final temos a mensagem, que preferencialmente deve ser colocada em uma variável.
4.4.2 Função md5
A função md5 calcula o hash md5 de uma string.
1
Desenvolvimento Web com PHP
Página 97
4Linux – www.4linux.com.br
Funções Nativas
4.4.3 Função sha1 Assim como a função md5(), existem outras, relacionadas a outros tipos de algoritmos de hash como por exemplo sha1(), crc32(), etc. A função sha calcula a hash sha1 de uma string.
1
Também é possível utilizar a função sha1_file() para criar um hash de um arquivo utilizando o algoritmo sha1.
4.4.4 Função hash Ainda é possível utiliza a função hash, que permite escolhermos qual tipo de algoritmo de hash enviar como parâmetro para a função:
1
Desenvolvimento Web com PHP
Página 98
Capítulo 5 Funcionalidades Web
4Linux – www.4linux.com.br
Funcionalidades Web
5.1 Protocolo HTTP Toda aplicação web, seja ela construída utilizando PHP, Python, Ruby, Java ou qualquer outra linguagem, vive sob as normas e especificações do protocolo HTTP. O protocolo HTTP, HyperText Transfer Protocol, define como mensagens são formatadas e transmitidas, além de quais ações servidores web e navegadores devem tomar em resposta a vários comandos diferentes. Por exemplo, quando você coloca uma URL em seu navegador, isso na verdade envia um comando HTTP para o servidor web desta página, que irá localizar o documento que você quer ver e transmiti-lo para seu navegador. O protocolo HTTP é um protocolo stateless, já que cada comando é executado independentemente, sem qualquer conhecimento dos comandos que vieram antes dele ou que virão depois dele. Este é o principal motivo do desenvolvimento de aplicações para web ser tão diferente e peculiar, comparado com o desenvolvimento de software em geral. Um protocolo stateless é um protocolo onde seus comandos são independentes, assim como nossos scripts PHP. Eles são executados e terminados, sem qualquer persistência na memória. Coincidência? Não, o PHP foi feito com a web e o protocolo HTTP em mente. São definidos no protocolo HTTP oito métodos que indicam a ação a ser realizada a partir de uma requisição. Os oito métodos são GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS e CONNECT.
Desenvolvimento Web com PHP
Página 100
4Linux – www.4linux.com.br
Funcionalidades Web
5.2 Sessões O protocolo HTTP é stateless, portanto, cada requisição GET, POST, PUT, etc. é independente. Não é possível saber se o GET feito há 5 minutos foi feito por mim ou por outro usuário. Isso complica um pouco a nossa vida quando queremos criar, por exemplo, aplicações com autenticação, com partes da aplicação acessíveis somente por um usuário específico. Para contornar este problema, existe a sessão. A sessão pode ser criada pelo PHP, que irá identificar o usuário e manter uma sessão viva para ele. Cada visitante terá uma sessão e através dela poderemos identificar quem é que, inclusive, autenticálos. O tempo de vida de uma sessão é, por padrão, 24 minutos. Esse valor pode ser alterado na configuração do PHP, alterando a diretiva session.gc_maxlifetime .
Desenvolvimento Web com PHP
Página 101
4Linux – www.4linux.com.br
Funcionalidades Web
5.3 Cookies Um cookie é uma forma de armazenar informações no navegador de um usuário. O navegador guarda informações de um website que podem ser acessadas posteriormente por este website, até que o cookie expire ou seja removido. Essas informações podem ser criadas, alteradas, removidas e acessadas somente pelo website de origem. Podemos utilizar cookies para vários fins, mas seu uso mais comum é para salvar as preferências do usuário na sua aplicação (língua padrão, cor do texto, se ele gosta de café ou chá, etc.). Também é comum utilizar cookies para manter um usuário logado em nosso sistema, mesmo que a sessão expire. Cookies possuem um tempo de vida, definido pelo website que o criou. O navegador irá removê-los automaticamente quando este tempo de vida expirar, mas o usuário sempre poderá limpar os cookies de seu navegador manualmente.
Desenvolvimento Web com PHP
Página 102
4Linux – www.4linux.com.br
Funcionalidades Web
5.4 5.4 GET GET e POS POST T O método GET serve para fazer uma requisição de recurso, seja este recurso uma página web (HTML), um script (PHP) ou qualquer outro arquivo, como uma imagem ou um vídeo. vídeo. Uma vez feita a requisição, requisição, o servidor irá retornar o recurso pedido. pedido. O método POST serve para enviar dados a serem processados pelo recurso especificado. Os dados a serem processados são sempre inclusos no corpo do método POST. É através do método POST que é possível preencher e processar formulários na web.
Desenvolvimento Web com PHP
Página 103
4Linux – www.4linux.com.br
Funcionalidades Web
5.5 Headers Headers HTTP Já falamo falamoss do protocolo protocolo HTTP e de suas requisiçõ requisições. es. Toda requisição requisição possui possui um corpo e toda requisição deve deve receber uma resposta. resposta. Headers HTTP, HTTP, ou cabeçalhos cabeçalhos HTTP, HTTP, são estes corpos. corpos. Eles carregam carregam informações informações de requisiç requisições ões e resposta respostas, s, especificando especificando os métodos utilizados, utilizados, seus parâmetros parâmetros e suas informações. informações. Por Por exemplo, exemplo, quando colocamos uma URL em nosso navegador navegador e apertamos enter, a seguinte requisição é enviada: enviada:
minhapagina.php HTTP/1.1 HTTP/1.1 1 GET / minhapagina.php Host: meusite.com meusite.com 2 Host: 3 U se se r - A g e nt nt : M o zi zi l la la / 5 . ( X 11 11 ; L in i n u x i 68 6 8 6 ) A p pl pl e We W e b Ki K i t / 5 3 4. 4. 3 (KHTML, (KHTML, like like Gecko) Gecko) Ubuntu/1.1 Ubuntu/1.1 Chromium/12..742. Chromium/12..742.112 112 Chrome/12..742. Chrome/12..742.112 112 Safari/534.3 Safari/534.3
4 Accept: text/htm text/html l ,application/xhtml+xm ,application/xhtml+xml l ,application/xml;q=.9,*/ ,application/xml;q=.9,*/*;q=.8 *;q=.8
5 6 7 8 9 10 11 12
AcceptAccept- Language: Language: en-us,en;q=.5 en-us,en;q=.5 Accept Accept -Encoding: gzip gzip ,deflate ,sdch AcceptAccept- Charset: Charset: ISO ISO -8859-1,ut -8859-1,utf f -8;q=.7,*;q=.7 -8;q=.7,*;q=.7 KeepKeep- Alive: Alive: 3 Connection: Connection: keep-alive keep-alive Cookie: Cookie: PHPSESSID=r2t5uvjq435r PHPSESSID=r2t5uvjq435r4q7ib3vtd 4q7ib3vtdjq12 jq12 Pragma: Pragma: no-cache no-cache CacheCache- Control: Control: no-cache
Após essa requisição, requisição, nosso navegador receberá receberá uma resposta. Que parece mais ou menos com isto:
1 2 3 4
H TT T T P / 1. 1. x 2 O K Transfer Transfer -Encoding: chunked D at at e : T h u , 1 8 A ug ug 2 1 1 1 1 4: 4 : 38 3 8 :1 : 1 4 G MT MT Server: Server: Apache Apache
Desenvolvimento Web com PHP
Página 104
4Linux – www.4linux.com.br 5 6 7 8 9 10 11 12 13 14
Funcionalidades Web
Connection: Connection: close close Pragma: Pragma: public public Etag: Etag: "be65d4792fe1a9d5bebcad "be65d4792fe1a9d5bebcad7dfdd825" 7dfdd825" CacheCache- Control: Control: maxmax- age=36, age=36, public public Conten Content t -Type: text/html; text/html; charset=UT charset=UTF F -8 L as as t - M o d if i f i ed ed : T hu hu , 1 8 A ug ug 2 1 1 1 1 4 :3 : 3 8 :1 :1 4 G MT MT Content Content -Encoding : gzip Vary: Vary: Accept-Encod Accept-Encoding ing , Cookie, Cookie, User-Agent User-Agent C O NT NT E Ú DO D O D A P À G IN I N A A QU QU I
Isso, basicamente, são cabeçalhos HTTP. Os cabeçalhos contém informações sobre a requisição e a resposta. Quando estamos em um script PHP, podemos manipular o conteúdo do cabeçalho da resposta. Para manipular o cabeçalho HTTP, usamos a função header(). A mani manipu pula laçã çãoo mais mais simp simple less de cabe cabeça çalh lhoo HT HTTP TP é a mani manipu pula laçã çãoo do loca locall da pági página na.. Ao trocarmos o valor do local da página, faremos com que o navegador redirecione para o novo valor. Por exemplo:
1
Quando entrarmos nesse script PHP, seremos redirecionados para a página inicial da 4Linux. Podemos também manipular os cabeçalhos HTTP e dizer que a página não é realmente uma página, e sim, um arquivo qualquer. Por exemplo:
1
Desenvolvimento Web com PHP
Página 105
4Linux – www.4linux.com.br
Funcionalidades Web
6 readfile(’4Linux.pdf’);
No código acima estamos alterando o tipo de conteúdo da página e sua disposição. Agora o navegador sabe que está acessando não uma página web, mas um arquivo PDF. Através da manipulação do Content-Disposition, o navegador irá baixar o arquivo ao invés de exibi-lo. Na terceiro linha, usamos a função readfile para carregar o conteúdo do arquivo 4Linux.pdf em nosso script.
Desenvolvimento Web com PHP
Página 106
4Linux – www.4linux.com.br
Funcionalidades Web
5.6 Variáveis superglobais No PHP, existem variáveis nativas que estão disponíveis em qualquer escopo. Elas são, na maioria das vezes, arrays bidimensionais ou multidimensionais. As variáveis supergloais são essenciais para qualquer aplicação web. Já vimos um pouco sobre POST e GET e logo logo veremos como trabalhar com eles no PHP.
5.6.1 $_SERVER Contém informações sobre ambiente de execução do script. Caso o script esteja sendo rodado em um servidor web, informações sobre o cliente e o servidor serão exibidas. Caso o script esteja sendo executado da linha de comando, informações sobre a máquina e o shell serão exibidas.
5.6.2 $_ENV Contém todas as variáveis do ambiente de execução. É muito comum utilizarmos a $_ENV quando estamos desenvolvendo scripts de linha de comando e precisamos acessar variáveis de ambiente definidas por outros processos ou o usuário.
5.6.3 $_GET Contém variáveis passadas para o script usando o método HTTP GET, isto é, através da URL.
1
Desenvolvimento Web com PHP
Página 107
4Linux – www.4linux.com.br
Funcionalidades Web
Sendo que, na URL, eu chamei o script desta forma: http://www.meusite.com.br/teste.php?meunom
5.6.4 $_POST Contém variáveis passadas para o script usando o método HTTP POST, isto é, através de um formulário. 1 2 3 4 5 6 7 8 9 10 11
5.6.5 $_SESSION Contém variáveis definidas durante a sessão do navegador. Deve ser usada junto com a função session_start(). 1 2 3 4 5 6
Desenvolvimento Web com PHP
Página 108
4Linux – www.4linux.com.br
Funcionalidades Web
5.6.6 $_COOKIE A variável superglobal $_COOKIE contém as informações de nosso cookie, armazenadas em um array. Para criar um cookie, utilizamos a função setcookie(). 1
Podemos determinar o tempo de vida de um cookie passando um terceiro parâmetro para a função. Este terceiro parâmetro é a data de expiração do cookie, no formato de timestamp UNIX. Para definirmos essa data de forma mais amigável e legível, vamos utilizar a função strtotime() que converte uma frase de data em uma timestamp UNIX. 1
Nosso cookie irá expirar em um mês a partir da data de hoje.
5.6.7 $_REQUEST Contém informações sobre as superglobais $_GET, $_POST e $_COOKIE. Não é uma boa prática utilizá-la, nem muito seguro.
5.6.8 $_FILES Contém informações sobre arquivos enviados através de um formulário.
Desenvolvimento Web com PHP
Página 109
4Linux – www.4linux.com.br
Funcionalidades Web
5.6.9 $GLOBALS Contém todas as variáveis disponíveis no escopo global
1 2 3 4 5 6 7 8 9 10 11
’; e ch o " \ $ c ar r o n o e s co p o l oc a l : $ c ar r o " ; } $ c ar ro = " F i es t a g l ob al " ; echo carro();
Desenvolvimento Web com PHP
Página 110
4Linux – www.4linux.com.br
Funcionalidades Web
5.7 Formulários Processamento de formulários é uma das tarefas mais comuns quando estamos trabalhando com aplicações web. É através dos formulários que nossos usuários podem manipular e gerenciar informações, portanto é possível dizer que os formulários são a pedra filosofal das aplicações web. Quando um formulário é enviado, suas informações são enviadas para algum lugar através do método POST. Este "algum lugar"irá interpretar as informações e fazer "alguma coisa"com elas. Como fazemos essa teoria virar prática? Fácil. Já conhecemos o protocolo, seus métodos e variáveis superglobais no PHP. Para montar um formulário e processá-lo, só nos falta criar o formulário: exemplos/formulario.html 1 2 3 4 5 6 7 8 9 10 11 12 13
Meu formulário
Nosso formulário é bem simples. Observe que o campo action está direcionando para o arquivo processa.php. É este arquivo que vai receber a requisição POST e processar as informações do nosso formulário vindas no cabeçalho. Não temos ele ainda, certo? Então vamos criá-lo: exemplos/processa.php 1
Desenvolvimento Web com PHP
Página 111
4Linux – www.4linux.com.br
Funcionalidades Web
2 3 e ch o " R e ce b i u m f o rm u l á ri o d e { $ _P O ST [ ’ n o me ’ ]} , c om o e ma i l {$_POST[’ email ’]}.";
Não é um processamento muito rebuscado, mas ainda é um exemplo. Observe que estamos pegando as informações de nosso formulário utilizando a variável superglobal $_POST. A partir deste exemplo, podemos fazer qualquer coisa. Guardar estas informações em um arquivo, um banco de dados, enviar por email, etc. Agora, observe este segundo exemplo. Não vamos mais ter o formulário em uma página e processá-lo em outra, vamos fazer tudo em uma só página. exemplos/formulario.php 1
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
} ?>
Meu formulário
Note que o campo action está vazio. Quando o campo action de um formulário está
Desenvolvimento Web com PHP
Página 112
4Linux – www.4linux.com.br
Funcionalidades Web
vazio, ele irá fazer a requisição para a própria página. Note também que temos uma condição envolvendo nosso echo. Essa condição serve para executarmos aquele bloco de código somente quando recebermos uma requisição POST. Mas porque isso? Porque não queremos acessar a variável superglobal $_POST sem que ela possua valores, senão, teremos alguns erros em nossa página.
Desenvolvimento Web com PHP
Página 113
Capítulo 6 Banco de Dados
4Linux – www.4linux.com.br
Banco de Dados
6.1 O que é um banco de dados? Durante a maior parte do tempo como um desenvolvedor, você irá criar ou encontrar aplicações que utilizam alguma forma de armazenamento de dados. Estes dados podem estar sendo armazenados em simples arquivos no sistema de arquivos de máquina, ou podem estar sendo armazenados em estruturas mais complexas como um banco de dados. Bancos de dados, em sua grande maioria, são constituídos com base nas relações existentes entre suas entidades, dando o nome de bancos de dados relacionais. Um banco de dados é um conjunto de registros organizados em uma estrutura prédefinida. Ele é composto de tabelas, linhas e colunas. As tabelas são como pastas, onde guardamos vários tipos de informações. Linhas são os registros dentro dessas "pastas"e as colunas são tipos de informações que as linhas possuem. Em outras palavras, as colunas definem a estrutura dos dados e as linhas são os dados em si.
Desenvolvimento Web com PHP
Página 115
4Linux – www.4linux.com.br
Banco de Dados
6.2 O que é SQL? SQL, conhecida como Structured Query Language, é uma linguagem de programação declarativa, criada para gerenciar informações em um sistema gerenciador de banco de dados. É com a SQL que podemos criar, alterar, remover e ler informações de nosso banco de dados. Existem dois grandes tipos de comandos SQL: uma declaração e uma consulta. Em uma consulta, ou query, especificamos cláusulas e expressões para ler informações do banco. Em uma declaração, fazemos o mesmo, mas com o objetivo de executar algo (como uma remoção, alteração, etc.).
Desenvolvimento Web com PHP
Página 116
4Linux – www.4linux.com.br
Banco de Dados
6.3 MySQL O MySQL é um sistema de gerenciamento de banco de dados, que utiliza a linguagem SQL como interface. Ele foi inventado em 1994 e sua primeira versão lançada em 1995. Desde o surgimento do PHP 3, o MySQL tornou-se um fiel aliado, sendo usados juntos na maioria dos projetos para web. Um banco de dados é nada mais, nada menos, que um conjunto de registros organizados. Desde a versão 3, o PHP possui um suporte muito sólido ao MySQL. Hoje, na versão 5, existem três formas de nos comunicarmos com um banco de dados MySQL. Existe a extensão MySQL clássica, que existe desde a versão 3, e existe também a extensão MySQL Improved (mysqli), adicionada na versão 5. E, é claro, a extensão PDO (PHP Data Objects), também adicionada na versão 5. Neste curso, aprenderemos a trabalhar com a extensão clássica. No segundo curso da Formação PHP da 4Linux trabalharemos com o PDO.
6.3.1 Instalando o MySQL
A grande maioria das distribuições Linux possuem pacotes do MySQL em seus repositórios. Isso nos ajuda muito e torna a instalação do MySQL muito simples e rápida. Abra o shell, logue como root e use o gerenciador de pacotes para instalar o MySQL:
1 su 2 apt- get update 3 apt- get install mysql-server
Durante a instalação o MySQL irá pedir para você definir uma senha padrão para o usuário root no MySQL. Escolha uma senha ou coloque 123456.
Desenvolvimento Web com PHP
Página 117
4Linux – www.4linux.com.br
Banco de Dados
6.3.2 Trabalhando com o MySQL Podemos trabalhar com o MySQL através da linha de comando ou através de aplicativos gráficos, que facilitam a administração de bancos de dados. Mas, antes de conhecer as ferramentas gráficas e suas vantagens, vamos ver como podemos trabalhar com o MySQL através do shell. Abra o shell e inicie o MySQL:
1 m ys ql - u r oo t - p
O MySQL irá pedir a senha do usuário root. Por padrão, essa senha é definida por você durante a instalação do MySQL. Uma vez dentro do shell do MySQL, podemos começar a interagir com o sistema gerenciador de banco de dados utilizando a linguagem SQL. Antes de trabalharmos em um banco de dados, precisamos selecionálo para uso. No mySQL, fazemos isso utilizando o comando USE:
1 USE nomedobanco;
Desenvolvimento Web com PHP
Página 118
4Linux – www.4linux.com.br
Banco de Dados
6.4 PostgreSQL
O PostgreSQL é um poderoso sistema gerenciador de banco de dados objeto-relacional de código aberto e 100% livre. O PostgreSQL é considerado o banco de dados livre mais avançado do mundo por várias razões. Suporta largamente os padrões ANSI-SQL 92/99 e respeita a normativa ACID. É altamente extensível, tem vários tipos de índices para diversos tipos de aplicações. Ele é utilizado em larga escala por empresas como Skype, Caixa Econômica Federal e Datasus. O PHP trabalha muito bem com o PostgreSQL e, assim como o MySQL, possui extensões nativas para trabalhar com ele. Existem duas formas de nos comunicarmos com um banco de dados PostgreSQL: a primeira, utilizando a extensão pgsql, e a segunda, utilizando o PDO. Neste curso vamos conhecer a extensão pgsql e como usá-la para fazer nossas aplicações interagirem com um banco de dados PostgreSQL.
6.4.1 Instalando o PostgreSQL
A grande maioria das distribuições Linux possuem pacotes do PostgreSQL em seus repositórios. Isso nos ajuda muito e torna a instalação do PostgreSQL muito simples e rápida. Abra o shell, logue como root e use o gerenciador de pacotes para instalar o PostgreSQL:
1 su 2 apt- get update 3 apt- get install postgresql
Desenvolvimento Web com PHP
Página 119
4Linux – www.4linux.com.br
Banco de Dados
6.4.2 Trabalhando com o PostgreSQL Podemos trabalhar com o PostgreSQL através da linha de comando ou através de aplicativos gráficos, que facilitam a administração de bancos de dados. Mas, antes de conhecer as ferramentas gráficas e suas vantagens, vamos ver como podemos trabalhar com o PostgreSQL através do shell. Para trabalhar com o PostgreSQL, você precisa estar logado como o superusuário postgres.
1 s u - p o st g re s
Agora você pode abrir o cliente do PostgreSQL:
1 psql
Uma vez dentro do shell do PostgreSQL, podemos começar a interagir com o sistema gerenciador de banco de dados utilizando a linguagem SQL. Antes de trabalharmos em um banco de dados, precisamos selecioná-lo para uso. No PostgreSQL, fazemos isso pela linha de comando passando um parâmetro para o psql:
1 psql nomedobanco
Desenvolvimento Web com PHP
Página 120
4Linux – www.4linux.com.br
Banco de Dados
6.5 SQLite O SQLite é um sistema gerenciador de banco de dados embutido escrito utilizando a linguagem de programação C. O SQLite é distribuído como uma biblioteca que pode ser facilmente embarcada em sua aplicação, sem a necessidade de um processo ou o uso de um sistema gerenciador de banco de dados externo. Ele é 100% livre e de código aberto. O SQLite é muito utilizado para armazenamento rápido e simples de informações, já que ele é muito leve e pode ser embutido em uma aplicação facilmente. Ele é um pouco diferente de outros sistemas de banco de dados, já que ele possui tipagem dinâmica. Uma coluna no SQLite não possui um tipo, já os valores sim. Isso significa que uma mesma coluna pode ter inteiros, doubles e string. O PHP possui uma extensão para se trabalhar com o SQLite. Essa extensão traz dentro de si o próprio SQLite, então podemos dizer que é como se o PHP tivesse um banco de dados embutido, sem precisarmos conectar ou instalar um sistema gerenciador de banco de dados como MySQL ou PostgreSQL.
Desenvolvimento Web com PHP
Página 121
4Linux – www.4linux.com.br
Banco de Dados
6.6 SQL básico Vamos conhecer alguns comandos SQL básicos para montarmos nosso primeiro banco de dados. Embora o padrão SQL seja único, diferentes sistemas gerenciadores de banco de dados implementam o padrão de maneiras diferentes. Portanto, alguns comandos em MySQL são diferentes em PostgreSQL. Vamos mostrar aqui as principais diferenças. Note que a linguagem SQL é muito fácil de compreender. Quando você está fazendo uma declaração ou consulta, é praticamente uma frase que você está escrevendo. Justamente por isso, é fácil se confundir entre informações e comandos. Portanto, quando estiver escrevendo SQL, escreva comandos, cláusulas e expressões sempre com letras maiúsculas, e informações, minúsculas.
6.6.1 Create O comando CREATE permite que nós criemos uma série de elementos comuns em um banco de dados. Com o comando create, podemos criar bancos de dados, tabelas, índices, sequências e muito mais. Vamos conhecer os casos mais comuns de uso do Create. Criar um banco de dados
Podemos criar um banco de dados utilizando a seguinte declaração SQL:
1 CREATE DATABASE nomedobanco;
Observe que declarações SQL sempre devem ser terminadas com um ponto-evírgula. Criar uma tabela
Desenvolvimento Web com PHP
Página 122
4Linux – www.4linux.com.br
Banco de Dados
Podemos criar uma tabela em nosso banco de dados utilizando a seguinte declaração SQL:
1 C R EA TE T A BL E p os t s ( 2 id INTEGER , titulo VARCHAR(255), 3 4 conteudo TEXT, 5 P R IM A RY K EY ( i d ) 6 );
Uma tabela é como uma pasta, onde podemos guardar informações separadas por colunas. Vamos criar uma tabela "posts", para guardar as informações dos posts de nosso blog, como o seu título e o conteúdo do post. Observe que, a cada linha, criamos colunas para nossa tabela. Colunas são como seções da pasta que criamos, que podem conter determinados tipos de informações. Esses tipos de informações foram especificados na própria linha, onde dizemos depois do nome da coluna se ela é VARCHAR ou TEXT. Logo veremos mais sobre isso. Observe também a linha PRIMARY KEY. Primary key significa chave primária e, do ponto de vista de bancos de dados relacionais, é a chave que identifica o registro em uma tabela. Cada registro é único e possui um valor. Esse valor é a chave primária. Precisamos de uma coluna para nossas chaves primárias e estamos dizendo que a coluna id será essa coluna. Criar uma sequência
Podemos criar uma sequência para uma tabela de nosso banco de dados utilizando a seguinte declaração SQL:
1 CREATE SEQUENCE nome_da_sequencia;
Desenvolvimento Web com PHP
Página 123
4Linux – www.4linux.com.br
Banco de Dados
Sequências são úteis para colunas que devem ser automaticamente incrementadas ou decrementadas quando um registro for inserido na tabela. Criar um índice
Podemos criar um índice em uma tabela de nosso banco de dados utilizando a seguinte declaração SQL:
1 C R EA TE I N DE X n o me _ do _ in d ic e O N t a be l a ( c ol un a , o u tr a co l un a ) ;
Índices servem para melhorar a performance de nosso banco. Quando fazemos muitas consultas em algumas colunas, é importante que seja criado um índice nessas colunas.
6.6.2 Chaves estrangeiras Além de chaves primárias, nossas tabelas podem ter chaves estrangeiras. Chaves estrangeiras são chaves que estão diretamente relacionadas com outras chaves de outras tabelas no mesmo banco de dados. Por exemplo: um post e um usuário. Um post está diretamente relacionado ao seu autor, isto é, usuário. Portanto, podemos criar uma chave estrangeira e relacionar a tabela de posts com usuários:
1 C R EA TE T A BL E u s ua r io s ( 2 usuario_id INT NOT NULL AUTO_INCREMENT , u s ua r io V A RC H AR ( 2 5 5) N OT N UL L , 3 4 s e nh a V A RC H AR ( 4 ) N OT N UL L , 5 P R IM A RY K EY ( u s u ar i o_ i d ) , INDEX (usuario_id) 6 7 ) ENGINE=INNODB; 8 9 C R EA TE T A BL E p os t s ( post_id INT NOT NULL AUTO_INCREMENT , 10
Desenvolvimento Web com PHP
Página 124
4Linux – www.4linux.com.br 11 12 13 14 15 16 17 )
Banco de Dados
a ut or I NT N OT N UL L , p os t V A RC H AR ( 1 4 ) N OT N UL L , P R IM A RY K EY ( p o st _ id ) , INDEX (post_id), F O RE I GN K EY a u to r ( a u to r ) R E FE R EN C ES u s ua r io s ( u s u ar i o_ i d ) O N U P DA TE C A SC A DE O N D E LE T E C A SC A DE ENGINE=INNODB;
Observe a linha ON UPDATE CASCADE ON DELETE CASCADE. Esta linha determina o comportamento que será adotado pelo banco de dados caso um registro desta tabela seja alterado ou removido. A opção CASCADE faz com que as relações (de chave estrangeira) sejam automaticamente removidas, sem que haja uma intervenção manual. Sem a opção cascade, não poderíamos remover um post.
6.6.3 Alter
O comando ALTER permite que nós alteremos as características de um banco de dados ou tabela existente. Podemos alterar as colunas de uma tabela utilizando o alter da seguinte forma:
1 2 3 4
A L TE R T AB L E p o st s M O DI F Y t i tu l o T EX T ; A L TE R T AB L E p o st s A DD a u to r V A RC H AR ( 1 ) ; A L TE R T AB L E p o st s D RO P c o nt e ud o ; A LT ER T AB LE p os ts A DD P RI MA RY K EY ( id ) ;
Na primeira linha estamos modificando o tipo da coluna titulo para TEXT. Na segunda, adicionamos uma nova coluna chamada autor. Na terceira, removemos a coluna conteudo. E, na última linha, adicionamos uma chave primária em nossa tabela na coluna id.
Desenvolvimento Web com PHP
Página 125
4Linux – www.4linux.com.br
Banco de Dados
6.6.4 Drop O comando DROP permite que nós deletemos bancos de dados e tabelas. Ele é muito similar ao create, mas possui menos parâmetros.
1 D RO P T A BL E p os t s ; 2 DROP TABLE posts, usuarios , comentarios; 3 D RO P D A TA B AS E b a nc o ;
6.6.5 Truncate O comando TRUNCATE permite que nós esvaziemos uma tabela em nosso banco de dados. Isso irá remover todos os registros de uma tabela.
1 T R UN C AT E T A BL E p os t s ;
6.6.6 Insert O comando INSERT permite a inserção de registros em uma tabela. É com ele que nós podemos começar a aprender mais sobre manipulação de dados em um banco de dados relacional. Para inserir informações em uma tabela, podemos:
1 I N SE RT I NT O p o st s ( t it ul o , c o nt e ud o ) V A LU E S ( ’ M eu p r im e ir o p os t ’ , ’ Es te p os t é m ui to l eg al , t ri l eg al ! ’) ;
2 I N SE RT I NT O p o st s ( t it ul o , c o nt e ud o ) V A LU E S ( ’ O G r ê mi o g a nh o u ! ’, ’ O t r ic o lo r a t ac a d e n ov o ! ’ );
Desenvolvimento Web com PHP
Página 126
4Linux – www.4linux.com.br
Banco de Dados
Observe que estamos especificando não só os valores que queremos inserir, mas onde queremos inseri-los. Especificamos que vamos inserir dados nas colunas titulo e conteudo, e logo depois com a cláusula VALUES, especificamos que valores irão nestas colunas respectivamente.
6.6.7 Update Podemos utilizar o comando UPDATE para atualizar registros em uma tabela. Para atualizar registros, podemos:
1 U PD AT E p os ts S ET t it ul o = ’ N ov o p os t ’ W HE RE t it ul o = ’ Me u p ri me ir o post’;
2 U P DA TE p o st s S ET t i tu lo = ’ N ov o p os t ’ , c o nt e ud o = ’ N ov o c on te ud o ’ WHERE id=1;
Usamos a cláusula SET para especificar quais colunas receberão novos valores. Podemos especificar mais de uma coluna separando-as por vírgulas. Observe que temos uma cláusula WHERE junto de nosso comando UPDATE. A cláusula WHERE espera uma condição e serve como filtro. Caso os registros de nossa tabela batam com a condição especificada no WHERE, eles serão repassados para o comando que utilizamos, neste caso o UPDATE. É comum utilizarmos a chave primária de um registro para fazer condições onde queremos encontrar um registro específico, mas podemos fazer condições com qualquer coluna da tabela. E não só condições de igualdade: • Igual: = • Diferente: != ou <> • Menor que: <
Desenvolvimento Web com PHP
Página 127
4Linux – www.4linux.com.br
Banco de Dados
• Maior que: > • Menor ou igual: <= • Maior ou igual: >=
Além disso, podemos ter múltiplas condições:
1 U PD AT E p os ts S ET t it ul o = ’ N ov o p os t ’ W HE RE c at eg or ia = 1 A ND t ag = ’fute bol ’;
Se executarmos o comando UPDATE sem WHERE, iremos alterar todos os registros da tabela. E tenho certeza que não é isso que queremos, não é?
6.6.8 Delete
Podemos remover dados de nossas tabelas utilizando o comando DELETE. Assim como o UPDATE, o DELETE também pode ou não ter uma cláusula WHERE, ve jam:
1 D E LE TE F RO M p o st s ; 2 D EL ET E F RO M p os ts W HE RE i d = 1 ;
Na primeira linha, vamos remover todos os registros da tabela posts. Na segunda, vamos remover apenas o registro com id igual a 1.
Desenvolvimento Web com PHP
Página 128
4Linux – www.4linux.com.br
Banco de Dados
6.6.9 Select Com certeza o comando SELECT é o comando mais interessante de se trabalhar quando falamos de bancos de dados. É ele que permite que nós façamos consultas em nosso banco. O comando SELECT é muito versátil e permite que façamos consultas simples ou extremamente complexas, dependendo de como as informações estão organizadas em nosso banco de dados. Para fazer uma simples consulta, fazemos: 1 S EL EC T * F RO M p os ts ; 2 S E LE CT t i tu l o F RO M p o st s ; 3 S E LE CT t it ul o , c o nt e ud o F RO M p o st s ;
O primeiro parâmetro que o comando SELECT espera são as colunas que queremos ver. O segundo parâmetro é a tabela que queremos consultar. Quando não quisermos ver colunas específicas, mas sim, todas as colunas de uma tabela, podemos utilizar o asterisco. Também podemos filtrar e manipular nossa consulta de várias maneiras. O primeiro exemplo é utilizar o comando SELECT junto com a cláusula WHERE: 1 S EL EC T * F RO M p os ts W HE RE c at eg or ia = 2 ; 2 S EL EC T t it ul o , c on te ud o F RO M p os ts W HE RE c at eg or ia < > 2 A ND t ag = ’fute bol ’;
Organizando resultados
Para organizar os resultados de nossa consulta por uma coluna, podemos: 1 S EL EC T * F RO M p os ts O RD ER B Y i d; 2 S EL EC T * F RO M p os ts O RD ER B Y t it ul o D ES C ;
Desenvolvimento Web com PHP
Página 129
4Linux – www.4linux.com.br
Banco de Dados
Por padrão, será utilizada a ordem ascendente. Mas podemos, como na segunda linha do exemplo acima, organizar de forma descendente. Se organizarmos de forma descendente uma coluna que possui letras, não números, a ordem será Z-A não AZ. Limitando resultados
Podemos também limitar o número de resultados de nossa consulta:
1 S EL EC T * F RO M p os ts L IM IT , 1 ; 2 S E LE CT * F RO M p o st s L IM I T 3 , 1 ;
O primeiro número é o início e o segundo, o fim. É como se disséssemos para nosso banco de dados: faça a consulta e me traga os resultados de 30 a 100. Buscando informações
Podemos buscar informações nos registros de nossas tabelas utilizando o comando SELECT em conjunto com a cláusula WHERE e o operador LIKE. O LIKE permite que nós filtremos os resultados de nossa consulta com base no conteúdo de uma coluna:
1 S E LE CT * F RO M p o st s W HE R E t i tu l o L IK E ’ M eu c ar ro ’ ; 2 S E LE CT * F RO M p o st s W HE R E t i tu l o L IK E ’% f u t eb o l % ’;
A primeira linha irá trazer todos os registros da tabela post que possuam exatamente a frase "Meu carro"na coluna titulo. Já a segunda linha irá trazer todos os registros que possuam em qualquer parte da coluna titulo a palavra "futebol". Usamos o % para indicar um curinga, que pode representar qualquer letra, número ou palavra em nossa string.
Desenvolvimento Web com PHP
Página 130
4Linux – www.4linux.com.br
Banco de Dados
6.6.10 Join O comando join permite que, em uma consulta SQL, nós juntemos duas tabelas a partir de uma condição. Vamos supor que nós estamos querendo saber todos os posts que possuem uma categoria. Vamos executar a seguinte consulta:
1 S E LE CT * F RO M p os ts , c a te g or i as W HE R E p os ts . c a t e go r ia = categorias.nome;
Esta consulta irá retornar apenas os posts que possuem categorias, deixando de lado os posts que não possuem.
6.6.11 Left join O comando left join é um pouco diferente do join normal. Ao invés de combinar os resultados, o left join irá preservar os resultados da tabela que está à esquerda do comando.
1 S E LE CT * F RO M p o st s L EF T J OI N c a te g or i as O N p o st s . c a te g or i a = categorias.nome;
Esta consulta irá retornar todos os posts, mesmo que eles não possuam uma categoria.
6.6.12 Right join O comando right join é muito similar ao left join, contudo, ele preservará os resultados da tabela que está à direita do comando.
Desenvolvimento Web com PHP
Página 131
4Linux – www.4linux.com.br
Banco de Dados
1 S E LE CT * F RO M p o st s R IG H T J OI N c a te g or i as O N p os t s . c at e go r ia = categorias.nome;
6.6.13 Inner join O comando inner join é um pouco diferente dos joins que já vimos. Ele permite que seja feita a união de tabelas através das suas relações com chaves estrangeiras, também conhecidas como foreign keys. Vamos supor que nós temos duas tabelas, uma de usuários e uma de seguidores. Algo como um mini-twitter. Nossa tabela de seguidores possui apenas duas colunas: o usuário (usuario_id) e quem ele segue (id_seguindo). Essas duas colunas fazem referência à chave primária da tabela de usuários (id_usuario). Precisamos de uma consulta que traga as informações dos usuários que estão seguindo o usuário 1. Para isso:
1 S E LE CT * F RO M u s ua r io s I NN E R J OI N s e gu i do r es O N (seguidores.id_seguindo = usuarios.usuario_id) WHERE s e gu i do r es . i d _ u su a ri o = 1
Desenvolvimento Web com PHP
Página 132
4Linux – www.4linux.com.br
Banco de Dados
6.7 Tipos de dados As colunas de uma tabela em um banco de dados podem ter diferentes tipos. É importantíssimo que durante a modelagem de nosso banco, façamos a escolha correta de tipos de dados, garantindo boa performance e alocação correta de memória. Tipos de dados CHAR(X): Uma string fixa com 0 a 255 caracteres. VARCHAR(X): Uma string variável com 0 a 255 caracteres. TINYTEXT: Uma string com tamanho máximo de 255 caracteres TEXT: Uma string de texto com tamanho máximo de 65535 caracteres BLOB: Uma string binária com tamanho máximo de 65535 caracteres MEDIUMTEXT: Uma string de texto com tamanho máximo de 16777215 caracteres MEDIUMBLOB: Uma string binária com tamanho máximo de 16777215 caracteres LONGTEXT: Uma string de texto com tamanho máximo de 4294967295 caracteres LONGBLOB: Uma string binária com tamanho máximo de 4294967295 caracteres
Desenvolvimento Web com PHP
Página 133
4Linux – www.4linux.com.br
Banco de Dados
Tipos de números TINYINT(X): Número inteiro de -128 a 127. 0 a 255 caso seja UNSIGNED. SMALLINT(X): Número inteiro de -32768 a 32767. 0 a 65535 caso seja UNSIG-
NED. MEDIUMINT(X): -8388608 a 8388607. 0 a 16777215 caso seja UNSIGNED. INT(X): -2147483648 a 2147483647. 0 a 4294967295 caso seja UNSIGNED. BIGINT(X): -9223372036854775808 a 9223372036854775807. 0 a 18446744073709551615
caso seja UNSIGNED. FLOAT: Um número decimal pequeno. DOUBLE: Um número decimal grande.
Observe que X é onde você define o tamanho do dado. UNSIGNED significa que o número inteiro só pode ser positivo.
Desenvolvimento Web com PHP
Página 134
4Linux – www.4linux.com.br
Banco de Dados
Tipos de datas DATE: Guarda um valor de data no formato YYYY-MM-DD, 3 bytes DATETIME: Guarda um valor de data e horário no formato YYYY-MM-DD HH:MM:SS,
8 bytes TIMESTAMP: Guarda um valor de data no formato YYYYMMDDHHMMSS, 4 bytes TIME: Guarda um valor de horário no formato HH:MM:SS, 3 bytes Outros tipos ENUM (’a’, ’b’, ’c’): Significa enumeração e permite que você especifique uma lista
de valores possíveis para a coluna. De 1 a 65535. SET (’a’, ’b’, ’c’): Similar ao ENUM, exceto que múltiplos valores podem ser escolhi-
dos. De 1 a 64.
Desenvolvimento Web com PHP
Página 135
4Linux – www.4linux.com.br
Banco de Dados
6.8 Sequences e Auto Increment Quando criamos nossa tabela, criamos uma coluna do tipo INT, não nula. Depois, definimos essa coluna como sendo a chave primária de nossa tabela. Chaves primárias precisam ser únicas, portanto, não é interessante deixarmos o preenchimento dessa coluna a cargo do software ou do usuário. O banco é que deveria controlar essa chave. Lembram das sequences que falamos anteriormente? Elas permitem que incrementemos ou decrementemos o valor de uma coluna quando um registro for inserido na tabela desta coluna. E isso é exatamente o que queremos fazer quando estamos trabalhando com bancos de dados relacionais e chaves primárias. No PostgreSQL, criamos uma tabela e uma sequência para que a chave primária seja incrementada toda vez que um registro for adicionado na tabela. Fazemos isso da seguinte forma:
1 CREATE SEQUENCE posts_id_seq; 2 3 C R EA TE T A BL E p os t s ( id INTEGER DEFAULT NEXTVAL(’posts_id_seq ’), 4 5 titulo VARCHAR(255), conteudo TEXT, 6 P R IM A RY K EY ( i d ) 7 8 );
Já no MySQL, não temos o conceito de sequences. Para incrementarmos uma chave primária automaticamente vamos utilizar o comando AUTO_INCREMENT. Quando o AUTO_INCREMENT é associado a uma coluna, toda vez que inserirmos um novo registro, ela será incrementada. Veja:
1 C R EA TE T A BL E p os t s ( id INTEGER AUTO_INCREMENT , 2
Desenvolvimento Web com PHP
Página 136
4Linux – www.4linux.com.br
Banco de Dados
titulo VARCHAR(255), 3 4 conteudo TEXT, 5 P R IM A RY K EY ( i d ) 6 );
Desenvolvimento Web com PHP
Página 137
4Linux – www.4linux.com.br
Banco de Dados
6.9 Funções do MySQL Para fazer nossa aplicação em PHP conversar com um banco de dados MySQL, nós precisamos utilizar um conjunto de funções disponíveis na extensão MySQL do PHP. Com essas funções, podemos conectar com um banco de dados, executar comandos e fazer consultas. Para podermos fazer uso dessas funções, precisamos instalar a extensão MySQL em nosso PHP, o que pode ser feito com uma simples instalação de pacote:
1 apt- get install php5- mysql
6.9.1 Conexão Antes de começarmos a interagir com o banco de dados, precisamos nos conectar com ele. Vamos utilizar a função mysql_connect() para conectar no MySQL. Como estamos em um ambiente de desenvolvimento, o Apache, o PHP e o MySQL estão rodando na mesma máquina. Então, basta conectarmos com o endereço de loopback, 127.0.0.1 ou localhost, ao invés de um servidor externo.
1 mysql_connect(" localhost", "root", "123456"); 2 mysql_select_db("nomedobanco");
A função mysql_connect() espera três parâmetros: o hostname do servidor onde está o MySQL, o usuário do MySQL e sua senha. Além de conectarmos, observe que na segunda linha estamos utilizando a função mysql_select_db(). Essa função seleciona um banco de dados no MySQL para trabalharmos. Ela age como o USE que vimos anteriormente.
Desenvolvimento Web com PHP
Página 138
4Linux – www.4linux.com.br
Banco de Dados
6.9.2 Inserindo registros A fim de interagirmos com nosso banco de dados, precisamos de uma função que nos permita executar declarações e consultas SQL. Essa função é a mysql_query(). Com esta função, podemos executar INSERTs, UPDATEs e outros comandos SQL. Para inserirmos um registro, sabemos que precisamos utilizar o comando INSERT. Mas vamos ver como isso funciona no PHP:
1 2 3 4 5 6 7
mysql_connect(" localhost", "root", "123456"); mysql_select_db("blog"); $ t it u lo = " M eu p r im e ir o p os t " ; $ co nt eu do = " M eu p os t t ri l eg al n o m eu b lo g !" m y sq l _q u er y ( " I N SE R T I NT O p os t s ( t it ul o , c o nt e ud o ) V A LU E S (’$titulo ’, ’$conteudo ’)");
Observe que, além de executar um INSERT, estamos manipulando a string passada para a função mysql_query(), criando uma query dinâmica com as valores das variáveis que criamos logo acima. Note também que não precisamos terminar nossa declaração com ponto-e-vírgula.
6.9.3 Atualizando registros Para atualizarmos um registro, sabemos que precisamos utilizar o comando UPDATE, portanto:
1 mysql_connect(" localhost", "root", "123456"); 2 mysql_select_db("blog");
Desenvolvimento Web com PHP
Página 139
4Linux – www.4linux.com.br
Banco de Dados
3 4 $id = 1; 5 $ ti tu lo = " M eu n ov o p os t "; 6 7 m y sq l _q u er y ( " U P DA T E p os t s S ET t i tu l o = ’ $ ti tu lo ’ W H ER E i d = $ id " ) ;
6.9.4 Deletando registros Para removermos um registro, sabemos que precisamos utilizar o comando DELETE, portanto:
1 2 3 4 5 6
mysql_connect(" localhost", "root", "123456"); mysql_select_db("blog"); $id = 5; m y sq l _q u er y ( " D E LE T E F RO M p os t s W H ER E i d = $ id " ) ;
6.9.5 Apresentando registros Para fazer uma consulta em uma tabela, sabemos que precisamos utilizar o comando SELECT, portanto:
1 mysql_connect(" localhost", "root", "123456"); 2 mysql_select_db("blog"); 3 4 m y sq l _q u er y ( " S E LE C T * F RO M p os t s " );
Desenvolvimento Web com PHP
Página 140
4Linux – www.4linux.com.br
Banco de Dados
Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela? A função mysql_fetch_array() permite que nós vejamos os resultados de uma consulta SQL como se fosse um array, onde as colunas são as chaves de nosso array e os valores das colunas, valores do array.
1 2 3 4 5 6 7 8
mysql_connect(" localhost", "root", "123456"); mysql_select_db("blog"); $ q ue ry = m y sq l _q u er y ( " S E LE CT * F RO M p o st s " ) ; while($item = mysql_fetch_array($query)) { echo $item[’titulo ’]; }
Observe que colocamos a função mysql_fetch_array() em um while. Fazemos isto porque nossa consulta trouxe mais de um resultado, portanto, estamos trabalhando com mais de um registro. O while se encarrega de executar o bloco de código contido nele enquanto houverem registros a serem exibidos da nossa consulta. O bloco de código dentro do while simplesmente traz o valor contido na coluna titulo no registro atual. Listaremos, assim, todos os registros da tabela. Note também que associamos uma variável ao retorno da função mysql_query() e passamos essa variável como parâmetro para a mysql_fetch_array(), que precisa saber com qual consulta ela vai trabalhar.
Desenvolvimento Web com PHP
Página 141
4Linux – www.4linux.com.br
Banco de Dados
6.10 Funções do PostgreSQL Para fazer nossa aplicação em PHP conversar com um banco de dados PostgreSQL, nós precisamos utilizar um conjunto de funções disponíveis na extensão PostgreSQL do PHP. Com essas funções, podemos conectar com um banco de dados, executar comandos e fazer consultas. Para podermos fazer uso dessas funções, precisamos instalar a extensão PostgreSQL em nosso PHP, o que pode ser feito com uma simples instalação de pacote:
1 apt- get install php5- pgsql
6.10.1 Conexão Antes de começarmos a interagir com o banco de dados, precisamos nos conectar com ele. Vamos utilizar a função pg_connect() para conectar no PostgreSQL. Como estamos em um ambiente de desenvolvimento, o Apache, o PHP e o PostgreSQL estão rodando na mesma máquina. Então, basta conectarmos com o endereço de loopback, 127.0.0.1 ou localhost, ao invés de um servidor externo.
1 pg_connect("host=localhost port=5432 dbname=blog user=root password=123456");
A função pg_connect() espera apenas um parâmetro, mas este parâmetro pode possuir sub-parâmetros separados por espaço. Observe que na verdade estamos passando cinco parâmetros: o hostname do servidor que vamos conectar, a porta do servidor, o nome do banco, o usuário e sua senha.
Desenvolvimento Web com PHP
Página 142
4Linux – www.4linux.com.br
Banco de Dados
6.10.2 Inserindo registros A fim de interagirmos com nosso banco de dados, precisamos de uma função que nos permita executar declarações e consultas SQL. Essa função é a pg_query(). Com esta função, podemos executar INSERTs, UPDATEs e outros comandos SQL. Para inserirmos um registro, sabemos que precisamos utilizar o comando INSERT. Mas vamos ver como isso funciona no PHP:
1 pg_connect("host=localhost port=5432 dbname=blog user=root password=123456");
2 3 $ t it u lo = " M eu p r im e ir o p os t " ; 4 $ co nt eu do = " M eu p os t t ri l eg al n o m eu b lo g !" 5 6 pg_query("INSERT INTO posts (titulo, conteudo) VALUES (’$titulo ’, ’$conteudo ’)") ;
Observe que, além de executar um INSERT, estamos manipulando a string passada para a função pg_query(), criando uma query dinâmica com as valores das variáveis que criamos logo acima. Note também que não precisamos terminar nossa declaração com ponto-e-vírgula.
6.10.3 Atualizando registros Para atualizarmos um registro, sabemos que precisamos utilizar o comando UPDATE, portanto:
1 pg_connect("host=localhost port=5432 dbname=blog user=root password=123456");
Desenvolvimento Web com PHP
Página 143
4Linux – www.4linux.com.br
Banco de Dados
2 3 $id = 1; 4 $ ti tu lo = " M eu n ov o p os t "; 5 6 p g _q u er y ( " U PD A TE p o st s S ET t i tu lo = ’ $ ti tu lo ’ W H ER E i d = $ id " ) ;
6.10.4 Deletando registros Para removermos um registro, sabemos que precisamos utilizar o comando DELETE, portanto:
1 pg_connect("host=localhost port=5432 dbname=blog user=root password=123456");
2 3 $id = 5; 4 5 p g _q u er y ( " D EL E TE F RO M p o st s W HE R E i d = $ id " ) ;
6.10.5 Apresentando registros Para fazer uma consulta em uma tabela, sabemos que precisamos utilizar o comando SELECT, portanto:
1 pg_connect("host=localhost port=5432 dbname=blog user=root password=123456");
2 3 p g _q u er y ( " S EL E CT * F RO M p o st s " ) ;
Desenvolvimento Web com PHP
Página 144
4Linux – www.4linux.com.br
Banco de Dados
Mas e agora? agora? Fizemos Fizemos a consulta, consulta, mas como podemos podemos ver os resultad resultados os dela? A função pg_fetch_all() permite que nós vejamos os resultados de uma consulta SQL como se fosse um array, onde as colunas são as chaves de nosso array e os valores das colunas, valores do array.
pg_connect("host=localhost t=localhost port=5432 port=5432 dbname=blog dbname=blog user=root user=root 1 pg_connect("hos password=123456");
2 3 4 5 6 7 8 9
$ q ue ue ry r y = p g _q _q u er er y ( " S EL E L E CT CT * F RO R O M p os o s ts ts " ) ; $itens $itens = pg_fetch_all($que pg_fetch_all($query); ry); f o re re a ch ch ( $ i t en en s a s $ it it e m ) { echo $item[’titulo ’]; }
A função pg_fetch_all() retorna um array multidimensional todos todos os registros trazidos pela nossa consulta. Sendo assim, podemos usar um simples foreach para iterar entre os resultados e mostrar as informações que queremos, no caso, o valor da coluna titulo. Note também que associamos uma variável ao retorno da função pg_query() e passamos essa variável como parâmetro para a pg_fetch_all(), que precisa saber com qual consulta ela vai trabalhar.
Desenvolvimento Web com PHP
Página 145
4Linux – www.4linux.com.br
Banco de Dados
6.11 Funções Funções do do SQLite SQLite Para Para fazer nossa aplicação em PHP conversar com um banco de dados SQLite, nós precisamos utilizar um conjunto de funções disponíveis na extensão SQLite do PHP. Com essas funções, podemos abrir um banco de dados, executar executar comandos e fazer fazer consultas. Para podermos fazer uso dessas funções, precisamos instalar a extensão SQLite em nosso PHP, o que pode ser feito com uma simples instalação de pacote:
apt- get install install php5php5- sqlite sqlite 1 apt-
6.11.1 6.11.1 Conexão Conexão Antes de começarmos a interagir com o banco de dados, precisamos nos conectar com ele. Contudo, o SQLite funciona de maneira um tanto diferente se comparado com o MySQL e o PostgreSQL. Quando você instalou a extensão do SQLite, você embutiu o SQLite no PHP. Isso significa que não é necessária uma abertura de conexão ou qualquer coisa, basta abrir um arquivo. Isso mesmo, o SQLite guarda as informações em um arquivo. Este arquivo, criado pelo SQLite, é o seu banco de dados. Ele pode estar na pasta da sua aplicaçã aplicaçãoo ou em qualquer qualquer outro parte do sistema. sistema. Para Para usarmos o banco, banco, mas abrir o arquivo. Caso o arquivo não exista, isto é, o banco não exista, ele será criado automaticamente.
$banco = sqlite_open(’meu sqlite_open(’meuban banco co ’); 1 $banco
Observe que estamos associando o retorno da função sqlite_open() a uma variável. Isto é necessário porque outras funções de interação com o banco SQLite precisam
Desenvolvimento Web com PHP
Página 146
4Linux – www.4linux.com.br
Banco de Dados
saber com qualquer banco elas precisam interagir.
6.11.2 6.11.2 Inserindo Inserindo registros registros A fim de interagirmos com nosso banco de dados, precisamos de uma função que nos permita executar declarações e consultas SQL. Essa função é a sqlite_query(). Com esta função função,, podemos podemos execut executar ar INSERT INSERTs, s, UPD UPDA ATEs e outros outros comandos comandos SQL. SQL. Para inserirmos um registro, sabemos que precisamos utilizar o comando INSERT. Mas vamos ver como isso funciona no PHP: 1 2 3 4 5 6
$banco $banco = sqlite_open(’meu sqlite_open(’meuban banco co ’); $ t it it u lo lo = " M eu e u p r im im e ir i r o p os os t " ; $ co c o nt n t eu e u do d o = " M eu eu p os os t t ri ri l eg e g al al n o m eu eu b lo lo g !" !" s q li l i t e_ e _ q ue ue r y ( $ ba ba nc nc o , " I N SE S E RT R T I NT N T O p o st st s ( t it i t ul ul o , c o nt nt e ud ud o ) V A LU LU E S (’$titulo ’, ’$conteudo ’$conteudo ’)");
Observe que, além de executar um INSERT, estamos manipulando a string passada para a função sqlite_query(), criando uma query dinâmica com as valores das variáveis que criamos logo acima. Note também que não precisamos terminar nossa declaração com ponto-e-vírgula.
6.11.3 6.11.3 Atualizando Atualizando registro registros s Para atualizarmos um registro, sabemos que precisamos utilizar o comando UPDATE, DA TE, portanto: portanto :
Desenvolvimento Web com PHP
Página 147
4Linux – www.4linux.com.br
1 2 3 4 5 6
Banco de Dados
$banco = sqlite_open(’meubanco ’); $id = 1; $ ti tu lo = " M eu n ov o p os t "; s q li t e_ q ue r y ( $ ba nc o , " U P DA TE p o st s S ET t i tu lo = ’ $ ti tu lo ’ W H ER E i d = $ id " );
6.11.4 Deletando registros Para removermos um registro, sabemos que precisamos utilizar o comando DELETE, portanto:
1 $banco = sqlite_open(’meubanco ’); 2 3 $id = 5; 4 5 s q li t e_ q ue r y ( $ ba nc o , " D E LE TE F RO M p o st s W HE R E i d = $ id " ) ;
6.11.5 Apresentando registros Para fazer uma consulta em uma tabela, sabemos que precisamos utilizar o comando SELECT, portanto:
1 $banco = sqlite_open(’meubanco ’); 2 3 s q li t e_ q ue r y ( $ ba nc o , " S E LE CT * F RO M p o st s " ) ;
Desenvolvimento Web com PHP
Página 148