Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Projeto CRUD com PHP e MySQL
Este roteiro detalha o desenvolvimento de um CRUD em PHP demonstrando 3 formas diferentes de acesso a banco de dados: PDO (PHP Data Objects), biblioteca mysqli no estilo procedural e mysqli orientado a objetos.
Banco de Dados
O banco de dados será criado no MySQL e terá somente uma tabela contendo informações sobre alunos.
Criação do banco de dados
A criação do banco de dados pode ser feita de forma gráfica dentro do MySQL Workbench ou executando o comando SQL apropriado dentro de alguma outra ferramenta como o console do MySQL.
Com o console
Abra o console do MySQL.
Execute os seguintes comandos:
· CREATE SCHEMA unoesc_php DEFAULT CHARACTER SET utf8;
· USE unoesc_php;
· SHOW DATABASES;
Com o MySQL Workbench
Conecte no SGBD MySQL, vá para a aba e então escolha a opção 
O nome do banco de dados será . Escolha também as opções e nos campos . A seguir clique no botão .
Clique novamente em e depois em .
Após isso o banco deverá aparecer. Dê um clique duplo nele para selecioná-lo (ele vai aparecer em negrito). A janela utilizada anteriormente para a criação do esquema pode ser agora fechada.
Criação da tabela
Com o MySQL Workbench ou console, crie a tabela aluno usando o comando SQL abaixo:
· CREATE TABLE aluno (
	id_aluno INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(60) NOT NULL,
nascimento DATE,
salario DECIMAL(10, 2)
) ENGINE=InnoDB;
A verificação pode ser feita observando-se as mensagens da interface gráfica ou então do comando SHOW TABLES;
	
	
Inserção de dados para testes
Insira alguns dados na tabela para testes futuros e verifique se eles foram adicionados com os comandos abaixo:
· INSERT INTO aluno (nome, nascimento, salario)
VALUES ('Fulano', '1990-10-25', 1234.56);
· INSERT INTO aluno (nome, nascimento, salario)
VALUES ('Beltrano', '2005-09-30', 42.42);
· SELECT * FROM aluno;
Projeto em PHP
Criação do projeto
No PhpStorm crie um projeto chamado . É importante que este projeto esteja dentro da pasta do Wamp Server, caso contrário ele não será detectado pelo servidor Apache.
Caso esteja utilizando outra IDE ou simplesmente o bloco de notas, crie a pasta normalmente com o Windows Explorer.
Setup e teste inicial
Crie o arquivo :
	
	
Insira nele o seguinte código:
Conexão com PDO realizada com sucesso!';
 return $conn;
 } catch (PDOException $e) {
 echo 'Erro: ' . mb_convert_encoding($e->getMessage(), 'UTF-8', 'ISO-8859-1') . '';
 exit();
 }
}
function conectarMySQLi_OO()
{
 $conn = @new mysqli(SERVIDOR, USUARIO, SENHA, BANCODEDADOS);
 if ($conn->connect_error) {
 echo 'Erro: ' . mb_convert_encoding($conn->connect_error, 'UTF-8', 'ISO-8859-1') . '';
 exit();
 } else {
 echo 'Conexão com MySQLi Orientado a Objetos realizada com sucesso!';
 }
 return $conn;
}
function conectarMySQLi_PD()
{
 $conn = @mysqli_connect(SERVIDOR, USUARIO, SENHA, BANCODEDADOS);
 if (!$conn) {
 die('Erro: ' . mb_convert_encoding(mysqli_connect_error(), 'UTF-8', 'ISO-8859-1') . '');
 } else {
 echo 'Conexão com MySQLi Procedural realizada com sucesso!';
 }
 return $conn;
}
Testes de conexão
Modifique o arquivo :
 
 Testes Diversos
 
