MySQL Integration
Lembrete: sempre é bom testar o que as variáveis estão fazendo utilizando o echo.
-
Primeiros Passos
- Step 01: Definir o formulário para captar as informações no html.
- Step 02: Criar o php que irá receber as informações do formulário, lembrando que recebe com POST ou GET, passando o valor do name="" para o POST ou GET.
- Step 03: Criar a classe de conexão com o banco de dados.
- Step 04: (somente informação): Com base nos parâmetros recebidos no registra_usuário.php pelo POST, vamos efetuar registros no banco de dados.
- Step 05: Puxar a classe de conexão com o banco para o documento php que contém as informações puxadas do formulário.
- Step 06: Fazer uma instância da class db e com isso gerar um objeto de conexão com o banco de dados.
- Step 07: Criar no banco de dados a tabela que contem as colunas com informações que serão enviadas para o banco de dados, ou seja, já deixar pronto as colunas de usuário, senha, id (auto_increment), email, etc. Para somente receber essa informações.
- Step 08: Declara as variáveis $usuário, $email e $senha para colocar dentro da $sql.
- Step 09: Executar a query que verifica se as informações foram enviadas para o banco de dados.
- Agora temos configurado o Inscreva-se, onde o usuário, e-mail e senha digitado no Inscreva-se serão enviados para o banco de dados e inseridos na tabela e colunas definidas no registrar_usuario.php.
- Exemplos de código até aqui estão na pasta twitter_clone_1.
- Retornos:
1) UPDATE, INSERT e DELETE: retornam true caso tenha sucesso no update/insert/delete e false para uma falha no processo de update/insert/delete.
2) SELECT: retorna false/resource.
a) false: caso exista algum erro na consulta.
b) resource: não havendo um erro na consulta, retorna o resource, que é uma referência para uma informação externa do PHP, que portanto, irá retornar uma informação externa ao PHP, como do BD. É com ele que podemos recuperar os dados das consultas através de uma estrutura de objetos ou através de arrays.
Portanto, no caso de uma consulta, podemos recuperar essa referência do resource e explora-la através de outas funções. - Step 01: Receber os dados do formulário de login em index.php com POST e atribuir-los a variáveis que utilizaremos no código.
- Step 02: Criar a variável de verificação desses dados com o banco.
- Step 03: Agora vamos utilizar a classe PHP de conexão com o banco de dados para enviar essas informações ao banco.
- Step 04: Adicionar o instanciamento da classe e a execução da função conect_mysql().
- Step 05: Agora podemos executar a consulta, com o mysqli_query, passando o $linkdeconexão e o $sql (a query que queremos executar).
- Step 06: Visto ter sido realizado um SELECT na função através do $sql, caso de tudo certo irá retornar um resource (recurso, visto ter utilizado o SELECT) que iremos utilizar, portanto vamos coloca-la em uma variável para utilizarmos o retorno dessa função.
- Step 07: Retornando o resource, podemos explorar essa informação a partir do mysqli_fetch_array, onde passamos esse resource como parâmetro para essa função, que recupera essa referência externa e a transforma em um array, então podemos utilizar esse retorno de informação em nossa aplicação.
a) Exemplo de retorno (caso no SELECT tenha retornado um resource): array(8) { [0]=> string(1) "1" ["id"]=> string(1) "1" [1]=> string(5) "diego" ["usuario"]=> string(5) "diego" [2]=> string(24) "contact@diegommago.com" ["email"]=> string(24) "contact@diegommago.com" [3]=> string(4) "1234" ["senha"]=> string(4) "1234" }
b) Exemplo de retorno (caso o SELECT seja false): NULL. - Step 08: Realizar um if que irá analisar se houve algum erro de sintaxe na escrita do código, caso houver, informa.
- Até aqui estamos conseguindo receber a informação de usuário e senha através do formulário da index.php, enviar essa informação ao banco de dados e ter um retorno false ou resource do SELECT, informando se essa informação existe no banco ou se é NULL (ou seja, estamos recuperando as informações do banco de dados com sucesso e tendo o retorno se a informação enviada existe ou se é NULL no banco de dados).
- A ideia dessa parte é realizar a consulta no banco de dados e caso a consulta retorne valores correspondentes a um registro, informamos que os dados de login estão corretos e seguiremos no processo de autenticação. No caso de não haver nenhum erro no processo de consulta, mas o usuário e senha informados não corresponderem com as informações do banco de dados, vamos retornar uma mensagem informando que o usuário ou senha estão incorretos.
- Step 09: Vamos explorar a condição do retorno dos dados, que serão retornados e organizados em um array dentro da função $dados_usuario.
a) Visto que a variável $dados_usuario recebeu um array de informações, retornada do banco, sobre aquele usuário inserido, podemos verificar um desses índices do array.
b) Nesse caso vamos verificar se existe o índice usuário nesse array (pois essa variável somente irá conter um array com dados no caso de ter encontrado a informação inserida no formulário de usuário e senha, no banco de dados.) - Step 10: Caso o usuário e senha fornecidos existam, ok. Caso não, iremos retornar o fluxo do else para a página index.php com uma mensagem que o usuário ou senha são inválidos, e para isso utilizamos a função header('URL que quero redirecionar minha página').
- Step 11: Criado no final da url de encaminhamento um parâmetro "?erro=1", que será tradado pela página index.php em cima do <html> pelo código PHP para exibir a mensagem de erro.
- Step 12: Caso somente criar o tratamento da variável GET, ao acessar o index.php teremos um erro. Por isso será criado o if para somente exibir a mensagem de erro no caso desse código de erro realmente ter sido passado.
- Step 13: No index.php, colocar o if de no caso da variável $erro receber 1, exibir uma mensagem para o usuário (posicionado em baixo do form, para a mensagem ficar dentro da janela do formulário, aberta ao clicar em Entrar).
Observação: essa mensagem será exibida em baixo do formulário e estaremos na página index.php?erro=1. - Step 14: Configuração para no caso do usuário informado ser errado e ser redirecionado para index.php?erro=1, abrir o formulário de login automaticamente, para ser mais fácil do usuário visualizar a mensagem.
a) Ao clicar no botão entrar, o bootstrap muda a classe da lista (<li class="") que contém o formulário de nada para OPEN, abrindo-o.
b) Realizamos um teste ternário (como o if do $erro), para verificar se a variável do $erro é == 1, sendo vamos tomar uma ação e não sendo tomaremos outra. - Até aqui temos a conexão com o banco estabelecida, o formulário de inscreva-se funcionando e o formulário de login com as ações:
Ao abri-lo, digita o usuário e senha corretamente: conecta com o banco e verifica, estando correto retorna a informação para o usuário.
Ao digitar o usuário ou senha incorretos no formulãrio de Entrar, o PHP redirecionará o usuário para a página de login, com um parâmetro a mais "?erro1", a página index.php irá analisar se está sendo retornado 1 ou 0 na variável $erro. Sendo 1, a página irá abrir com o formulário de login aberto e a mensagem que o usuário ou senha está inválido. - Exemplos de código até aqui na pasta twitter_clone_2.
- Step 15: Verificar se foi digitado algo no usuário e senha para poder enviar as informações ao servidor. Isso será verificado assim que clicar no botão Entrar dentro do formulário de login.
- Step 16: Alterar o style do campo usuário/senha no caso de apertar o Entrar tendo deixado-os vazios.
- Step 17: Adicionada variável que recebe o valor de false, no momento em que entrar em um dos ifs (no caso de um dos campos ser vazio) o valor é alterado para true. Utilizada para cancelar o envio do formulário no caso de ser true.
- Exemplos de código até aqui na pasta twitter_clone_3.
- Step 18: Adicionar o header('url') para no caso do usuário existir no banco de dados, encaminha-lo para a home.php.
- Step 19: Tratativas para somente conseguir entrar no home.php no caso de ter sido autenticado um usuário (bloquear usuários não autenticados).
a) Utiliza-se a superglobal session_start, semelhante ao POST e GET, mas ela fica disponível durante todo o escopo da aplicação (enquanto estiver com o navegador aberto ou clicar no sair).
b) Através dessa superglobal podemos criar índices que estejam disponíveis por toda a aplicação (não precisa ficar puxando em todas as páginas como o POST e GET).
c) A superglobal session_start() deva ser sempre a primeira intrução no PHP. - Step 20: Iniciada a sessão, podemos criar variáveis de sessão. Alterado no validar_acesso.php.
- Step 21: Com a variável session recebendo as informações do banco de dados após realizar o login no sistema, podemos definir um script para no caso da variável de sessão não estar definida, forçar o redirecionamento para a index.php ou para uma página de erro. Lembrando também que ao associar os índices usuário e outros a variável session, elas passam a estar disponíveis na aplicação inteira, a qualquer momento, sem ter que ficar puxando esses valores.
- Step 22: Ao clicar no botão sair, encerrará a sessão. A ideia é que o botão sair elimine as variáveis de sessão (criado no sair.php).
a) No sair.php, atribui-se a função unset ao array $_SESSION['usuario'] e também aos outros arrays que possuem variáveis de sessão, para deixa-las como vazio. Com isso, ao atualizar alguma página que utiliza a session_start, será verificado que as variáveis session estão vazias e redirecionará para a página de login. - Até aqui temos o formulário Inscrever-se funcionando e o formulário de login funcionando.
Caso insira um usuário ou senha no formulário de login que não exista, é retornado usuário ou senha inválidos.
Caso não seja inserido um usuário/senha no formulário de login, ao clicar em entrar, a border-color dos campos será alterada para vermelha e quando digitar um válido e clicar em entrar novamente, é voltada para o padrão cinza.
Introduzido o conceito de sessão com a variável session_start, que fica no topo da página. Ela recebe as informações recuperadas do banco de dados e organizadas em um array na variável $dados_usuario, e seleciona dois índices do array, usuário e e-mail. Com isso, em todas as páginas com o session_start, ela irá verificar se essas variáveis estão com alguma informação, pois se estiverem significa que um usua´rio foi logado no sistema, e caso não estiver e tentar entrar em uma página que precisa, será redirecionado para a página home.php, ou para onde for definido.
Adicionada a função de finalizar sessão ao botão sair, onde ao clicar nele, será redirecinado para uma página one será executado um código php com a função unset, que irá retirar as informações do array presente na variáveis $_SESSION, deixando-a vazia, portanto ao atualizar uma página que precisa de uma sessão inicada, será reconhecido e tratado como usuário não logado. - Exemplos de código até aqui na pasta twitter_clone_4.
1) Criar a integração do HTML (formulário) com o PHP (receber as variáveis do formulário através da global POST) e usar o PHP para criar a conexão com o banco (criar a classe que gera a conexão com o MySQL).
2) Efetuando autenticação de usuários.
Parte 01:
Enviar a informação do formulário ao banco e retornar se ela existe.
Parte 02
Agora que estamos conseguindo recuperar dados do banco, vamos implementar controles para autenticação desses dados.
Parte 03
Adicionado tratamentos para o formulário de login.
Parte 04
Controlando a sessão do usuário: no caso de usuário correto, encaminhar a página interna da aplicação, no caso de encerramento de sessão ou usuário não logado, bloquear acesso as páginas restritas.