Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Tutorial- php - mysql - xampp, Notas de estudo de Informática

A apostila demonstra as funções de Acesso, Inserção, Alteração e Remoção em uma Base de Dados MySQL e utilização de Sessão e upload de imagens

Tipologia: Notas de estudo

2016
Em oferta
60 Pontos
Discount

Oferta por tempo limitado


Compartilhado em 27/04/2016

anderson-fortes-5
anderson-fortes-5 🇧🇷

3

(2)

2 documentos

1 / 23

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Instituto Federal Farroupilha
Campus São Borja
Tutorial PHP + MySQL
Criando um sistema de Cadastro/Login
(em construção)
Resumo: A apostila demonstra as funções de Acesso, Inserção, Alteração e Remoção
em uma Base de Dados MySQL e utilização de Sessão.
*Esse material pode ser utilizado, editado e compartilhado por qualquer pessoa para fins de aprendizado.
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
Discount

Em oferta

Pré-visualização parcial do texto

Baixe Tutorial- php - mysql - xampp e outras Notas de estudo em PDF para Informática, somente na Docsity!

Instituto Federal Farroupilha Campus São Borja

Tutorial PHP + MySQL

Criando um sistema de Cadastro/Login

(em construção) Resumo: A apostila demonstra as funções de Acesso, Inserção, Alteração e Remoção em uma Base de Dados MySQL e utilização de Sessão. [email protected] *Esse material pode ser utilizado, editado e compartilhado por qualquer pessoa para fins de aprendizado.

Índice

  • 1 - Introdução...................................................................................................................................
    • Entendendo melhor: Aplicações robustas requerem acesso a banco de dados, assim.....
    • 1.1 Instalando o XAMPP no Ubuntu..............................................................................
    • 1.2 Introdução à API MySQL em PHP..........................................................................
    • 1.3 - Conectores.............................................................................................................
  • 2 Criando uma aplicação de cadastro/login.....................................................................................
    • 2.1 Formulário de cadastro.............................................................................................
    • 2.2 Realizando conexão com a base de dados................................................................
    • 2.3 Realizando a inserção dos dados do cadastro...........................................................
    • 2.3.1 inserção utilizando orientação a objetos..............................................................
    • 2.4 Realizando o Login................................................................................................
  • 3 Exibindo dados de uma consulta com várias linhas de resultado...............................................
  • 4 Criptografando senhas antes de armazená-las............................................................................
    • 4.1 Utilizando MD5.....................................................................................................
  • 5 Utilizando Controle de Sessão....................................................................................................
    • 5.1 Iniciando a Sessão..................................................................................................
    • 5.2 Encerrando a Sessão...............................................................................................
  • 6 Realizando upload de imagens...................................................................................................

Para testarmos nossas aplicações web, precisamos de um servidor para rodar nossos scripts php. A ferramenta XAMPP permite tornar nosso próprio computador em um servidor, bastando para isso acessar o endereço http://127.0.0.1 ou então http://localhost e o caminho do arquivo pretendido do servidor.

1.1 Instalando o XAMPP no Ubuntu

Para a instalação do xampp no ubuntu, abra o terminal e digite: 1 → sudo add-apt-repository ppa:upubuntu-com/web 2 → sudo apt-get update 3 →sudo apt-get install xampp Se não houver erros, você pode abrir a ferramenta digitando em um navegador http://localhost Se não foi possível a instalação, vá até a página do software e baixe o pacote manualmente. Após o download, abra o terminal e navegue até a pasta em que ele se encontra. Normalmente na pasta Downloads. Exemplo: Após estar na pasta onde se encontra o arquivo baixado, torne o arquivo executável com o comando: chmod +x xampp-linux-x64-5.6.8-0-installer.run (o nome do arquivo depende do período em que o download for realizado).

  • Execute o arquivo de instalação com o comando sudo ./xampp-linux-x64-5.6.8-0-installer.run
  • Finalmente, execute utilizando sudo /opt/lampp/lampp start