Abra o arquivo para verificar se as 3 formas de conexão estão sendo realizadas com sucesso.
Modifique agora alguns dados de acesso para verificar os erros gerados pelo PHP, por exemplo:
· Senha errada
· Usuário errado
· Host errado
Funções utilitárias
A arquivo possui 2 funções utilitárias. Uma para retornar a data atual formatada em português e outra para exibir mensagens no console do navegador.
format($dateTime);
 return $retorno;
}
function console_log($output, $with_script_tags = true)
{
 $js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) . ');';
 if ($with_script_tags) {
 $js_code = '' . $js_code . '';
 }
 echo $js_code;
}
Se as conexões estiverem funcionando substituo o comando echo das linhas que mostram as mensagens de ‘conexão realizada com sucesso’ pela função console_log() que mostra as mensagens no console do navegador.
Por exemplo, a linha:
echo 'Conexão com MySQLi Orientado a Objetos realizada com sucesso!';
Ficaria:
console_log('Conexão com MySQLi Orientado a Objetos realizada com sucesso!');
Resultado no console do navegador (abra-o com a tecla de função ):
Estilização
O arquivo configura algumas classes CSS a fim de melhorar a visualização dos dados das tabelas.
body {
 font-family: Sans-serif;
 color: #333;
}
table.mysqli {
 border-collapse: collapse;
 margin: auto;
 width: 80%;
 border: 2px solid black;
}
table.mysqli th {
 background-color: #EEE;
 font-size: 1em;
 padding: 5px;
 border: 1px solid;
 text-align: center;
}
table.mysqli td {
 color: #000;
 padding: 5px;
 border: 1px solid;
}
table caption {
 padding: 2px;
 color: black;
 font-weight: bolder;
 font-size: 150%;
 text-align: center;
 caption-side: top;
 border-collapse: collapse;
}
Listagem dos dados em tabelas
Arquivo de testes
Troque o conteúdo do arquivo pelo código abaixo, que contém as seguintes modificações:· Link para a biblioteca CSS Bootstrap e também para o arquivo CSS local 
· Exclusão do código de teste das conexões
· Acréscimo do código de teste das listagens de dados
 
 Testes Diversos
 
 
 ';
 listarDadosMySQLi_OO('bel%');
 echo '';
 listarDadosPDO();
 ?>
