Anda di halaman 1dari 127

PROJETO E-JOVEM

APOSTILA PHP

Projeto E-JOVEM

ndice
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Histria e Funcionalidades do PHP .................................................................................... 4 O ambiente WEB .................................................................................................................. 7 Ambiente de desenvolvimento ............................................................................................. 9 Ambiente HTTP.................................................................................................................. 12 Estrutura do cdigo PHP ................................................................................................... 17 Integrando PHP com HTML ............................................................................................. 20 Tipos de Dados .................................................................................................................... 21 Variveis .............................................................................................................................. 24 Constantes ........................................................................................................................... 25 Operadores .......................................................................................................................... 26 Estruturas de Controle ....................................................................................................... 32 Funes: definio, criao, return, parmetros. ............................................................ 37 Reutilizao de Cdigo Include e require......................................................................... 40 Funo Recursiva ............................................................................................................... 41 Trabalhando com Array .................................................................................................... 43 Trabalhando com String .................................................................................................... 50 Trabalhando com Data e Hora .......................................................................................... 56 Formulrios HTML ............................................................................................................ 60 Upload de Arquivos ............................................................................................................ 63 Sesses e Cookies ................................................................................................................ 66 Manipulando Arquivos ...................................................................................................... 67 Enviando E-mail ................................................................................................................. 72 Integrando PHP com Mysql .............................................................................................. 76 Ferramenta para trabalhar com Mysql phpMyAdmin ................................................. 80 Introduo a OO com PHP ................................................................................................ 81 Definindo uma Classe ......................................................................................................... 84 Construtores e Destrutores ................................................................................................ 88 Instanciando um Objeto ..................................................................................................... 91 Trabalhando a segurana do seu sistema ......................................................................... 92 Exerccios Resolvidos ....................................................................................................... 102 Exerccios Propostos ......................................................................................................... 115

Projeto E-JOVEM

Introduo
Traremos nesta apostila uma das linguagens mais utilizadas para o desenvolvimento WEB, a linguagem PHP que um acrnimo (sigla) para Hypertext Preprocessor, o PHP uma linguagem de cdigo-fonte aberto. Em comparativo com outras linguagens como PERL ou C, o PHP ao invs de escrever um programa com um monte de comandos para imprimir HTML, voc escreve um arquivo HTML com algum cdigo inserido para fazer alguma coisa (nesse caso, imprimir um pouco de texto). O cdigo PHP delimitado por tags iniciais e finais que lhe permitem pular pra dentro e pra fora do modo PHP, mas isso explicaremos melhor durante o curso. 1. Histria e Funcionalidades do PHP O PHP foi criado por volta de 1994 por Rasmus Lerdorf, que inicialmente o utilizava em sua home page pessoal. Em meados de 1995 ele passou a ser utilizado por outras pessoas e foi reescrito com novos recursos, sendo renomeado para PERSONAL HOME PAGE Tools/FI, e entre os novos recursos, passou a contar com suporte ao MSql. Dois anos mais tarde o PHP deixou de ser um projeto pessoal de Rasmus e passou a ser desenvolvido por uma equipe de colaboradores, e neste perodo, foi lanada a verso 3 do PHP. A partir da verso 4 o PHP passou a utilizar a engine de scripting da ZEND, para melhorar a performance e suportar uma variedade maior de bibliotecas externas e extenses. At maro de 2002, o PHP estava sendo utilizado em 9.000.000 de domnios. Atualmente esses nmeros chegam a 37,10% dos sites do mundo todo. Rasmus Lerdorf iniciou o desenvolvimento do PHP para mostrar as estatsticas de sua pgina pessoal, substituindo alguns scripts feitos em Perl. 1.1. A Linguagem PHP A linguagem PHP voltada principalmente para o ambiente WEB, mas pode ser usada para a criao de aplicaes desktops, aplicaes servidoras, de rede, entre outros. Se voc ainda no est habituado com linguagens de programao, poder achar inicialmente PHP um pouco difcil, mas logo perceber que uma linguagem muito fcil. PHP uma linguagem orientada a objetos e sua sintaxe bem parecida com a do C, s que bem mais simples e prtica. 1.2. Vantagens e o que pode ser feito com PHP Qualquer coisa feita pode ser feita com PHP, como coletar dados de formulrios, gerar pginas dinmicas, enviar e receber cookies. Alm disso, PHP tem suporte a outros servios atravs de protocolos como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir sockets e interagir com outros protocolos.

Projeto E-JOVEM

Algumas vantagens do PHP: uma linguagem de fcil aprendizado; Tem performance e estabilidade excelentes; Seu cdigo aberto, no preciso pagar por sua utilizao, e possvel altera-lo na medida da necessidade de cada usurio. Tem suporte nos principais servidores web do mercado e suporte nativo no servidor web apache (o mais utilizado no mundo); Suporta conexo com os banco de dados mais utilizados no mercado, como por exemplo MySQL, PostgreSQL, Oracle e DB2; multiplataforma, tem suporte nos sistemas operacionais mais utilizados no mercado; No precisa ser compilado; Aceita orientao a objetos;

1.3. Como Funciona O PHP. Ao digitar um endereo no seu browser (Firefox, Internet Explorer, chrome), abrir uma comunicao simples entre o cliente (seu browser) e o servidor Web funcionando da seguinte forma: O cliente (seu browser) decompe a URL (endereo da pgina) em vrias partes, tais como nome do domnio, nome da pgina e protocolo. Por exemplo, o domnio HTTP://www.teste.com.br/noticia.php, teria o nome de domnio teste.com.br, o nome da pgina noticia.php e o protocolo HTTP. O DNS (Servidor de Nome de Domnio) interpretar o seu domnio informando seu endereo de IP, nmeros combinados que representa o endereo real no site na internet (como se fosse o CEP da nossa rua). Por exemplo, para o domnio teste.com.br ns teramos o endereo de IP 69.38.21.53. Ento o que seria mais fcil de lembrar, o domnio ou seu endereo de IP ? O cliente (seu browser) determina qual protocolo ser usado. Por exemplo, temos o protocolo HTTP (Protocolo de Transferncia de HiperTexto) e FTP (Protocolo de Transferncia de Arquivo). Ento o servidor web retorna os arquivos solicitados. Por exemplo, no domnio HTTP://www.teste.com.br/noticia.php, o browser solicita o arquivo noticia.php do servidor teste.com.br e ficar aguardando a resposta. O servidor ento responde os pedidos do browser. Verifica se o endereo existe, encontra os arquivos necessrios, executa as instrues apropriadas e retorna para os resultados de volta para o browser. Se no puder localizar o arquivo, o servidor envia a uma mensagem de erro para o cliente.

Projeto E-JOVEM O browser recebe os dados do servidor na linguagem HTML interpreta essas instrues e exibe os resultados para o usurio.

Esse processo repetido at que o cliente (seu browser) deixe o site. 1.4. Exemplo de um cdigo PHP <?php $valor = 5; // atribui o valor 5 a variavel $valor print $valor; // imprime 5, que o resultado variavel $valor print "<br/>"; // pula uma linha. echo $valor; // realiza o mesmo que print print "<br/>"; // pula uma linha. if($valor > 10){ // se o valor for maior que 10 print "Valor maior do que 10"; // imprime o resultado }else{ // se no print "Valor menor do que 10"; // imprime o resultado } ?> 1.5. Site oficial PHP e como utiliza-lo O site oficial do php HTTP://www.php.net, l podemos tirar duvidas sobre funes, visualizar sua documentao, fazer download do PHP, ler notcias e novidades sobre o PHP, reportar bugs, ler o FAQ, entre outras coisas. 1.5.1. Buscando uma funo no site Quando voc estiver com dvidas sobre uma determinada funo poder recorrer sempre ao site oficial do PHP. Para isso, vamos seguir os passos: 1. Digite o endereo do site: HTTP://www.php.net 2. Procure por search for, que encontra-se no canto superior direito. 3. Digite uma funo por exemplo, print. 4. Verifique se est in the function list. Isso quer dizer que voc far sua busca dentro da lista de funes. 5. Aperte Enter ou clique na setinha para pesquisar a funo. Ser exibida uma tela, onde mostrar a funo, sua descrio, seus parmetros, seu valor retornado, exemplos e funes relacionadas. A maioria das funes possui exemplos e esto disponveis em portugus.

Projeto E-JOVEM

2. O ambiente WEB 2.1. Como funciona a internet Para seu funcionamento, a internet utiliza um procedimento detalhado para a troca de dados. Existem regras a serem seguidas, que so chamadas de "protocolos de comunicao". Essas regras so similares as da linguagem humana. Por exemplo, quando duas pessoas esto conversando, enquanto uma fala a outra escuta, para que haja uma compreenso necessrio que as palavras estejam dentro da sintaxe da linguagem conveniente. Caso o interlocutor no compreenda a mensagem, ele solicita que seja repetida. 2.2. Protocolo TCP/IP Para a troca de mensagens na internet foi desenvolvido o protocolo TCP/IP Transmission Control Protocol/Internet Protocol (Protocolo de Controle de Transmisso/Protocolo de Internet). O TCP/IP o protocolo bsico para a comunicao entre as mquinas conectadas internet, que gerencia toda a parte de transmisso e distribuio de dados na rede. 2.2.1. Funes do TCP O TCP - Transmission Control Protocol(Protocolo de Controle de Transmisso) o responsvel por quebrar a mensagem em pacotes de informao. Quando o computador de destino da mensagem recebe os pacotes, ele utiliza o TCP para recombin-los na mensagem original. Comparando a quantidade de informao enviada com a quantidade de Informao recebida na mensagem, o computador de destino pode ento garantir que no ocorreram erros na transmisso da mensagem. 2.2.2. Funes do IP O IP - Internet Protocol(Protocolo de internet) o responsvel por assegurar que a informao chegar no computador de destino. Resumindo o IP tem as funes de: Cuidar do envelopamento Endereamento (remetente e destinatrio) Envio dos dados empacotados 2.3. Protocolo HTTP O HTTP o protocolo que gerencia e formaliza as requisies e as respostas trafegadas entre o cliente e o servidor web. Caso o servidor web encontre a pgina, ela ser enviada em partes ao navegador, caso contrrio, o servidor enviar uma mensagem de erro.

Projeto E-JOVEM

2.4. Servios da Internet Abaixo listamos alguns servios disponveis na internet e suas definies: WEB (www) Pginas com os mais variados assuntos. um sistema de documentos em hipermdia que so interligados e executados na Internet. Os documentos podem estar na forma de vdeos, sons, hipertextos e figuras. Correio Eletrnico - Comunicao entre pessoas atravs de mensagens escritas (@). O funcionamento do e-mail segue o seguinte procedimento. Voc escreve a mensagem no seu computador para algum. Esta mensagem vai primeiro para o seu provedor que transmite para o provedor da pessoa para quem voc escreveu. Ento, a pessoa deve acessar o prprio provedor para resgatar sua mensagem. FTP FTP significa File Transfer Protocol (Protocolo de Transferncia de Arquivos), e uma forma bastante rpida e verstil de transferir arquivos (tambm conhecidos como ficheiros), sendo uma das mais usadas na internet. WAP Disponibilizao de recursos da Internet via telefonia celular Conversas On-line - Troca de informaes simultneas

Abaixo temos uma figura que demonstra muito bem a forma como acessamos esses servios:

Porm para acessarmos esses servios precisamos utilizar os provedores da internet, veja abaixo algumas explicaes. Algumas das formas para conectarmos a internet: Uma linha telefnica discada: dial-up. Para a conexo dial-up ser necessrio uma linha telefnica, ligada a um modem, conectado ao computador e um provedor de acesso para onde voc vai ligar e que ir permitir seu acesso Internet.

Projeto E-JOVEM Conexes de alta velocidade: ADSL, fibra tica, TV a cabo, satlite. Conexo dedicada um tipo caro mas muito rpido de conexo. o utilizado normalmente pelos provedores: a estao do provedor conectada via cabo aos Backbones (linhas de altssima velocidade de conexo Internet).

2.4.1. Provedores Os provedores esto conectados Internet 24 horas por dia por meio dos backbones (espinha dorsal da Internet). Voc deve possuir uma assinatura (paga ou no) com o provedor para poder ter acesso a internet, assim o provedor disponibiliza um endereo nico para voc. Nos computadores do provedor voc tem tambm um espao para armazenar suas informaes e mensagens eletrnicas. 2.5. Tipos de Domnio Ao invs de decorarmos http://www.educandus.com.br http:// - protocolo www tipo de servio com tipo de domnio br pas No Brasil, para registrar um domnio precisamos entrar no site HTTP://www.registro.br. No site existe um local onde poderemos pesquisar um domnio. Caso esse domnio esteja disponvel para registro voc poder compr-lo. 3. Ambiente de desenvolvimento Para comearmos a programar precisamos definir nosso ambiente de desenvolvimento ou ambiente de trabalho. O ambiente de desenvolvimento nada mais que todos os softwares e aplicativos necessrios para ajudar o programador em seu trabalho. Seja na criao do seu sistema, na simulao em ambiente web ou na realizao de testes. 3.1. Sistemas necessrios para o desenvolvimento em PHP Para programar em PHP ser necessrio termos um servidor web rodando em nossa mquina, isso ser til para simularmos como nosso sistema estar funcionando quando o mesmo estiver disponvel na internet e para o armazenamento de dados no banco, necessitaremos tambm de uma IDE de desenvolvimento, esse, no sendo to essencial para seu desenvolvimento, mas extremamente til para acelerar o processo de desenvolvimento. os Ips, decoramos os domnios ou nomes:

Projeto E-JOVEM

3.2. Xampp Uma das sutes de desencolvimento mais utilizadas para PHP o XAMPP, que um pacote de aplicativos para desenvolvimento web em PHP, e alm de sua instalao ser muito fcil, sua usabilidade tambm . Sendo necessrio apenas baixar, extrair e inicializar. Alm disso, o XAMPP gratuito, esta livre para ser copiado nos termos da licena GNU - General Public License. Veja abaixo alguns dos aplicativos que j esto integrados ao XAMPP: APACHE Servidor web livre. PHP- Linguagem de programao. PERL Linguagem de programao. MYSQL - Linguagem de banco de dados. PHPMYADMIN - um programa de computador desenvolvido em PHP para administrao do MySQL pela Internet.

Esses so os aplicativos essenciais para simular um servidor web na sua mquina, assim ser possvel testar as aplicaes que sero criadas. Nesta apostila no vamos mostrar como instalar o XAMPP, pois existem muitas formas de se instalar o xampp, uma delas voc poder seguir usando as aulas no portal da educandus. 3.3. IDE de Desenvolvimento IDE - Integrated Development Environment (Ambiente Integrado de Desenvolvimento), um programa de computador que rene caractersticas e ferramentas de apoio aos desenvolvedores de software, cujo objetivo de agilizar o processo de produo. 3.4. Principais caractersticas de uma IDE As principais caractersticas de uma IDE com suporte a PHP so: Editar o cdigo fonte do sistema em desenvolvimento, colocar cores diferenciando variveis, palavras-chave, funes e etc. tornando fcil sua compreenso. Auxiliar no processo de encontrar e corrigir erros (bugs) no cdigo-fonte do programa, na tentativa de aprimorar a qualidade de software. Ajudar na utilizao de funes nativas da linguagem, completando automaticamente e mostrando os valores passados e retornados delas.

10

Projeto E-JOVEM

Na utilizao de Orientao a Objetos, a IDE auxilia na utilizao de mtodos das classes.

3.5. Qual IDE Utilizar ? Indicamos que voc utilize o ECLIPSE PDT, que alm de ser uma ide gratuita, atende a todos as necessidades do programador PHP. Veja abaixo como configurar seu ambiente de desenvolvimento: 1. Acesse o link: http://download.eclipse.org/tools/pdt/downloads/ 2. Procure pelo Release Build mais atualizado e clique no link 3. Ser carregada outra pgina, contendo o Release Build. 4. Procure por PDT All-in-One e baixe a verso para seu sistema operacional 5. Aps o download, descompacte o arquivo. 6. Pronto o eclipse PDT j pode ser usado. Para executar o eclipse, seguiremos os passos abaixo: 1. Clicamos no cone do eclipse. 2. Como a primeira vez em que estamos usando o eclipse. Ser necessrio definirmos o local do nosso Workspace (rea de trabalho). 3. Para definirmos nosso Workspace clicaremos no boto browser, abrir uma janela para selecionarmos o diretrio do nosso Workspace. OBS: ser necessrio escolhermos a pasta htdocs, que encontrasse dentro de lampp. Geralmenete no caminho /opt/lampp/htdocs. Esse o mesmo caminho onde ns instalamos o xampp. 4. Selecione a opo Use this as the default and do not ask again (use esse diretrio como default e no pergunte novamente) 5. Ser exibida a tela de boas vindas do eclipse PDT Obs.: Voc pode utilizar qualquer outra ide para o desenvolvimento PHP, voc deve apenas levar em considerao aquela que mais se adapta a seu estilo de trabalho.

11

Projeto E-JOVEM

4. Ambiente HTTP Como falamos anteriormente HTTP (Hypertext Transfer Protocol ou Protocolo de Transferncia de Hipertexto) um protocolo de comunicao utilizado para transferir dados por intranets e pela World Wide Web. Geralmente, esse protocolo utiliza a porta 80 e usado para a comunicao de stios web, comunicando na linguagem HTML. Ele surgiu da necessidade de distribuir informaes pela Internet. Para isso tornou-se necessrio uma forma de comunicao que tornasse padro comunicao entre cliente e servidor, tornando assim possvel de ser interpretada por todos os computadores ligados na Internet. 4.1. Funcionamento do HTTP O HTTP utiliza o modelo cliente-servidor, como na grande maioria dos protocolos de rede, baseando-se no paradigma de requisio e resposta. Um programa requisitante (cliente) estabelece uma conexo com um outro programa receptor (servidor) e envia-lhe uma requisio, contendo a URI, a verso do protocolo, uma mensagem MIME (padro utilizado para codificar dados em formato de textos ASCII para serem transmitidos pela Internet) contendo os modificadores da requisio, informaes sobre o cliente e, possivelmente, o contedo no corpo da mensagem. O servidor responde com uma linha de status (status line) incluindo sua verso de protocolo e um cdigo de operao bem sucedida ou um cdigo de erro, seguido pelas informaes do servidor, meta informaes da entidade e possvel contedo no corpo da mensagem. Aps o envio da resposta pelo servidor, encerra-se a conexo estabelecida. 4.2. Mensagem HTTP No protocolo HTTP a comunicao entre cliente e servidor feita atravs de mensagens: O cliente envia uma mensagem de requisio e o servidor uma de resposta ao cliente com a solicitao. Uma mensagem, tanto de requisio como de resposta, composta, por uma linha inicial, nenhuma ou mais linhas de cabealhos, uma linha em branco obrigatria que finaliza o cabealho e para finalizar o corpo da mensagem, que poder ser opcional em alguns casos.

12

Projeto E-JOVEM 4.2.1. Cabealho da Mensagem O cabealho da mensagem (header) utilizado para adicionar informaes na transmisso entre o cliente e o servidor. Sendo inserido logo aps a linha inicial da transao (mtodo), tanto para a requisio do cliente quanto para a resposta do servidor, seguido de dois pontos (:) e um valor.

4.2.2. Corpo da Mensagem Uma mensagem HTTP poder conter um corpo de dados que sero enviados abaixo das linhas do cabealho. Na resposta, essa mensagem poder conter o recurso que foi requisitado pelo cliente ou uma mensagem de erro, caso esse recurso no seja possvel. J numa requisio, poder conter dados que sero enviados pelo usurio ou um arquivo que ser enviado para o servidor. Quando uma mensagem HTTP tiver um corpo, podero ser includos cabealhos de entidades que descrevem suas caractersticas, como por exemplo, o Content-Type que informa o tipo MIME dos dados no corpo da mensagem e o Content-Length que informa a quantidade de bytes que o corpo da mensagem contm. Exemplos: text/plain text/html Image/gif Image/jpeg application/zip Descrio Arquivo no formato texto (ASCII) Arquivo no formato HTML, utilizado como padro para documentos Web Imagem com o formato GIF Imagem com o formato JPEG Arquivo compactado

13

Projeto E-JOVEM

4.3. Requisio Uma mensagem de requisio enviada pelo cliente composta por: Uma linha inicial (Request-Line) Linhas de cabealhos (Request-header) Linha em branco obrigatria Corpo da mensagem (opcional)

A linha inicial de uma requisio composta por trs partes separadas por espaos: O mtodo (Method) A identificao do URI (Request-URI) A verso do HTTP (HTTP-Version) utilizado.

No protocolo HTTP, o tipo de URI utilizado chamado de URL (Uniform Resource Locater), que composto pela identificao do protocolo, pelo endereo do computador servidor e pelo documento requisitado. 4.4. Mtodos O protocolo HTTP possui 8 mtodos que indicam a ao a ser realizada no recurso especificado. O mtodo o responsvel por determinar o que o servidor deve fazer com a URL fornecida no momento da requisio de um recurso. So eles: GET O mtodo mais comum. Solicita um recurso seja um arquivo ou um script CGI. O mtodo GET reconhecido por todos os servidores. HEAD o mesmo que GET, mas o recurso no ser retornado. usado para obter meta informaes por meio do cabealho da resposta, sem ter que recuperar todo o contedo. POST Envia dados que sero processados (por exemplo, formulrios HTML). Os dados so includos no corpo do comando.

14

Projeto E-JOVEM Uma requisio por mtodo POST requer sempre que: 1. As informaes submetidas sejam anexadas ao corpo da mensagem e formatadas como uma query string 2. Conter cabealhos adicionais especificando seu tamanho (ContentLenght) e seu formato (Content-Type). Por isso, esse mtodo oferece uma maior segurana em relao aos dados transferidos, ao contrrio do mtodo GET que os dados so anexados a URL, ficando visveis ao usurio. PUT Envia certo recurso. DELETE Exclui o recurso. TRACE - Ecoa o pedido, de maneira que o cliente possa saber o que os servidores intermedirios esto mudando em seu pedido. OPTIONS - Recupera os mtodos HTTP que o servidor aceita. CONNECT - Serve para uso com um proxy que possa se tornar um tnel SSL (um tnel pode ser usado, por exemplo, para criar uma conexo segura).

4.5. Resposta Uma mensagem de resposta composta pelos seguintes campos: Uma linha inicial (Status-Line). Linhas de cabealhos (Responseheader). Uma linha em branco obrigatria. Um corpo de mensagem opcional.

A linha inicial de uma resposta, chamada de linha de status, possui por sua vez trs partes separadas por espaos: A verso do protocolo HTTP (HTTP-Version). Um cdigo de status (Status-Code) da resposta, que fornece o resultado da requisio. Uma frase de justificativa (Reason-Phrase) que descreve o cdigo do status.

15

Projeto E-JOVEM

