Uma introdução ao PHP e ao MySQL | Dave Hollingworth | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Uma introdução ao PHP e ao MySQL

teacher avatar Dave Hollingworth, IT Trainer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução

      2:12

    • 2.

      Configure seu ambiente de desenvolvimento: instale o software recomendado

      1:24

    • 3.

      Crie um arquivo HTML e visualize no navegador

      2:17

    • 4.

      Adicione um formulário com uma entrada de texto simples e um rótulo associado

      3:10

    • 5.

      Adicione diferentes tipos de controles para inserir o texto

      2:49

    • 6.

      Adicione uma folha de estilo CSS para adicionar facilmente a formatação ao formulário

      1:30

    • 7.

      Adicione um controle para selecionar um valor de uma lista suspensa

      1:35

    • 8.

      Adicione controles para selecionar um valor de uma variedade de opções

      3:25

    • 9.

      Adicione um controle para escolher entre duas opções mutuamente exclusivas

      1:06

    • 10.

      Adicione um button e os atributos para enviar os dados do formulário para o servidor

      2:28

    • 11.

      Adicione um arquivo para processar os dados do formulário enviado e altere como ele é enviado

      2:50

    • 12.

      Altere os valores enviados das entradas de seleção, rádio e caixa de seleção

      3:10

    • 13.

      Evite erros se um valor não fizer parte dos dados do formulário

      2:17

    • 14.

      Aplique um filtro aos valores do formulário, validando o tipo e o intervalo de dados

      3:32

    • 15.

      Filtre a entrada da caixa de seleção e, opcionalmente, filtre os valores em um array

      3:45

    • 16.

      Valide os dados do formulário e envie uma mensagem de validação se inválida

      4:58

    • 17.

      Valide o formulário usando a validação do lado do cliente no navegador

      3:22

    • 18.

      Crie um banco de dados para armazenar os dados do formulário

      1:48

    • 19.

      Crie uma tabela no banco de dados para armazenar os registros de ingressos

      1:28

    • 20.

      Conecte-se ao banco de dados do PHP

      3:21

    • 21.

      Insira um novo registro no banco de dados do PHP

      4:36

    • 22.

      Escape manualmente dos valores das cadeias para evitar um ataque de injeção de SQL

      3:47

    • 23.

      Use uma declaração preparada para inserir um novo registro

      4:23

    • 24.

      Use o padrão Post-Redirect-Get para evitar envios de formulário duplicados

      3:53

    • 25.

      Seu projeto do curso: crie um formulário e salve os dados do formulário em um banco de dados

      1:22

    • 26.

      Conclusão

      1:02

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

243

Estudantes

--

Projeto

Sobre este curso

Obter dados de um formulário em um navegador da web para um banco de dados no servidor é uma habilidade fundamental para qualquer desenvolvedor da web. Neste curso, você vai aprender como criar um formulário em HTML, como validar os dados no PHP e como salvá-lo em um banco de dados do MySQL.

Em poucas lições específicas, você vai aprender:

  • Como criar um formulário em HTML
  • Diferentes tipos de controles de entrada para diferentes tipos de dados
  • Como validar os dados do formulário no PHP
  • Diferentes técnicas para salvar os dados em um banco de dados do MySQL
  • Como fazer tudo isso com segurança e segurança.

Este curso é para iniciantes no desenvolvimento da web que precisam aprender uma das habilidades fundamentais ao criar um site - recebendo dados de um visitante do seu site em um banco de dados no servidor.

No projeto de curso, você vai criar seu próprio formulário em HTML, processando os dados desse formulário no PHP e salvando-o em um banco de dados do MySQL.

Recomenda-se o conhecimento básico de HTML, PHP e SQL, mas todo o código mostrado nos vídeos é explicado na íntegra, juntamente com links para documentação relevante quando necessário.

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, pode fazer uma pergunta na seção de debate.

Conheça seu professor

Teacher Profile Image

Dave Hollingworth

IT Trainer

Professor

Hi, I'm Dave Hollingworth. I'm an IT trainer and web application developer. I've been writing code and teaching IT for over twenty years.

I've developed enterprise-level applications on platforms ranging from mainframes to mobiles: from my first web application, a quotes system created for a major insurance company back in 1999 - the first of its type in the sector - to interactive learning management systems for online language learning.

I've taught courses ranging from basic use of email to advanced web application development, both online and in-person.

I'm passionate about technology, and love teaching it! I believe it's possible to explain even the most complex subjects in a simple, straightforward way that doesn't confuse the student.

I look forward to ... Visualizar o perfil completo

Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

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.