Biblioteca MySQLi
O arquivo contém 2 funções que usam a biblioteca mysqli para listar os dados em tabelas:
· listarDadosMySQLi_PD(): Versão minimalista que trabalha com o estilo procedural
· listarDadosMySQLi_OO(): Versão melhorada no estilo OO que trabalha com filtros e tabela melhorada
#PD th, #PD td {border: 1px solid}';
 echo '';
 echo 'Relação de Alunos';
 echo '';
 echo 'ID';
 echo 'Nome';
 echo 'Nascimento';
 echo 'Salário (R$)';
 echo '';
 while ($aluno = mysqli_fetch_assoc($alunos)) {
 echo '';
 echo '' . $aluno['id_aluno'] . '';
 echo '' . $aluno['nome'] . '';
 echo '' . $aluno['nascimento'] . '';
 echo '' . $aluno['salario'] . '';
 echo '';
 }
 echo 'Data atual: ' . retornarDataAtual() . '';
 echo '';
 $alunos->free();
 $conn->close();
}
function listarDadosMySQLi_OO($filtro='%%') {
 $conn = conectarMySQLi_OO();
 $stmt = $conn->prepare('SELECT * FROM aluno WHERE nome LIKE ?');
 $stmt->bind_param('s', $filtro);
 $stmt->execute();
 echo '
 Relação de Alunos
 
 ID
 Nome
 Nascimento
 Salário (R$)
 ';
 $alunos = $stmt->get_result();
 while($aluno = $alunos->fetch_assoc()) {
 $data_nascimento = date('d-m-Y', strtotime($aluno['nascimento']));
 $salario = number_format($aluno['salario'],2,',','.');
 echo "
 {$aluno['id_aluno']}
 {$aluno['nome']}
 {$data_nascimento}
 {$salario}
 ";
 }
 echo 'Data atual: ' . retornarDataAtual() . '';
 echo '';
 $conn->close();
}
Explicações do código da função listarDadosMySQLi_PD():
· A função mysqli_query() realiza a consulta na conexão indicada ($conn).
· A tag permite redefinir localmente um estilo CSS. No caso foram redefinidas as tags th e td somente de tabelas que contenham o id #PD.
· O atributo style também permite redefinir um estilo CSS de forma ainda mais específica.
· border-collapse: collapse faz com que as bordas da tabela tenham um aspecto ‘sólido’.
· A tag coloca um título na tabela.
· A tag insere uma linha em uma tabela.
· A tag indica uma célula de cabeçalho em uma tabela.
· width serve para definir o tamanho de uma coluna em específico.
· O bloco while repete enquanto houver algum registro a ser buscado na tabela.
· A função mysqli_fetch_assoc() retorna os dados em forma de um array associativo.
· A tag insere uma célula em uma tabela.
· A tag insere um rodapé em uma tabela.
· O atributo colspan="5" faz com que a coluna ocupe o espaço de 5.
· Os métodos free() e close() servem para liberar recursos da memória.
Resultado da consulta:
Explicações do código da função listarDadosMySQLi_OO($filtro='%%'):
· O método prepare() tem por objetivo ‘preparar’ o comando (consulta) pois este utiliza um parâmetro (?).
· O método bind_param() conecta a variável $filtro com o parâmetro. O tipo do parâmetro 's' informado indica que se trata de uma string.
· O método execute() executa a consulta SQL já preparada.
· As classes container, table-responsive, table-striped, table-bordered, table-hover e table-dark são do Bootstrap e servem para alterar a formatação da tabela.
· O método get_result() retorna os resultados da consulta.
· O método fetch_assoc() converte os registros para um array associativo.
· A função date() formata a data no formato 'd-m-Y'. Para isso primeiramente é preciso transforma a data do formato string para o formato de data/hora do PHP. Isso é feito com a função strtotime().
· A função number_format() é utilizada para formatar os dados no padrão usado no Brasil.
· text-align altera o alinhamento do texto em uma determinada célula.
Resultado da consulta (note que o resultado foi filtrado, no arquivo foi passada a string 'bel%'):
Biblioteca PDO
O arquivo contém uma única função que usa a biblioteca PDO para listar os dados em forma de tabela. A versão abaixo também utiliza filtro e usa a biblioteca Bootstrap para melhorar a formatação da tabela.
prepare('SELECT * FROM aluno WHERE nome LIKE :nome_aluno');
 $stmt->bindParam(':nome_aluno', $filtro, PDO::PARAM_STR);
 $stmt->execute();
 echo '';
 echo '
 Relação de Alunos
 
 
 Id
 Nome
 Nascimento
 Salário (R$)
 
 ';
 while($aluno = $stmt->fetch()) {
 $data_nascimento = date('d-m-Y', strtotime($aluno['nascimento']));
 $salario = number_format($aluno['salario'],2,',','.');
 echo "
 {$aluno['id_aluno']}
 {$aluno['nome']}
 {$data_nascimento}
 {$salario}
 ";
 }
 echo 'Data atual: ' . retornarDataAtual() . '';
 echo '';
}
Explicações do código da função listarDadosMySQLi_OO($filtro='%%'):
· Os métodos prepare(), bind_param() e execute() funcionam como já explicado anteriormente.
· O método fetch() busca os dados da consulta.
· text-center e text-end são classes do Bootstrap usadas para alinhar o texto.
Resultado da consulta:
Foram listados todos os registros pois não foi especificado nenhum filtro na chamada do método, logo ele utilizou o valor default '%%'.
Depuração
Duas funções muito utilizadas no PHP para depuração são var_dump() e print_r().
Modifique temporariamente o código da função listarDadosMySQLi_OO() para vê-las em funcionamento. Acrescente o código destacado em amarelo abaixo entre as linhas e while($aluno = $stmt->fetch()) {.
 ';
echo '';
var_dump($stmt->fetch());
echo '';
print_r($stmt->fetch());
echo '';
while($aluno = $stmt->fetch()) {
A combinação das tags e faz com que a saída seja mostrada de uma forma mais legível. É possível perceber também, abaixo, que o resultado do métodofetch() é, tanto um array convencional acessado por um índice numérico como um array associativo acessável através de uma chave.
Resultado:
Após os testes comente o trecho de depuração recém acrescentado. 
image5.png
image6.png
image7.png
image8.png
image9.png
image10.png
image11.png
image12.png
image13.png
image14.png
image15.png
image16.png
image17.png
image18.png
image19.png
image20.png
image21.png
image22.png
image23.png
image24.png
image25.png
image26.png
image27.png
image28.png
image29.png
image30.png
image1.png
image2.png
image3.png
image4.png

Mais conteúdos dessa disciplina