4.6. Os Cdigos de Retornos O Status-Line de uma resposta HTTP indica ao cliente se sua requisio foi bem sucedida ou no. Esta situao fornecida atravs de um cdigo de retorno (Status-Code) e uma frase explicativa. O cdigo de status formado formado por trs dgitos sendo o primeiro o digito que informa a classe que pertence. Existem cinco tipos: 1xx. Informao (Informational) utilizada para informar o cliente que sua requisio foi recebida e est sendo processada. 2xx. Sucesso (Success) indica que a requisio foi concluda com sucesso. 3xx. Redirecionamento (Redirection) informa a ao adicional que dever ser tomada para completar a requisio. 4xx. Erro no cliente (Client Error) informa que a requisio feita pelo cliente no poder ser atendida. 5xx. Erro no Servidor (Server Error) ocorreu um erro no servidor ao tentar cumprir uma requisio valida.

4.7. Outros Protocolos Existem outros tipos de protocolos como: FTP (File Transfer Protocol, ou Protocolo de Transferncia de Arquivos), usado para envio de arquivos do computador para um servidor na Web. SMTP (Simple Mail Transfer Protocol, ou Protocolo de Transferncia de Correio Simples), protocolo usado para correio eletrnico (e-mail).

16

Projeto E-JOVEM 4.8. Esquema de Comunicao

5. Estrutura do cdigo PHP Sitaxe Antes de tudo, uma aplicao PHP um pequeno conjunto de blocos bsicos de construo. O PHP foi construdo com a inteno de ser simples. A sintaxe php fcil de ser entendida, apesar de ser derivada de muitas outras linguagens como C, PERL e JAVA apartir das ultimas adies de orientao a objeto. Tags e Arquivos Fontes Arquivo PHP concebido como processador de texto, com isso pode ser inserido direto em arquivos de texto, utilizando para isso tags especiais o interpretador ir ento interpretar o texto fora das tags e executar os que se encontram dentro das tags. Alguns tipos de tags disponveis: Tag Padro <?php Cdigo php ?> <? Cdigo php ?> <script language=php> Cdigo php </script> 17

Tag Curta

Tag Script

Projeto E-JOVEM

A tag padro a melhor forma de abertura e fechamento de tag para se trabalhar com php, por deixar seu cdigo mais portvel e compatvel, porque garantida sua disponibilidade e no desativado ao mudar o arquivo de configurao do php. Porem a forma mais usada no mundo a tag curta elas no tem o problema de conflito com cabealhos XML. Outra grande vantagem e uma das mais usadas, a possibilidade da utilizao de uma impresso direta <?=$variavel?> sem a necessidade da utilizao do print ou echo. Voc poder usar qualquer um dos tipos de tags, sabendo que em alguns casos poder ser necessrio configurar o php. Espao em branco PHP whitespace-insensitive Isso significa que no h exigncias para uso (ou no usar) um tipo especfico de caracteres branco (ex.: guias, em vez de espaos), ou um determinado nmero de caracteres branco, exceto em alguns casos:

Voc no pode ter nenhum espao entre <? e php No pode romper uma palavra-chave (por exemplo: whi Le, fo r ou func tion) No pode romper nome de variveis e funes (por exemplo: $var nome, function te ste())

Palavras-chave Palavras-chave, palavras-reservada ou ainda keywords. So palavras que tem um significado especial no PHP. Algumas delas representam coisas que parecem funes, algumas parecem constantes, mas na verdade no o so realmente: elas so construtores de linguagem. Voc no pode usar nenhuma das seguintes palavras como constantes, nomes de classes, de funes ou de mtodos. Utilizar como nome de variveis geralmente no causa erros, mas pode levar a confuso.

Tabela de Palavras-chave: and __LINE__ class die() empty() endswitch for include() or array() const do enddeclare endwhile foreach include_once() xor as continue echo() endfor eval() function isset() __FILE__ break declare else endforeach exit() global list() exception (PHP 5) case default elseif endif extends if new

18

Projeto E-JOVEM print() switch __FUNCTION__ interface (PHP 5) protected (PHP 5) throw (PHP 5) require() unset() __CLASS__ implements (PHP 5) abstract (PHP 5) cfunction (PHP 4 somente) require_once() use __METHOD__ return() var final (PHP 5) static while php_user_filter (PHP 5) private (PHP 5) catch (PHP 5)

instanceof (no public (PHP 5) PHP 5) clone (PHP 5) try (PHP 5)

old_function this (PHP 5) final (no PHP 5) (PHP 4 somente) __NAMESPACE__ namespace (no goto (PHP 6 __DIR__ (no (no PHP 5.3) PHP 5.3) somente) PHP 5.3) Comentrios Toda linguagem de programao possui formas de comentar o cdigo, e com o php no diferente. Vale lembrar que uma boa pratica de programao comentar cada funo, classe, mtodo ou propriedade em seu cdigo. Embora seja muito fcil achar cdigos mal comentados ou praticamente sem comentrios em cdigos. Ento quando for codificar lembre-se sempre que at voc mesmo depois de alguns dias, meses ou anos poder ter esquecido como programou tal funo e ser necessrio ler e reler algumas vezes o cdigo para entend-lo.

Tal como acontece com tags, PHP d-lhe mltiplas escolhas para os seus comentrios: // comentrio simples de uma linha # comentrio simples de uma linha /* Comentrio de varias linhas, comentrio em bloco */ /**

19

Projeto E-JOVEM Bloco de cdigo

Um bloco de cdigo simplesmente uma srie de declaraes entre duas chaves: { / / Alguns comentrios f () / / uma chamada de funo } Construtor da Linguagem Talvez a mais comum delas seja a indicao do echo, que permite que voc escreva dados de sada. echo 10; // ir imprimir 10 na tela. importante compreender que o ECHO no uma funo e, como tal, no tem um valor de retorno. Se voc precisa de sada dados atravs de uma funo, voc pode usar print() em vez disso: echo print (10); 10;

Outra que muito importante saber die(), que na verdade um apelido de exit(). Ela permite que voc encerre o script e obtenha uma sada que poder retornar uma string ou um valor numrico. As funes so, obviamente, um importante elemento da linguagem PHP. Como tal, falaremos mais adiante sobre elas. 6. Integrando PHP com HTML A linguagem padro dos browsers o HTML com isso a integrao do PHP com HTML deve ser feita levando-se em considerao que tudo ser transformado em HTML ao final. 6.1. Usando print() e echo() As funes print() e echo() so praticamente idnticas, tendo apenas algumas diferenas que mostraremos abaixo: echo( ): Pode receber mais de um parmetro, mostrando a concatenao dos mesmos. Tem uma sintaxe curta, onde voc pode imediatamente abrir a tag com o sinal de igual. Esta sintaxe curta funciona habilitando a definio da configurao short_open_tag. Ex: <?=teste?>.

20

Projeto E-JOVEM print( ): Retorna o valor mostrado. $valor = print "teste"; -> imprime teste na tela e coloca em $valor a string "teste". echo no retorna nada.

Observao: Ambos so construes da linguagem, portanto podem ser chamados com ou sem os parnteses, mas para enviar mais de um parmetro para echo, o uso de parnteses problemtico. 6.2. Usando aspas simples e aspas duplas A escolha do tipo de aspas usado com as funes de impresso (print e echo) fundamental, pois o resultado pode ser bastante diferente. Com aspas duplas (") podemos usar variveis e caracteres especiais, como \n (para criar uma quebra de linha), j entre aspas simples tudo literalmente impresso. Exemplo: <textarea><? print nova \r\n linha; ?></textarea> <textarea><? print "nova \r\n linha"; ?></textarea> Voc ver na tela que o textarea que usamos aspas simples ir imprimir o \n enquanto o com aspas duplas ir criar uma nova linha. Outra diferena entre aspas simples e duplas se faz no uso de variveis, ao imprimir uma varivel com aspas simples ns estaremos imprimindo a varivel em si. Ao imprimir com aspas duplas estaremos imprimindo o valor do dado que a varivel possui.

6.3. Integrando PHP com JAVASCRIPT Da mesma forma que podemos integrar PHP com HTML, podemos integrar PHP com javascript. Veja o exemplo abaixo: <?php print "<script>alert('PHP com JAVASCRIPT');</script>"; ?> Voc ver que logo ao carregar a pgina, ser exibido um alerta com o nome que esta entre parntese. 7. Tipos de Dados
O PHP suporta vrios tipos de dados, porm eles so divididos em duas categorias:

21

Projeto E-JOVEM 7.1. Escalar Um valor escalar contm somente um valor de cada vez. PHP suporta quatro tipos escalares:

boolean int float string

Um valor que possa somente ser verdadeiro ou falso. Um nmero de valor inteiro. Um valor de ponto flutuante Uma coleo de dados binrios.

PHP reconhece dois tipos de nmeros, os inteiros e de valor ponto flutuante. O tipo de dados inteiro usado para representar inteiros assinados (o significado que os nmeros positivos e negativos podem ser expressos com ele). Os nmeros podem ser declarados usando diversas notaes diferentes: Decimal Notao decimal padro. Note que no necessrio ter separador de milhar, na verdade, permitido. 0666, 0100 Notao octal, identificado pelo seu zero esquerda e utilizado principalmente para expressar UNIX-estilo de permisses de acesso. 0123; 0XFF; - Notao base-16, veja que h dgitos 0100 hexadecimais e 0x so o prefixo principal e so case-insensitive, ou seja, podem ser escritos na forma maiscula ou minscula. 10; -11; 1452

Octal

Hexadecimal

OBS: importante voc est bem ciente das diferentes notaes, em particular, nmeros octal que pode facilmente ser confundido com os nmeros decimais e pode conduzir a alguns erros. Os nmeros de pontos flutuantes (chamados tambm flutuadores e, s vezes, dobros) so os nmeros que tm um componente fracionrio. PHP suporta duas notaes diferentes para express-las:

22

Projeto E-JOVEM

Decimal

0.12; 1234.43; - Notao decimal tradicional. .123 2E7, 1.2e2 Exponencial de um conjunto de notao de dgitos significativos, seguido pelo E que case-insensitive, ou seja, podem ser escritos na forma maiscula ou minscula, seguido tambm de um expoente. O nmero resultante expresso multiplicou por dez ao poder do expoente, para o exemplo, 1e2 iguais 100.

Exponencial

7.1.1. Strings Para muitos programadores, strings so equivalentes a textos. Enquanto em algumas linguagens isto , na verdade, o que acontece, em muitos outros (incluindo o PHP), a string um dado muito limitado. Strings so na verdade uma coleo de dados binrios podendo assim ser um texto, mas tambm pode ser o contedo de um arquivo de imagem, uma planilha eletrnica, ou mesmo uma gravao musical. 7.1.2. Boolean Um valor booleano s pode conter dois valores: verdadeiro ou falso. De uma maneira geral, Booleans so utilizados como base de operaes lgicas, que sero discutidas posteriormente. Quando converter dados para o tipo booleano, vrias regras especiais so aplicveis:

Um nmero (ou inteiro ou de ponto flutuante) torna-se convertido em um Booleano falso se o valor original zero, e verdade de outra forma. Uma string convertida em falso somente se ela estiver vazia ou se ele contm o nico 0. Se ele contm quaisquer outros dados, at mesmo vrios zeros, so convertidos para verdadeiro. Quando convertida para um nmero ou uma string, um Booleano 1 passa a ser verdadeiro, e 0 contrrio.

7.2. Composto PHP suporta dois tipos de dados compostos chamados porque so essencialmente recipientes de outros dados:

Arrays: so recipientes de dados de elementos ordenados; um array pode ser usado para armazenar e recuperar qualquer outro tipo de dados, incluindo nmeros, valores booleanos, strings, objetos e at mesmo outras matrizes.

23

Projeto E-JOVEM

Objetos: so recipientes de ambos os dados e cdigo. Eles formam a base da programao orientada a objetos.

7.3. Tipo de Dado NULL NULL indica que uma varivel no tem qualquer valor. A varivel considerada como NULL caso tenha sido atribudo o valor especial NULL, ou se ele ainda no tenha sido atribudo um valor, neste ltimo caso, PHP poder dar um alerta de sada se voc tentar usar a varivel em uma expresso. 7.4. Converso entre Tipos PHP toma cuidado de converter tipos de dados de forma transparente quando uma referncia usada em uma expresso. Entretanto, possvel forar a converso de um valor a um tipo especfico usando os tipos operadores da converso. Estes so simplesmente os nomes dos tipos de dados que pretende converter que ser colocada entre colchetes antes de uma expresso. Por exemplo: <?php $x = 10.88; echo $x; echo = ; echo (int) $x; ?> 8. Variveis Variveis so recipientes de armazenamentos de dados temporrios. Em php, uma varivel pode conter qualquer tipo de dados, tais como: Strings Inteiros Nmeros de ponto flutuante Objetos Arrays.

Php no fortemente tipado, o que significa que ele ir implicitamente alterar o tipo de uma varivel conforme necessrio, dependendo da operao a ser realizada em seu valor.

24

Projeto E-JOVEM
As variveis so representadas por um cifro ($) mais o nome da varivel. As variveis devem ter seu identificador usando apenas letras (az, AZ), nmeros ou o caractere sublinhado. PHP casesensitive, ou seja, ir diferenciar letras maisculas e minsculas, considerando por exemplo: que $a diferente $A.

aconselhvel utilizar os nomes das variveis com letras minsculas, por causa das variveis pr-definidas da linguagem, que so declaradas com maisculas; <?php $nome = valido; // Varivel valida $_nome = valido; // Varivel valida $1nome = invalido; // Varivel invalida, iniciada com um nmero. $Nome = valido 2; echo $nome; echo = ; echo $Nome; ?> 8.1. Verificando de se uma varivel existe Um dos pontos negativos de como php lida com variveis que no h nenhuma maneira de garantir que qualquer uma delas ir existir em qualquer ponto na execuo de um script. Isso pode introduzir no seu sistema uma serie de problemas. Para minimizar o problema voc pode utilizar o construtor especial isset() Uma chamada para o isset() ir retornar true se uma varivel existe e tiver o valor diferente de NULL. Exemplo: <?php $x = 10; echo isset ($x); ?> 9. Constantes
Constantes so identificadores para valores simples. O seu contedo no muda durante a execuo do cdigo. Elas so criadas com a funo define e, por conveno, so escritas com letras maisculas e no usam o cifro no incio. Constantes podem ser acessados de qualquer parte dentro do script PHP, contudo, s podem receber valores escalares. Assim como variveis, constantes so casesensitive ( diferencia maisculas de minsculas).
<?php define(EMAIL, teste@php.net); // Nome valido echo EMAIL; // exibe teste@php.net define(USE_XML, true);

25

Projeto E-JOVEM
print <br>; print USE_XML define(1CONSTANTE, algum valor); // nome invalido print 1CONSTANTE; ?>

OBS: como voc pde observar, podemos definir uma constante de forma errada, mas nunca iremos poder utiliz-la. 10. Operadores So usados para efetuarem operaes sobre as variveis e constantes. 10.1. Operadores de Comparao

So operadores que estabelecem uma relao de equivalncia entre dois valores. Eles tanto podem determinar se dois valores so iguais (ou no iguais) entre si, ou se um maior (ou menor) do que o outro. O resultado de uma operao comparao sempre um valor Booleano.

Existem quatro operadores de equivalncia:

==

=== != != =

Equivalentes. Verifica se os dois operandos so equivalentes, o que significa que eles podem ser convertidos para o tipo de dados comum que eles tm o mesmo valor, mais no necessariamente do mesmo tipo. Identidade. Verifica se os operandos possuem o mesmo Tipo e tm o mesmo valor. No Equivalentes. Verifica se os dois operandos so no equivalentes, sem verificar o seu tipo. Operador no-idnticos. Verifica se os dois operandos no possuem o mesmo tipo de dados ou no tm o mesmo valor.

Observao: muito fcil confundir o operador de atribuio (=) pelo operador de comparao (= =) e este , na verdade, um dos erros mais comuns na programao. Uma soluo parcial para este problema utilizar um padro de projetos em que o programador inverte a ordem de seus operandos quando se compara uma varivel com valor.

26

Projeto E-JOVEM Exemplo: echo $a = = 10; Voc poderia escrever: echo 10 = = $a; Estas duas operaes so totalmente idnticas, mas, devido esquerda do operador ser um valor, se tivesse esquecido um dos sinais iguais, o parser teria jogado um erro, assim, alertando-o. Veja abaixo o exemplo: <?php $variavel1 = 100; // acrescenta 100 a varivel $variavel1 $variavel2 = 50; // acrescenta 50 a varivel $variavel2 /* a comparao abaixo. Retornar 1 porque o resultado foi true, mesmo a varivel sendo um nmero inteiro e a comparao est sendo feita com uma string*/ echo ($variavel1 = = 100); echo <br>; /* a comparao abaixo. Retornar um valor em branco porque o resultado foi false, pois as variveis possuem valores diferentes*/ echo ($variavel1 = = $variavel2); echo <br>;

/* a comparao abaixo. Retornar um valor em branco porque o resultado foi false, isso porque a varivel um nmero inteiro e a comparao est sendo feita com uma string*/ echo ($variavel1 = = = 100); echo <br>; /* a comparao abaixo. Retornar 1 porque o resultado foi true, isso porque a varivel um nmero inteiro e a comparao est sendo feita com outro nmero inteiro*/ echo ($variavel1 = = = 100); echo <br>; ?> 10.2. Outros Operadores de Comparao

Outros conjuntos de diferentes operadores estabelecem uma relao de desigualdade entre os dois operandos, ou seja, se um dos dois maior do que o outro: < <= Retorna true se o operando da esquerda for menor que o da direita. Retorna true se o operando da esquerda for menos ou igual ao da

27

Projeto E-JOVEM direita. > >= Retorna true se o operando da esquerda for maior que o da direita. Retorna true se o operando da esquerda for maior ou igual ao da direita.

Observaes Sobre Operadores de Comparao Embora o processo seja claro para os nmeros, as coisas mudar um pouco para outros tipos de dados, por exemplo, strings so comparadas atravs da anlise do valor binrio de cada byte na seqncia, at dois valores diferentes so encontrados, o resultado ento determinado pelo valor numrico desses dois bytes. Por exemplo: <?php $esquerda = ABC; $direita = ABD; echo (int) ($esquerda > $direita); ?> O cdigo acima imprime um valor em branco (ou seja, falso), porque a letra D mais elevado na varivel da direita, do que na letra C da varivel da esquerda. Enquanto voc poderia pensar que esta comparao ocorre por causa da ordem alfabtica. Considere os seguintes exemplos: <?php $esquerda = arvore; $direita = Arvore; echo (int) $esquerda > $direita; ?> Neste exemplo ser impresso 1 (verdadeiro), pois o valor ASCII do caractere a 97 que por sua ver mais elevado que o caractere A que 65. OBS: A utilizao de operadores comparao com arrays tambm introduz um conjunto de regras diferentes.

28

Projeto E-JOVEM

10.3.

Operadores Lgicos

Operadores lgicos so usados para ligar valores booleanos em conjunto e obter um terceiro valor booleano em funo das duas primeiras. Existem quatro operadores lgicos em PHP das quais trs so binrias. O nico operador unrio o NO Lgico, identificado por uma exclamao antes do operando. importante compreender que todos os operadores lgicos trabalham apenas com valores booleanos. Por isso, o PHP ir converter primeiro para valor Booleano e, em seguida, executar a operao. Os trs operadores binrios so: && AND || / OR XOR ! / Retornar true caso os operandos da direita E esquerta do operador retornem true. Retornar true caso um dos operandos o da direita OU o da esquerda retornar true. Podendo ser ambos. O ou exclusivo retornar true se o um dos operandos o da direita OU o da esquerda retornar true, mais no ambos. Operador lgico no, invertendo o resultado de um teste.

Observao Sobre Operadores Lgicos importante saber que o PHP tem uma simples estratgia para avaliar os resultados. Por exemplo, se a esquerda do operando && (AND) a operao for avaliada como false. Automaticamente ser retornado false, j que qualquer outro resultado no mudar essa condio. <?php $variavel1 = 100; // acrescenta 100 a varivel $variavel1 $variavel2 = 50; // acrescenta 50 a varivel $variavel2 /* a comparao abaixo. Retornar um 1porque o resultado foi true, na verdade ser feita a comparao da $variavel1 = = 100 retornando true e $variavel2 = = 50 retornando true. Como as duas comparaes retornaram true, o resultado final ser true*/ echo ($variavel1 = = 100 && $variavel2 = = 50); echo <br>; /* a comparao abaixo. Retornar um valor em branco porque o resultado foi false, na verdade ser feita a comparao da $variavel1 != 100 retornando false e $variavel2 = = 50 retornando true. Como uma das comparaes retornou false, o resultado final ser false*/ echo ($variavel1 != 100 && $variavel2 = = 50); echo <br>; ?>

29

Projeto E-JOVEM

10.4.

Operadores Matemticos

Operadores matemticos so os responsveis pelas operaes matemticas bsicas. Adio Subtrao Multiplicao Diviso Modulo $a = 1 + 3.5; $a = 4 - 2; $a = 8 * 3; $a = 15 / 5; $a = 23 % 7;

OBS: Lembre-se que alguns operadores matemticos (por exemplo, o operador de adio) assumem um significado diferente quando aplicados a arrays. 10.4.1. Clculos complexos Em clculos complexos, procure sempre utilizar parnteses, sempre observando as prioridades aritmticas. Por exemplo: <?php $variavel1 = 100; $variavel2 = 50; echo $variavel1 + 5 * 2 +10 * $variavel2; // ser impresso o valor 610 echo "<br>"; echo ( $variavel1 + 5 ) * 2 + (10 * $variavel2); // ser impresso o valor 710 ?> 10.4.2. Converso entre tipos em operaes O PHP realiza automaticamente a converso de tipos em operaes <?php $variavel1 = 100; // String com o valor 100 echo $variavel1 + 20; // ser impresso o valor 120 ?> 10.5. Operadores de incrementao e decrementao

Formam uma categoria especial de operadores, com eles possvel incrementar e decrementar valores inteiros. Eles so operadores unrios, porque eles s aceitam um operando (ou seja, a varivel que necessita ser incrementado ou decrementado), e podem mudar de comportamento, dependendo se forem usadas antes ou depois da varivel.

30

Projeto E-JOVEM

10.5.1. Posio do operador de incrementao e decrementao A posio do operador determina se o ajuste ser realizado antes, ou depois da devoluo do valor:

Se o operador estiver depois do operando, o interpretador ir primeiro retornar o valor atual da varivel e depois incrementar ou decrementar o valor. Se o operador estiver antes do operando, o interpretador ir primeiro incrementar ou decrementar o valor, e depois retornar o valor. <?php $a = 1; // Atribuindo o valor inteiro 1 para a variavel $a echo $a++; // Imprimindo 1, $a agora igual a 2 echo ++$a; // Imprimindo 3, $a agora igual a 3 echo --$a; // Imprimindo 2, $a agora igual a 2 echo $a--; // Imprimindo 2, $a agora igual a 1 ?>

Uso em excesso desse operador pode tornar seu cdigo de compreenso difcil, at os melhores programadores algumas vezes so surpreendidos pelo uso desse operador. Por isso use-o com cautela. Vale a pena ressaltar tambm que esse operador deve ser utilizado para valores numricos. 10.6. Referenciando variveis

Por padro, os operadores trabalham pela atribuio de valor, ou seja, eles copiam o valor de uma expresso para outra. Se do lado direito do operando for uma varivel, somente seu valor ser copiado, de modo que qualquer alterao subseqente ao da esquerda do operador no ser refletindo no operador da direita. Por exemplo: <?php $a = 10; $b = $a;

31

Projeto E-JOVEM $b = 20; echo $a; // ser impresso 10 ?> Normalmente, voc espera que esse seja o resultado obtido, mais a casos em que voc queira uma tarefa que o resultado seja obtido por referncia, de modo que a expresso da esquerda do operando torna-se ligado com a expresso da direita. Por exemplo: <?php $a = 10; $b = &$a; // por referncia $b = 20; echo $a; // ser impresso 20 ?> Observaes sobre referncia de variveis O operador trabalha pela atribuio de valor para todos os tipos de dados, exceto objetos, os quais sempre so passados por referncia, independentemente do operador & ser usado ou no. A utilizao de variveis por referncia usada algumas vezes pode ser at til, mas sempre ser uma tcnica PHP bastante arriscada, porque variveis PHP tendem a permanecer ativas por um longo perodo de tempo, at mesmo dentro de uma funo.

Alm disso, contrariamente ao que acontece em muitas outras lnguas, essa tcnica muitas vezes mais lenta do que a atribuio de valor, porque o PHP usa uma inteligente deferredcopy mecanismo que otimiza a realidade de valor atribuies. 11. Estruturas de Controle
No PHP, as estruturas de controle so formadas por declaraes condicionais e de looping:

11.1.

Estruturas condicionais

Estrutura condicional usada para alterar o fluxo de uma execuo baseado em uma ou mais condies. A maior parte destas estruturas bsicas o se-ento-seno (if-else-elseif) que executa uma das duas declaraes (ou conjuntos de declaraes fechados em um bloco de cdigo), dependendo se uma condio verdadeira ou falsa.

32

Projeto E-JOVEM IF: Executa uma ao se uma condio for atendida. O bloco de comandos a ser executado deve ser escrito entre chaves; <?php $x = 20; if ($x > 10) { echo("O valor da varivel maior que 10."); } 19 ?> ELSE: Ele utilizado para indicar um novo bloco de comando caso a condio do IF no seja satisfeita. <?php $x = 5; if ($x > 10) { echo("O valor da varivel maior que 10."); } else { echo("O valor da varivel menor que 10."); } ?> ELSE IF: Podemos analisar diversas condies possveis: <?php $cor = "branco"; if ($cor == "vermelho") { echo("A varivel contm o valor 'vermelho'."); } else if ($cor == "azul") { echo("A varivel contm o valor 'azul'."); } else if ($cor == "amarelo") { echo("A varivel contm o valor 'amarelo'."); } else { echo("O valor da varivel no foi identificado.");

33

Projeto E-JOVEM } ?> OBS: O ELSE IF pode ser usado tanto separado(ELSE IF) como junto(ELSEIF), no far diferena para o PHP. IF sem operadores Quando no se coloca o operador lgico em testes condicionais com o IF, o PHP por padro ir retornar TRUE sempre que a varivel tiver um contedo vlido. Por exemplo: <?php $a = testando if; if($a){ echo a varivel $a tem contedo; } if($b){ echo a varivel $b tem contedo; } ?> Encadeamento de IF Para realizar testes condicionais de forma encadeada, basta colocar um bloco IF dentro de outro, ou, usar o operador AND. Exemplo: <?php $valor = 80; if($valor > 50){ if($valor < 100){ echo 'O valor maior que 50 e menor que 100'; }else{ echo 'O valor maior que 50 e maior ou igual a 100'; } } ?> Forma contrada Um operador ternrio e especial permite embutir uma estrutura se-ento-seno (ifthen-else)dentro de uma expresso de declarao: echo 10 = = $x ? sim : no;

34

Projeto E-JOVEM O cdigo acima seria equivalente ao seguinte: if (10 = = $x) { echo sim; } else { echo no; } Como voc pode ver, a primeira expresso muito menor, mais deve se alertar sobre o seu uso. Se usada em excesso, pode tornar seu cdigo de difcil compreenso e comprometer sua funcionalidade, principalmente se voc comear a aninhar varias dessas operaes entre si. SWITCH O problema com os se-ento-seno (if-then-else) que eles tendem a ser bastante complicado quando voc precisa verificar uma expresso simples com vrios resultados possveis. Para diminuir este problema, em PHP voc pode construir um interruptor switch / case Onde se apresenta uma forma de testar uma dentre vrias possibilidades. A declarao default executa caso nenhuma das opes for verdadeira. A declarao break faz com que o restante do cdigo no seja executado caso o teste seja verdadeiro. Veja o exemplo: <?php $d = getdate(); switch ($d['wday']) { case 5: echo("Finalmente Sexta"); break; case 6: echo("Super Sbado"); break; case 0: echo("Domingo Sonolento"); break; default: echo("Estou esperando pelo fim da semana"); } ?>

35

Projeto E-JOVEM

11.2.

Estrutura de looping ou Comandos de Repetio

Com o controlador iterativo pode-se executar o mesmo trecho de cdigo mltiplas vezes. PHP tem quatro destes, apesar de apenas dois deles so necessrios para o funcionamento de uma lngua.

while: Estrutura de looping que no necessita de um nmero determinado de iteraes. Ele executado enquanto uma condio for verdadeira. <?php $i = 0; while ($i < 10) { echo $i; echo , ; $i++; } ?>

do-while: outra forma de looping que executa um bloco de cdigo, testa uma condio e repete novamente o bloco de cdigo (ou no). no do while, o controle realizado no final de cada iterao significado que, mesmo que a condio de nunca for verdadeira (true), o contedo do loop ser executado pelo menos uma vez. <?php $i = 0; do { echo $i; echo , ; $i++; } while ($i < 10); ?>

For: Estrutura de looping que executa um bloco de cdigo quantas vezes for indicado em uma varivel. Deve-se definir a varivel que ser testada no looping, uma condio de teste e o incremento (ou decremento) da varivel de controle. A declarao for contm trs partes, separadas por ponto e vrgula (;). <?php for ($i = 0; $i < 10;$i++) { echo $i; echo , ; } ?> 36

Projeto E-JOVEM

Loop infinito: Ao realizar um comando de repetio, tenha sempre o mximo de cuidado possvel, pois, podemos entrar num looping infinito. Um looping infinito nada mais do que entrar num comando de repetio que no tenha fim, ento ele ficar processando aquele trecho de cdigo sem fim. <?php for($i=0; $i<10; $i++){ for($i=0; $i<5; $i++){ } } ?> Veja que no exemplo acima os dois FOR esto usando a mesma varivel $i. Isso faz que a varivel $i sempre saia do segundo for com o valor de 5, assim nunca chegar a ser >= a 10.

11.3.

Fluxo de Execuo break e continue Break: O comando break aborta a execuo em um bloco de comandos como IF, FOR, WHILE. Ignorando as instrues restantes at o fechamento em }. Dessa forma, o programa segue para a prxima verificao da condio de entrada do lao de repetio. Observao: Lembre-se sempre de encerrar uma declarao break usando ponto e vrgula (;) mesmo se no tiver nenhum parmetro. Se voc no fizer e por acaso ele for seguido de uma expresso que retorna um valor inteiro, voc pode acabar causando uma sada aleatria do loop, causando todo o tipo de situaes difceis de solucionar.