1.2 Introdução à API MySQL em PHP

Para realizar a conexão e interação entre nossa aplicação PHP e o banco de dados MySQL, devemos utilizar uma API ( Application Programming Interface). As APIs definem classes, métodos e funções que nossas aplicações terão que chamar. MySQL fornece API escrito em várias linguagens para conexão com a base de dados, e uma delas é escrita em PHP, que pode ser utilizada através de extensões em PHP. Para conectar nossa aplicação com a base de dados, podemos utilizar as extensões mysqli ou mysql. mysqli permite acessar funcionalidades providas pelo MySQL 4.1 ou posterior, ou seja, é uma extensão mais moderna. Esse tutorial se limitará a demonstrar as funcionalidades dessa extensão.

1.3 - Conectores

Para realizar a conexão com a base de dados, duas das formas são: mysql_connect - procedural mysqli_connect – orientado a objetos, mais moderno e com novas funcionalidades. É um mysql_connect “melhorado”. Ambos criam uma conexão com o servidor MySQL. Na literatura, ainda encontramos uma maior quantidade de referências ao conector procedural, portanto, cabe ao programador decidir o paradigma a a ser utilizado. Neste tutorial, veremos exemplos utilizando mysqli_connect.

Onde $host = Endereço do servidor, $username = Nome de usuário para permissão de acesso , $passwd = Senha de acesso, $dbname = Nome da base de dados a ser acessada, $port= Número da porta para tentar realizar a conexão, $socket = Soquete que deve ser usado Todos os parâmetros são opcionais. Se não forem passados, o conector tentará realizar a conexão com valores pré-definidos. Nosso arquivo de conexão é mostrado na figura: Onde localhost é o endereço do servidor MySQL, root é o usuário, senha em branco (se não existir senha de acesso para esse usuário) e cadastro é o nome de um BD previamente criado (A criação da base de dados não está no escopo deste tutorial). mysqli retorna um objeto representando a conexão com o BD (bando de dados). No exemplo, atribuímos esse objeto à variável $conexao. Se não tivermos nenhuma mensagem de erro, é por que a conexão foi realizada com sucesso. Após realizada a conexão, nossa aplicação está pronta para interagir com nosso banco de dados. → Note que em todas as páginas que necessitam de acesso à base de dados, precisaremos escrever essa função, fazendo as devidas verificações quanto a falhas (verificações, tratamento de erros, exceções e etc) – o único cuidado que tomamos em nosso exemplo é utilizando or die() que é executada se a conexão não for realizada. → Portanto, é bastante importante deixarmos essa função responsável pela conexão Figura 2 : Arquivo conecta.php

em um único arquivo separado dos demais códigos, e então importamos esse arquivo sempre que precisarmos da conexão. Isso é demonstrado na próxima seção.

2.3 Realizando a inserção dos dados do cadastro.

Para garantir a não duplicidade de informações dos usuários em nossa tabela de usuários (em um sistema de login os dados de login não podem ser repetidos), primeiramente devemos realizar uma consulta para verificar a existência de um usuário com os mesmos dados ( Aqui utilizamos nome e senha, no entanto, um sistema de login geralmente utiliza EMAIL, CPF ou etc ao invés de login). No início do código, devemos importar o arquivo que contém o código mostrado na figura2, utilizando a função include() (ver também include_once() e require_once() no manual do php) , como demonstrado na figura abaixo. Utilizamos a variável $consulta_select apenas para montarmos a string de consulta com os dados vindos do formulário. Executando a consulta Figura 3 : inclusão do arquivo de conexão e montagem da string de consulta Figura 4 : realizando a consulta

podemos ter dados iguais. Para garantirmos que a a inserção dos dados do usuário foi realizada com sucesso, podemos utilizar a função mysqli_affected_rows($conexao). Essa função retorna o número de linhas afetadas na tabela. Então se o número de linha for maior que zero, é por quê a inserção foi realizada com sucesso

