Transcrições
1. Introdução: Um site pode ser usado para mostrar
algumas
informações a um visitante, como uma revista, um novo
site ou a Wikipédia. No entanto, se você quiser obter alguns dados do
visitante, como um comentário, um termo de pesquisa ou uma
atribuição por farm, por exemplo,
precisará de um farm. Farm permite que o usuário do
site envie alguns dados para você. Depois de ter esses dados
no servidor web, no mínimo, você provavelmente salvará
esses dados em um banco de dados. Saber como os dados são transferidos
do usuário para o seu banco de dados é uma
habilidade fundamental para nosso desenvolvedor web. No final desta classe, você saberá como
criar um farm em HTML. Como processar os dados
desse farm no servidor
web em PHP, certificando-se de que ele é válido. E como salvar
esses dados com segurança em um banco de dados MySQL. Isso usa práticas recomendadas e padrões do setor
para o código. Olá, sou Dave transportando vale a pena. Eu escrevo
aplicativos da web desde 1998 e ensino
desenvolvimento web on-line desde 2012. Esta aula é para iniciantes para desenvolvimento web que precisa aprender uma das habilidades
fundamentais ao criar um site. Obtendo dados de um visitante para seu site em um
banco de dados no servidor. No projeto de classe, você estará criando
seu próprio farm em HTML, processando os dados
desse farm em PHP e salvando-os em
um banco de dados MySQL. Conhecimento básico de HTML, PHP e SQL são recomendados. Mas eu explico todo
o código que uso junto com links para documentação
relevante
quando necessário, onde você pode obter mais detalhes. Além disso, todo o
código-fonte mostrado
nos vídeos está
disponível para download. Além disso, se você precisar
de ajuda minha diretamente, você pode fazer uma pergunta
na seção de discussão. Sem mais delongas. Vamos começar.
2. Configure seu ambiente de desenvolvimento: instale o software recomendado: Para tirar o máximo
proveito da aula, recomendo que você
acompanhe escrevendo e executando o código mostrado
nos vídeos você mesmo. Para fazer isso, você
precisará de um servidor web, PHP e um
servidor de banco de dados instalados. Estarei usando o servidor web
Apache com
PHP e o servidor de
banco de dados MariaDB. Mariadb é totalmente
compatível com o MySQL. Tudo isso é totalmente
gratuito para baixar e usar. Você pode
instalá-los separadamente. Mas a
maneira mais fácil é instalar um pacote que
inclui um servidor web,
PHP, um servidor de banco de dados
e, opcionalmente, PHP, meu administrador para administrar
o banco de dados. Para Windows e Linux, recomendo a instalação do x AMP. Basta selecionar o download
relevante para o seu sistema operacional aqui
no site oficial e seguir as instruções de
instalação. Para Mac, recomendo o MAMP. Da mesma forma, basta baixar
o instalador
do MAMP do site oficial aqui e seguir
as instruções. Observa que o MAMP é a versão gratuita e o MAMP
Pro é a versão paga. A versão gratuita do MAMP é
mais do que suficiente, para os requisitos
desta classe.
3. Crie um arquivo HTML e veja no navegador: Vamos começar criando um arquivo HTML que
eventualmente conterá um farm. Esta é a pasta raiz
do meu servidor web. Se você estiver usando um
dos pacotes que eu
recomendei anteriormente, como XML MAMP, a
pasta padrão para Windows, Mac ou Linux é mostrada aqui. Embora você possa alterar isso para uma pasta diferente ou usar uma
subpasta, se preferir. Vamos criar um novo arquivo
aqui chamado Farm dot HTML. Isso conterá
o HTML para o farm. Como exemplo, vamos
criar um farm que você possa ter para enviar
um ticket de suporte. Antes de criarmos
o farm, vamos adicionar o código HTML
básico que precisamos para criar um documento HTML. Começamos com o tipo de documento, que informa ao
navegador
que o código a seguir será HTML válido. Precisamos disso porque
isso afeta a forma como o navegador
interpretará esse código. Em seguida, adicionaremos uma tag HTML, que é a tag de contêiner
para o resto do HTML. Aqui dentro, adicionaremos uma tag de cabeça e dentro
aqui uma tag de título. Este título é o que é mostrado
na barra de título da
guia no navegador. Vamos colocar o suporte como
o título da página. Também dentro da tag head, adicionaremos uma meta tag especificando os conjuntos de caracteres
deste documento como UTF-8. Isso nos permitirá
usar caracteres de alfabetos
não ingleses sem
problemas. Após a tag head, adicionaremos uma tag body. O HTML aqui dentro
é o que será renderizado para ser exibido
na janela principal do navegador. Por enquanto, vamos adicionar elementos de cabeçalho de nível
um
contendo o texto. Envie um tíquete. Vamos dar uma olhada
nisso no navegador. Se eu especificar esse nome de arquivo
no endereço do host local, veremos o conteúdo
desse arquivo. O título na guia vem
dos elementos do título. E no corpo do documento, apenas
temos o elemento de cabeçalho.
4. Adicione um formulário com uma entrada de texto simples e rótulo associado: Em seguida, vamos adicionar um único controle de
entrada à página. Primeiro dentro do corpo, vamos adicionar um elemento de fazenda. Então, dentro disso,
adicionará elementos de entrada, ambos sem nenhum atributo. Por enquanto. O navegador. Isso mostra uma entrada de texto simples na qual podemos inserir algum texto. Esse
tipo de entrada de texto simples é o padrão. Se não especificarmos um tipo. Se adicionarmos o atributo type
ao elemento de entrada e
especificarmos o texto como seu valor, veremos a mesma
coisa no navegador. Ao usar
entradas de texto como essa, prefiro especificar o tipo mesmo
que seja o padrão, pois há muitos
tipos diferentes de entradas disponíveis, o que veremos em breve. Em seguida, vamos adicionar um rótulo a essa entrada para que o usuário
saiba o que digitar nela. Vamos começar
escrevendo apenas algum texto antes do elemento de entrada.
No navegador. Vemos esse texto
antes das entradas, e é apenas texto. Isso é bom, mas
podemos melhorar isso. Vamos cercar esse texto
com um elemento de rótulo. Isso não afetará
a aparência dos textos rotulados, mas afeta o funcionamento. Associamos esse
rótulo a uma entrada adicionando primeiro um
atributo ID à entrada. Vou dar ao valor
do nome. Observe que o valor
desse atributo precisa ser exclusivo dentro
do documento HTML. Em seguida, adicionamos quatro
atributos ao rótulo, especificando o valor como
o ID da entrada. Queremos associar isso
rotulado ao navegador. Podemos ver que nada
mudou visualmente. Agora, no entanto, se eu clicar
no texto do rótulo, o foco de entrada é colocado
na entrada de texto e
podemos começar a digitar. Além disso, associar um rótulo a
uma entrada como essa, torna a fazenda mais acessível para os
visitantes que estão usando tecnologias assistivas,
como leitores de tela, verá mais tarde de outra forma que poder
clicar em Rótulos como este para ativar uma entrada
torna o farm mais fácil de usar. Portanto, cada entrada no farm precisa seus próprios elementos de
rótulo associados para que o farm
seja mais fácil de usar. Como um aparte, observe que esse elemento de entrada
tem dois atributos. Como você sabe, você pode especificar
atributos em qualquer outro. No entanto, como o atributo type afeta o tipo da
entrada exibida, prefiro sempre colocar o atributo type primeiro
para elementos de entrada. Como isso deixa mais claro, se você tiver uma fazenda
com várias entradas.
5. Adicione diferentes tipos de controles para entrar no texto: Até agora, em nossa fazenda, temos uma única entrada de texto. Em seguida, vamos adicionar mais
entradas para adicionar texto. Existem vários
tipos de entrada disponíveis listados aqui. Veremos vários
dos que não são de texto mais tarde. Já usamos uma entrada de texto, mas há outras
que parecem exatamente iguais. Por exemplo, cauda,
número e e-mail. Eles parecem iguais a
uma entrada de texto normal, mas têm
funcionalidades diferentes. Vamos adicionar outra
entrada ao farm. Desta vez, uma
entrada de tipo de e-mail para que o usuário
insira seu endereço de e-mail. Com a entrada de nome adicionará
um elemento de rótulo associado, vinculando-o à
entrada correspondendo o atributo
for ao atributo
inputs ID. O navegador. Há o controle de entrada. E se clicarmos no rótulo, o foco de entrada é
colocado no controle. A entrada parece a mesma uma entrada de texto normal e
se comporta da mesma maneira. A diferença é que ao
visualizar o farm em um dispositivo móvel com
um teclado na tela, uma entrada de texto normal usa
o teclado padrão. No entanto, o teclado para entradas de
e-mail
será um pouco diferente. Por exemplo, o sinal at está disponível e também
em alguns dispositivos, uma chave que automaticamente adiciona s.com ao que
você estiver digitando. É semelhante para um número
ou entradas de telefone. O teclado muda para
facilitar a inserção do tipo de dados esperado
nessa entrada específica. Outra vantagem desses
textos, como tipos de entrada, é que podemos validar
o conteúdo das entradas no navegador antes que
o farm seja enviado. Veremos isso mais tarde. Uma coisa que você deve ter
notado é que esses tipos
de entrada de textos só permitem
uma linha de texto. Para adicionar uma entrada de texto que permita mais de
uma linha de texto, usamos um elemento de área de texto. Vamos adicionar um ao
farm que o usuário
usará para adicionar uma descrição
de seus tickets. Assim como acontece com as outras entradas, também
adicionaremos um rótulo
associado. Observe que este não é um elemento de entrada com
um tipo de área de texto. É um elemento de área de texto. E, ao contrário de um elemento de entrada, você precisa ter as tags de
abertura e fechamento. No navegador. A área de texto é mostrada
com mais de uma linha. E você pode pressionar
enter ao digitar esse controle para adicionar uma nova linha.
6. Adicione uma folha de estilo CSS para adicionar a formatação com facilidade ao formulário: Antes de analisarmos
mais tipos de entradas, vamos adicionar algum
estilo a esse farm que
seja mais fácil
ver o que está acontecendo. estilo com CSS está além
do escopo dessa classe. Mas duas maneiras rápidas de adicionar
estilos ao desenvolver um farm é usar uma estrutura CSS
existente. Alguns desses, como o
Bootstrap, por exemplo, exigem que você adicione
elementos e classes de contêiner aos seus elementos HTML para
que os estilos sejam aplicados. No entanto, uma
maneira ainda mais rápida de estilizar o farm, que você
possa se concentrar
na para que você
possa se concentrar
na funcionalidade é
usar algum CSS sem classe. Há muitos
deles disponíveis, e você pode usá-los simplesmente incluindo o
arquivo CSS no HTML. Nesta classe,
vamos usar CSS de água. Você pode baixar o CSS
e servi-lo localmente. Vou incluir a folha de estilo
diretamente de uma CDN, que é o que faremos. Copiaremos essa linha de código e a colaremos dentro do elemento
head do nosso HTML. Agora, no navegador, o farm tem um estilo agradável sem que tenhamos
que adicionar nenhuma classe, incluindo destacar quando o controle de entrada tem o foco.
7. Adicione um controle para selecionar um valor usando uma lista suspensa: Com controles de texto, o usuário pode inserir
qualquer valor que desejar. Vamos adicionar um controle
onde o usuário pode escolher de uma
lista predefinida de valores. Para obter uma lista de valores, usamos um elemento select. Cada opção dentro da
lista é um elemento de opção. Vamos adicionar três opções para
a prioridade do ticket, baixa, normal e alta. Antes de visualizarmos isso, vamos adicionar um rótulo associado. O navegador. O elemento select é mostrado como uma lista suspensa na qual você pode escolher uma das opções
fornecidas. Se eu recarregar a página novamente, mantendo
pressionada a tecla Shift esquerda
no teclado para redefinir o farm. Observe que quando a
página é carregada pela primeira vez, a primeira opção é
selecionada por padrão. Você pode alterar esse
padrão adicionando o
atributo selecionado à opção relevante. Por exemplo, vamos
adicioná-lo à opção normal. Agora no navegador. A segunda opção é
selecionada por padrão. Portanto, se isso não for alterado, esse é o valor que será enviado quando o formulário for enviado. Você pode ter quantas opções
na lista de seleção quiser, pois a lista aparecerá com barras de
rolagem se for muito
longa para a tela.
8. Adicione controles para selecionar um valor a partir de um intervalo de opções: Com o controle de seleção, a lista de opções só
é mostrada em uma lista suspensa quando você
clica no controle. Isso permite que você tenha muitos itens nesta lista,
se precisar. Por exemplo, uma
lista de países. Se você tiver um pequeno número de opções e quiser que elas estejam sempre visíveis
na fazenda. Então, uma alternativa a isso
é usar botões de opção. O botão de opção é um
elemento de entrada com o rádio de tipo. Para adicionar um rótulo a isso. Em vez de adicionar isso
como um elemento separado, vamos colocar a entrada
dentro do rótulo. Usará esse controle para especificar a categoria
do ticket. Então, vamos adicionar um rótulo
com o texto de falha. Essa é uma forma alternativa de associar um rótulo
a um controle. A vantagem disso é que você
não precisa de um atributo ID
no controle e de quatro
atributos no rótulo. Vamos adicionar outras entradas de rádio logo após esta com um rótulo de sugestão. O navegador. Existem os dois botões de opção. E para selecioná-los,
você pode clicar
no botão de opção
em si ou no texto. Observe como, uma vez
selecionados, você não pode desmarcá-los. Para transformá-los em um grupo de controles onde você só
pode selecionar um. Adicionamos o
atributo name a ambos os elementos de entrada, especificando o mesmo
valor para cada um. Agora, no navegador, quando selecionamos uma opção, as outras estão selecionadas. Em um grupo de
botões de opção como este, apenas uma opção pode
ser selecionada de uma só vez. Se eu recarregar a página novamente, observe que não há
opção selecionada por padrão. Para selecionar uma opção por padrão, adicionamos o
atributo verificado a um dos elementos de entrada. Agora, quando o farm é
exibido pela primeira vez, essa opção já está selecionada. Para adicionar um rótulo a esse
grupo de controles. Não podemos usar
elementos de rótulo , pois estamos usando
um para cada opção. Em vez disso, nós os colocamos
em um conjunto de campos elementos. Em seguida, adicione um
elemento de legenda logo após a tag de conjunto de campos de abertura
contendo o texto que
queremos exibir como
legenda para esse grupo de controles. O navegador. Isso envolve os
controles com uma linha com o texto do
elemento legenda mostrado na parte superior. Finalmente, por padrão, as
entradas de rádio são mostradas em linha, neste caso sendo mostradas
próximas umas das outras horizontalmente. Para exibir cada
um em uma linha separada. Uma maneira simples de fazer isso é
adicionar um
elemento de quebra de linha entre eles. Agora, no navegador, as opções são
mostradas verticalmente. Com uma lista de seleção. Você pode ter quantas
opções quiser, mas os botões de opção são
mais adequados para um número limitado de opções, pois sempre
visíveis no farm.
9. Adicione um controle para escolher entre duas opções de exclusividade: Em seguida, vamos adicionar um controle
de caixa de seleção que nos
permite selecionar entre duas opções
mutuamente exclusivas. Em outras palavras, sim ou não, ligado ou desligado e assim por diante. A caixa de seleção é um elemento de entrada
com um tipo de caixa de seleção. Para adicionar um rótulo a isso, vamos fazê-lo da mesma forma que fizemos com
os botões de opção e fechando as entradas e
o texto rotulado dentro de
um elemento de rótulo. Vamos adicionar uma caixa de seleção que o usuário precisa
selecionar para concordar com alguns termos e
condições. O navegador. Há a caixa de seleção. Podemos marcar e
desmarcá-lo clicando
na caixa em si, estão no texto do rótulo. Você pode ter quantas caixas de seleção
em uma fazenda quiser. E você pode colocá-los
dentro de um conjunto de campo como fizemos com os
controles de rádio. Se você precisar. Várias caixas de seleção
podem ser usadas para um valor em que você pode selecionar
mais de uma opção.
10. Adicione um botão e atributos para enviar os dados do formulário ao servidor: Agora podemos inserir alguns
dados no farm. Precisamos de uma maneira de enviar esses
dados para o servidor web. Primeiro, vamos adicionar um botão
ao final do farm. Adicionará um elemento de botão
com o conteúdo entre as tags de abertura e fechamento sendo o que é
mostrado no botão. Vou deixar algum texto básico, mas você pode colocar outras
tags aqui, se quiser. Também colocarei um elemento de quebra de
linha antes disso para
que o botão esteja em uma nova linha. No navegador. Aí está o botão.
Se eu pressioná-lo, chamado de
envio da fazenda, a fazenda será reexibida. O que aconteceu é que o formulário foi enviado a si mesmo. Em outras palavras, uma solicitação
foi feita para o mesmo URL que o farm com os dados
do farm anexados
à solicitação. O que mudou é o URL
na barra de endereços do navegador. A string de consulta foi adicionada com um par de valor chave de
categoria igual a. Se olharmos para as
várias entradas, observe que
as únicas com
atributos de nome são os botões de opção da
categoria. Somente entradas que têm
um atributo name
terão seu senso de valor quando
o formulário for enviado. Para demonstrar isso, vamos
adicionar atributos de nome à primeira entrada
com um valor de nome. Se recarregarmos a fazenda e
enviá-la novamente. Agora, a string de consulta contém um valor adicional
para o nome. Se eu inserir um valor na entrada de
nome e enviá-lo, esse valor será incluído
na string de consulta. Vamos fazer o mesmo para
as outras entradas. Adicionando atributos de nome
à caixa de seleção e-mail, descrição, prioridade e
termos e condições. Agora, se enviarmos o farm, veremos os valores
na string de consulta para
todos os campos. Se eu inserir um valor
para um desses, esse valor será
o que é enviado.
11. Adicione um arquivo para processar os dados do formulário enviado e altere como ele é enviado: Atualmente, quando
enviamos o farm, uma solicitação é feita para a
mesma página e os dados
do farm são enviados
na string de consulta de URL. Esse é o padrão
e pode ser usado se você adicionar algum código antes do
HTML para processar os dados. No entanto, processará os
dados do farm em um arquivo diferente. Primeiro, vamos adicionar um novo arquivo
chamado processo farm dot PHP. De volta à fazenda. Para fazer com que esse farm
envie dados para esse novo arquivo, adicionamos um atributo de ação à tag de formulário que contém o
URL para o local desejado. Como esse arquivo está
na mesma pasta, podemos simplesmente colocar o nome
do arquivo, o novo arquivo. Vamos adicionar a tag de abertura do PHP. Os dados da string de
consulta estão disponíveis no
cat super global. Vamos apenas imprimir isso. Agora, se eu inserir alguns dados
no formulário e enviá-los, o script PHP do farm de processos será solicitado com os dados
ainda na string de consulta. O corpo da resposta, vemos o conteúdo
da matriz GET. Cada chave de matriz vem
do atributo name de
cada entrada no HTML, e seu valor é o que
foi inserido no farm. Ter os dados na string de
consulta como essa é bom se o formulário for
um mecanismo de pesquisa, por exemplo, pois é o tipo de URL que você pode
compartilhar nosso marcador. Se você quiser fazer
algo com esses dados, como salvá-los em um banco de dados, não queremos
isso na URL. Isso ocorre porque
há um limite para a quantidade de dados que podem ser
passados no URL. Além disso, é um risco à segurança. Pode haver dados
confidenciais aqui, e esses URLs são salvos
no histórico de URL do navegador. Os dados do
farm podem ser facilmente
visualizados por qualquer pessoa com
acesso ao navegador. Em vez disso, enviaremos esses
dados usando o método post. Para fazer isso, adicionamos
um
atributo de método à tag farm com
um valor de post. Você pode especificar chegar aqui, que é o padrão que
estamos usando até agora. Agora, quando os dados forem
enviados para o script, eles estarão disponíveis
no post super global. Vamos imprimir isso em vez disso. Agora, quando inserimos alguns
dados e os
enviamos, ainda vemos os mesmos dados
no corpo da resposta. Mas agora os valores não são
mostrados na string de consulta.
12. Altere os valores enviados de seleção, rádio e caixa de verificação: Vamos dar uma olhada nos valores que estão sendo enviados
do farm. A prioridade é um controle de seleção exibido como uma lista suspensa. O valor enviado quando o farm é enviado é o texto
da opção selecionada. Você pode fazer isso se quiser. Mas é comum
dar a cada opção um valor diferente usando
o atributo value. Vamos atribuir a cada opção um valor numérico
de um a três. Agora, quando enviamos o formulário, o valor
enviado é
o que o atributo value contém
para a opção selecionada. Isso é útil se
você quiser armazenar um valor diferente apenas um rótulo de texto para
nossos campos como este. Também é útil, por exemplo, se você estiver exibindo
seu conteúdo em mais de um idioma. Portanto, os textos rotulados
podem ser diferentes, mas os
valores subjacentes são os mesmos. Vamos também dar uma olhada nos controles de rádio
da categoria. Não importa qual eu escolha. O valor enviado é
sempre a string ativada. Isso ocorre porque esse é o valor padrão para entradas
de tipo de rádio, para que os botões de opção enviem um valor diferente,
dependendo de qual delas está selecionada. Precisamos dar a cada um um valor usando o atributo
value. Esses valores podem ser
o que você quiser. Eles não precisam
corresponder ao texto como acabamos de fazer acima com
o controle de seleção. Em vez de números, desta vez, usarei apenas
algumas strings simples. Agora, quando escolhemos
o botão de opção, esse é o valor
enviado. Em seguida, vamos dar uma
olhada na caixa de seleção. Se eu não verificar, nenhum valor será enviado
para esse controle. Se eu verificar,
então o valor será a string ativada. Você pode adicionar um valor a isso da mesma forma que
com outras entradas, adicionando atributos de valor. Vamos adicionar um valor de um. Agora, se eu marcar a caixa de seleção
e enviar o farm, esse é o valor enviado. Se você quiser saber apenas se
a caixa está marcada ou não, o
valor padrão é suficiente. Para nossos propósitos,
vamos removê-lo. Se você tiver várias
caixas de seleção e quiser saber
quais estão marcadas, poderá dar a cada uma
um valor separado.
13. Evite erros se um valor não fizer parte dos dados de formulário: Agora temos os valores
que queremos vindo da fazenda. Podemos obter os valores
específicos nos scripts PHP prontos para eventualmente
inserirmos em um banco de dados. Como vimos, os valores
do farm estarão
no post array. Em vez de
imprimir toda a matriz, vamos atribuir o valor para a entrada de nome
a uma variável e,
em seguida, imprima isso. Se eu inserir um valor para
o nome e
enviá-lo , esse é o valor. Vamos ver o que
acontece se eu alterar esse índice para um valor que
não faz parte do farm. Por exemplo, sobrenome. Agora, se eu enviar o farm, obteremos um erro do Reiki indefinido
. Embora não
recebamos esse erro. Se uma entrada com esse
nome fizer parte do farm, ainda
precisamos verificar
se esses valores existem
na pós-pesquisa ou não
antes de tentarmos usá-los. Isso ocorre porque a fazenda
poderia ser facilmente ignorada. Veremos um exemplo
disso mais tarde. Uma maneira de verificar
isso seria usar uma função como um
Reiki existe junto com o
operador ternário para definir a
variável name para saber se o
valor não está na matriz. Outra maneira mais curta seria
usar o operador de coalesce nulo, que faz a mesma coisa. Outra alternativa é usar
a função de entrada do filtro. Esta função
obterá um valor
da entrada especificada e simplesmente retornará null se não estiver presente. Vamos chamar essa função especificando que queremos obter o valor das entradas do post, o nome do valor que
queremos obter. Vamos tentar isso primeiro
com um nome que não faz parte do sobrenome da fazenda. Quando enviamos a fazenda. Agora ficamos nulos
em vez de um erro. Se mudarmos isso para nome, que faz parte do farm, obteremos o valor
das entradas.
14. Aplique um filtro aos valores de formulário, validando o tipo e alcance de dados: Além de retornar
o valor
da entrada e apenas retornar
null se ele não estiver presente. A função de entrada do filtro
nos permite aplicar um filtro
ao valor. Isso significa que, longe, a entrada de
e-mail, por exemplo, podemos aplicar um filtro
para validar se o valor é um endereço de
e-mail válido. Vamos chamar a função
de entrada do filtro novamente, desta vez para a
entrada de e-mail do farm. O terceiro argumento
especificará o filtro de
e-mail de validação. Em vez de
imprimir a variável name, imprimiremos a variável de
e-mail. Se eu enviar o formulário com um
endereço de e-mail vazio, ficaremos falso. Se eu enviar um endereço de
e-mail válido
, obteremos esse
valor como uma string. Se eu inserir um endereço de
e-mail inválido, o navegador valida
o campo e solicitará um endereço de e-mail válido sem
que o formulário seja enviado. Analisaremos a validação
do lado do cliente no navegador em breve. Mas, por enquanto, vamos
desabilitar isso adicionando o atributo novalidate
ao elemento de formulário no HTML. Agora, se eu inserir um endereço de e-mail
inválido e enviar o farm, obteremos booleano false. Mais uma vez. Só obtemos o endereço de e-mail como uma
string se for válido. Caso contrário, ficamos falsos. Alguns filtros têm opções para executar
validação adicional. Por exemplo, o filtro de
validação de número inteiro. Além de validar que um valor é um inteiro válido, podemos especificar um
intervalo de valores. Um valor que é um número inteiro válido, mas fora desse
intervalo retornará false. O valor para o campo de
prioridade em nosso farm é um
inteiro 12 ou três. Vamos adicionar outra chamada à função de entrada de filtro
para o campo de prioridade, especificando o filtro de
validação de inteiro. No próximo argumento, especificamos que as opções
para este filtro
especificarão um mínimo de um
e um máximo de três. Em seguida, em vez de
imprimir a variável de e-mail, imprimirá a
variável de prioridade que acabamos de adicionar. Quando eu envio o farm com o valor padrão
para nossa prioridade, obtemos um valor inteiro de dois. Para outras prioridades, obtemos o valor
inteiro equivalente. Observe que todos os valores
provenientes do farm serão strings, mas essa função converterá esses dois inteiros, se for válida. Teste a validação do intervalo. Vamos mudar temporariamente
o máximo para dois. Agora, se enviarmos o farm com um valor de prioridade que
corresponde a três, obteremos falso booleano. O valor ainda
será um número inteiro válido, mas não está dentro do
intervalo que especificamos. Vamos mudar isso de volta para três, então ele aceita todos os
valores da lista.
15. Filtre a entrada da caixa de verificação e filtre os valores em uma matriz: Em seguida, vamos dar uma olhada no valor
da caixa de seleção. Como vimos anteriormente. A caixa de seleção não está marcada. Nenhum valor é enviado. Se estiver marcada, o valor padrão
é a string ativada. Vamos chamar a função de
entrada do filtro novamente, obtendo esse valor. Como tudo o que queremos saber para isso é se estiver verificado ou não. Em outras palavras, não estamos
interessados no valor. Para isso. Usaremos o filtro de validação
booleana. Isso retornará true se
a caixa de seleção estiver marcada. Em seguida, em vez de
imprimir a variável de prioridade, imprimirá os
termos um. Se enviarmos o formulário
sem marcar
a caixa de seleção, não obteremos. Se marcarmos a caixa de seleção, obteremos booleano true. Agora estamos recebendo valores
filtrados para a maioria das
entradas no farm. O único está faltando a
descrição e a categoria. Vamos adicionar chamadas à função
de entrada de filtro
para a descrição. E uma categoria mais distante, não especificando nenhum filtro,
pois são strings, assim como o nome. Agora temos uma variável para cada campo de farm que
contém os dados que estavam nesse campo
quando o farm foi enviado pronto para processamento
posterior. Essa é uma maneira de fazer isso com várias chamadas para a função de entrada do
filtro. Existe uma
maneira alternativa de fazer isso usando a função de matriz
de entrada de filtro. Isso permite filtrar
várias entradas de farm de uma só vez e obter uma matriz
dos dados filtrados em vez
de variáveis separadas. Vamos chamar o filtro na onda de
retrato filtrando os pós-dados
do farm. Para o segundo argumento, passamos em uma matriz com um elemento para cada
campo de farm que queremos filtrar. Se não estivermos especificando
um tipo de filtro, podemos definir o valor como nulo
para o sinalizador de filtro padrão. Para entradas em que estamos
especificando um filtro, definimos o valor dos elementos
da matriz para
a constante de filtro. E se o filtro tiver opções
como o campo de prioridade, passamos em uma matriz definindo
os valores como este. Isso retorna uma matriz de dados
para os valores de farm especificados. Se imprimirmos isso em vez
da variável termos. Quando enviamos o farm, obtemos uma matriz contendo os valores filtrados
do farm. Os filtros foram aplicados como com as variáveis
individuais. Mas agora temos uma
variável de matriz contendo todos os valores em vez de uma variável para cada valor firme. Cabe a você qual método você usa ao filtrar dados de entrada. Se você preferir
variáveis individuais ou uma matriz.
16. Valeta os dados do formulário e faça uma mensagem de validação se for inválida: Agora temos os
dados do farm, podemos validá-los. Vou trabalhar com
uma matriz de dados, mas você pode trabalhar com
variáveis individuais, se preferir. Vou comentar essas variáveis lá
fora no código-fonte
para download. Queremos validar esses valores antes de tentarmos salvá-los
no banco de dados para que os dados no banco de dados
sejam sempre válidos. Vamos começar
validando o nome. Se um valor tiver sido inserido no campo nome do farm, ele
será considerado válido. Se o campo
for deixado vazio, essa será
uma string vazia. Se o valor não fizer parte dos dados
do farm, a função de
filtro acima
retornará null ou uma string vazia ou null são valores inválidos. Poderíamos comparar o
valor disso com uma string vazia e nula
usando um operador de comparação. Mas a função vazia
retornará true. Se for qualquer um desses. Se o valor estiver vazio, ele
será inválido. Para mantê-lo simples. Se for inválido, ele sairá do script usando impressão de
tinta para a mensagem
adequada. É improvável que essa validação
seja vista de qualquer maneira, se tivermos
validação do lado do cliente no navegador, que será adicionado em breve. Vamos tentar isso. Se eu enviar um farm sem colocar nada
no campo de nome, receberemos a mensagem dizendo
que o nome é obrigatório. Se eu inserir um valor, obteremos a matriz de
valores impressa como antes. Vamos fazer o mesmo
para o campo de e-mail. Se isso não estiver presente,
será não. Se não for um e-mail válido, ele será falso. E, caso contrário,
será o valor da string. A função
vazia também retornará true. Se o valor for falso, podemos usá-lo de novo e novo sairá do script
com uma mensagem adequada. Agora, se eu enviar o farm com um nome válido, mas um endereço de e-mail
vazio, obteremos a mensagem de
validação de e-mail. Se eu inserir um valor
no campo de e-mail, mas não for um e-mail válido. Em seguida, recebemos a mesma mensagem. Se eu inserir um e-mail válido
, obteremos os dados. Da mesma forma que podemos validar a descrição, a prioridade e a categoria. A categoria. Além de validar
que ele está presente, também
podemos validar seu valor. A categoria
será uma string que vem
dos valores dos botões de opção, seja falha ou sugestão. Apenas no caso de a
fazenda ser ignorada. Precisamos verificar se o
valor é uma das cadeias de caracteres. A maneira mais simples de
fazer isso é
usar a função de matriz interna, verificando
se o valor
do farm é um desses valores. Se não for, sairemos
do script com uma mensagem. Para testar isso, vamos
remover temporariamente o
item de falha da matriz. Agora, se enviarmos o farm com a
categoria padrão selecionada, obteremos que a categoria
é uma mensagem inválida. Se selecionarmos a outra categoria, ela passará a validação
e veremos os dados. Agora nós testamos
que isso funciona. Podemos adicionar a
categoria de falha novamente. Finalmente, podemos verificar se a
caixa de seleção foi marcada. O filtro definirá
o valor dos termos como booleano true
se estiver sendo verificado. Caso contrário, será não. Vamos verificar com isso. E se não for verdade, interromperá o script
e emitirá uma mensagem. Se eu enviar o farm sem
marcar a caixa de seleção, receberemos a mensagem. Se eu verificar, a validação será
aprovada e poderemos ver os dados
válidos impressos.
17. Valeta o formulário usando a validação do cliente no navegador: Atualmente, estamos validando
os dados no servidor, imprimindo
mensagens de validação conforme necessário. entanto, podemos impedir uma solicitação
ao servidor validando o farm
no navegador primeiro. Isso também é mais fácil de usar, pois dá ao usuário
a chance corrigir o farm nos locais
onde os dados são inválidos antes de serem enviados.
Anteriormente. Na fazenda. Adicionamos o atributo novalidate
ao farm para
desativar temporariamente a validação. Podemos remover isso agora. Em seguida, vamos adicionar o atributo
obrigatório aos campos obrigatórios. Nome, e-mail,
descrição e termos. Como a lista de
seleção maior prioridade. E os botões de opção para a categoria têm valores
padrão. Não precisamos adicionar o atributo
necessário a eles. O navegador. Agora, se
tentarmos enviar um farm vazio, chegaremos à mensagem de validação para cada campo
obrigatório vazio. Qual é a pequena
mensagem de validação ao lado de cada campo. E o foco é colocado
no campo que
precisa ser alterado. Até onde o endereço de e-mail,
este é um tipo de entrada de e-mail. Também chegamos à mensagem de
validação se o valor não for um endereço de e-mail
válido. Para a caixa de seleção. Marcar isso conforme necessário
requer que
o usuário verifique isso antes que o
farm possa ser enviado. Se eu verificar,
poderemos enviar o farm e veremos
os dados impressos. Agora você pode estar pensando que se estivermos validando
no navegador, não precisamos validar
no script PHP no servidor. Adicionamos validação
no navegador porque ele
torna a experiência do usuário muito mais agradável e reduz o número de solicitações
que fazemos ao servidor. No entanto, ele pode ser
facilmente ignorado. Uma maneira de fazer isso, por exemplo, é enviar uma solicitação de post para o
script PHP farm de processos usando curl. Curl é uma ferramenta de linha de comando
para fazer solicitações HTTP. Então, vamos usar curl especificando
o método de solicitação como post. E adicionaremos alguns valores
estrangeiros que
adicionamos assim. Enviaremos essa
solicitação para o processo a partir do script PHP em nosso servidor. Recebemos que a
descrição da resposta é necessária. Esta é a mensagem da validação
do lado do servidor porque enviamos um valor para
o nome e o e-mail, mas não uma descrição mais distante. Existem outras maneiras de
cultivar podem ser manipuladas usando as Ferramentas do Desenvolvedor
no navegador, por exemplo. Basicamente, a
validação do lado do cliente é recomendada. Mas a validação do
lado do servidor é essencial mesmo que o
usuário nunca a veja,
porque os dados já são válidos no momento em que o
formulário é enviado. código que processa dados do
farm
sempre deve validar esses
dados no servidor.
18. Crie um banco de dados para armazenar os dados do formulário: Agora temos os dados
do farm e eles
foram validados. Podemos inserir esses dados em
um banco de dados no servidor. Farei isso
no servidor de banco de dados MariaDB que instalei localmente, o que para todos os
propósitos é o mesmo comando
MySQL mostrado é
válido para qualquer DBMS. Você terá uma
configuração semelhante se tiver instalado o software sugerido
no início da aula. Embora sinta-se à vontade para usar qualquer
banco de dados relacional que você gosta. Farei isso
na linha de comando. Mas se você preferir, você pode usar seu GAVI de sua escolha, como PHP, meu administrador
ou MySQL Workbench. Vamos começar conectando-se
ao servidor de banco de dados na linha de comando
usando a conta raiz. Em seguida, criaremos
um novo banco de dados, que chamarei de suporte dB. Em seguida, criaremos um usuário apenas para acessar
esse banco de dados. Portanto, não precisamos fazer isso
usando a conta raiz. O usuário terá privilégios totais
em todas as tabelas
no novo banco de dados chamado usuário
do banco de dados de suporte ao usuário. Está no servidor host local. E atribuiremos uma senha
aleatória. Você precisa anotar
essa senha para quando nos
conectarmos ao banco de dados
mais tarde a partir do PHP. Para verificar se isso funciona, podemos sair do console e reconectar usando o usuário e a
senha que acabamos de criar. Em seguida, podemos selecionar
o banco de dados com os EUA. E isso o seleciona
sem problemas.
19. Crie uma tabela no banco de dados para armazenar registros de bilhetes: Agora podemos adicionar uma tabela ao banco
de dados para
armazenar dados do ticket. Vamos criar uma tabela chamada ticket com as
seguintes colunas. Uma coluna ID que é um
número inteiro, não pode ser nula. E definiremos isso para incremento automático para atribuir
valores automaticamente. Em seguida, uma coluna de nome ,
que é
um varchar de 128 caracteres
que não pode ser conhecido. Em seguida, uma coluna para o e-mail, que também é um voucher de 128
caracteres que não pode ser nulo. Em seguida, uma coluna de descrição, que é texto e
também não pode ser nula. Próxima coluna, prioridade adicional, que é um número inteiro não nulo. E, finalmente, uma coluna
chamada categoria, que é um var char de 32
caracteres, que também é count be não. Antes de fecharmos, os
parênteses
farão da coluna ID
a chave primária. Vamos executar isso. Isso funcionou sem erros. Vamos dar uma olhada na
tabela que acabamos de criar. E lá está ele. Como mencionado anteriormente. Você pode fazer isso em uma
GUI como PHP, meu administrador, se você preferir que este
SQL crie, esta tabela estará disponível
nas classes
código-fonte para download.
20. Conecte a base de dados do PHP: Agora temos o banco de dados
e a tabela que
podemos conectar ao
banco de dados a partir do PHP. Não precisamos mais
imprimir os dados do farm. Podemos remover essa linha do script
de farm de processos. Primeiro, vamos criar
algumas variáveis para conter os detalhes da conexão
para o servidor de banco de dados. O host é o mesmo que
o host local do servidor web. O nome do banco de dados que
acabamos de criar é o suporte DB. E criaremos mais
duas variáveis para o nome de usuário e
senha que acabamos criar para se conectar
ao banco de dados. Chamamos a função MySQL I
connect, transmitindo o host, nome de usuário, senha
e nome do banco de dados. Essas variáveis
precisam estar nessa ordem, e é um erro comum colocá-las na ordem errada. Se preferir, você pode
usar argumentos
nomeados prefixando cada valor com
o nome do argumento. Se você fizer isso, não
importa em qual ordem eles estão. Isso retorna um objeto que representa a conexão com
o banco de dados. Então, atribuiremos
isso a uma variável. Antes de podermos usar essa conexão
de banco de dados, precisamos nos certificar de que
nos conectamos, ok. A função de número de
erro de conexão do MySQL retorna um código de erro das tentativas de
conexão mais recentes. Se não houve erro, esse retorno 00 equivale
a bilhões de falsos. Podemos verificar com
isso simplesmente usando isso como condição
para uma instrução if. Se ocorrer um
erro de conexão, interromperemos o script como
acima e imprimiremos uma mensagem. Podemos obter uma descrição
do erro
chamando o MySQL
connect nossa função. Se um erro não tiver ocorrido. Por enquanto, vamos imprimir uma mensagem dizendo que a
conexão foi bem-sucedida. Vamos tentar isso. Se eu inserir dados válidos
no formulário e enviá-los, obteremos a mensagem
bem-sucedida da conexão. Vamos ver o que acontece se eu conseguir um dos
detalhes da conexão errado. Por exemplo, vamos
alterar a senha. Agora, se eu enviar o formulário, recebemos a mensagem de
erro de conexão especificamente o acesso negado. Isso é o que acontece se as
credenciais estiverem incorretas. Vamos mudar isso de volta. Os detalhes estão corretos novamente. Depois de nos conectarmos, podemos usar essa conexão para
fazer consultas ao banco de dados, como veremos em breve. Depois de terminarmos com ele, podemos opcionalmente nos desconectar
do banco de dados usando a função lie
close do MySQL, passando a
conexão do banco de dados como um argumento. Esta etapa é totalmente opcional, pois quando chegamos ao
final da solicitação, a conexão
do banco de dados é
fechada automaticamente de qualquer maneira. Você pode incluí-lo
, se preferir.
21. Insere um novo registro no banco de dados do PHP: Depois de nos
conectarmos com sucesso ao banco de dados, podemos inserir um novo registro. Para inserir um novo registro,
usará uma instrução de inserção SQL. Aqui no banco de dados. Se dermos uma
olhada na estrutura
da tabela de tickets que
criamos, podemos ver que a coluna ID
é um campo de incremento automático,
portanto, não precisamos
fornecer um valor para isso. O valor será atribuído
automaticamente. Todas as outras colunas
não permitem valores nulos. Precisamos fornecer valores
não nulos. Pai. Quando
inserimos um novo registro, vamos inserir um novo
registro diretamente aqui para que possamos ver
o SQL que precisamos. Como antes. Você pode fazer
isso em uma GUI como PHP, meu administrador, se preferir. Primeiro, vamos selecionar todas as
linhas da tabela de tickets. E podemos ver que a
tabela está vazia no momento. Insira um registro. Usamos a instrução insert into especificando o nome da
tabela, que é ticket. Entre parênteses, uma lista
das colunas nas quais vamos
inserir valores. Como acabei de mencionar, não
precisamos
especificar a coluna ID pois um valor para isso
será atribuído automaticamente. Em seguida, adicionamos a palavra-chave values, seguida
de uma lista dos valores
que queremos inserir entre parênteses. Vou colocar alguns valores de
exemplo. Observe que os valores de string
precisam ser colocados entre aspas
simples e valores numéricos como a coluna de prioridade não. Quando executamos isso, recebemos uma mensagem dizendo que estava tudo bem e um registro
foi inserido. E se selecionarmos
todas as linhas novamente, veremos o registro na tabela, incluindo
o valor atribuído automaticamente à coluna ID. Agora podemos fazer o mesmo a partir do PHP. Primeiro, vamos remover
essas duas últimas linhas. Em seguida, vamos criar uma variável
que conterá o SQL. A primeira parte da instrução
insert onde
especificamos as colunas e
a palavra-chave values. Agora precisamos incluir
os valores
do farm que estão
na matriz de dados. Existem várias maneiras de
construir a string SQL. Por exemplo,
interpolação de variáveis, concatenação de
string e assim por diante. Vamos com a
concatenação de cordas. Concatenaremos cada
valor com o próximo, separando-os com vírgulas. No final, fecharemos
os parênteses. Não vamos esquecer que precisamos
cercar valores de string
com aspas simples. Adicionaremos isso
aos valores de string, que são todos esses,
exceto a prioridade. Antes de executarmos isso, vamos imprimir a string SQL
para ver o que ela contém. Se eu enviar alguns dados válidos, há a string SQL. Em vez de imprimir
isso, vamos executá-lo. Para executar esse SQL, usaremos a função de
consulta MySQL, passando o objeto de conexão e a string SQL como argumentos. Se isso falhar, ele
retorna falso booleano. Então, vamos verificar isso. E se ele falhar, interromperemos o
script com uma mensagem. Podemos obter uma descrição
da mensagem de erro usando a função de erro do MySQL passando no objeto de
conexão. Se for bem-sucedido, por enquanto, vamos apenas imprimir uma mensagem. Vamos tentar isso. Se eu enviar alguns dados válidos, obteremos a mensagem de registros
salvos. A tabela de tickets
no banco de dados. Há o novo registro
que acabamos de inserir. Os dados desse registro na tabela
do banco de dados vieram
do farm no navegador. Não vou demonstrar o que acontece quando isso
falhar ainda. Como vamos cobrir isso em breve. No entanto, há um grande
problema de segurança com esse código, que veremos
no próximo vídeo.
22. Escape de caracteres manualmente para evitar um ataque de injeção SQL: Acabamos de ver como isso funciona. Se eu apenas inserir
valores simples no farm, um novo registro será
inserido no banco de dados. No entanto, vamos ver
o que acontece se eu inserir um valor que
contenha uma única aspas. Por exemplo, um sobrenome
como O'Connor. Quando eu envio o farm, nos disseram que há
um erro no SQL. Vamos imprimir temporariamente
a string SQL completa para
ver o que ela contém. Agora, quando executamos o código, há a string SQL. O problema está aqui. Quando construímos
a string SQL, cercamos cada
valor de string com aspas simples. No entanto, como esse valor
inclui aspas únicas, o banco de dados coisas que
a string termina aqui. Seguindo a string, ele espera uma vírgula e
o próximo valor. No entanto, o resto do
nome está lá. Tornando esse SQL inválido. Na melhor das hipóteses, tudo
o que acontecerá com isso é que o SQL é inválido. O usuário verá uma
mensagem de erro e o registro. O que ele seria inserido? Na pior das hipóteses, isso
poderia ser usado para injetar algum SQL
na string SQL, conhecida como ataque de
injeção SQL. Um invasor poderia colocar algum
SQL nas entradas do formulário, começando com uma única
cotação que poderia excluir alguns valores ou até mesmo recuperar a senha
do administrador do banco de dados. Para evitar isso, precisamos
escapar de aspas simples dentro valores de
string
prefixando-os com um caractere de barra invertida. Você pode fazer isso manualmente
usando a
função de substituição de string, por exemplo. Mas há uma maneira melhor. A função de
string de escape real do MySQL
escapará de quaisquer caracteres especiais para uso em uma instrução SQL. Além disso, levando em consideração
o
caractere configurando a
conexão do banco de dados. Vamos chamar essa função para cada valor que estamos
inserindo no SQL,
passando o objeto de conexão
como o primeiro argumento a cada vez. Embora a prioridade
não seja uma string, vou chamá-la de longe desse valor também. Só para
ter certeza absoluta de que não estamos inserindo um valor não confiável no
SQL sem escapá-lo. Agora, se enviarmos o farm, podemos dizer que a cotação
única foi escapada por ser prefixada
com uma barra invertida. Vamos remover a linha onde
estamos imprimindo o SQL. Atualize a página no navegador. Agora recebemos a
mensagem salva do registro no banco de dados. Há o registro que acabamos inserir contendo o valor de
aspas simples. Observe que ele não é
escapado no banco de dados. O valor que existe como
foi digitado na fazenda. Além disso, note que quando
recebemos um erro de banco de dados, é mais comum ter uma página de erro bem
formatada em vez de apenas a mensagem de
erro como esta. E em um aplicativo de produção, isso é algo que ele faria. Para os propósitos
desta classe, vamos simplesmente mantê-la
simples, assim.
23. Use uma declaração preparada para inserir um novo registro: Acabamos de aprender uma maneira de
evitar ataques de injeção de SQL. E isso é para escapar de quaisquer caracteres
especiais em valores
não confiáveis quando
criamos o SQL. No entanto, o problema
com a criação uma string SQL como essa
é que ela leva a código difícil de
entender e, portanto,
difícil de depurar e manter. Também é muito fácil
esquecer de escapar um novo valor se adicionarmos uma
nova coluna, por exemplo. Uma maneira alternativa de fazer
isso que ainda evita ataques de injeção
SQL é
usar uma instrução preparada. Vamos começar alterando o SQL. Removerá todo esse código onde estamos inserindo os
valores manualmente. E, em vez disso, para cada valor, vamos colocar um ponto de interrogação. Isso é conhecido como espaço reservado. Observe que não precisamos colocar aspas em torno dos valores de string, apenas um ponto de interrogação para
onde o valor irá. Não vamos executar isso
com o método de consulta MySQL. Também podemos remover isso. Em vez disso, chamamos a função init da
instrução MySQL, passando a conexão como um argumento para criar objetos de instrução
preparados. Em seguida, chamamos a função de
instrução MySQL por par, passando esse objeto
e a string SQL. Isso retorna um valor de
sucesso booleano. Vamos verificar
se isso é falso. E, em caso afirmativo, interromperá o script imprimindo a mensagem de
erro como acima. É nesse ponto que quaisquer erros de sintaxe
no SQL serão capturados. Em seguida, conectamos valores
aos espaços reservados individuais
na string SQL, que é conhecida como vinculação. Para fazer isso, chamamos a função de
parâmetro bind de instrução
MySQL. Quando vinculamos valores
aos espaços reservados, especificamos um tipo para cada variável usando uma string
de caracteres individuais, onde cada caractere corresponde
a uma das variáveis. Os personagens que podemos usar. Ai para valores inteiros,
os quatro valores duplos, como para strings e B para blobs. Vamos chamar a
função passando a variável de instrução
como o primeiro parâmetro. O segundo parâmetro é
a cadeia de tipos. Portanto, neste caso, seria um S para o
nome, pois é uma string, seguida de outro
s para o e-mail, outro para a descrição. Um olho para a prioridade
, pois este é um número inteiro. E, finalmente, outro
S para a categoria. O restante dos parâmetros são os valores dessas variáveis. O nome, e-mail, descrição, prioridade e categoria
do array de dados. O número de parâmetros deve
corresponder ao número de
caracteres na string. Caso contrário, uma exceção
será lançada. Uma vez que tenhamos feito isso. Para executá-lo, chamamos
as instruções MySQL execute função passando o objeto de instrução
como um argumento. Observe que, ao contrário de anteriormente, não é possível obter
o SQL que será gerado e
imprimi-lo no código PHP. Isso ocorre porque a
vinculação das variáveis acontece no servidor de banco de dados
e não no servidor web. Vamos tentar isso. Se eu incluir alguns valores
no farm que contenham caracteres de
aspas simples. Quando eu envio o farm, vemos a
mensagem de registros salvos no banco de dados. Há o novo registro contendo os valores
do farm. É um pouco mais
complexo executar uma instrução SQL usando
uma instrução preparada. Mas o SQL em si é muito mais claro e
, portanto, muito menos propenso a erros que
podem ser causados pela concatenação de
string, como vimos.
24. Use o padrão Post-Redirect-Get para evitar envios de formulários duplicados: Até agora, inserimos
vários registros, que podemos ver aqui
no banco de dados. Para este vídeo, vou esvaziar
a tabela usando as instruções truncate para
que fique mais fácil
ver o que está acontecendo. Com uma mesa vazia. Vamos inserir alguns dados
no farm e inserir
um novo registro. No momento, vemos a mensagem gravada
no banco de dados. Há o novo registro. No entanto, sem
voltar para o farm, se eu atualizar a
página no navegador, primeiro recebemos uma mensagem pedindo para confirmar a reenvio do
farm. Isso ocorre porque o que é mostrado no navegador é o resultado
de uma solicitação de postagem. E se atualizarmos, esses dados serão enviados novamente. Confirmamos isso. Vemos a mensagem
salva do registro novamente. O banco de dados. Agora existem dois registros com os
dados do farm. Toda vez que atualizarmos esta página, um novo registro será inserido. Se você acabou de fazer
algo como comprar algo ou enviar uma mensagem
, não quer que isso
seja facilmente repetido. A maneira padrão de evitar
isso é usar o padrão get de
redirecionamento após
uma solicitação de postagem bem-sucedida. Em vez de responder com
o conteúdo a ser exibido, o navegador é imediatamente
redirecionado para outra página. Primeiro, vamos adicionar outra página para
a qual podemos redirecionar. Vamos adicionar um novo arquivo
chamado HTML de ponto de sucesso. No formulário, vamos copiar a primeira parte
do HTML para baixo e incluir o elemento de cabeçalho e colá-lo no novo arquivo. Em vez de um farm, vamos adicionar um
elemento de parágrafo contendo o texto. Obrigado. E o
corpo de fechamento e as tags HTML. Os scripts de farm de processos. Em vez de
imprimir essa mensagem, neste ponto,
inserimos com sucesso um novo registro. Aqui, redirecionará
para outra página. Fazemos isso enviando um cabeçalho de local contendo o URL para o qual estamos redirecionando. E também definiremos o código de status da
resposta como 303, o que indica que estamos redirecionando
para uma página de confirmação. Para enviar o cabeçalho,
chamamos a função de cabeçalho, passando uma string
contendo localização, dois pontos e um espaço. Em seguida, o URL para o qual estamos
redirecionando, que neste caso é apenas o HTML relativo do ponto de
sucesso do URL. Para definir o código de resposta, usaremos argumentos nomeados
para evitar ter que definir outros argumentos necessários
nesta chamada de função,
definindo-o como 303. Este é o fim desse script, mas geralmente é
uma boa prática depois redirecionar para sair do script
imediatamente depois. Então, incluiremos uma chamada de saída. Vamos tentar isso. Agora com alguns
dados diferentes no farm. Se o enviarmos, seremos redirecionados para
a página de sucesso. Agora, se eu atualizar
a página, no entanto, não
foi mostrada nenhuma mensagem nos
pedindo para confirmar o envio da farmácia
no banco de dados. Apenas um registro
foi inserido.
25. Projeto do seu curso: crie um formulário e salve os dados de formulário em um banco de dados: Agora é a sua vez. Seu projeto para essa classe
é criar um farm para
capturar alguns dados e salvar
esses dados em um banco de dados. Comece projetando um farm que captura os dados de que você precisa. Por exemplo, um formulário de inscrição, uma fazenda de artistas e assim por diante. Use os tipos de entrada relevantes
para cada item de dados. Em seguida, crie um script PHP para processar os dados do farm
enviados, certificando-se de que tudo seja válido. Em seguida, crie um banco de dados com uma tabela para armazenar os
dados do farm. Use diferentes
tipos de coluna para armazenar cada item de dados conforme necessário. Depois de ter a tabela
de banco de dados, você pode escrever o código
SQL e PHP para inserir um registro
nessa tabela. Finalmente, redirecione
para uma página de sucesso. Depois que um registro tiver sido inserido
com sucesso. Você pode usar esses sites de
documentação como referência para o código HTML, SQL e PHP
que você está escrevendo. Além disso, o código mostrado
na classe está disponível
para download. Se você precisar de ajuda, você pode fazer uma pergunta na seção de
discussão em aula abaixo. Estou ansioso para
ver seus projetos.
26. CONCLUSÃO: Parabéns, você
terminou a aula. Nesta classe, você
aprendeu tudo precisa saber para criar um farm em HTML contendo entradas para
diferentes tipos de dados, como
validar esses dados no PHP e como salvar os dados daquele farm em um
banco de dados no servidor. Essa é uma das principais habilidades para qualquer desenvolvedor de
aplicativos da web. Se você está apenas
começando ou é
um desenvolvedor experiente que procura expandir seus conjuntos de habilidades, você acabou de aprender algumas técnicas
importantes para essa
funcionalidade muito solicitada. Não se esqueça de publicar seus projetos na galeria de projetos da
turma. Estou ansioso para vê-los. Finalmente. Só queria agradecer
por fazer este curso. Espero que você tenha gostado. Se você fez isso,
considere deixar um comentário. Além disso, se houver um tópico que
você gostaria que eu abordasse,
por favor, não
hesite em me avisar. Vejo você na próxima aula.