Continue: H casos em que, em ver de encerrar um ciclo, voc quer simplesmente que ignore o restante de uma iterao e pule imediatamente para a prxima. Isto feito com a palavra-chave continue. for ($i = 0; $i < 10; $i++) { if ($i > 3 && $i < 6) { continue; } echo $i, ; }

12. Funes: definio, criao, return, parmetros. Definio: Funo um bloco de cdigo com um objetivo especfico, que pode ou no receber uma serie de parmetros e retornarem dados. Uma funo declarada

37

Projeto E-JOVEM apenas uma vez, mas pode ser utilizada diversas vezes. uma das formas mais simples de prover reusabilidade. Criao: Para declararmos uma funo no PHP ser necessrio usarmos o operador function seguido do nome da funo, no podendo haver espaos em branco e sendo iniciada obrigatoriamente por uma letra. Veja como sua sintaxe: function minhaFuncao(){ // o cdigo ficara aqui } Exemplo: <?php function imprimirValor(){ print "5"; } imprimirValor(); ?> Return: A declarao return retorna um valor quando a funo chamada. Esta declarao no necessria se a funo no retorna nenhum valor. Tambm podemos guardar esse valor de retorno numa varivel para isso o cdigo ficaria assim: <?php function imprimirValor(){ return "5"; } $valor = imprimirValor(); print $valor; ?> Para passarmos parmetros, ao definirmos uma funo, colocaremos entre os parnteses quantos argumentos (parmetros) forem necessrios para a funo. Veja o exemplo abaixo: <?php function obesidade($peso, $altura){ $calculo = $peso / ($altura * $altura);

38

Projeto E-JOVEM return $calculo; } $valor = obesidade(85, 1.83); print $valor; ?>

Passagem de parmetros por referncia: Para passarmos uma varivel por referencia, colocaremos o operador & na frente do parmetro, fazendo com que todas as modificaes da varivel dentro da funo sejam validas na varivel externa funo. Veja o exemplo: <?php function somar(&$valor, $valor2){ $valor += $valor2; } $valor = 100; somar($valor, 500); print $valor; ?>

Variveis globais: As variveis quando so declaradas dentro do escopo da varivel so variveis locais, isso quer dizer que, a varivel s poder ser usada dentro da funo. Se quisermos usar uma varivel sem pass-la como parmetro ser necessrio declar-la como global. Uma varivel quando declarada como global poder ser acessada de qualquer ponto de uma aplicao. Variveis estticas: Dentro do escopo de uma funo tambm podemos definir uma varivel como esttica. Dessa forma ser mantido o ultimo valor da varivel. Exemplo: static $total;

Definindo valores detault: PHP permite definir valores default, valores default sero usados caso nenhum valor for passado para aquele parmetro. Veja o exemplo abaixo: <?php function somar(&$valor, $valor2 = 250){ $valor += $valor2; } $valor = 100; somar($valor); print $valor; ?>

39

Projeto E-JOVEM

13. Reutilizao de Cdigo Include e require 13.1. Reutilizao de Cdigo Reutilizao de Cdigo muito til para que possamos requisitar funes de outros arquivos PHP, inclurem determinada rea de cdigo tornando assim o cdigo fcil de ser mantido. Vamos supor que voc possua um portal de notcias com mais de 100 pginas na internet e que cada pgina possui o mesmo topo e o mesmo rodap. Agora imagine que precisamos trocar a logomarca do portal no topo e o nome do portal no rodap. Teramos que entrar pgina por pgina em todas as 100 e trocar de cada uma. Com a reutilizao de cdigo ns s precisaramos trocar apenas uma vez e todas as pginas estariam trocadas. Vamos supor agora que nesse mesmo portal que voc possui, cada pgina tem uma funo de imprimir os assuntos. E voc descobriu que sua funo de imprimir as notcias est errada. Teramos novamente que trocar funo por funo em cada pgina. O que no seria necessrio com a reutilizao de cdigo. 13.2. Include A instruo include() inclui e faz uma avaliao do arquivo informado. Todos os cdigos ficam disponveis no escopo do programa a partir da linha na qual foi inserido. Caso o arquivo no exista ser produzida uma mensagem de warning (advertncia). Exemplo: Crie um arquivo PHP chamado variveis.php e insira o cdigo abaixo: <? $nome = "Filippe"; $aula = "PHP"; ?> Crie agora outro arquivo na mesma pasta com o nome exemplo.php e insira o cdigo abaixo: <?php print "O aluno $nome est estudando $aula <br>"; include "variaveis.php"; print "O aluno $nome est estudando $aula <br>"; ?> Analise o resultado.

40

Projeto E-JOVEM 13.3. Require Idntico ao include. Diferente apenas na sua manipulao de erros. Enquanto o include produz um warning, o require produzir um fatal error (Erro fatal) caso o arquivo no exista. 13.4. Include_once Seu funcionamento idntico ao include, a no ser que o arquivo informado j tenha sido includo. Essa instruo s permite que o arquivo seja includo apenas uma vez. Muito importante para evitar redeclaraes ou sobreposies de informaes caso o programa necessite passar pela mesma instruo mais de uma vez. 13.5. Require_once Seu funcionamento idntico ao require, a no ser que o arquivo informado j tenha sido includo. Essa instruo s permite que o arquivo seja includo apenas uma vez. Muito importante para evitar redeclaraes ou sobreposies de informaes caso o programa necessite passar pela mesma instruo mais de uma vez. 14. Funo Recursiva Uma funo recursiva uma funo que se refere a si prpria. A idia consiste em utilizar a prpria funo que estamos a definir na sua definio. Em todas as funes recursivas existe:

Um passo bsico (ou mais) cujo resultado imediatamente conhecido. Um passo recursivo em que se tenta resolver um subproblema do problema inicial.

14.1. Como comear uma funo recursiva Geralmente, uma funo recursiva s funciona se tiver uma expresso condicional, mas no obrigatrio que assim seja. A execuo de uma funo recursiva consiste em ir resolvendo subproblemas sucessivamente mais simples at se atingir o caso mais simples de todos, cujo resultado imediato. Desta forma, o padro mais comum para escrever uma funo recursiva :

Comear por testar os casos mais simples. Fazer chamadas recursivas com subproblemas cada vez mais prximos dos casos mais simples.

41

Projeto E-JOVEM

14.2. Erro em funes recursivas Dado este padro, os erros mais comuns associados s funes recursivas so, naturalmente: No detectar os casos simples A recurso no diminuir a complexidade do problema.

No caso de erro em funo recursiva, o mais usual a recurso nunca parar. O nmero de chamadas recursivas cresce indefinidamente at esgotar a memria (stack), e o programa gera um erro. A recurso infinita o equivalente das funes recursivas aos ciclos infinitos dos mtodos iterativos do tipo while-do e repeat-until. Observao importante Analise o seguinte exemplo: <?php function fatorial($valor){ if($valor == 1){ return $valor; }else{ return $valor * fatorial($valor - 1); } } print fatorial(7)."<br>"; ?> Se analisarmos a funo fatorial, o caso bsico o teste de igualdade a zero, o resultado imediato 1, e o passo recursivo (valor * n (fatorial ( n - 1))). Repare que uma funo recursiva que funciona perfeitamente em alguns casos, pode simplesmente no estar completamente certa para outros casos. A funo fatorial um exemplo. Quando o argumento negativo, o problema torna-se cada vez mais complexo, cada vez mais longe do caso simples. (fatorial -1) => (fatorial -2) => (fatorial -3) => 14.3. Recurso versus Iterao No exemplo do fatorial, a implementao iterativa tende a ser ligeiramente mais rpida na prtica do que a implementao recursiva, uma vez que uma implementao recursiva precisa registrar o estado atual do processamento de maneira que ela possa continuar de onde parou aps a concluso de cada nova execuo subordinada do procedimento recursivo. Esta ao consome tempo e memria.

42

Projeto E-JOVEM 15. Trabalhando com Array Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde os ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores de qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos inteiros, estes no precisam formar um intervalo contnuo. Como a checagem de tipos em PHP dinmica, valores de tipos diferentes podem ser usados como ndices de array, assim como os valores mapeados tambm podem ser de diversos tipos. 15.1. Sintaxe array array ( [...]) Retorna um array a partir dos valores fornecidos. Lembre-se que os ndices podem ser atribudos aos valores atravs do operador =>. Observao: array() uma estrutura utilizada para representar literais de arrays, e no uma funo. <?php $frutas = array ("a"=>"laranja", "b"=>"banana", "c"=>"melancia"); print_r($frutas); ?> A sintaxe "index => values", separados por vrgulas, definem ndice e valores respectivamente. O ndice pode ser do tipo string ou numrico. Quando o ndice omitido, um ndice numrico inteiro automaticamente gerado, comeando do 0. Se o ndice um inteiro, o prximo ndice a ser gerado ser igual ao maior ndice inteiro + 1. Quando dois ndices idnticos so definidos, o ltimo sobrescreve o primeiro. 15.2. Array Multidimensional O array tambm pode ser criado com mltiplas dimenses (matrizes), til para a criao de tabelas ou planilhas dinmicas. O exemplo a seguir alm de criar um array com duas dimenses mostra como especificar chaves em arrays associativos e como definir ndices numricos em arrays normais.

43

Projeto E-JOVEM

Exemplo: <?php $frutas = array ( "frutas" => array ("a"=>"laranja", "b"=>"banana", "c"=>"melancia"), "numeros" => array (1, 2, 3, 4, 5, 6), "buracos" => array ("primeiro", 5 => "segundo", "terceiro") ); print_r($frutas); ?> Veja abaixo um exemplo de indexao automtica com array(): <?php $array = array( 1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13); print_r($array); ?> A sada desse script ser: Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 13 [4] => 1 [8] => 1 [9] => 19 ) Explicao: -O ndice 3 definido duas vezes, logo o valor que ser guardado o seu ltimo. Valor igual a 13. -O ndice 4 definido duas vezes, logo o valor que ser guardado o seu ltimo. Neste caso foram valores iguais. -O ndice 4 definido depois do ndice 8, e o ndice gerado depois dele foi 9, uma vez que o maior ndice era 8. 15.3. Foreach Foreach funciona somente com arrays e gera erro se utilizado com uma varivel de outro tipo ou em variveis no inicializada.

44

Projeto E-JOVEM

H duas sintaxes: 1 - foreach (expresso_array as $valor) instrues 2 - foreach (expresso_array as $chave => $valor) instrues A primeira forma varre uma dada matriz dada por expressao_array. Em cada 'loop', o valor do elemento corrente atribudo a $valor e o ponteiro interno da matriz avanado em uma posio (assim, na prxima iterao voc estar olhando para o prximo elemento). A segunda uma abreviatura, mas til, da primeira. Faz mesma coisa, exceto pelo fato de que chave do elemento atual ser atribuda varivel $chave em cada iterao. Observaes: Quando o foreach inicia sua primeira execuo, o ponteiro interno da matriz zerado automaticamente para o primeiro elemento do array. Isto significa que voc no precisa chamar reset() antes de um loop foreach. Note tambm que foreach opera sobre uma cpia do array especificado, no o prprio array e, portanto, o ponteiro do array original no modificado como na instruo each(), que altera o elemento do array selecionado, mas isso no se reflete no array original. Entretanto, o ponteiro interno do array original movimentado pelo processamento do array. Assumindo que o lao foreach rode at o fim, o ponteiro interno do array estar posicionado no fim do array. Foreach tem a habilidade de evitar mensagens de erro com '@'. <?php $array = array("Leo", "Macaco", "Vaca", "Cobra", "Elefante"); foreach( $array as $x){ print $x."<br>"; } ?>

45

Projeto E-JOVEM 15.4. Funes Implode e join Sintaxe: string implode(string separador, array partes); string join(string separador, array partes);

As duas funes so idnticas. Retornam uma string contendo todos os elementos do array fornecido separados pela string tambm fornecida. <?php $partes = array("a", "casa nmero", 13, " azul"); $inteiro = join(" ",$partes); echo "$inteiro"; ?> Split Sintaxe: array split(string padrao, string str, int [limite]);

Retorna um array contendo partes da string fornecida separadas pelo padro fornecido, podendo limitar o nmero de elementos do array. <?php $data = "11/14/1975"; $data_array = split("/",$data); print_r($data_array); ?> Explode Sintaxe: array explode(string padrao, string str);

Funciona de maneira bastante semelhante funo split, com a diferena que no possvel estabelecer um limite para o nmero de elementos do array.

46

Projeto E-JOVEM Range Sintaxe: array range(int mnimo, int maximo);

A funo range cria um array cujos elementos so os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parmetro for maior do que o do segundo, a funo retorna false (valor vazio). Shuffle Sintaxe: void shuffle(array $arr);

Esta funo embaralha o array, ou seja, troca as posies dos elementos aleatoriamente e no retorna valor algum. Sizeof Sintaxe: int sizeof(array $arr);

Retorna um valor inteiro contendo o nmero de elementos de um array. Se for utilizada com uma varivel cujo valor no do tipo array, retorna 1. Se a varivel no estiver setada ou for um array vazio, retorna 0. Sort Sintaxe: void sort(array $arr);

A funo mais simples de ordenao de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os ndices.

47

Projeto E-JOVEM Rsort Sintaxe: void rsort(array $arr);

Funciona de maneira inversa funo sort. Ordena os elementos de um array em ordem decrescente, sem manter os relacionamentos com os ndices. Assort Sintaxe: void asort(array $arr);

Tem o funcionamento bastante semelhante funo sort. Ordena os elementos de um array em ordem crescente, porm mantm os relacionamentos com os ndices. Arsort Sintaxe: void arsort(array $arr);

Funciona de maneira inversa funo asort. Ordena os elementos de um array em ordem decrescente e mantm os relacionamentos dos elementos com os ndices. Ksort Sintaxe: void ksort(array $arr);

Funo de ordenao baseada nos ndices. Ordena os elementos de um array de acordo com seus ndices, em ordem crescente, mantendo os relacionamentos. Toda varivel do tipo array possui um ponteiro interno indicando o prximo elemento a ser acessado no caso de no ser especificado um ndice. As funes seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array para verificar seu contedo (chaves e elementos).

48

Projeto E-JOVEM Reset Sintaxe: mixed reset(array $arr);

Seta o ponteiro interno para o primeiro elemento do array, e retorna o contedo desse elemento. End Sintaxe: mixed end(array $arr);

Seta o ponteiro interno para o ltimo elemento do array, e retorna o contedo desse elemento. Next Sintaxe: mixed next(array $arr);

Seta o ponteiro interno para o prximo elemento do array, e retorna o contedo desse elemento. Observao: esta no uma boa funo para determinar se um elemento o ltimo do array, pois pode retornar false tanto no final do array como no caso de haver um elemento vazio. Prev Sintaxe: mixed prev(array $arr);

Seta o ponteiro interno para o elemento anterior do array, e retorna o contedo desse elemento. Funciona de maneira inversa a next. Pos Sintaxe: mixed pos(array $arr);

Retorna o contedo do elemento atual do array, indicado pelo ponteiro interno.

49

Projeto E-JOVEM Key Sintaxe: mixed key(array $arr);