2.3.1 inserção utilizando orientação a objetos

Apesar de utilizarmos mysqli, até aqui utilizamos uma forma procedural, com funções recebendo alguns parâmetros como objetos e strings. No paradigma orientado a objetos, os próprios objetos possuem métodos, dessa forma, não passamos objetos como parâmetros para funções, e sim utilizamos os métodos do próprio objeto. Abaixo é realizado o mesmo cadastro, porém utilizando orientação a objetos.

  • Arquivo que realiza a conexão: O código mostrado na figura realiza o mesmo trabalho do código de conexão da sessão anterior, pois a função mysqli_connect é na verdade um 'apelido' para o construtor da classe mysqli. Portanto, a chamada que realizamos no seguinte código Figura 6: figura 6: verificando se a tabela foi afetada pela inserção

na verdade está executando o construtor da classe mysqli. Desta vez fizemos passando valores como parâmetros de forma explícita ao construtor. Notem que ao invés de utilizarmos a função mysql_query passando como parâmetros o objeto $conexao e uma string, aqui utilizamos o método query pertencente ao próprio objeto $conexao. Podemos ainda garantir que a inclusão foi realizada com sucesso

Temos uma base de dados com o cadastro de vários alunos. Esse cadastro recebe dados como nome, idade, e-mail, telefone, curso, etc. Em determinado local do nosso sistema, temos um campo de busca desses alunos, onde é possível listá-los de acordo com alguma característica, como idade, por exemplo. Suponha que queremos listar todos os alunos que possuem idade menor que 18 anos. Montamos e realizamos a consulta Essa consulta poderá retornar várias linhas como resultado. Para podermos manipular esse resultado no PHP, devemos transformá-lo em um array. Para isso, utilizamos a função mysqli_fetch_array(). Essa função guarda as linhas de resultado em um array utilizando índices associativos, ou seja, podemos acessar qualquer coluna da tabela que a consulta retornou. Considere que queremos mostrar apenas o nome e o curso dos alunos que a consulta retornou (note que a consulta retornou todas as colunas – realizamos um SELECT * ), para isso utilizamos os nomes das colunas que queremos mostrar como índices. O array chamado $alunos possui como índices todas as colunas da nossa tabela tb_alunos (isso porque nossa consulta selecionou todas as colunas). A variável $alunos contém os dados do primeiro aluno que a busca retornou. Se quisermos mostrar todos, por exêmplo, utilizamos um laço de repetição.

4 Criptografando senhas antes de armazená-las

Guardar senhas e logins em texto puro no nosso BD, é bastante inseguro, uma vez que as informações ficam visíveis, e, qualquer usuário que obter acesso ao banco de dados, terá acesso direto à essas informações. Para melhorar a segurança dos dados armazenados, podemos utilizar alguns algoritmos de criptografia, isto é, ao invés de armazenarmos os dados tal qual o usuário informou, codificamos eles antes de armazená-los.

4.1 Utilizando MD

  • Uma alternativa é criptografar os dados utilizando uma função hash MD5. Hashs são “mão única”, ou seja, não há uma forma de reverter a codificação (Se o usuário esqueceu sua senha, deverá criar uma nova). O md5 deve ser utilizado quando não necessitamos transformar o texto em sua forma original, isto é, uma vez codificado, ele só serve como comparação para uma nova string codificada. Antes de realizar a inserção da senha do usuário, podemos utilizar a função md5() do php e então realizamos o insert utilizando $pass e não mais $senha. Apesar de não ser tão seguro (ler sobre hash md5) MD5 é uma alternativa melhor do que guardar senhas de usuários em texto puro.

