9.7
Validando o formulário de edição de tarefas . . . . . . . . . . . . . . . 121
9.8
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
9.9
Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
10 Upload de arquivos
127
10.1
Anexos para a lista de tarefas . . . . . . . . . . . . . . . . . . . . . . . . 127
10.2 Mudanças no banco de dados . . . . . . . . . . . . . . . . . . . . . . . 128
10.3 Página com os detalhes das tarefas
. . . . . . . . . . . . . . . . . . . . 130
10.4 O formulário para cadastrar anexos . . . . . . . . . . . . . . . . . . . . 132
10.5 Recebendo arquivos pelo PHP . . . . . . . . . . . . . . . . . . . . . . . 134
10.6 Gravando os dados do anexo no banco dados . . . . . . . . . . . . . . 138
10.7 Exibindo os anexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
10.8 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
10.9 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
11 Lembretes de tarefas por e-mail
143
11.1
Definindo o e-mail de aviso . . . . . . . . . . . . . . . . . . . . . . . . 143
11.2
Unificando a configuração da aplicação com constantes . . . . . . . . 145
11.3
Adicionando a opção de aviso por e-mail . . . . . . . . . . . . . . . . . 147
11.4
A função enviar_email() . . . . . . . . . . . . . . . . . . . . . . . . . . 149
11.5
Escrevendo o corpo do e-mail usando um arquivo com o template . . 151
ix
Sumário
Casa do Código
11.6
Instalando uma biblioteca para enviar e-mails . . . . . . . . . . . . . . 154
11.7
Finalizando a função enviar_email() . . . . . . . . . . . . . . . . . . . 155
11.8
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
11.9
Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
12 Hospedagem de aplicações PHP
161
12.1
Sua aplicação para o mundo! . . . . . . . . . . . . . . . . . . . . . . . . 161
12.2 Escolhendo um servidor para hospedagem
. . . . . . . . . . . . . . . 162
12.3
Hospedagem com a Hostinger . . . . . . . . . . . . . . . . . . . . . . . 162
12.4 Criação da conta na Hostinger . . . . . . . . . . . . . . . . . . . . . . . 163
12.5
Configurando a aplicação para a Hostinger . . . . . . . . . . . . . . . 170
12.6 Enviando a aplicação para a Hostinger . . . . . . . . . . . . . . . . . . 170
12.7 Hospedagem no Jelastic da Locaweb
. . . . . . . . . . . . . . . . . . . 173
12.8 Criação da conta no Jelastic da Locaweb . . . . . . . . . . . . . . . . . 173
12.9 Configurando a aplicação para o Jelastic . . . . . . . . . . . . . . . . . 179
12.10 Enviando a aplicação para o Jelastic . . . . . . . . . . . . . . . . . . . . 180
12.11 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
12.12 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
13 Programando com orientação a objetos
183
13.1
A classe Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
13.2
Buscando tarefas dentro da classe . . . . . . . . . . . . . . . . . . . . . 185
13.3
Buscando apenas uma tarefa dentro da classe . . . . . . . . . . . . . . 187
13.4 Gravando e editando tarefas dentro da classe . . . . . . . . . . . . . . 189
13.5
Usando o MySQLi orientado a objetos . . . . . . . . . . . . . . . . . . 191
13.6 Avançando em orientação a objetos . . . . . . . . . . . . . . . . . . . . 195
13.7
MVC e Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
13.8
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
13.9 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
14 Proteção e ajustes
199
14.1
Protegendo-se contra SQL Injection . . . . . . . . . . . . . . . . . . . . 200
14.2 Exibindo campos com aspas . . . . . . . . . . . . . . . . . . . . . . . . 201
14.3 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
14.4 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
x
Casa do Código
Sumário
15 Ao infinito... E além!
203
15.1
Onde posso buscar mais informações? . . . . . . . . . . . . . . . . . . 203
xi
Capítulo 1
Introdução
1.1
Ganhando a web 2.0 com páginas dinâmicas
Imagine a internet na qual você pode apenas consumir conteúdos, como se fosse um
jornal, uma revista, ou ainda, um programa na televisão. Chato, né? Mas quando
se aprende as linguagens da web, como HTML e CSS, é isso que se aprende, pois
usando apenas HTML podemos montar sites que são como revistas e servem apenas
para leitura, sem permitir interação com os internautas.
O segredo da famosa web 2.0 é a capacidade de interação entre as pessoas e os
serviços online. Mas, para que esta interação seja possível, é necessário que os sites
sejam capazes de receber informações dos internautas e também de exibir conteúdos
personalizados para cada um ou de mudar seu conteúdo automaticamente, sem que