Funciona de maneira bastante semelhante pos, mas ao invs de retornar o elemento atual indicado pelo ponteiro interno do array, retorna seu ndice. 16. Trabalhando com String Strings podem ser atribudas de duas maneiras: Aspas simples ( ' ). Aspas duplas ( " ).

Aspas simples ( ' ): maneira mais simples para especificar uma string. Desta maneira, o valor da varivel ser exatamente o texto contido entre as aspas (com exceo de \\ e \' como mostra a tabela Seqncias de escape). Aspas duplas ( " ): Desta maneira, qualquer varivel ou caracter de escape ser expandido antes de ser atribudo. Seqncia \n \r \t \\ \$ \ \ \[0-7]{1,3} \x[0-9A-Fa-f]{1,2} Significado Nova linha Retorno de carro (semelhante a \n) Tabulao horizontal A prpria barra ( \ ) O smbolo $ (Cifro) Aspa simples Aspa dupla Seqncia de caracteres batendo a expresso regular dos caracteres em notao octal. Seqncia de caracteres batendo a expresso regular de um caracter em notao hexadecimal.

16.1. Operadores de strings H dois operadores de string. O primeiro o operador de concatenao o ponto (.), que retorna a concatenao dos seus argumentos direito e esquerdo.

50

Projeto E-JOVEM Exemplo: <?php $a = "Ol "; $b = $a . mundo!; echo "$b"; ?> O segundo o operador de atribuio de concatenao ('.='), que acrescenta o argumento do lado direito no argumento do lado esquerdo. <?php $a = "Ol "; $a .= mundo!; echo "$a"; ?> 16.2. Funes Chr Sintaxe: string chr(int ascii);

Retorna o caracter correspondente ao cdigo ASCII fornecido

Ord Sintaxe: int ord(string string);

Retorna o cdigo ASCII correspondente ao caracter fornecido. Echo Sintaxe: echo(string arg1, string [argn]... );

Imprime os argumentos fornecidos.

51

Projeto E-JOVEM Print Sintaxe: print(string arg);

Imprime o argumento fornecido. Strlen Sintaxe: int strlen(string str);

Retorna o tamanho da string fornecida. Trim Sintaxe: string trim ( string str [, string charlist])

Retira espaos e linhas do incio e do fim da string fornecida. Ltrim Sintaxe: string trim ( string str [, string charlist])

Retira espaos e linhas em branco do nicio da string fornecida. Rtrim Sintaxe: string rtrim ( string str [, string charlist])

Retira espaos e linhas em branco do final da string fornecida. Observao: chop alias de rtrim.

52

Projeto E-JOVEM str_replace Sintaxe: string str_replace(string str1, string str2, string str3);

Altera todas as ocorrncias de str1 em str3 pela string str2.

Strrev Sintaxe: string strrev(string str);

Retorna a string fornecida invertida. Exemplo: strrev(Teste); // retorna etseT strtolower Sintaxe: string strtolower(string str);

Retorna a string fornecida com todas as letras minsculas. Exemplo: strtolower(Teste); // retorna teste strtoupper Sintaxe: string strtoupper(string str); Retorna a string fornecida com todas as letras maisculas. Exemplo: strtoupper(Teste); // retorna TESTE

53

Projeto E-JOVEM ucfirst Sintaxe: string ucfirst(string str);

Retorna a string fornecida com o primeiro caracter convertido para letra maiscula. Exemplo: ucfirst(teste de funo); // retorna Teste de funo ucwords Sintaxe: string ucwords(string str);

Retorna a string fornecida com todas as palavras iniciadas por letras maisculas. Exemplo: ucwords(teste de funo); // retorna Teste De Funo similar_text Sintaxe: int similar_text(string str1, string str2, double [porcentagem]);

Compara as duas strings fornecidas e retorna o nmero de caracteres coincidentes. Opcionalmente pode ser fornecida uma varivel passada por referncia, que receber o valor percentual de igualdade entre as strings. Esta funo case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes. Exemplo: $num = similar_text("teste", "testando",&$porc); As variveis passam a ter os seguintes valores: $num == 4; $porc == 61.538461538462 Strcasecmp Sintaxe: int strcasecmp(string str1, string str2);

54

Projeto E-JOVEM Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor menor que zero se str1 < str2. Esta funo case insensitive, ou seja, maisculas e minsculas so tratadas como iguais. Observao: A funo strcmp funciona de maneira semelhante funo strcasecmp, com a diferena que esta case sensitive. Strops Sintaxe: int strpos(string str1, string str2, int [offset] );

Retorna a posio da primeira ocorrncia de str2 em str1, ou zero se no houver. O parmetro opcional offset determina a partir de qual caracter de str1 ser efetuada a busca. Mesmo utilizando o offset, o valor de retorno referente ao incio de str1. Strrpos Sintaxe: int strrpos(string haystack, char needle);

Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se no houver. strstr e strchr Sintaxe: string strstr(string str1, string str2); string strchr(string str1, string str2);

As duas funes so idnticas. Procura a primeira ocorrncia de str2 em str1. Se no encontrar, retorna uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto. Exemplo: strstr("Soft Educandus", "Edu"); // retorna Educandus

55

Projeto E-JOVEM

17. Trabalhando com Data e Hora 17.1. A Funo date Date Sintaxe: String date(string formato,int[datahora] );

Para mostrar um campo data e hora o caminho mais prtico utilizar a funo date. Ela retorna uma data no formato especificado. <?php $niver = mktime (13,30,0,9,18,1990); $niverEmTexto = date('d F Y g:i a', $niver); echo "Educandus surgiu em $niverEmTexto."; ?> 17.2. A Funo mktime Mktime Sintaxe: Int mktime(int hora, int minuto, int segundo, int ms, int dia, int ano, int [is_dsf]);

Retorna uma data/hora no formato UNIX. Obtm um timestamp UNIX para uma data. Este timestamp um longo inteiro contendo o nmero de segundos entre a Era Unix (January 1 1970) e o tempo especificado. Argumentos podem ser omitidos da direita para esquerda; quaisquer argumentos assim omitidos sero definidos para o valor atual de acordo com a data e a hora local. Observao: is_dst pode ser definido para 1 se est durante o horrio de vero, 0 se no estiver, ou -1 (o padro) se no se sabe se est em horrio de vero ou no. Se for desconhecido, o PHP tenta calcular. Isto pode causar resultados inesperados (mas no incorretos). A funo mktime() til para fazer data aritmtica e validao, ela calcular automaticamente o valor correto para um receptor fora de linha.

56

Projeto E-JOVEM Exemplo:

<?php echo date ("M-d-Y", mktime (0,0,0,12,32,1997)); print "<br>"; echo date ("M-d-Y", mktime (0,0,0,13,1,1997)); print "<br>"; echo date ("M-d-Y", mktime (0,0,0,1,1,1998)); print "<br>"; echo date ("M-d-Y", mktime (0,0,0,1,1,98)); ?> 17.3. Letras Chaves para Usar com o Comando Date A tabela abaixo mostra algumas letras usadas com o comando date e o seu significado: Caracter: d j W D l L z m M F Y y H h G g i s A a Significado: Dia do ms, numrico (De 00 a 31). Dia do ms, numrico. Sem os zeros esquerda (De 0 a31). Dia da semana, numrico (0=domingo ...6=sbado). Dia da semana textual, abreviado com 3 letras (Sun...Sat). Nome do dia da semana completo (Sunday...Saturday) Se ano bissexto.1 o ano bissexto, 0 ano no bissexto. Dia do ano (De 0 a 365) Ms, numrico (De 01 a 12) Nome do ms, abreviado com 3 letras (Jan...Dec). Nome do ms completo (Janeiro...Dezembro). Ano, numrico, 4 dgitos. Ano, numrico, 2 dgitos. Hora, no formato de 24 horas (De 00 a 23). Hora, no formato de 12 horas (De 01 a 12). Hora, no formato de 24 horas sem zeros esquerda (De 0 a 23). Hora, no formato de 12 horas sem zeros esquerda (De 1 a 12). Minutos (De 00 a 59). Segundos (De 00 a 59). AM ou PM am ou pm

Observao: A funo Date sem argumento da data, retorna a data atual.

57

Projeto E-JOVEM 17.4. Outras Funes Envolvendo Data e/ou Hora Getdate Sintaxe: Array getdate(int data/hora);

Retorna um array associativo contendo todas as informaes de uma data/hora especfica. seconds minutes hours mday wday mon year yday weekday month Time Sintaxe: Int time(void); Segundos Minutos Horas Dia do ms Dia da semana no formato decimal Ms no formato decimal Ano no formato decimal Dia do ano no formato decimal Dia da semana no formato decimal Ms no formato texto

Retorna a data/hora no formato UNIX, que corresponde ao nmero de segundos desde o Unix Epoch(01\01\1970 00:00:00 GMT).

Gmdate Sintaxe: String gmdate(string formato, int datahora);

Retorna uma data/hora GMT no formato UNIX. idntica funo mktime(), exceto que a hora retornada a hora de Greenwich.

Strftime Sintaxe: String strftime(string formato, int datahora);

58

Projeto E-JOVEM

Retorna uma string formatada de acordo com o formato dado em timestamp ou o horrio corrente se nenhum timestamp dado. Nomes de ms e dia da semana e outras strings dependentes de linguagens respeitam o a localidade definida com setlocale(), ou seja, formata uma hora/data de acordo com as configuraes locais. Observao: Setlocale altera as informaes de localidade. Sintaxe: String setlocale(string categoria, string locale); Argumento Data Formato Descrio Data/hora a ser formatada. Se no especificada, utilizar a data/hora corrente. String com caracteres de formatao de datas.

Tabela com os caracteres de formatao de datas. Caracter %a %A %b %B %c %d %H %l %j %m %M %p %S %U Significado Dia da semana abreviado. Dia da semana completo. Nome abreviado do ms. Nome completo do ms. Representao preferida de data e hora. Dia do ms no formato decimal (0031). Hora no formato decimal de 24 horas (0023). Hora no formato decimal de 12 horas (0012). Dia do ano no formato decimal (001366). Ms em formato decimal (112). Minutos no formato decimal. am ou pm, dependendo da hora especificada. Segundos no formato decimal. Nmero da semana do ano atual no formato decimal, comeando no primeiro domingo como o primeiro dia da primeira semana. Nmero da semana do ano atual no formato decimal, comeando na primeira segundafeira como o primeiro dia da primeira semana. Dia da semana no formato decimal, sendo o domingo igual a 0. Representao preferida da data, sem a hora. Representao preferida da hora, sem a data. Ano no formato decimal, sem o sculo (0099). Ano no formato decimal, com o sculo. 59

%W

%w %x %X %y %Y

Projeto E-JOVEM %Z %% Checkdate Sintaxe: Int checkdate(int ms, int dia, int ano); Zona de fuso horrio, ou nome, ou abreviao. Um caractere literal %.

Retorna true se uma data for vlida; caso contrrio, retorna false. Uma data considerada vlida se:

O ano est entre 1 e 32767 o ms est entre 1 e 12 O dia deve est dentro do nmero de dias permitidos para o dado ms. Anos bissextos so levados em considerao.

Gettimeofday Sintaxe: Array gettimeofday(void);

Retorna um array associativo contendo as informaes da hora corrente. Os ndices da matriz so: sec usec minuteswest dsttime 18. Formulrios HTML Um formulrio HTML nada mais do que uma mascara, por onde os usurios podero preencher as informaes solicitadas, que sero tratadas no servidor por algum script PHP. Para isso precisamos ter algumas coisas bsicas no formulrio como: 1. Boto Submit ou uma funo que faa o papel deste boto. 2. Todos os campos que sero interpretados pelo PHP devem conter o atributo name definido. Segundos Microsegundos Minutos a oeste de Greenwich Tipo da correo dst

60

Projeto E-JOVEM Devemos tambm definir o mtodo pelo qual o formulrio ser enviado, que pode ser GET ou POST, normalmente utilizamos o mtodo POST para que os dados no fiquem visveis na url do site. 18.1. Tag FORM Na tag form temos que informar alguns dados importantes para que nosso formulrio funcione corretamente. 1. Temos que definir o action que diz qual script vai executar os dados quando o formulrio for submetido. Caso fique em branco ele enviara os dados pro mesmo script que gerou o formulrio. Ex: <form action=login.php> Neste exemplo os dados do formulrio sero enviados para o script login.php . 2. temos que definir o method utilizado para enviar os dados, GET ou POST. Ex: <form action=login.php method=POST > Neste caso o formulrio esta sendo enviado pelo mtodo POST. 18.2. Como os dados chegam no PHP? De acordo com exemplo anterior: O PHP tem duas variveis globais chamadas $_POST e $_GET estas variveis so do tipo array que so preenchidas pelos campos do formulrio e seus respectivos valores. Ento: Como meu form foi submetido por post para acessar o login digitado pelo meu usurio devo apenas utilizar $_POST[login] Caso meu form tivesse sido enviado por GET trocaria apenas o $_POST para $_GET Ainda existe uma outra forma que acessar uma varivel com o nome do campo de texto direto por exemplo: $login, para isso necessrio est com a opo register_globals ativada no servidor PHP. Existe uma outra forma de acessar as variveis vindas do form independente do mtodo e independente de configurao de servidor, que devemos sempre lembrar de depender o mnimo de configuraes especificas de servidor. Para acessar um campo do form independente do mtodo utilizado devemos acrescentar a funo import_request_variables est funo importa variveis GET/POST/Cookie para o escopo global, ela aceita como parmetro uma string de at 3 caracteres que so: 61

Projeto E-JOVEM

G - para variveis do mtodo GET P - para variveis do mtodo POST C - para variveis vindas de cookies

Exemplo de uso: No inicio do script colocamos: import_request_variables(gp); 18.3. Inserindo dados em um formulrio Vimos como o PHP recebe os dados vindos dos formulrios, mas como podemos enviar dados para os formulrios? Em quase todos os campos HTML temos um atributo chamado value que o valor daquele campo, justamente este o atributo que vamos utilizar para preencher dados do PHP no formulrio. Ex: <input type=text name=txtNome value<? print $txtNome; ?> > Perceba que dentro das aspas do campo value existe a abertura de uma tag PHP e a impresso do valor de uma varivel. Basicamente assim que passamos dados do php para o formulrio, mas temos que lembrar que em alguns casos como combobox , checkbox e radio Button diferente, estes campos tem um value que seu valor mais eles precisam ser selecionados ento tempos que informar qual deve est selecionado. Ex: < input type=checkbox name=receberEmail value=sim <? if($receberEmail == sim){ print checked; }?> > Note que dentro da tag do checkbox criamos um script php que verifica se a varivel do php est como sim e ai imprime a palavra checked que faz com que o checkbox fique marcado. Da mesma forma utilizamos para o radio Button e para o select (combobox) utilizamos a palavra selected. 18.4. Enviando dados para o mesmo arquivo Caso voc no queira ter dois arquivos para calcular uma media simples, podemos utilizar o action do form em branco action= e fazer um tratamento no inicio do nosso script para verificar se o form foi enviado ou no. Uma forma simples de fazer isso fazendo um IF com o nome do boto submit para v se ele existe, caso ele exista o form foi enviado caso contrario ainda no foi enviado. Ex: <? if($_POST[btnSubmit] == valor do submit){ //form enviado 62

Projeto E-JOVEM }else{ //form no enviado } ?> 19. Upload de Arquivos Para fazermos upload de arquivos necessrio fazer modificaes no nosso formulrio. A tag form do HTML tem um atributo chamado ENCTYPE que define o tipo de dados que o formulrio vai enviar ao servidor. Por padro este valor application/x-www-form-urlencoded que serve para enviar apenas textos. Para enviar arquivos precisamos modificar este atributo para multipart/form-data. Ex: <form enctype="multipart/form-data" name="frmUpload" action="arquivo.php" method="POST"> </form> Sem esse atributo setado no ser possvel realizar o upload. 19.1. Input File O HTML j tem um campo especifico para upload de arquivos, onde precisamos apenas configur-lo. O componente que vamos usar o INPUT com o type como FILE. Ex: <input type="file" name="foto" value=""> 19.1.1. Tamanho do arquivo Veja o exemplo abaixo: <input type="hidden" name="MAX_FILE_SIZE" value="3000"> O valor MAX_FILE_SIZE informa ao browser que existe um limite de bytes no qual o arquivo dever possuir. No exemplo acima, o php s ir levar em considerao arquivos que possuam mais de 3000 bytes. 19.1.2. Submetendo um arquivo Veja o exemplo abaixo: <form enctype="multipart/form-data" method="POST"> name="frmUpload" action="upload.php"

63

Projeto E-JOVEM <input type="hidden" name="MAX_FILE_SIZE" value="3000"> <input type="file" name="foto" value=""> <input type="submit" value="Enviar"> </form> Ao clicarmos no boto enviar, iremos submeter o formulrio para a pgina upload.php. O contedo do arquivo poder ser lido usando $_FILES[]. Exemplo: upload.php <? print $_FILE[foto][name]; // imprime o nome original do arquivo no computador do usurio. print $_FILE[foto][ type]; // O tipo mime do arquivo, se o browser deu esta informao. Um exemplo pode ser "image/gif". print $_FILE[foto][ size]; // O tamanho, em bytes, do arquivo. print $_FILE[foto][ tmp_name]; // O nome temporrio do arquivo, como foi guardado no servidor. print $_FILE[foto][ error]; // O cdigo de erro associado a este upload de arquivo. ['error'] foi adicionado no PHP 4.2.0 ?> 19.1.3. Limitando o tamanho do arquivo

Com essas variveis podemos agora fazer qualquer coisa com o arquivo. Como verificarmos o tamanho de um arquivo est dentro do limite a ser enviado ao servidor. Usamos em nosso script: <? if(($_FILE[foto][ size] > 1024)&& ($_FILE[foto][ size] > 3000)) { print O tamanho do arquivo no est entre o permitido; die; } ?> 19.1.4. Copiando o arquivo Para copiar o arquivo usaremos a funo move_uploaded_file(); Veja o exemplo abaixo: <? $dir = /fotos/; if (move_uploaded_file($_FILES['foto']['tmp_name'], $dir . $_FILES['foto']['name'])) { print "O arquivo valido e foi carregado com sucesso. "; } else { print "Erro no envio do arquivo"; } ?> 64

Projeto E-JOVEM Na funco move_uploaded_file();, ns passamos onde o arquivo encontra-se usando para isso $_FILES['foto']['tmp_name'], que informa o local temporrio do arquivo. E como segundo parmetro passou o local onde o arquivo ficar armazenado no servidor. 19.1.5. Explicao das mensagens de erro Desde o PHP 4.2.0, PHP retorna um cdigo de erro apropriado na array do arquivo. O cdigo de erro pode ser encontrado em ['error'] na array que criada durante o upload do arquivo. Em outras palavras, o erro deve ser encontrado em $_FILES['foto']['error']. Veja o detalhe dos erros abaixo: UPLOAD_ERR_OK Valor: 0; no houve erro, o upload foi bem sucedido. UPLOAD_ERR_INI_SIZE Valor 1; O arquivo no upload maior do que o limite definido em upload_max_filesize no php.ini. UPLOAD_ERR_FORM_SIZE Valor: 2; O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no formulrio HTML. UPLOAD_ERR_PARTIAL Valor: 3; o upload do arquivo foi feito parcialmente. UPLOAD_ERR_NO_FILE Valor: 4; No foi feito o upload do arquivo.

19.1.6. Carregando mltiplos arquivos Podemos carregar mltiplos arquivos definindo vrios nomes aos inputs do tipo file ou em formato de array. Para isso precisamos usar a mesma sintaxe no formulrio HTML que voc usa para mltiplos selects e checkboxes. Veja o exemplo abaixo: <form action="file-upload.php" method="POST" enctype="multipart/form-data"> Send these files:<br /> <input name="userfile[]" type="file" /><br /> <input name="userfile[]" type="file" /><br /> <input type="submit" value="Send files" /> </form> Quando o formulrio acima submetido, as matrizes $_FILES['userfile'], $_FILES['userfile']['name'], e $_FILES['userfile']['size'] sero inicializadas e podero ser acessadas acrescentando o ndex. 65

Projeto E-JOVEM

Por exemplo: <? print $_FILES['userfile']['name'][0]; // imprime o nome do primeiro arquivo print $_FILES['userfile']['name'][1];// imprime o nome do segundo arquivo ?> 20. Sesses e Cookies 20.1. O que so sesses O suporte a sesses no PHP consiste em uma maneira de preservar certos dados atravs dos acessos subseqentes. Isto permite a voc fazer aplicaes mais personalizadas e melhorar a aparncia do seu web site. Um visitante acessando o seu web site ganha um identificador nico, o assim chamado id de sesso. Este salvo em um cookie do lado do usurio ou propagado via URL. 20.1.1. Trabalhando com sesses Para criar uma sesso deve ser utilizada a funo session_start() antes da criao do header (primeira funo da pgina) e sempre que se desejar utilizar a informao da sesso. O session_start() uma simples funo que no recebe parmetro algum e sempre retorna o booleano true. Essa funo precisa vir antes qualquer cdigo de sada (echo ou print) e qualquer cdigo HTML da sua pgina. 20.1.2. Destruindo sesses Para fechar a sesso deve ser utilizada a funo session_destroy(); Todas informaes relacionadas a sesso so perdidas. Para remover uma varivel da sesso, deve ser utilizada a funo unset(); Veja o exemplo abaixo: <? unset($_SESSION[nome]); ?>

66

Projeto E-JOVEM

20.2. O que so cookies Cookie um mecanismo de armazenamento de dados no browser cliente e permite o rastreamento ou identificao do retorno de usurios. Voc pode criar cookies com a funo setcookie(). Cookies so parte do header HTTP, ento, a funo setcookie() precisa ser chamada antes de qualquer sada ser enviada ao browser. 20.2.1. Trabalhando com cookies Cookies so criados atravs da funo setcookie(); e essa funo possui at 7 atributos: 1. 2. 3. 4. 5. 6. 7. Nome Nome do cookie; (obrigatrio) Valor Valor a ser inserido no cookie; (obrigatrio) Expire Data (em segundos) em que o cookie vai expirar; Path Identifica o caminho onde o cookie ser salvo; Domnio Identifica o domnio que pode acessar o cookie; Secure (0 ou 1). 1 para o caso de HTTPS. Httponly (0 ou 1). Usado para tornar o cookie acessvel apenas ao protocolo HTTP. Isto significa que o cookie no ser acessvel por linguagens script, como JavaScript. Foi adicionado ao PHP na verso 5.2.0

Exemplo de Cookie: <?php $valor = 'algum valor; setcookie("TesteCookie", $valor); setcookie("TesteCookie", $valor, time()+3600); /* expira em 1 hora */
// Imprime um cookie individualmente echo $_COOKIE["TesteCookie"]; echo $HTTP_COOKIE_VARS["TesteCookie"]; // Imprimimos um array com todos os cookies print_r($_COOKIE);

?> 21. Manipulando Arquivos Iremos mostrar varias funes para trabalharmos com arquivos e diretrios, como por exemplo, abrir um arquivo, ler ou escrever informaes e fech-lo.

67

Projeto E-JOVEM

21.1. Acessando Arquivos Para acessar um arquivo estaremos usando a funo fopen() . Sintaxe: resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $context ]] ) Parmetros: filename: Nome do arquivo (arquivo.txt), Caminho do arquivo (C:\arquivo.txt) ou url (http://www.site.com/pagina.html) mode: forma de abertura do arquivo, poder receber os parmetros abaixo: o r : somente leitura. o r+: leitura e escrita. o w: somente escrita. o w+: leitura e escrita. o a: escrita, informaes acrescentadas no fim do arquivo. o a+: leitura e escrita, informaes acrescentadas no fim do arquivo. use_include_path: O terceiro parmetro opcional use_include_path pode ser definido para '1' ou TRUE se voc quiser buscar o arquivo tambm no include_path. context: O suporte ao contexto foi adicionado com o PHP 5.0.0. Um contexto um conjunto de parmetros especficos e opes que modificam ou melhoram o comportamento de um stream.

OBS: O Windows oferece uma flag de traduo do modo texto ('t') que traduz, transparentemente, \n para \r\n quando trabalhando no arquivo. Em contraste, voc tambm pode utilizar 'b' para forar o modo binrio, que no ir traduzir o arquivo. Para usar essas flags, informe ou 'b' ou 't' como o ltimo caractere no parmetro mode. Exemplo: <?php $handle = fopen("/home/rasmus/arquivo.txt", "r"); $handle = fopen("/home/rasmus/arquivo.gif", "wb"); $handle = fopen("http://www.examplo.com/", "r"); $handle = fopen("ftp://user:password@exemplo.com/arquivo.txt", "w"); ?>

68

Projeto E-JOVEM 21.2. Lendo um arquivo Para lermos arquivos usaremos a funo fgets() Sintaxe: string fgets ( resource $handle [, int $length ] ) Parmetros:

handle: O ponteiro do arquivo tem de ser vlido por uma chamada a fopen() ou fsockopen() (e ainda no fechado por fclose()). Length: A leitura termina quando length - 1 bytes tenham sido lidos, em uma quebra de linha (que includa no retorno), ou no final do arquivo (EOF), o que acontecer primeiro. Se nenhum comprimento for especificado, a leitura do stream continuar at chegar ao final da linha.

Exemplo: <?php $handle = @fopen("arquivo.txt", "r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); echo $buffer; } fclose($handle); } ?> 21.3. Fechando um arquivo Usaremos a funo fclose() para fecharmos um arquivo Sintaxe: bool fclose ( int $handle ); Parmetros: Exemplo: <?php $handle = fopen('qualquerarquivo.txt', 'r'); fclose($handle); ?>

Handle: O ponteiro para o arquivo tem que ser vlido e tem que apontar para um arquivo aberto por fopen() ou fsockopen().

69

Projeto E-JOVEM

21.4. Escrevendo no arquivo Para escrevermos em um arquivo, estaremos usando a funo fwrite() . essa funo ser usada em conjunto com fopen() e fclose(). Sintaxe: int fwrite ( resource $handle , string $string [, int $comprimento ] ) Parmetros:

Handle: Um ponteiro para o sistema de arquivos resource tipicamente criado usando fopen(). String: A string a ser escrita. Comprimento: Se o argumento comprimento for dado, a escrita ir parar depois que comprimento bytes tenham sido escritos ou o final da string seja alcanado, o que vier primeiro.

21.5. Copiar, Renomear e Remover um arquivo Para copiar usaremos a funo copy(), para renomear rename() e para remover unlink() . Veja mais detalhes abaixo: copy() Sintaxe: bool copy ( string $origem , string $destino [, resource $context ] ) Parmetros: Origem - Caminho para o arquivo de origem. Destino - O caminho de destino. Se o destino for uma URL, a cpia pode falhar se o wrapper no suportar a sobrescrita de arquivos existentes. Context - Um vlido resource de contexto criado com stream_context_create()

rename() Sintaxe: bool rename ( string $oldname , string $newname [, resource $context ] ) Parmetros: Oldname antigo nome Newname novo nome

70

Projeto E-JOVEM unlink() Sintaxe: int unlink ( string $filename [, resource $context ] ) Parmetros: Filename Caminho para o arquivo. Context - O suporte ao contexto foi adicionado com o PHP 5.0.0. Context - O suporte ao contexto foi adicionado com o PHP 5.0.0.

21.6. Criar, alterar e excluir diretrios Para criar um diretrio usaremos a funo mkdir(), para alterar chdir() e para remover rmdir() . Veja mais detalhes abaixo: mkdir() Sintaxe: bool mkdir ( string $pathname [, int $mode [, bool $recursive [, resource $context ]]] ) Parmetros:

Pathname O caminho do diretrio. Mode - O modo padro 0777, que significa o acesso mais abrangente possvel. Recursive - O padro FALSE. Context - O suporte ao contexto foi adicionado com o PHP 5.0.0.

chdir ()

Sintaxe: bool chdir ( string $diretorio ) Parmetros:

diretorio O novo caminho do diretrio.

71

Projeto E-JOVEM rmdir () Sintaxe: bool rmdir ( string $dirname [, resource $context ] ) Parmetros:

dirname O caminho do diretrio. Context - O suporte ao contexto foi adicionado com o PHP 5.0.0.

21.7. Abrir, fechar e ler diretrios. Para abrir um diretrio usaremos a funo opendir(), para fechar closedir() e para ler readdir() . Veja mais detalhes abaixo: opendir () Sintaxe: resource opendir ( string $path [, resource $context ] ) Parmetros: closedir () Sintaxe: void closedir ( resource $dir_handle ) Parmetros: dir_handle O manipulador de diretrio resource aberto com opendir(). readdir () Sintaxe: string readdir ( resource $dir_handle ) Parmetros:

Path O caminho do diretrio a ser aberto. Context - O suporte ao contexto foi adicionado com o PHP 5.0.0.

dir_handle O manipulador de diretrio resource aberto com opendir().

22. Enviando E-mail Veremos agora como utilizar formulrios de envio de e-mail em nosso site.

22.1. Funo mail() 72

Projeto E-JOVEM

A funo mail() usada para o envio de e-mails. Sintaxe: bool mail ( string $para , string $assunto, string $mensagem[, string $ headers [, string $parametros_adicionais]] ) Parmetros: Para - Receptor, ou receptores do email.
o

O formato desta string precisa estar de acordo com RFC 2822 (formato de mensagens para internet). Alguns exemplos: usuario@exemplo.com usuario@exemplo.com, anotheruser@example.com Usuario <usuario@exemplo.com> Usuario <usuario@exemplo.com>, Outro Usuario <outrousuario@exemplo.com>

Assunto - Assunto do email a ser enviado. Mensagem - mensagem a ser enviada. Cada linha deve ser separada com um LF (\n). Linhas no devem ser maiores que 70 caracteres. Headers - String a ser inserida no final do cabealho do email. Esta normalmente usada para adicionar cabealhos extras (From, Cc, e Bcc). Mltiplos cabealhos extras devem ser separados com um CRLF (\r\n).

Parmetros_adicionais - O parmetro parmetros_adicionais pode ser usado para passar um parmetro adicional para o programa configurado para usa quando enviando email usando a configurao sendmail_path. Por exemplo, isto pode ser usado para definir o endereo do envelope remetente quando usando sendmail com a opo do sendmail -f. 22.2. Como ser recebido O e-mail ser recebido na caixa de entrada como qualquer outra mensagem, veja como chegaria a mensagem do exemplo da pgina anterior: Assunto: Verifique esta mensagem! Data: (Data do envio) De: Voce <voce@suaempresa.com> Para: joao@suaempresa.com Mensagem: O PHP o melhor!

73

Projeto E-JOVEM

22.3. Enviando e-mail com formato HTML Agora que sabemos como enviar um e-mail em formato de texto simples, aprenderemos como enviar um e-mail com contedo em HTML. Vejam o exemplo abaixo: <? $destinatario = "usuario@empresa.com"; $assunto = "Esta mensagem um teste"; $corpo = ' <html> <head> <title>Teste de correio</title> </head> <body> <h1>Ol amigos!</h1> <p> <b>Bem-vindos ao meu correio de teste</b>. Estamos testando o envio de e-mail atravs de HTML.</p> </body> </html> '; //para o envio em formato HTML $headers = "MIME-Version: 1.0"; $headers .= "Content-type: text/html;charset=iso-8859-1"; //endereo do remetente $headers .= "From: Suporte <suporte@suaempresa.com>"; //endereo de resposta, se queremos que seja diferente a do remitente $headers .= "Reply-To: resposta@suaempresa.com"; //endereos que recebero uma copia $headers .= "Cc:copia@suaempresa.com"; //endereos que recebero uma copia oculta $headers .= "Bcc: oculta1@suaempresa.com, oculta2@suaempresa.com"; mail($destinatario,$assunto,$corpo,$headers) ?>

74

Projeto E-JOVEM

Vamos agora as explicaes: 1. Atribumos a uma varivel $destinatario o endereo de quem ir receber o e-mail. 2. Atribumos a varivel $assunto o assunto do e-mail. 3. Atribumos a varivel $corpo o nosso HTML. 4. A varivel $headers receber todos os headers para o envio do e-mail. Que so eles: a. Para envio de e-mail em formato HTML: $headers = "MIME-Version: 1.0"; $headers .= "Content-type: text/html;charset=iso-8859-1"; b. Endereo do remetente (quem est enviando o e-mail): $headers .= "From: Suporte <suporte@suaempresa.com>"; c. Endereo de resposta se quiser que seja diferente a do remitente $headers .= "Reply-To: resposta@suaempresa.com"; d. Endereos que recebero uma copia. $headers .= "Cc:copia@suaempresa.com"; e. endereos que recebero uma copia oculta $headers .= "Bcc: oculta1@suaempresa.com, oculta2@suaempresa.com"; 5. Utilizamos a funo mail() para enviar o e-mail para os destinatrios, passando as variveis que definimos anteriormente. mail($destinatario,$assunto,$corpo,$headers Observao Importante Para o envio de correio atravs de PHP necessrio que este tenha uma correta configurao. Se a nossa web est num servidor de um provedor de hosting provavelmente j tenham configurado o PHP para o envio de e-mails. Se estivermos trabalhando em um servidor prprio, temos que configurar no PHP. PHP configura-se editando o ficheiro php.ini onde devemos especificar dados como o servidor de correio de sada que deve utilizar PHP para transferir as mensagens. Dentro do php.ini, devemos procurar o epigrafe [mail function]. Dependendo do nosso sistema deveremos configur-lo de uma maneira ou de outra. Em sistemas Windows encontraremos o php.ini no diretrio windows ou dentro deste, no subdiretrio system32 ou similar. Neste sistema deveremos indicar o domnio do servidor de smtp, algo parecido a smtp.meudominio.com. Se o PC local o que faz de servidor, poderemos por "localhost" como mquina que enviar o correio. Tambm podemos

75

Projeto E-JOVEM especificar o endereo de onde queremos que parea a mensagem no caso de que no se indique outra durante o envio. 22.4. O que SMTP Em principio, um servidor para enviar email, mas como o nome SMTP, que vem do ingls "Simple Mail Transfer Protocol" diz, um Protocolo Simples de Transferncia de Mensagens, eletrnicas, naturalmente. 22.4.1. Como o protocolo SMTP? Em primeiro lugar necessrio estabelecer um canal de comunicao com o servidor. Muitas linguagens de programao oferecem alguma funo que permite o estabelecimento de comunicao entre o computador cliente e o servidor. Em PHP esta funo e a fsockopen() que espera como principal parmetro, o nome do servidor para criar um socket entre o cliente e o servidor. O que socket? Pense numa tomada de energia que liga o aparelho de som na rede eltrica, essa a idia. O computador cliente vai se conectar ao computador servidor atravs de uma ligao lgica para comunicao bidirecional. Esta ligao chamada socket. 23. Integrando PHP com Mysql Em PHP existem funes nativas que acessam a maioria dos bancos de dados existentes, como PostgreSQL, MySQL, Oracle, Sql Server, Interbase, Sybase, Informix, DB2 e Frontbase, entre outros. O PHP conecta-se com uma enormidade de gerenciadores de bancos de dados. Para cada um existe uma gama de funes associadas para realizar as mais diversas operaes, tais como conexo, consultar, retorno, desconexo e outras. 23.1. Mysql O MySQL um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Structured Query Language - Linguagem de Consulta Estruturada) como interface. atualmente um dos bancos de dados mais populares, com mais de 10 milhes de instalaes pelo mundo. O MySQL o gerenciador de banco de dados mais usado com o PHP. Existem muitas funes pr-definidas para manipulao de conexes com bancos de dados.

76

Projeto E-JOVEM 23.1.1. Conectando com o banco Para realizar qualquer operao no banco de dados, necessrio abrir uma conexo. A conexo poder ser local ou remota e disponibiliza um recurso ou um identificador para ser utilizada em operaes posteriores. mysql_connect(): tenta uma conexo com um servidor MySQL. Deve-se passer como parmetros: o nome do servidor (ou nmero IP) onde o MySQL est sendo executado, o nome de usurio e a senha deste usurio. O comando alternativo die trata um possvel fracasso na conexo. Sintaxe: resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]] ) Parmetros:

Server - O servidor MySQL. Tambm pode incluir um nmero de porta, exemplo "servidor:porta" ou um caminho para um socket local, exemplo ":/caminho/para/socket" para o servidor local(localhost). Username - O nome de usurio. O valor padro o nome do usurio que o proprietrio do processo do servidor. Password - A senha. O valor padro uma senha vazia. New_link - Se uma segunda chamada feita a mysql_connect() com os mesmos argumentos, no estabelecida uma nova conexo, mas ao invs, o identificador da conexo que j esta aberta retornado. O parmetro new_link modifica este funcionamento e faz mysql_connect() sempre abrir uma nova conexo, mesmo que mysql_connect() seja chamado antes com os mesmos parmetros. Cliente_flags - O parmetro client_flags pode ser uma combinao das seguintes constantes: MYSQL_CLIENT_SSL, MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE ou MYSQL_CLIENT_INTERACTIVE.

23.1.2. Selecionando uma base Aps conectarmos ao banco mysql, para manipularmos as tabelas, precisaremos selecionar um banco. Para isso usaremos a funo abaixo: mysql_selectdb(): Seleciona qual base ser selecionada dentro do banco de dados que foi conectado. O comando alternativo die trata um possvel fracasso na seleo da base, podendo ser includa uma mensagem customizada.

77

Projeto E-JOVEM Sintaxe: bool mysql_select_db ( string $database_name [, resource $link_identifier ] ) Parmetros:

Database_name nome do banco de dados Link_identifier - A conexo MySQL. se o identificador de conexo no for especificado, a ultima conexo aberta por mysql_connect() assumida. Se uma conexo assim no for encontrada, ela ir tentar criar uma como se a funo mysql_connect() fosse chamada sem argumentos. Se uma conexo no for encontrada ou estabelecida, um aviso de nvel de erro E_WARNING gerado.

23.1.3. Fechando uma conexo No momento em que no precisarmos mais utilizar a conexo que abrimos com o banco, preciso liberar esse recurso para uma possvel nova conexo. Para liberar o recurso usamos a instruo close da maneira descrita a seguir: Sintaxe: bool mysql_close ([ resource $link_identifier ] ) Parmetros:

Link_identifier - A conexo MySQL. se o identificador de conexo no for especificado, a ultima conexo aberta por mysql_connect() assumida. Se uma conexo assim no for encontrada, ela ir tentar criar uma como se a funo mysql_connect() fosse chamada sem argumentos. Se uma conexo no for encontrada ou estabelecida, um aviso de nvel de erro E_WARNING gerado.

23.1.4. Operaes no banco Para realizarmos operaes no banco de dados necessrio enviar uma instruo SQL. Est instruo poder ser uma insero, alterao ou excluso de registros no banco de dados. Para executar uma SQL utilizar a funo descrita abaixo: Sintaxe: resource mysql_query ( string $query [, resource $link_identifier ] )

78

Projeto E-JOVEM Parmetros: Query - A consulta SQL. A consulta no deve terminar com um ponto e vrgula. Link_identifier - A conexo MySQL. se o identificador de conexo no for especificado, a ultima conexo aberta por mysql_connect() assumida. Se uma conexo assim no for encontrada, ela ir tentar criar uma como se a funo mysql_connect() fosse chamada sem argumentos. Se uma conexo no for encontrada ou estabelecida, um aviso de nvel de erro E_WARNING gerado.

23.1.5. Consulta No caso em que precisamos buscar informaes no banco de dados, utilizamos a operao de fetch. A funo mysql_fetch_row Obtm uma linha como uma array numrica Sintaxe: array mysql_fetch_row ( resource $result ) Parmetros: Result - O resultado resource que esta sendo avaliado. Este resultado vem de uma chamada a mysql_query().

A funo mysql_fetch_array Obtm uma linha como uma matriz associativa, uma matriz numrica, ou ambas. Usada para buscar mais de uma linha no banco. Sintaxe: array mysql_fetch_array ( resource $result [, int $result_type ] ) Parmetros: Result - O resultado resource que esta sendo avaliado. Este resultado vem de uma chamada a mysql_query(). Result_type - O tipo de array que deve ser obtida. uma constante e pode ter os seguintes valores: MYSQL_ASSOC, MYSQL_NUM, e o valor padro de MYSQL_BOTH.

79

Projeto E-JOVEM

24. Ferramenta para trabalhar com Mysql phpMyAdmin 24.1. phpMyAdmin O phpMyAdmin pretendido para administrao do MySQL sobre a Web.Com o phpMyAdmin instalado em seu servidor voc poder criar banco de dados, copiar tabelas, criar, apagar e editar. Fcil configurao e administrao. O xampp que instalamos como servidor local, j contem o phpmyadmin. Digite agora no seu browser HTTP://localhost/phpmyadmin para ter o primeiro contato com o sistema. PhpMyAdmin normalmente possui dois layouts um laranja e um roxo. Muitas vezes para entrar na pgina inicial precisaremos efetuar login, principalmente se o servidor estiver na web, isso ocorre por segurana do banco. Ao entrar, veremos no lado esquerdo uma lista de bases que possumos e no centro um formulrio onde poderemos criar uma nova base. 24.1.1. Criando uma nova base Para criar uma base pelo PhpMyAdmin bem simples, basta dizer o nome da nova base e clicar em criar. Pronto sua base j est criada. 24.1.2. Manipulando tabelas Para criar tabela, excluir e alterar sero feitos de uma forma semelhante, sendo muito fcil tambm. Veja como criar uma tabela abaixo: Digite o nome da tabela e a quantidade de campos e clique em executar. Agora iremos cadastrar os campos que a tabela ir possuir. Para isso digite o nome do campo, defina seu tipo, seu tamanho, caso seja a chave primaria, selecione o radio Button. Se preferir que o mysql torne o id auto incrementado, selecione-o no combo extra. Isso far com que todos os ids inseridos sejam incrementados para cada insert na tabela. Depois clique em salvar. Para excluir uma tabela, basta clicar no boto eliminar. 24.1.3. Manipulando campos Para adicionarmos um novo campo numa tabela j existente, informamos a quantidade de campos e sua localizao na tabela. E clicamos em executar. Ento preenchemos os dados da mesma forma que preenchemos quando criamos uma tabela. Para editar um campo, clicamos no cone do lpis. Os dados viro preenchidos e poderemos alter-los. Para excluir um campo, clicamos no cone do X. ir aparecer uma caixa de confirmao, clicando em ok o campo ser excludo.

80

Projeto E-JOVEM 24.1.4. Manipulando registros Para inseri um novo registro na tabela que criamos, clique no boto inserir. Preencha os dados e clique em executar. Para visualizar os registros de uma tabela, clique no boto visualizar. Sero listados todos os registros da tabela. Para editar um registro clicaremos no cone do lpis e para excluir no X. o processo que ser realizado ser parecido com o da tabela. 24.1.5. Importando e Exportando bases Para exportar uma base clique no meu exportar na tela inicial da base. Ser possvel ento selecionar quais bases e qual a forma em que iremos exportar. Como diversas outras opes. Aps clique em executar. Para importar clique em importar na tela inicial da base, procure pelo arquivo (*.SQL) e clique em executar. 24.1.6. Operaes com bases Clique em operaes para visualizar as operaes que poderemos realizar com a base. Como por exemplo, criar tabela, comentar, renomear e copiar o banco. 24.1.7. Operaes com tabelas Clique em operaes da tabela para visualizar as operaes que poderemos realizar. Como por alterar, mover ou copiar a tabela. 25. Introduo a OO com PHP 25.1. O que OO? Orientao a objetos (OO) um paradigma de desenvolvimento de softwares. Que em vez de construir um sistema baseado num conjunto de procedimentos e variveis, que nem sempre so agrupados de acordo com o contexto, na orientao a objetos utiliza-se uma tica mais prxima do mundo real, onde se liga com objetos, onde muitas vezes so estruturas j conhecidas no dia-a-dia e as quais so mais bem-compreendidas. 25.2. Introduo No PHP, a orientao a objetos foi introduzida a partir da verso 3, no qual os objetos eram implementados por meio de arrays associados e tinha um suporte a caractersticas fundamentais como herana. O PHP5 introduziu varias novidades para trabalharmos com programao orientada a objetos.

81

Projeto E-JOVEM 25.3. Recursos de OO presentes no PHP Atualmente, para trabalharmos OO com PHP temos disponveis os seguintes recursos: Vantagens Vantagens Diretas - maior facilidade para reutilizao de cdigo e por conseqncia do projeto - possibilidade do desenvolvedor trabalhar em um nvel mais elevado de abstrao - utilizao de um nico padro conceitual durante todo o processo de criao de software - maior adequao arquitetura cliente/servidor - maior facilidade de comunicao com os usurios e com outros profissionais de informtica. Vantagens Reais - ciclo de vida mais longo para os sistemas - desenvolvimento acelerado de sistemas - possibilidade de se construir sistemas muito mais complexos, pela incorporao de funes prontas - menor custo para desenvolvimento e manuteno de sistemas. Classe Objeto Herana Polimorfismo Abstrao Encapsulamento Interfaces

Desvantagens

Complexidade no aprendizado para desenvolvedores de linguagens estruturadas Maior esforo na modelagem de um sistema OO do que estruturado (porm menor esforo de codificao, sendo uma vantagem), Funcionalidades limitadas por interface, quando estas esto incompletas (problemas na modelagem) Dependncia de funcionalidades j implementadas em superclasses no caso da herana, implementaes espalhadas em classes diferentes.

25.4. Classe A classe uma estrutura esttica e ser til para descrever os objetos, seus atributos (propriedades) e mtodos (funcionalidades). A classe um modelo ou template para criao destes objetos.

82

Projeto E-JOVEM Podem ser classes, qualquer entidade do negcio da sua aplicao (Usurio, Cliente, Filme). No momento que modelamos um Cliente, por exemplo, so suas propriedades (nome, idade, sexo) e temos como mtodos, funcionalidades desempenhadas pela classe. No caso de Cliente, poderiam ser mtodos (Comprar (), Alugar (), Vender ()). 25.5. Objeto Um objeto uma estrutura dinmica originada a partir de uma classe. Assim que utilizarmos uma classe para criar diversas estruturas iguais a ela. Pode-se dizer que um objeto uma instncia de uma classe, pois a existncia de um objeto se d desde sua criao at sua destruio. So objetos da Classe Cliente Filippe, Renato, Rafael. 25.6. Herana Com herana podemos reaproveitar uma estrutura j existente, que fornea uma base abstrata para o desenvolvimento, provendo recursos bsicos comuns. Herana pode ter uma aplicabilidade muito grande, pois comum termos que criar novas funcionalidades em software. 25.7. Polimorfismo Polimorfismo o principio que permite que classes derivadas de uma mesma superclasse tenham mtodos iguais, possuindo a mesma nomenclatura e parmetros, mas comportamentos diferentes, redefinidos em cada uma das classes filhas. 25.8. Abstrao Na orientao a objetos prega-se o conceito da abstrao. Para construirmos um sistema orientado a objetos, deve-se separ-lo em partes, concentrando nas partes mais importantes e ignorando os detalhes em um primeiro momento, para poder construir peas bem-definidas a fim de que as mesmas possam ser reaproveitadas mais tarde, formando uma estrutura de hierarquia.