Note no código acima que antes de redirecionar o usuário para uma “pagina_restrita.php”, utilizamos a função session_start(). Essa função verifica se já existe um id de sessão para este usuário, se não existir, ela cria um. Dessa forma, podemos chamar session_start() em todas as páginas do nosso site que utilize sessão. Com a sessão já iniciada, podemos criar variáveis de sessão para esse usuário. Quando iniciada a sessão, é criado um array chamado $_SESSION. As variáveis de sessão são armazenadas nesse array. Considere que após o login queremos guardar o nome (login) do usuário para que apareça na página destino (“pagina_restrita.php”) “Bem Vindo Fulano. Sair”. Fazendo $_SESSION['nome'] = 'AndersonFortes', criamos uma variável de sessão que armazena 'Anderson' e pode ser acessada através de $_SESSION['nome']. Claro que não faz sentido armazenarmos a string 'AndersonFortes', mas sim o nome do usuário que realizou o login, que temos gravado na variável $login. Dessa forma teríamos

Agora quando redirecionar-nos o usuário para a página restrita, teremos como identificar esse usuário nessa página. Você deve pensar: E se o usuário digitar o endereço do site mais /pagina_restrita.php? Ele conseguirá acessar o conteúdo naturalmente? Depende. Em pagina_restrita.php devemos ter um script de verificação se esse usuário fez o login ou não. O conteúdo só será mostrado se ele realmente fez o login. Sabemos que o usuário que realizou o login possui seu login armazenado em $_SESSION['nome']. Então basta no início da página restrita, verificarmos se essa variável já foi iniciada. Note que para verificar se a variável já foi iniciada utilizamos a função isset (), que verifica se determinada variável foi inicializada ou não. Caso exista a variável $_SESSION['nome'], o usuário realizou o login e então o conteúdo da página restrita deve ser mostrado. Caso contrário, é dada a opção dele realizar login.

6 Realizando upload de imagens

Existem basicamente duas formas de armazenar imagens oriundas do upload realizado pelo usuário. Uma delas é utilizando armazenamento na própria tabela no banco de dados. Para isso, o espaço para o armazenamento de imagens na tabela deve ser declarado como tipo BLOB. No entanto, muitos especialistas alegam que é mais eficiente o armazenamento em diretórios ao invés de tabelas. Armazenar imagens no banco de dados é computacionalmente mais caro pois requer codificação para manipular as imagens. Apesar disso, o armazenamento em banco de dados é simples e funcional em qualquer ambiente e em alguns casos a aplicação não tem total acesso a diretórios do servidor. Portanto, cabe decidir o tipo de armazenamento conforme a necessidade de cada aplicação. Veremos a seguir como fazer o armazenamento de imagens em um diretório do servidor.

6.2 Criando o formulário de Upload

Suponha que possuímos em nosso sistema um formulário de cadastro do usuário, mas que agora desejamos também que nesse cadastro seja necessário o envio de uma foto para o servidor. Vamos ao formulário. Primeiramente temos que definir o enctype do formulário como “multipart/form- data” para que o formulário aceite arquivos.

Podemos observar que agora temos no navegador o botão de selecionar arquivo: Note também que enviamos os dados para um arquivo chamado realizaUpload.php e enviamos os dados utilizando método POST.

6.3 Salvando a imagem e inserindo as informações no BD

Os arquivos enviados pelo formulário são guardados em um array chamado $_FILES. Portanto, nosso arquivo enviado poderá ser referenciado através de $_FILES['arquivo'], onde 'arquivo' é o nome que demos ao input de upload em nosso formulário (<input type='file' name='arquivo'... >) Podemos então acessar as informações sobre o nosso arquivo: $_FILES['arquivo']['name'] obtemos o nome do arquivo. $_FILES['arquivo']['type] obtemos o tipo do arquivo. $_FILES['arquivo']['size'] obtemos o tamanho do arquivo em Bytes. $_FILES['arquivo']['error'] se o arquivo foi enviado de forma correta, $_FILES["arquivo"] ["error"] terá valor 0.