25.9. Encapsulamento Encapsulamento o mecanismo de proteo dos acessos a membros internos de um objeto. Dessa forma certas propriedades de uma classe devem ser tratadas exclusivamente por mtodos da mesma. As propriedades nunca devem ser acessadas diretamente de fora do escopo de uma classe, pois assim a classe no fornece mais garantias sobre os atributos que contm, perdendo, ento, a responsabilidade sobre eles. 25.10. Associao

uma relao mais comum entre dois objetos, na qual um possui uma referncia posio da memria onde o outro se encontra, podemos visualizar seus atributos ou, mesmo, acionar uma de seus mtodos. 83

Projeto E-JOVEM 25.11. Agregao

Na agregao, um objeto agrega outro, ou seja, torna um objeto externo parte de si mesmo pela utilizao de um dos seus mtodos. Assim o objeto-pai poder utilizar funcionalidades do objeto agregado. Nessa relao, um objeto poder agregar uma ou muitas instncias de um outro objeto. 25.12. Composio

A composio e agregao so praticamente iguais. A diferena em relao agregao que na composio o objeto-pai responsvel pela criao e destruio de suas partes. Na agregao, ao se destruir um objeto, as partes permanecem na memria por terem sido criadas fora do escopo da classe. J na composio, ao se destruir um objeto, as partes tambm sero destrudas. 25.13. Interfaces

Interface um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela est comprometida a fornecer o comportamento publicado pela interface 26. Definindo uma Classe Uma classe no necessariamente, utilizada para orientao a objetos. Podemos criar classe para as mais diversificadas operaes. Geralmente criamos classes para serem reutilizadas em outros softwares que desenvolvemos. Por exemplo, podemos criar uma classe para gerenciar a conexo com o banco de dados, uma classe para juntarmos as funes mais usadas ou at mesmo uma classe para calcularmos dois valores. Uma classe uma coleo de variveis e funes trabalhando com essas variveis. Variveis so definidas por var e funes por function. Uma classe definida usando a seguinte sintaxe:
<?php class CarrinhoDeCompras { var $items; // Itens do carrinho de compras // Acrescenta a quantidade $num do artigo $artnr no carrinho function add_item($artnr, $num) { $this->items[$artnr] += $num; } // Retira a quantidade $num de artigos $artnr do carrinho function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } elseif ($this->items[$artnr] == $num) { unset($this->items[$artnr]);

84

Projeto E-JOVEM
return true; } else { return false; } } } ?>

Isto define uma classe chamada CarrinhoDeCompras que consiste de uma matriz associativa de artigos no carrinho e duas funes para acrescentar e remover itens deste carrinho. 26.1. Padro de codificao As classes devem indicar exatamente sua finalidade. No deve haver dvidas ao leitor do cdigo sobre o que est sendo armazenado na varivel ou sobre o que ser executado/retornado numa funo. Evite utilizar abreviaes principalmente as que no so de domnio pblico. A utilizao de prefixos bvia para o desenvolvedor que escreveu o cdigo, mas pode no ser para quem est lendo. Prefixos aumentam a quantidade de conhecimento que um desenvolvedor deve possuir para nomear uma simples varivel.

Nomes de classes devem representar tipos. Devem iniciar com letra maiscula. As demais letras sero minsculas, exceto no incio de cada palavra. Exemplo: ERRADO function objetoOperaoEntrega() { this.propriedade = 'Teste' } CORRETO function OperacaoEntrega() { this.propriedade = 'Teste'
}

Lembre-se: No devem ser utilizados caracteres especiais ou acentos em nomes de classes. Voc NO pode quebrar uma definio de classe em mltiplos arquivos. Voc NO pode tambm quebrar a definio de uma classe em mltiplos blocos PHP, a menos que a quebra esteja dentro de uma declarao de mtodo. O seguinte no ir funcionar:

85

Projeto E-JOVEM
<?php class Test { ?> <?php function test() { print 'OK'; } } ?>

Entretanto, o seguinte permitido:


<?php class Test { function test() { ?> <?php print 'OK'; } } ?>

Os cuidados a seguir devem ser tomados a partir do PHP 4: O nome stdClass utilizado internamente pela Zend e uma palavra reservada. Voc no pode ter uma classe chamada stdClass no PHP. O nome de funo __sleep e __wakeup so classes especiais do PHP. Voc no pode ter esses nomes em nenhuma de suas classes a no ser que voc deseje aplicar essa funcionalidade especial. O PHP reserva todos os nomes de funes comeando com __ como especiais. recomendvel que voc no utilize nome de funes comeando com __ no PHP a no ser que voc precise dessas funcionalidades especiais.

26.2. Usando $this Para poder acessar suas prprias funes e variveis de dentro da classe, pode-se utilizar a pseudo-varivel $this, que pode ser lida como 'eu mesmo' ou 'objeto atual'. Dessa forma, '$this->valor += $num' pode ser lido como 'acrescente $num para o contador $valor '. Nota: A pseudo-varivel $this no normalmente definida em um mtodo que seja chamado estaticamente. Isto no , entretanto, uma regra estrita: $this definido se um mtodo chamado estaticamente a partir de outro objeto. Neste caso, o valor de $this ser do objeto que o chamou. 26.3. PHPDoc PHPDoc foi baseado no JAVADoc da Sun e tem como objetivo padronizar a documentao de cdigos PHP. Ele l o cdigo e analisa gramaticalmente procurando por tags especiais. A partir delas extrai toda documentao usando diferentes formatos (pdf, xml, html, chm 86

Projeto E-JOVEM Windows help e outros). Todas as tags especiais so escritas dentro do comentrio do php /* comentrios */ e necessariamente comeam com o @ (arroba).

Descrio de algumas tags especiais:

@access @author @copyright @deprecated @exemple @ignore @internal @link @see @since @tutorial @name @package das classes. @param @return @subpackage @version

Especifica o tipo de acesso(public, protected e private). Especifica o autor do cdigo/classe/funo. Especifica os direitos autorais. Especifica elementos que no devem ser usados. Definir arquivo de exemplo, $path/to/example.php Igonarar cdigo Documenta funo interna do cdigo link do cdigo http://www.exemplo.com

Especifica o apelido(alias). Especifica o nome do pacote pai, isto ajuda na organizao Especifica os paramtros muito usado em funes. Especifica o tipo de retorno muito usado em funes. Especifica o nome do pacote filho. Especifica a verso da classe/funo.

26.4. Comentando sua classe Existem alguns padres de comentrios que podem ser seguidos para que sua classe fique melhor compreendida quando precisarmos revisar algo aps um longo perodo de tempo. Lembre-se que muito importante comentar o mximo para evitar um trabalho a mais na hora que formos manter o software.
<? /** * Esta classe a responsvel por calculos do sistema. * @author Seu Nome <seunome@email.com.br> * @version 1.0 * @copyright Copyright 2002, Minha Empresa S/A. * @access public * @package Utils * @subpackage Calculos */ class Calcular{ /** * Varivel recebe o primeiro valor.

87

Projeto E-JOVEM
* @access public * @name $valor1 */ var $valor1; /** * Varivel recebe o segundo valor. * @access public * @name $valor2 */ var $valor2; /** * Funo para somar dois valores * @access public * @param int $primeiroValor * @param int $segundoValor * @return itn */ function somar($primeiroValor, $segundoValor){ $this->valor1 = $primeiroValor; $this->valor2 = $segundoValor; return $this->valor1 + $this->valor2; } } $calc = new Calcular(); print $calc->somar(5, 20); ?>

27. Construtores e Destrutores 27.1. Construtores Construtor um mtodo especial que utilizamos para definir o comportamento inicial de um objeto, ou seja, o comportamento no momento de sua criao. O mtodo construtor ser executado automaticamente no momento em que se instncia um objeto utilizando o operador new. Caso no defina um mtodo construtor, todas as propriedades do objeto criado sero automaticamente inicializadas com o valor default NULL. Para definirmos um construtor na classe, basta declarar o mtodo __Construct() ou o prprio nome da classe. Veja o exemplo:
<? class Calcular{ var $valor1; var $valor2;

88

Projeto E-JOVEM

function __construct($primeiroValor, $segundoValor){ $this->valor1 = $primeiroValor; $this->valor2 = $segundoValor; } function somar(){ return $this->valor1 + $this->valor2; } } $calc = new Calcular(5, 20); print $calc->somar(); ?>

Observe que agora estamos enviando os valores no momento que criamos o objeto, no sendo mais necessrio o envio ao chamar o mtodo de somar. 27.2. Destrutores Destrutor um mtodo especial que executado automaticamente quando o objeto desalocado da memria, quando atribumos o valor NULL ao objeto, quando utilizamos a funo unset() sobre o mesmo ou quando o programa finalizado. Podemos usar o mtodo destrutor para finalizar conexes, apagar arquivos temporrios, entre outros. Para definirmos um mtodo destrutor em uma classe, basta declarar o mtodo __destruct(). Altere a classe Calcular e teste no seu browser. function __destruct(){ print "Classe Calcular foi finalizada."; } 27.3. Encapsulando atributos e mtodos Uma das formas de definirmos um encapsulamento definindo a visibilidade das propriedades e mtodos de um objeto. A visibilidade define a forma como essas propriedades devem ser acessadas. H trs formas de acesso: Private membros declarados como private, s podero ser acessados dentro da prpria classe na qual foram declarados. No podendo ser acessados a partir de classes descendentes nem a partir do programa que faz uso dessa classe. Protected membros declarados como protected, s podero ser acessados dentro da prpria classe a qual foram declarados e a partir de classes descendentes. Mas no podero ser acessados a partir do programa que faz uso dessa classe. Public membros declarados como public, podero ser acessados livremente a partir da prpria classe na qual foram declarados, a partir de classes descendentes e a partir do programa que faz uso dessa classe.

89

Projeto E-JOVEM

private $valor1; private $valor2; public function __construct($primeiroValor, $segundoValor){ $this->valor1 = $primeiroValor; $this->valor2 = $segundoValor; } 27.4. Criando uma Interface Como vimos anteriormente, uma interface um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela est comprometida a fornecer o comportamento publicado pela interface. Criaremos uma interface ICalcular para a classe Calcular onde o mtodo soma ser obrigatoriamente implementado. Note que o nome da classe interface contem um I i maisculo, esse um padro a ser seguido. Arquivo: ICalcular.php <? interface ICalcular{ public function somar(); } ?> Arquivo: Calcular.php <? require_once("ICalcular.php"); // inclui o arquivo ICalcular.php class Calcular implements ICalcular{ // implementa a interface ICalcular private $valor1; private $valor2; public function __construct($primeiroValor, $segundoValor){ $this->valor1 = $primeiroValor; $this->valor2 = $segundoValor; }

90

Projeto E-JOVEM public function somar(){ return $this->valor1 + $this->valor2; } public function __destruct(){ print "Classe Calcular foi finalizada."; } } $calc = new Calcular(5, 20); print $calc->somar(); print "<br>"; $calc = NULL; ?> Veja como foi simples, a interface apenas define que o mtodo ser obrigado a existir na classe. Ela no possui construtor, destrutor e nenhum outro tipo de funcionalidade. 28. Instanciando um Objeto O operador new Voc pode criar uma varivel (ou instncia) do tipo desejado com o operador new. Veja o exemplo abaixo: <?php $carrinho = new CarrinhoDeCompras(); $carrinho->add_item("10", 1); $outro_carrinho = new CarrinhoDeCompras(); $outro_carrinho->add_item("0815", 3); ?> Isto cria os objetos $carrinho e $outro_carrinho, ambos a partir da classe CarrinhoDeCompras. A funo add_item() do objeto $carrinho foi chamada e acrescentou 1 item do artigo nmero 10 a $carrinho. 3 itens do artigo nmero 0815 foi acrescentado no $outro_carrinho. Ambos, $carrinho e $outro_carrinho, tem as funes add_item(), remove_item() e a varivel itens. Elas so funes e variveis distintas entre si. Voc pode pensar no objetos como os diretrios de um sistema de arquivos. Num disco voc pode ter dois arquivos diferentes README.TXT, partindo de que eles esto em diretrios diferentes. Da mesma forma que voc teria de especificar o caminho completo para acessar cada arquivo a partir do diretrio principal, voc tambm tem de especificar o nome completo do objeto e funo que voc quer chamar. No PHP o diretrio principal pode ser o escopo global de nomes, e o separador de diretrios ->. Portanto, os nomes $carrinho->items e $outro_carrinho->items so duas variveis diferentes. Note que a varivel chamada $carrinho->items, no $carrinho->$items, mesmo porque, um nome de varivel em PHP tem apenas um nico sinal de cifro. 91

Projeto E-JOVEM

29. Trabalhando a segurana do seu sistema 29.1. Segurana Boas linguagens de programao, no podem ser consideradas por si s seguras ou inseguras, a segurana depender de todo o projeto e mais especificamente do cdigo do programa. A segurana de um sistema deve ser balanceada com o custo e a usabilidade do projeto. Projetos feitos com um pequeno nvel de segurana so mais custosos do que projetos sem segurana. Por isso precisamos definir o nvel de segurana com cautela no inicio do projeto. Para no torn-lo economicamente invivel ou at mesmo complicado de mais de ser implementado. 29.2. Usabilidade versus segurana O uso do seu sistema se tornar mais complicado, quanto maior for o nmero de recursos de segurana presentes no seu sistema. Um exemplo muito popular o internet banking. Esse sistema precisa ser muito fcil de ser usado, mas contar com recursos de segurana bastantes confiveis. Para tanto usam:

Login (geralmente numero da agncia e da conta) Senha Palavra secreta ou contra-senha (senha especial para acesso na internet) Nmero sorteado do carto de chaves de acesso (token)

Tanta segurana tem acarretado numa maior dificuldade para seus clientes usarem o sistema. Fazendo com que muitos procurem a agncia por no terem de aprender a usar o sistema ou no confiarem. Para programarmos recursos de segurana levamos em considerao os itens:

Valor da informao manipulada Perfil do usurio Faixa etria Nvel de instruo Finalidade do sistema (lazer ou trabalho) Hardware usado

29.3. Postura de Defesa Precisamos manter uma postura de defesa, onde procuramos manter informaes protegidas. Mesmo que a informao no seja importante ou confidencial, terceiros no podero tirar proveitos dessas informaes. Quanto menos souberem sobre o seu sistema, mais privativo ele ser e, conseqentemente, mais segurana.

92

Projeto E-JOVEM 29.4. Desempenho Um bom sistema deve possuir tudo no qual foi planejado e ainda:

Consumir o mnimo de tempo de CPU para ser executado. Alocar a menor quantidade de memria. Gravar todos os dados necessrios usando o menor espao em disco. Utilizar a rede interna e a internet de forma econmica e racional.

Se uma pgina web possuir poucos recursos para serem geradas, o servidor suportar ento mltiplas requisies, podendo assim atender um maior numero de conexes simultneas. 29.5. Usurios Ilegtimos Geralmente definimos um sistema baseado nos usurios legtimos. Precisamos mudar esse conceito. O desenvolvedor precisa pensar primeiro nos usurios ilegtimos para depois pensarmos nos usurios reais do sistema. Essa tcnica muito simples, mais depois de projetada, a programao ganhar em velocidade, e como j sabemos, tempo dinheiro. 29.6. Filtro de Dados Tudo que vir de uma fonte externa dever ser inspecionado. Com isso o que for digitado pelo usurio, coletados de arquivos, enviados por formulrios, ou at interaes feitas com servidores de banco de dados devem passar por um filtro. Um filtro uma das formas mais significantes de segurana. Precisamos sempre fazer checagem dos dados tanto no cliente (browser) como no servidor (PHP). 29.7. Manipulao de Erros Todos que navegam pela internet, j devem ter se deparado com algum site indisponvel. O erro nesse caso no o site est indisponvel, afinal problemas podem acontecer. A gravidade consiste em, quando ocorrem problemas, informaes como endereo do servidor de banco de dados, variveis do sistema e outras informaes serem exibidas pelo browser, assim pessoas mal intencionadas podero tirar proveito dessa falha e prejudicar o sistema. 29.8. Limitador de Acesso Um limitador de acesso mais um recurso para ser implementado em um projeto com foco em segurana. Um exemplo tpico uma funo que reage a tentativas mal sucedidas de login por um usurio, o que pode ser caracterizada como uma possibilidade de quebrar uma senha. Tambm pode ser conhecido como rate limit.

93

Projeto E-JOVEM 29.9. Segurana na Internet Podemos citar alguns problemas relacionados a segurana da web:

Informaes transmitidas entre o servidor web e browser poderiam ser interceptadas por um sniffer. Esse problema pode ser solucionado usando protocolos de criptografia (HTTPS, SSL, TLS). Problemas no servidor web poderiam facilitar o vazamento de informaes confidenciais. Embora esse risco exista, os servidores web esto bem mais robustos e estveis, atualmente sendo um risco bem menor. Problemas com o browser tambm podem fazer com que informaes confidenciais tambm vazem. Esse problema no foi completamente resolvido, mas temos disponvel pelo menos meia dzia de browsers de boa qualidade.

Problemas que ainda no foram realmente apresentadas uma soluo so:


Um programa (CGI, PHP, etc.) com alguma falha de programao pode abrir precedentes para que um servidor ou at mesmo uma rede inteira esteja exposto. Com o avano tecnolgico, comum uso de softwares de terceiros associados tanto ao servidor web como ao browser. Esses programas so conhecidos como plugins e extenes. Aqui existe um risco especial, pois um terceiro (fabricante do plugin) est envolvido no processo em que inicialmente havia apenas duas entidades (servidor web e browser).

29.10. Estrutura de um Projeto Aplicaes web precisam manter em algum lugar informaes que no podem ser visualizado de modo algum tato por usurios da web quanto pelos usurios do sistema operacional. Geralmente precisamos armazenar dados de acesso a bancos de dados, senhas para acesso a outros sistemas e talvez uma senha mestre para administrao do site. Como exemplo, poderamos estar usando um arquivo chamado config.inc para armazenar as informaes de configurao do banco. Como a extenso .inc no conhecida pelo servidor, se digitssemos no browser o caminho HTTP://www.meuservidor.com.br/config.inc todas as informaes contidas no arquivo seriam exibidas. Uma forma de conter isso seria renomear o arquivo de incluso para config.inc.php 29.11. Configurao do PHP A configurao do PHP feira no arquivo php.ini. Existem diferenas entre configurao do PHP em ambiente de desenvolvimento e em um ambiente de produo. So eles:

Ambiente de desenvolvimento deve proporcionar uma grande quantidade de informaes para que o programa possa ser escrito da melhor forma possvel.

94

Projeto E-JOVEM

Ambiente de produo deve oferecer as informaes necessrias para os usurios usufrurem da aplicao com o melhor desempenho possvel e com a segurana esperada.

importante ressaltar que, ao modificar qualquer uma diretriz do PHP, o servidor precisar ser reiniciado para que as alteraes entrem em vigor. Vejas diretrizes que poderemos alterar no php.ini:

Register_globals: [on | off] tem a funo de registrar automaticamente variveis que foram enviadas pelos mtodos POST, GET e pelo uso de cookies. Display_erros: [on | off] sero exibidas mensagens de alerta no decorrer da execuo do script. Podemos us-la como ON em ambiente de desenvolvimento, mas em ambiente de produo o essa diretriz precisa est configurada como OFF. Log_erros: [on | off] essa diretriz completa a display_erros. Ao habilitar, erros ocorridos sero gravados no arquivo de erro do apache. Upload_max_filesize: 2M define o tamanho mximo para upload de arquivos. Include_path: . especifica a lista de diretrios em que a funo include() e suas variantes procuraro o arquivo.

29.12. Gerenciamento de Erros Manipular erros e avisos uma tarefa muito importante, mais muitos programadores e administradores de sistemas no conferem a isso a devida importncia. muito importante que mensagens internas com informaes do sistema no sejam exibidas para o usurio final, obviamente no s pela razo esttica, mas principalmente para evitar incidentes de segurana, pois quase sempre as informaes provenientes de uma exceo gerada pelo sistema exibem nomes de funes, classes, variveis, seus valores e outras informaes. Podemos manipular erros com a funo set_error_handler(). Essa funo pode ser usada para definir como manusear os erros durante a execuo do script. Ela envia a mensagem de erro para uma funo definida pelo programados. Essa funo precisa aceitar cinco parmetros, so eles: 1. 2. 3. 4. 5. Cdigo do erro. Descrio do erro. Nome do arquivo envolvido no problema (opcional). Nmero da linha que houve o erro (opcional). Contexto em que o erro aconteceu (opcional). um array que aponta para a tabela de smbolos ativos na posio em que ocorreu o erro, ou seja, esse array conter todas as variveis que existiam no escopo de execuo no momento do erro.

95

Projeto E-JOVEM

29.13. Configurao de servidores Compartilhados Talvez seu sistema PHP esteja hospedado num servidor compartilhado com vrios outros sistemas de terceiros. Neste caso certamente a empresa de hospedagem no permitir que as diretrizes de configurao do PHP sejam alteradas, afinal isso poderia causar problemas para seus clientes. Nesses casos possvel usar a funo ini_set(). A funo ini_set() define valores s diretrizes de configurao do PHP, e esses valores so validos durante a execuo do script. Dessa forma, interessante manter as configuraes das diretrizes em um arquivo separado e inclu-lo no incio da execuo do programa com a funo include(). Exemplo: <?php ini_set('display_erroes','off'); ini_set('log_erros','on'); ini_set('error_log','../log/php_error.log'); ?> 29.14. Ataques pelos Formulrios Por ser um meio de entrada legitimo de dados, os formulrios so usados como porta de entrada para ataques. Isso se os dados que forem enviados por formulrios no forem tratados da forma correta. Veja os exemplos:

Abuso no envio de e-mails (span) muito comum em sites um local para formulrio de contato. Este um recurso legal para que os clientes entrem em contato com os fornecedores rapidamente. Mensagens indesejveis enviadas dessa forma fazem parte de um nicho muito particular de spans difceis de combater. Para evitar esse tipo de transtorno filtre toda a entrada de dados do sistema. Ataques por upload de arquivo fundamental analisar a presena de vrus e cdigos maliciosos no arquivo. Podemos verificar a extenso do arquivo, por exemplo, se estivermos esperando uma imagem aceitaramos arquivos (.JPG, .PNG ou .GIF). No seria necessrio recebermos um arquivo (.EXE). CAPTCHA acrnimo de Completely Automated Public Turing Test To Tell Computers And Humans Apart (teste pblico completamente automatizado para distinguir computadores e humanos). um tipo de teste pergunta-resposta usado em conjunto com o formulrio para determinar se o usurio um humano. Entre outras coisas, isso pode evitar que scripts tambm conhecidos como robs possam acessar

96

Projeto E-JOVEM determinadas partes de um site e colher informaes. Veja um exemplo de captcha abaixo: 29.15. Inibindo a Exposio do cdigo-fonte O include() uma das funes que traz maior poder para o desenvolvedor web, mas, se usarmos de forma incorreta, podemos ter srios problemas relacionados a segurana. No atribuir extenses aos arquivos se no .php, pois o Apache no reconhece extenses como .inc e outras usadas por programadores. No armazen-los no diretrio de trabalho do servidor web, definido pela diretriz DocumentRoot do apache HTTP Server.

29.16. Escondendo nomes de Arquivos Usurios mal intencionados tero mais dificuldade de achar brechas de segurana caso no conhea detalhes de um website. Por essa razo, pode ser uma boa esconder a extenso dos arquivos.Veja o exemplo abaixo: Vamos supor que ao clicar no menu, o usurio passe por parmetro o arquivo que ser includo. Imagine o link assim: HTTP://www.exemplo.com.br/?inc=../contato.php <? $inc = $_GET[inc]; include($inc); ?> Nesse exemplo encontramos os seguintes problemas:

Usurio consegue ver o local onde esto armazenados os arquivos. Extenses dos arquivos visveis. Por receber o caminho completo, podemos receber um caminho indesejvel.

Poderamos usar o mesmo link retirando a exteno do arquivo e colocando via php. Ficando assim: HTTP://www.exemplo.com.br/?inc=contato <?

97

Projeto E-JOVEM $inc = $_GET[inc]; include(../. $inc ..php); ?> Veja que com poucas alteraes podemos esconder a extenso do arquivo e os diretrios onde esto localizados. 29.17. Evitando Injeo de Cdigo Uma pratica muito comum e uma das mais utilizadas, consiste em infiltrar um cdigo de terceiros em seus scripts para ser executado no seu servidor. Exemplo: HTTP://www.exemplo.com.br/?quiz=questao15.php Nesse caso vemos que a varivel quiz recebe um valor legitimo. A injeo de cdigo acontece quando o atacante altera os dados da varivel para inserir arquivos externos que certamente tero seus cdigos maliciosos, alterando a chamada da url da seguinte forma: HTTP://www.exemplo.com.br/?quiz=http://malicia.com.br/code.inc Para evitar esse problema usaremos uma tcnica conhecida como White list e Black list 29.18. White list Tcnica que se baseia numa lista em que estaro catalogados nomes de arquivos que podem ser includos em uma pagina por uso da funo include() e suas variantes. 29.19. Black list Tcnica semelhante a White list, mas menos restritiva, afinal tem por objetivo informar quais arquivos no podero ser inseridos. Seria fazer o contrario, onde os arquivos da Black list no poderiam ser includos. Logo percebemos que essa tcnica no muito eficiente, pois o array teria que ser enorme. 29.20. Dados de Sesso Expostos muito comum que sites PHP sejam armazenados em servidores compartilhados, isso pode se tornar um problema quando as informaes de sesses de clientes e fornecedores so armazenadas em reas compartilhadas do servidor. Ao iniciarmos uma sesso, criamos um arquivo de controle em um diretrio no servidor web. comum o uso do diretrio /tmp. Nele sero armazenados os arquivos temporrios. Entretanto esse diretrio poder ser usado por todos os usurios da maquina, ou seja, salvo pelas permisses atribudas aos arquivos de dados de sesses, esses arquivos ficam expostos a

98

Projeto E-JOVEM todos os usurios do servidor web. O problema que nem sempre as empresas de hospedagem implementam permisses para os arquivos de sesses. Uma alternativa estabelecer que cada sistema instalado no servidor possua seu prprio diretrio temporrio para armazenar os arquivos. Isso pode no ser vivel pois demanda configuraes que os administradores de servidores compartilhados no esto sempre dispostos a fazer. Outra forma usar a funo session_set_save_handler(), que alem de permitir o armazenamento dos dados de controle de sesso em uma tabela de banco de dados, pode auxiliar em uma outra alternativa para armazenar os dados de controle de sesses de forma criptografada. 29.21. Roubo de sesses Basicamente existem trs formas de conseguir a identificao de uma sesso:

Presumi-la Captur-la Defini-la

Presumir um identificador um trabalho praticamente impossvel, pois o PHP gera nmeros de forma aleatria. A captura pode ser facilmente evitada usando criptografia entre o servidor web e o browser. A fixao de sesses um ataque que define previamente um identificador de sesso e geralmente explorado em conjunto com tcnicas de engenharia social. 29.22. Autenticao Geralmente os mecanismos de autenticao usados so feitos em formulrios, o que garante uma boa apresentao e personalizao do sistema. Mas tambm possvel usar o mtodo de autenticao proveniente do protocolo HTTP. O PHP capaz de receber as variveis originadas da autenticao HTTP e trat-las da maneira mais adequada para verificar a legitimidade das informaes seja em um banco de dados, em um arquivo ou em um servidor LDAP. Para que a autenticao HTTP seja possvel, ser necessrio enviar os cabealhos correspondentes para o browser, e esse se comportar como se o prprio servidor web estivesse gerenciando a autenticao.

99

Projeto E-JOVEM 29.23. Criptografia O php possui muitos recursos para embaralhar informaes e, usado mtodos to sofisticados, torna impossvel realizar a operao contraria. Como exemplo veremos a funo md5() que retorna uma string criptografada. <?php echo md5(senha12345); ?> Quando quisermos verificar a senha digitada com a senha armazenada, basta aplicar a funo md5() novamente. 29.24. SQL Injection Sql infection o uso por usurios no autorizados de queries arbitrarias, uma falha que est se tornando muito comum. A explorao dessa vulnerabilidade ocorre em razo dos deslizes cometidos pelo desenvolvedor. Para que ocorra SQL Injection so necessrios dois problemas na programao:

Falha no filtro para armazenar informaes no banco de dados. Falha ao filtrar informaes recebidas do banco de dados.

Vamos supor que tenhamos um formulrio de login e senha. Caso ao invs de preencher o login e senha corretamente, colocssemos o valor 1 OR 1=1 isso faria com que nossa sql ficasse da seguinte forma: SELECT * FROM usurios WHERE login =1 OR 1=1 AND senha =1 OR 1=1 Como a opo OR 1=1 ser sempre verdadeira, o resultado ser todo o contedo da tabela usurios do bando de dados. Dessa forma o usurio efetuaria login com o primeiro registro retornado. Tambm poderamos entrar sabendo o login de algum. Para isso ao invs de digitarmos 1 OR 1=1 digitaramos admin# . com isso, aps o caractede #, todo o restante da query seria ignorado por ser um comentrio de SQL. Veja como ficaria: SELECT * FROM usurios WHERE login =admin# OR 1=1 AND senha =1 OR 1=1 Para resolver esses problemas precisamos filtrar corretamente as variveis de entrada. Nesse caso o uso da funo addslashes() do PHP resolveria o problema, pois as aspas no seriam tratadas como caracteres da query SQL.

100

Projeto E-JOVEM 29.25. Reagindo a Ameaas O que fazer? O mais correto notificar os responsveis pelos hosts envolvidos com o objetivo de que tomem conhecimento do ocorrido, procurem descobrir as causas e dem soluo ao problema. Como fazer? Precisamos saber quais so as partes envolvidas no ataque. Para isso, fundamental ter logs que reportem os incidentes a fim de saber o endereo IP que originou o ataque. Ento podemos acessar a base do whois que conhece o endereo IP que originou o ataque. Existem diversos servidores de whois espalhados pela internet, um dos mais famosos pode ser encontrado em HTTP://www.pil.net/whois.html. basta informar o endereo IP no formulrio para sabermos pas, e-mail, endereo e nomes dos responsveis. Quando enviarmos um e-mail reportando o problema, precisamos ficar atento ao idioma. Caso no seja seu pais ou um pais que use a mesma lngua que a sua. Prefira enviar em ingls. Ser importante no e-mail enviar as seguintes informaes:

Informaes de contato Logs gerados pelo firewall e/ou Apache, se necessrio. Mensagens geradas pelo script PHP. Demais informaes relevantes.

29.26. Propriedade intelectual Atualmente falasse muito em direitos autorais e violao de propriedade intelectual. Assim como existem pessoas interessadas em musicas, filmes, seriados, vdeos e etc. tambm existem pessoas em busca de conseguir cdigos de programas. E se voc escrever bons cdigos corre um grande risco de ser algo dessas pessoas. As tcnicas vistas anteriormente, junto com capacidade de manter-se atualizado para eventuais problemas sero suficientes para uma boa segurana, desde que os cdigos estejam armazenados em um servidor particular gerenciados por voc. Mas se escrevermos cdigos para rodar em servidores terceiros, precisamos de alguma forma de obscurecer o cdigo fonte. Para isso existem softwares que fazem esse trabalho, a maioria prope realizar mais do que isso, sendo capazes de controle de licena e muito mais. O mais conhecido o Zend Guard, produzido pela Zend Technologies Ltd. Instituio que mantem o PHP. Esse produto a forma usada pela Zend de gerar renda e, assim, manter o projeto PHP.

101

Projeto E-JOVEM

Com isso chegamos ao fim com o contedo de PHP, voc deve acessar o contedo educandus na web para obter mais detalhes sobre o que tiver dvidas. Agora trazemos Exerccios resolvidos e propostos.

30.

Exerccios Resolvidos

1. Qual a diferena entre include() e include_once() e entre require() e require_once()? include() e require() inclui um arquivo na pgine e include_once() e require_once() se arquivo j tenha sido includo, no feita a operao de incluir a pgina outra vez. E so case-insensitive se rodados no Windows. 2. Criar uma pgina simples com PHP: <? echo "Hello world!"; ?> 3. Criar uma pgina HTML com script PHP incorporado: <html> <head> <title>EXEMPLO</title> </head> <body> Linha em HTML <br> <? echo "Linha em PHP"; ?> </body> </html> 4. Criar uma pgina utilizando a funo phpinfo: <? phpinfo(); ?> 5. Incluir comentrios (para uma linha e para vrias linhas) em uma pgina PHP: <? // comentando uma linha /* comentando vrias linhas */ echo "teste"; ?>

102

Projeto E-JOVEM 6. Criar uma pgina utilizando constantes: SINTAXE: define (nome_da_constante,valor_da_constante); <? define("meu_nome","Fulano"); define("meu_ra",123456789); echo "O meu nome " .meu_nome; echo "<br>"; echo "O meu RA " .meu_ra; ?> 7. Criar uma pgina utilizando variveis: <? $base=5; $altura=3; $area=$base*$altura/2; echo "A base : $base <br>"; echo "A altura : $altura <br>"; echo "A rea : $area <br>"; ?> 8. Criar dois scripts para observar a diferena entre aspas duplas e aspas simples: <? $texto1="exemplo"; $texto2="Esse $texto1 utiliza aspas duplas"; echo $texto2; ?> <? $texto1="exemplo"; $texto2='Esse $texto1 utiliza aspas simples'; echo $texto2; ?> 9. Criar uma pgina utilizando caracteres de escape: <? $texto="Estou colocando \"aspas duplas\" dentro de uma string."; echo $texto; ?> 10. Criar uma pgina utilizando arrays ("vertical"): <? $uninove[0]="Vila Maria"; $uninove[1]="Memorial"; $uninove[2]="Vergueiro"; echo $uninove[0]; echo "<br>"; echo $uninove[1]; echo "<br>"; echo $uninove[2]; ?>

103

Projeto E-JOVEM 11. Criar outra pgina utilizando arrays ("horizontal"): <? $uninove=array(0=>"Vila Maria",1=>"Memorial",2=>"Vergueiro"); echo $uninove[0]; echo "<br>"; echo $uninove[1]; echo "<br>"; echo $uninove[2]; ?> 12. Suponha que uma aplicao WEB, escrita em PHP, receba dados livres do usurio em um campo de formulrio. Os dados recebidos so armazenados em uma varivel "entrada", que inserida diretamente, sem filtros, na consulta abaixo. $consulta = "SELECT * FROM localidades WHERE nome='$entrada'"; Em seguida, a aplicao executa essa consulta no banco de dados. Desconsiderando mecanismos de defesa no banco de dados ou configuraes especiais no servidor PHP, essa aplicao vulnervel a ataques do tipo: a) Slash Overflow b) SQL Injection c) PHP Leak d) PHP Bypass e) Smurf 13. Crie um script php para fazer a seqncia de fibonacci: <?php function gera_seq_fibonacci($n,$qtd) { $x = $n; for($i=1; $i <= $qtd; $i++) { $z = $x + $y; $x = $y; $y = $z; $seq[$i] = $z; }// end for. 104

Projeto E-JOVEM

return $seq; }// end gera_seq_fibonacci. /* Testando a funo */ echo "<pre>"; print_r($fibonacci = gera_seq_fibonacci(1,20)); ?> 14. Faa script que imprima os dados do formulrio abaixo
<form action="acao.php" method="POST"> Seu nome <input type="text" name="nome" /> Sua idade: <input type="text" name="idade" /> <input type="submit"> </form> Oi <?php echo $_POST["nome"]; ?>. Voc tem <?php echo $_POST["idade"]; ?> anos.

15. Faa script que recebe nome e idade do usurio e os imprime na tela. <?php $nome = 'Fulano'; $idade = 35; echo 'Eu sou '.$nome.' e tenho '.$idade.' anos.'; ?> 16. Faa script que escreva frases em html e PHP.

<html> <title>Exercicio 16</title> <body> A primeira linha e <u>normal</u>. <br> <? echo " A segunda linha ja e escrita pelo <b>PHP</b>." ; ?> <br> Nisto, vem uma <font color=#FF0000>terceira mais complexa</font>... <br> <? echo " E logo a <font color=#00FF00>seguir</font>, a quarta <font color=#0000FF>ainda mais</font> complicada!" ; ?><br>

105

Projeto E-JOVEM </body> </html>

17. Escreva scrpt php para enviar arquivos para um servidor via ftp: <?php $ftp_server = "ftp.example.com"; $ftp_user = "foo"; $ftp_pass = "bar"; $conn_id = ftp_connect($ftp_server); // login with username and password $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // upload a file if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) { echo "successfully uploaded $file\n"; } else { echo "There was a problem while uploading $file\n"; } // close the connection ftp_close($conn_id); ?> 18. Faa script para manusear variaveis alterando cor e tambm atribuindo valores, ao final imprima os resultados:

<html> <title>Exercicio 2</title> <body> Exemplo de utilizacao de variaveis: <br><br> <? $inteiro=10; $real=20.0; $caracter= 'V'; $cor1= "#FF0000"; $cor2= "#0000FF"; ?> <font color= <? echo $cor1 ?>> A variavel $inteiro tem o valor <? echo $inteiro ?>.</font> <br> <font color= <? echo $cor2 ?>> A variavel $real tem o valor <? echo $real ?>. </font> 106

Projeto E-JOVEM <br> <font color= <? echo $cor1 ?>> O caracter escolhido e o <? echo $caracter ?>.</font> <br>

</body> </html> 19. Faa um scrpt no qual voc concatene duas variveis e as imprima na tela. <?php $txt1="Hello World"; $txt2="1234"; echo $txt1 . " " . $txt2; ?> 20. Faa script que imprima na tela "Tenha um bom fim-de-semana!" Se o dia atual sexta-feira, caso contrrio ele ir imprimir "Tenha um bom dia!":
<html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; else echo "Have a nice day!"; ?> </body> </html>

21. Faa script que imprima hello word 5 vezes.


<html> <body> <?php for ($i=1; $i<=5; $i++) { echo "Hello World!<br />"; } ?> </body> </html>

107

Projeto E-JOVEM 22. Faa um script que envie arquivos via upload. <form enctype="multipart/form-data" name="frmUpload" action="upload.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="3000"> <input type="file" name="foto" value=""> <input type="submit" value="Enviar"> </form> <? print $_FILE[foto][name]; // imprime o nome original do arquivo no computador do usurio. print $_FILE[foto][ type]; // O tipo mime do arquivo, se o browser deu esta informao. Um exemplo pode ser "image/gif". print $_FILE[foto][ size]; // O tamanho, em bytes, do arquivo. print $_FILE[foto][ tmp_name]; // O nome temporrio do arquivo, como foi guardado no servidor. print $_FILE[foto][ error]; // O cdigo de erro associado a este upload de arquivo. ['error'] foi adicionado no PHP 4.2.0 ?> 23. O que so variveis pr-definidas? So variaveis contendo uma referencia padro do PHP, por exeplo: $GLOBALS, $_GET, $_POST, $_COOKIE E OUTRAS. 24. Por meio de qual keyword voc pode usar uma varivel definida no script dentro de uma funo? Pela keyword dollar ($). 25. Se eu tenho uma pgina com frames (quadros) onde em uma pgina definida uma varivel de sesso, eu conseguirei resgatar a varivel de sesso em uma outra pgina paralela que est em outro servidor? Por qu? NO. PORQUE Isso somente durar at o fechamento do browser. 26. Quais as principais vantagens das sessions sobre os cookies em relao segurana? SESSIONS, como visto no modulo, s dura enquanto no fechar o browser ao passo que o cookie fica na maquina por um periodo definido pelo programador ou definido pelo padro.

108

Projeto E-JOVEM

27. Quais as diferenas entre sesses e cookies? Sesses, podemos buscar em banco de dados de forma segura, ao paso que os cookies podem ser excluidos pelo usuario da mquina, perdendo desta forma os dados gravados anteriormente. 28. O que o script abaixo ir mostrar: PHP $frase = "O PHP uma linguagem"; function mostraValor() { global $frase; $frase .= " de programao"; echo $frase; } mostraValor(); O PHP uma linguagem de programao 29. Crie um cookie que dure 6 meses para expirar <? setcookie("cookie", "teste", time() + 3600*24*182); ?> 30. Faa script para gerar login e senhas aleatrios:
<html> <head> <title>Autenticao com arquivo texto</title> </head> <body text="#003399" link="#006633" alink="red" vlink="steelblue"> <? print_r($_GET); print '<br>'; if (intval($_GET[tam]) <= 0) $_GET[tam] = 8; # podemos modificar o vetor $_GET print_r($_GET); print '<br>'; if (intval($_GET[qtde]) > 0) ListaUsuariosSenhas($_GET[qtde]); else

109

Projeto E-JOVEM
ListaUsuariosSenhas(); # gera uma string aleatria com $tam caracteres function GeraString () { global $_GET; $_GET[tamanhonovo] = 15; $str = ''; for ($i = 1; $i <= $_GET[tam]; $i++) { if ($i % 2 == 0) $str .= GeraVogal(); else $str .= GeraConsoante(); } return ($str); } # gera uma vogal aleatria function GeraVogal () { $ascii_vogal = array(97, 101, 105, 111, 117); $vogal = chr($ascii_vogal[rand(0,4)]); return ($vogal); } # gera uma consoante aleatria function GeraConsoante () { $ascii_consoante = PHP e MySQL - Vero IME-USP - 2006 Prof. Thiago Rodrigo Carneiro exercicios-2006-6.php 1/2 80 81 array(98,99,100,102,103,104,106,107,108,109,110,112,113,114,115,1 16,118,119,120,121,122); $consoante = chr($ascii_consoante[rand(0,20)]); return ($consoante); } # listagem de usurios e senhas function ListaUsuariosSenhas ($qtde = 10) { for ($j = 1; $j <= $qtde; $j++) { $usuario = GeraString(); $senha = GeraString(); $senhas[$usuario] = $senha; print $usuario.' - '.$senha.'<br>'; } if (sizeof($senhas) == $qtde) return TRUE; return FALSE; } # o vetor $_GET pode ser modificado dentro de uma funo quando declarado como global print_r($_GET); print '<br>'; ?> </body> </html>

110

Projeto E-JOVEM 31. Script para alterar um arquivo Remoto


<html> <head> <title>Abertura de arquivo remoto</title> </head> <body text="#003399" link="#006633" alink="red" vlink="steelblue"> if (!isset($_REQUEST[acao])) { print '<form action="'.$_SERVER[PHP_SELF].'" method="POST">'."\n"; print '<input type="hidden" name="acao" value="abrir">'."\n"; print 'Nome do arquivo: <input name="nomearquivo" value=""><br>'."\n"; print '<input type="submit" value="Abrir">'."\n"; print '</form>'."\n"; } elseif ($_POST[acao] == 'abrir') { if (!file_exists ($_REQUEST[nomearquivo])) $erro = '<p>O arquivo <b>'.$_REQUEST[nomearquivo].'</b> no existe.</p>'; elseif (filesize ($_REQUEST[nomearquivo]) > 51200) $erro = '<p>O tamanho do arquivo superior a 50KB.</p>'; elseif (!eregi('^[A-Za-z0-9_\.]+$', $_REQUEST[nomearquivo])) $erro = '<p>Nome de arquivo contm caracteres invlidos (os caracteres permitidos so letras, nmeros, . e _.</p>'; if (!isset($erro)) { $arq = file ($_REQUEST[nomearquivo]); print '<form action="'.$_SERVER[PHP_SELF].'" method="POST">'."\n"; print '<input type="hidden" name="acao" value="salvar">'."\n"; print '<input type="hidden" name="nomearquivo" value="'.$_REQUEST[nomearquivo].'">'."\n"; print '<textarea name="conteudo" cols="72" rows="15">'; foreach ($arq as $numlinha => $contlinha) print $contlinha; print '</textarea><br>'."\n"; print '<input type="submit" value="Salvar">'."\n"; print '</form>'."\n"; } else print $erro."\n"; } elseif ($_POST[acao] == 'salvar' && eregi('^http://cursophp\.thiagorodrigo\.com\.br'.$_SERVER[PHP_SELF].'$', $_SERVER[HTTP_REFERER])) { if ($pipe = fopen ($_REQUEST[nomearquivo], "w")) { fputs ($pipe, $_REQUEST[conteudo]); fclose ($pipe); print '<p>Arquivo '.$_REQUEST[nomearquivo].' editado com sucesso!</p>'."\n".'<a href="'.$_SERVER[PHP_SELF].'">Editar outro arquivo</a>'."\n"; } else print '<p>Erro ao salvar o arquivo. <a href="javascript:history.back();">Voltar pgina anterior</a>.</p>'; }; ?> </body> </html>

111

Projeto E-JOVEM 32 Faa script para imprimir e manipular datas:


<? print "Hoje ".date("d.m.Y")." s ".date("H:i:s")."<br>"; # imprime instrues print "<p>O formulrio de inscrio s estar disponvel at s 20.18hs de 03/02/2005. Faa a sua inscrio rapidamente!</p>"; # guarda timestamp atual $atual = time(); # guarda timestamp da data limite $limite = mktime(20,18,0,2,3,2005); # imprime formulrio at a data limite if ($atual <= $limite) print "<p>Oba, eu posso acessar o formulrio!</p>"; else print "<p>O prazo para as inscries j se encerrou!</p>"; # saudao conforme a hora do dia $hora = intval(date("H")); if ($hora >= 0 && $hora < 6) $saudacao = "Vai dormir!"; elseif ($hora >= 6 && $hora < 12) $saudacao = "Acordou bem?"; elseif ($hora >= 12 && $hora < 18) $saudacao = "Daqui a pouco hora de ir para casa ..."; else $saudacao = "Boa noiteeeee!"; print $saudacao; ?>

33. Faa um script para gerar nmeros para loteria:


<? if (!isset($_GET[urna]) || intval($_GET[urna]) <= 0) $_GET[urna] = 100; // total de nmeros na urna if (!isset($_GET[sorteio]) || intval($_GET[sorteio]) <= 0) $_GET[sorteio] = 10; // total de nmeros a serem sorteados # sorteio dos nmeros for ($n = 1; $n <= $_GET[sorteio]; $n++) { do { $bola = rand (1, $_GET[urna]); } while ($sorteado[$bola] == TRUE); $sorteado[$bola] = TRUE; } # aps o sorteio, suponha que sorteamos 3, 8, 17, 18 e 25. Deste modo, $sorteado ser assim: # $sorteado[3] = TRUE, $sorteado[8] = TRUE, ... at $sorteado[25] = TRUE e no h outras posies preenchidas # imprime nmeros sorteados print 'Os nmeros sorteados foram: '; ksort($sorteado); // ordena vetor foreach ($sorteado as $num => $status) print $num.' '; ?>

112

Projeto E-JOVEM 34. Faa um script para simular o sorteio de bingo


<? if (!isset($_REQUEST[c]) || intval($_REQUEST[c]) < 2 || intval($_REQUEST[c] > 8)) $_REQUEST[c] = 5; # nmero de dezenas d if (!isset($_REQUEST[d]) || intval($_REQUEST[d]) < 10 || intval($_REQUEST[c] > 100) || $_REQUEST[d] <= $_REQUEST[c]*$_REQUEST[c]) $_REQUEST[d] = 100; # gerando a cartela function GeraCartela() { global $_REQUEST, $cartela; for ($a = 1; $a <= $_REQUEST[c]; $a++) { for ($b = 1; $b <= $_REQUEST[c]; $b++) { $sorteado = Sorteio($tanacartela); $tanacartela[$sorteado] = 1; $cartela[$a][$b] = $sorteado; } } } # imprimindo a cartela function ImprimeCartela($cartela) { global $_REQUEST; print '<table>'; for ($a = 1; $a <= $_REQUEST[c]; $a++) { print '<tr>'; for ($b = 1; $b <= $_REQUEST[c]; $b++) print '<td>'.$cartela[$a][$b].'</td>'; print '</tr>'; } print '</table>'; } # imprime cartela preenchida function ImprimeCartelaPreenchida($cartela, $tanobingo) { global $_REQUEST; print '<table>'; for ($a = 1; $a <= $_REQUEST[c]; $a++) { print '<tr>'; for ($b = 1; $b <= $_REQUEST[c]; $b++) if ($tanobingo[$cartela[$a][$b]] == 1) print '<td><b>'.$cartela[$a][$b].'</b></td>'; else print '<td>'.$cartela[$a][$b].'</td>'; PHP e MySQL - Vero IME-USP - 2007 Prof. Thiago Rodrigo Carneiro print '</tr>'; } print '</table>'; } # sorteia um novo nmero function Sorteio($lista) { global $_REQUEST; do { $sorteado = rand(1, $_REQUEST[d]); #print $sorteado.' ';

113

Projeto E-JOVEM
#print_r ($lista); } while ($lista[$sorteado] == 1); return ($sorteado); } # confere cartela aps uma nova jogada function ConfereCartela ($cartela, $tanobingo) { global $_REQUEST, $ondeganhou; # confere linhas for($i = 1; $i <= $_REQUEST[c]; $i++) { $podeacertar = 1; for($j = 1; $j <= $_REQUEST[c]; $j++) if (!isset($tanobingo[$cartela[$i][$j]])) $podeacertar = 0; if ($podeacertar == 1) { $ondeganhou = 'linha '.$i; return (TRUE); }; } # confere colunas for($i = 1; $i <= $_REQUEST[c]; $i++) { $podeacertar = 1; for($j = 1; $j <= $_REQUEST[c]; $j++) if (!isset($tanobingo[$cartela[$j][$i]])) $podeacertar = 0; if ($podeacertar == 1) { $ondeganhou = 'coluna '.$i; return (TRUE); }; } # confere diagonal principal $podeacertar = 1; for($i = 1; $i <= $_REQUEST[c]; $i++) { if (!isset($tanobingo[$cartela[$i][$i]])) $podeacertar = 0; } if ($podeacertar == 1) { $ondeganhou = 'diagonal principal'; return (TRUE); }; PHP e MySQL - Vero IME-USP - 2007 Prof. Thiago Rodrigo Carneiro exercicios-2007-5.php 2/3 # confere diagonal secundria $podeacertar = 1; for($i = 1, $j = $_REQUEST[c]; $i <= $_REQUEST[c] && $podeacertar == 1; $i++, $j--) { if (!isset($tanobingo[$cartela[$i][$j]])) $podeacertar = 0; } if ($podeacertar == 1) { $ondeganhou = 'diagonal principal'; return (TRUE); }; return (FALSE); } ?> <html>

114

Projeto E-JOVEM
<head> <title>IME-USP, Vero 2007, PHP e MySQL - Exerccio 5</title> </head> <body text="#660099" link="#3399CC" alink="#FF6600" vlink="#66CC00"> <? # Ateno jogadores: est comeando o bingo! Boa sorte! GeraCartela(); $ganhou = FALSE; for ($d = 1; $ganhou == FALSE; $d++) { $sorteio[$d] = Sorteio($tanobingo); $tanobingo[$sorteio[$d]] = 1; $ganhou = ConfereCartela($cartela, $tanobingo); } print '<h1>Cartela</h1>'; ImprimeCartela($cartela); print '<h1>Nmeros sorteados</h1>'; print '<p>'.implode(' - ', ($sorteio)).'.</p>'; print '<p>Voc ganhou na '.$ondeganhou.'</p>'; ImprimeCartelaPreenchida($cartela,$tanobingo); ?>

35. Faa script que gere numeros randmicos e faa as quatro operaes, onde o resultado deve ser impresso na tela.
<? $a = rand (0,10); $b = rand (1,10); $soma = $a + $b; $diferenca = $a - $b; $produto = $a * $b; $quociente = $a / $b; $resto = $a % $b; # arredonda o quociente para duas casas decimais $quociente = round ($quociente, 2); print "<p>Os nmeros sorteados foram <b>".$a."</b> e <b>".$b."</b>.</p>"; print "<p>A soma ".$soma.".</p>"; print "<p>A diferena ".$diferenca.".</p>"; print "<p>O produto ".$produto.".</p>"; print "<p>O quociente da diviso ".$quociente.".</p>"; print "<p>O resto ".$resto.".</p>"; ?>

31.

Exerccios Propostos

1. Faa um formulrio em PHP para cadastro de colaboradores (funcionrios). Um colaborador pode ter de 0 a 5 dependentes. Para cada um dos dependentes voc dever armazenar as informaes: Nome, sexo (F, M) e ano de nascimento. Dica:

115

Projeto E-JOVEM Desenhe um formulrio s para funcionrio, no qual voc colher o nmero de dependentes; No formulrio seguinte desenhe um campo nome, sexo, e ano de nascimento para cada um dos dependentes; Associe os nomes dos campos a um vetor. 2. Foi visto em aula que formulrios HTML podem enviar dados a um servidor Web por dois mtodos: GET e POST. Pergunta: Em um mesmo formulrio HTML, pode-se configur-lo para enviar dados utilizando ambos os mtodos? (Pesquise!) 3. Escreva um algoritmo que leia dois nmeros e imprima o produto desses nmeros. 4. Faa um algoritmo para ler dois nmeros e mostrar o maior deles. 5. Faa um algoritmo que leia o nome e idade de N pessoas e mostre: A soma das idades; A mdia das idades; Quem a pessoa mais velha e qual a sua idade; Quem a pessoa mais nova e qual a sua idade.

6. Escreva um algoritmo que leia dois nmeros que devero ser colocados, respectivamente, nas variveis $va e $vb. O algoritmo deve, ento, trocar os valores de $va por $vb e viceversa. Imprima posteriormente o contedo destas variveis. 7. Faa um algoritmo que leia valores para as variveis $a, $b e $c e mostre o resultado da seguinte expresso: ( $a - $b ) * $c

8. Faa um algoritmo que mostre o resultado da expresso abaixo: ( ( $x - 5 ) * y ) z

9. Faa um algoritmo que tenha trs variveis $a, $b e $c. Desenvolva um programa que leia: Valores para as trs variveis;

116

Projeto E-JOVEM Pea do usurio uma expresso que ele deseje que seja impressa (Dica: Pesquise se existe em PHP uma funo para tal para tal propsito). Eventualmente o usurio de sua pgina pode desejar testar outras expresses. Guarde o valor das variveis nas postagens seguintes. 10. Faa um algoritmo que leia duas notas, seus respectivos pesos e mostre o valor de sua mdia ponderadas.

( nota1 * peso da nota1 ) + ( nota 2 * peso da nota 2 ) Mdia Ponderada = soma dos pesos

11. Faa o mesmo algoritmo acima para N notas com seus respectivos N pesos. 12. Maria quer saber quantos litros de gasolina precisa colocar em seu carro e quanto vai gastar para fazer uma viagem at a casa de sua irm. Dados que precisam ser solicitados a Maria: Distncia de sua casa at a casa de sua irm; Qual o consumo de seu carro em Kilmetros por litro [km/l]; Qual o preo da gasolina no posto onde ela abastece.

13. Faa um algoritmo que leia um valor inteiro em segundos e fornea como resultado esse valor no formato hh:mm:ss 14. Faa um algoritmo que leia trs comprimentos de aresta de um susposto tringulo. Seu algoritmo deve informar: Se as arestas dadas podem ou no formar um tringulo; Caso afirmativo, que tipo de tringulo: equiltero, isceles ou escaleno; Ainda no caso afirmativo, qual o valor dos ngulos entre as arestas.

Lembre-se que: O comprimento de cada lado de um tringulo menor que a soma dos comprimentos dos outros dois lados;

117

Projeto E-JOVEM Um tringulo eqiltero quando o comprimento de seus trs lados so iguais; Um tringulo issceles quando o comprimento de dois de seus lados so iguais; Um tringulo escaleno quando o comprimento de seus trs lados diferem entre si. 15. Escreva um programa de ajuda para vendedores. A partir de um valor total recebido, deve-se calcular: O total a pagar com desconto de 10%; O valor de cada parcela, no parcelamento de 3X sem juros; A comisso do vendedor, no caso da venda ser a vista (5% sobre o valor do desconto); A comisso do vendedor, no caso da venda ser parcelada (5% sobre o valor total).

16. Escreva um programa que leia um nmero de 0 a 99 e mostre o seu correspondente por extenso. 17. Escreva um programa que leia uma data de nascimento (dia, ms e ano) e indique qual o signo da pessoa em questo. Dados: Signo ries Touro Gmeos Cncer Leo Virgem Libra Escorpio Sagitrio Capricrnio Perodo 21/maro a 20/abril 21/abril a 20/maio 21/maio a 20/junho 21/junho a 22/julho 23/julho a 22/agosto 23/agosto a 22/setembro 23/setembro a 22/outubro 23/outubro a 21/novembro 22/novembro a 21/dezembro 22/dezembro a 20/janeiro

118

Projeto E-JOVEM Aqurio Peixes 21/janeiro a 19/fevereiro 20/fevereiro a 20/maro

18. Escreva um programa para ler uma temperatura em Fahrenheit e apresent-la convertida em graus Celsius (Centgrados). No mesmo programa permita que o usurio faa a converso inversa. ( Fahrenheit - 32 ) * 5 Celsius = 9 19. Escreva um programa que leia uma data de aniversrio e informe se ela vlida ou no. 20. Faa um programa que leia o nome e o time de futebol de vrias pessoas e informe quantas pessoas so de cada time. 21. Uma pesquisa sobre caractersticas fsicas de uma regio coletou os dados abaixo, referente a cada habitante: Ano de nascimento (de 1900 at o ano atual); Sexo (masculino / feminino); Cor dos olhos (pretos, castanhos, azuis, verdes, outros); Cor dos cabelos (preto, castanho, louro, ruivo); Renda mensal.

22. Faa um programa que leia todos os dados desta pesquisa, por habitante. Seu programa dever ter um link para um relatrio onde poderemos visualizar: A quantidade de habitantes da regio que foram cadastrados; A maior e a menor idade dos habitantes; A idade mdia e a idade mediana dos habitantes; A porcentagem de indivduos do sexo feminino com olhos pretos ou castanhos e que tenham renda mensal maior que R$ 1.000,00; A quantidade de indivduos do sexo masculino com cabelos ruivos e renda menor que R$ 1.000,00.

119

Projeto E-JOVEM 23. Faa um programa para leitura de dados da turma. Os dados a serem coletados so: Ano de nascimento; Ano a partir do qual comeou a trabahar com computao; Altura; Sexo; Idiomas que fala; Atividades de lazer/hobby.

24. Analise de cdigo <html> <head><title>Exerccio</title> </head> <body> <?php $str = array("morango" => "vermelho", "banana" => "amarelo"); /* um exemplo de como isto vai ficar */ echo "O Morango $str["morango"]<br>" $first = $str["banana"]; $first =(strlen($first)-1) = "a"; echo "A banana $first.<br>"; //Uma sada print_r($str); echo "<br>"; var_dump($str); ?> </body> </html>

Tente descobrir onde est o erro neste script. Os comentrios existentes esto bem integrados (tm a sintaxe correcta)?

25. Perguntas de Verdadeiro e Falso PHP pode escrever scripts que rodem do lado do cliente? [V] | [F] Para correr PHP preciso de um servidor FTP? [V] | [F] uso de short-tags, tais como <? e ?> mais benfico do que as outras tags porque assim perco menos tempo a escrever o cdigo. [V] | [F] O PHP mantido por uma comunidade de programadores pela internet e est acessvel a toda a gente. [V] | [F] 26. Escreva um cdigo que exiba a mensagem "Ol Mundo!" no browser.

120

Projeto E-JOVEM Que instruo preciso de usar para exibir essa mensagem?

27. O php sempre reconhece os campos "name" do HTML como variveis? 28. O que faz este script? <?php phpinfo() ?> 29. Escreva um script php que escreva as frases da forma abaixo, utilizando-se de uma array para armazenar os meses do ano e as estruturas de lao para informar os valores dos mesmos: Ciclo while

Ms: Dezembro Ms: Janeiro Ms: Fevereiro Ms: Maro Ms: Abril Ms: Maio Ms: Junho Ms: Julho Ms: Agosto Ms: Setembro Ms: Outubro Ms: Novembro

Ciclo for

Ms: Dezembro Ms: Janeiro Ms: Fevereiro Ms: Maro Ms: Abril Ms: Maio Ms: Junho Ms: Julho Ms: Agosto Ms: Setembro Ms: Outubro Ms: Novembro

121

Projeto E-JOVEM Ciclo foreach


Ms: Dezembro Ms: Janeiro Ms: Fevereiro Ms: Maro Ms: Abril Ms: Maio Ms: Junho Ms: Julho Ms: Agosto Ms: Setembro Ms: Outubro Ms: Novembro

30. A sada de um script php, deve ser da forma apresentada abaixo, utilizando-se de funes para calculo de cada situao: A soma de 3 com 2 5 ! A diferena entre 3 e 2 de 1 ! O produto entre 3 e 2 de 6 ! A diviso de 3 por 2 1.5 ! O resultado de 3+(2*3) de 9 ! O resultado de 2/(3-2) 2 ! O resultado de 3*((2/3)-2)+2 de -2 ! 31. Escreva um script que atravs dos valores de uma varivel do tipo array, monte um campo do tipo select, contendo todos os elementos do array. 32. O que PHP? 33. D outros exemplos da utilidade do PHP. 34. Como funciona o PHP? 35. Esse exemplo abaixo ir funcionar?
<html> <head> <title>Titulo</title> <body> <? echo "Ola mundo"; ?>

122

Projeto E-JOVEM
</body> </html>

36. Ache os erros abaixo:

a ) <? echo "ola mundo; ?> b ) <? $1 = 123; ?> c ) <? $nome "Jose";?> d ) <? $nome == "Jos";?>

37. possvel copiar o cdigo fonte PHP de uma pagina da web? 38. Mini Projeto: 1-Crie um banco de dados chamado bdCliente

2- Crie a tabela tbContatoCliente que possua os campos Cdigo (inteiro); Nome (Varchar(30)); Telefone (VarChar(10)); Endereo (VarChar(60)); 3- Faa uma consulta no seu banco de dados bdCliente que mostre: Todos os clientes Nome de todos os clientes Nome e cdigo de todos os clientes Todos os clientes que moram na Rua K Todos os clientes cujo telefone comea com 9 4- Faa uma pgina em HTML chamada cadastra.html com os campos: Cdigo Nome Endereo 123

Projeto E-JOVEM Telefone

5- Escreva um cdigo em PHP chamado recebe.php que receba os dados da pgina cadastra.html e mostre-os na tela.

6- Faa com que os dados recebidos sejam enviados para a tabela tbContatoCliente que est no banco de dados bdCliente.

7- Insira na pgina cadastra.html um boto que chame uma pgina consulta.php que mostra todos os dados cadastrados na tabela tbContatoCliente.

8- Insira na pgina cadastra.html um boto que chame uma pgina consulta_por_nome.php que tenha um campo texto chamado nome que dever ser preenchido pelo usurio. Este campo depois de preenchido e pressionado o boto consultar (que dever ser inserido nessa pgina) dever consultar se o nome digitado est na tabela. Se estiver enviar para uma janela todo o registro.

9- Faa uma consulta pelo nome e os dados (nome e telefone) devero se mostrados dentro de uma caixa de texto.

10- Escreva um programa que faa o cadastramento de cdigo e nome de um produto qualquer.

11- Ao ser preenchido o formulrio de cadastramento o programa dever ser redirecionado para uma pgina que mostrar o produto cadastrado na pgina. Essa pgina dever ter dois botes (ou links). Um link dever gravar os dados mostrados e o outro dever direcionar a pgina para um formulrio j

124

Projeto E-JOVEM preenchido com os dados para fazer uma alterao.

12- Faa as operaes de excluso e consulta tambm para este exerccio.

39. Faa um programa em PHP que carregue um vetor de seis elementos numricos inteiros sorteados aleatoriamente, calcule e mostre: A quantidade de nmeros pares; Quais os nmeros pares; A quantidade de nmeros mpares; Quais os nmeros mpares; 40. Qual a diferena entre scripts client-side e server-side? 41. O que acontece se digito echo "$var" ? e echo "\$var"? 42. O que acontece se digito echo "8/2" ? e echo "\8/2" e echo 8/2; ? 43. Para mostrar o resultado da soma de dois nmeros, qual a instruo que devo usar?
o ( ) echo 1+2;

o ( ) echo "1+2"; 44. Verdadeiro ou falso? ( ) correto digitar: <? $var= "3"; $var1=1; $soma = $var + $var1; ?> ( ) no se faz declarao de variveis e tipos em php. os tipos so identificados pelo php a cada instruo. isso se chama "tipagem dinmica" ( ) no printf e no echo obrigatrio o uso de parnteses ( ) o ndice de um vetor sempre inteiro positivo ( ) um vetor deve ter em todas as suas posies sempre valores de um mesmo tipo

45. Para que serve a funo gettype()? 46. Para que serve a funo unset()? 47. Para que serve a funo isset()? 125

Projeto E-JOVEM 48. Qual a diferena entre isset() e empty()? 49. Crie um script usando lao FOR e WHILE que escreva um mesmo texto em cada linha com tamanhos de fonte diferentes. Para isso tome como base a seguinte tag HTML <font size=x> Texto </font>, onde x varia de 1 a 7 50. Considere duas variveis, $linha e $coluna, no incio de um script, inicializadas pelo programador com quaisquer valores. Crie um script que crie uma tabela HTML de $linha linhas e $coluna colunas e dentro de cada clula informe as coordenadas da mesma. 51. O que so headers e como estes so tratados em PHP? Escreva um pequeno programa que exemplifique a utilizao de headers. 52. O que so locks e para que servem? Apresente um exemplo de acesso a tabelas que necessite da utilizao de locks. 53. O que so sesses? Cite e descreva algumas situaes onde se recomendado o uso de sesses e situaes onde se deve evitar o uso das mesmas. 54. Descreva o funcionamento dos seguintes esquemas de autenticao: Via HTTP (descreva tambm os mecanismos que PHP oferece para fazer autenticao via HTTP); Via banco de dados. 55. Por que a utilizao de pginas de redireo (recibo) necessria? D um exemplo (no necessrio cdigo PHP, apenas um caso de uso informal). 56. Faa uma pgina HTML que contenha um formulrio com os campos nome, endereo, email, senha e confirmao de senha. Esse formulrio dever ser enviado para um script PHPque ir verificar a existncia e a integridade dos dados, mostr- los e possibilitar ao usurio voltar pgina anterior caso haja algum erro ou confirmar os dados. 57. Escreva um esquema para armazenar os dados do formulrio da questo anterior num banco de dados MySQL. Estenda o cdigo que recebe e verifica os dados do formulrio para armazen - los no banco de dados. Voc deve verificar se o campo email existe no banco de dados; se j existir, reapresente o formulrio indicando o erro, por exemplo, "Este email j est cadastrado".

126

Projeto E-JOVEM 58. Faa uma pgina com o contedo de acesso restrito. O acesso ao contedo desta pgina somente ser permitido caso o usurio efetue login no sistema (faa tambm uma pgina de login) (utilize variveis de sesso). 59. Escreva um programa em PHP que apresente trs contedos distintos dependendo do privilgio do usurio. Para usurios no logados, apresenta um formulrio que deve ser preenchido com nome (login) e senha. Neste caso, a pgina deve tambm ser responsvel pelo recebimento dos dados do formulrio e pela verificao de credenciais num banco de dados. Usurios credenciados podem pertencer a duas categorias, a dos usurios com acesso do tipo 'R' (acesso restrito) e a dos usurios do tipo 'T', que podem realizar todas as operaes. Aos usurios do tipo 'R', aps a verificao de credenciais, deve ser apresentado um menu com links para as pginas 'a.php' e 'b.php', enquanto que aos usurios do tipo 'T' devem ser apresentados tambm links para as pginas 'c.php' e 'd.php'. 60. Voc foi encarregado de escrever uma pgina web de tal forma que cada novoacesso contabilizado por um contador que exibido. Deve ser considerado um novo acesso um acesso feito de um navegador que no acessa a pgina h mais de 2 horas. 61. Escreva em PHP o cdigo relevante para esta funcionalidade usando cookies mas no empregando quaisquer funes mysql. 62. Modifique o programa anterior de tal forma que cookies no sejam necessrios, mas agora utilizando um banco de dados mysql. 63. Crie um formulrio de insero de scraps (semelhante ao usado no Orkut) (destinatrio, remetente, contedo) e, aps o envio de um scrap, exibir todos os scraps ordenados pela data de envio (do mais recente ao mais antigo) com possibilidade de alterao e excluso para cada scrap.

127

Projeto E-JOVEM

128

Anda mungkin juga menyukai