Tutorial Banco de Dados
O intuito desse tutorial é apresentar o php e mysql que são softwares baseados em código digitado.
Para seguir esse tutorial são necessárias muitas ações além de escrever código, mas o principal é o ato de codar.
C - Create (armazenar no banco de dados)
R - Read (acessar registros na base de dados)
U - Update (alterar registro)
D - Delete (excluir registro)
php - Linguagem de programação de servidores
sql - Linguagem de bancos de dados
Instalar o Xampp
O Xampp é um software que emula um webserver.
Ele instala o php e o mysql.
Criar um arquivo html
Crie um arquivo chamado index.htm
É importante entender que esse tipo de arquivo contém um tipo de código que é ao mesmo tempo entendível por seres humanos e renderizável pelos computadores.
Escreva "hello world" nesse arquivo.
Salve e 'execute pelo browser'.
Perceba que são duas maneiras diferentes de lidar com o mesmo arquivo.
Xampp emula websever
Um webserver tradicional é um computador como outro qualquer, só que ele fica conectado a internet 24hs por dia.
Quando outro computador acessa o webserver ele envia arquivos.
Basicamente ele fica ligado o tempo todo esperando uma 'requisição'.
Quando ocorre uma requisição ele envia uma resposta.
O Xampp emula um webserver.
No painel de controle do Xampp é possível startar o apache.
O apache é o php.
Ele serve para que o programador escreva instruções para o server executar quando ele receber a requisição.
Exemplo: Quando o user envia uma requisição para o server, ele pode armazenar algo no banco de dados.
O mysql também fica apenas experando para ser acionado.
A diferença é que quem acessa o mysql é o proprio php.
O php recebe a requisição, depois ele busca a informação no banco de dados e depois ele devolve a resposta para o usuário.
php / htdocs / localhost
É preciso que os arquivos estejam dentro da pasta xampp/htdocs/
Quando o apache recebe a requisição ele procura na pasta xampp/htdocs/ qual arquivo php deve ser executado.
Para começar vamos criar um arquivo chamado 'index.php' na pasta xampp\htdocs\produtos
O conteúdo desse arquivo:
<!doctype html>
<html>
<body>
codigo html<br>
<?php
echo "codigo php<br>";
?>
</body>
</html>
Para acessar pelo browser basta digitar localhost/produtos
(é preciso que o php esteja startado no xampp)
Tela de Cadastro
Para começar a fazer o cadastro do produto podemos utilizar o seguinte código:
<!doctype html>
<html>
<head>
<style>
body{
margin:0px;
background-color:#e1e1e1;
font-family:'Segoe Ui';
}
footer{
position:fixed;
display:block;
width:100vw;
bottom:0px;
background-color:#8899bb;
color:#333333;
padding:20px;
}
h1{
background-color:#8899bb;
color:#333333;
padding:20px;
margin-top:0px;
}
table{
background-color:#ffffff;
padding:8px;
margin:0px auto;
}
textarea{
width:240px;
height:66px;
}
th{
background-color:#88bb99;
color:#333333;
padding:10px;
}
.aviso{
background-color:#aa0000;
color:#ffffff;
font-weight:bold;
padding:16px;
text-align:center;
}
#preco{
width:60px;
}
</style>
</head>
<body>
<h1>Tutorial CRUD</h1>
<form action=index.php method=post enctype=multipart/form-data>
<table>
<tr>
<th colspan=2>Cadastro de Produto</th>
</tr>
<tr>
<td>Nome</td>
<td><input name=nome></td>
</tr>
<tr>
<td>Descrição</td>
<td><textarea name=descricao></textarea></td>
</tr>
<tr>
<td>Imagem</td>
<td><input name=arq type=file></td>
</tr>
<tr>
<td>Preço</td>
<td><input name=preco id=preco></td>
</tr>
<tr>
<td colspan=2 align=right>
<button>Salvar</button>
</td>
</tr>
</table>
</form>
<footer></footer>
</body>
</html>
Create table
Vamos começar a lidar com a base de dados.
Para isso vamos usar o phpMyAdmin que vem instalado no Xampp.
É preciso criar uma nova base de dados.
Podemos dar o nome tutorial.
É preciso criar uma tabela chamada produtos.
Com os campos:
id (int auto_increment)
nome (varchar)
descricao (varchar)
imagem (varchar)
preco (varchar)
É importante que o campo id seja auto_increment
Comando insert
Vamos fazer com que a tela de cadastro envie os dados para o DB.
<body>
<h1>Tutorial CRUD</h1>
<?php
$conn = new PDO('mysql:host=localhost;dbname=tutorial', 'root', ''); //conexão com a base de dados
if(isset($_POST['nome'])) { //quando o user preenche o campo nome da página e clica em salvar, o browser envia nova request para o server. nessa nova request existe uma varável do tipo POST
$conn -> query("insert into produtos(nome, descricao, preco) values('".$_POST['nome']."', '".$_POST['descricao']."', '".$_POST['preco']."')"); //nessa linha o php envia um comando para inserir na base de dados
if(isset($_FILES['arq']) && ($_FILES['arq']['tmp_name']) != '') { //se o user fez o upload da imagem do produto
@mkdir("imagens"); //cria a pasta imagens dentro de xampp\htdocs\produtos
$inserido = $conn -> lastInsertId(); //esse comando armazena o id do produto que foi inserido na base de dados
move_uploaded_file($_FILES['arq']['tmp_name'], "imagens/" . $inserido . "_" . $_FILES['arq']['name']); //esse comando move o arquivo uppado (do endereço temporário para a pasta xampp\htdocs\produtos
$conn -> query("update produtos set imagem='" . $inserido . "_".$_FILES['arq']['name']."' where id=" . $inserido); //esse comando coloca o nome da imagem uppada na base de dados
}
echo "<div class=aviso>produto inserido na base de dados</div><br>\n";
}
?>
<form action=index.php method=post enctype=multipart/form-data>
<table>
Lista de Produtos
Abaixo do formulário podemos exibir a lista de produtos cadastrados.
</table>
</form>
<?php
$stmt = $conn -> query("select id,nome from produtos"); //envia a query para a base de dados
if($stmt -> rowCount()) { //se existe algum produto cadastrado
echo "<br><br>\n";
echo "<table>\n";
while($row = $stmt -> fetch()) { //o db vai armazenando na variável $row o valor de cada registro
echo "<tr>"; //uma linha da tabela de produtos
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['nome'] . "</td>"; //o nome do produto
echo "<td><button onclick=\"location.href='index.php?id=" . $row['id'] . "';\">Editar</button></td>"; //botão para editar produto
echo "<td><button onclick=\"if(confirm('Tem Certeza ?'))location.href='index.php?del=" . $row['id'] . "';\">Excluir</button></td>"; //botão para deletar
echo "</tr>";
}
echo "</table>\n";
}
?>
<footer></footer>
Comando delete
<h1>Tutorial CRUD</h1>
<?php
$conn = new PDO('mysql:host=localhost;dbname=tutorial', 'root', ''); //conexão com a base de dados
if(isset($_GET['del'])) { //se na url está index.php?del=7 exclui o produto 7
$conn -> query("delete from produtos where id=" . $_GET['del']); //envia o comando de deletar para a base de dados
echo "<div class=aviso>produto excluído da base de dados</div><br>\n"; //exibe mensagem de confirmação
}
?>
Update
Para implementar a alteração é preciso reescrever o formulário de cadastro para que ele busque os dados.
if(isset($_POST['nome'])) { //se a página formulário postou algo para o db
if(isset($_GET['id'])) { //se na url está definido um id então os dados do produto devem ser ALTERADOS no db
$conn -> query("update produtos set nome='" . $_POST['nome'] . "', descricao='" . $_POST['descricao'] . "', preco='" . $_POST['preco'] . "' where id=" . $_GET['id']); //essa linha envia para o db o comando de update
if(isset($_FILES['arq']) && $_FILES['arq']['tmp_name'] != '') { //se um arquivo/imagem foi enviado
@mkdir("imagens"); //cria a pasta imagens dentro de xampp\htdocs\produtos (caso não existir)
move_uploaded_file($_FILES['arq']['tmp_name'], "imagens/" . $_GET['id'] . "_" . $_FILES['arq']['name']); //esse comando move o arquivo uppado (do endereço temporário para a pasta xampp\htdocs\produtos
$conn -> query("update produtos set imagem='" . $_GET['id'] . "_" . $_FILES['arq']['name'] . "' where id=" . $_GET['id']); //esse comando atualiza na base de dados o endereço da imagem do produto
}
echo "<div class=aviso>os dados do produto foram alterados</div><br>\n"; //mensagem de confirmação
}
else{ //se na url NÃO está definido um id então os dados do produto devem ser INSERIDOS no db
$conn -> query("insert into produtos(nome, descricao, preco) values('".$_POST['nome']."', '".$_POST['descricao']."', '".$_POST['preco']."')"); //nessa linha o php envia um comando para inserir na base de dados
if(isset($_FILES['arq']) && ($_FILES['arq']['tmp_name']) != '') { //se o user fez o upload da imagem do produto
@mkdir("imagens"); //cria a pasta imagens dentro de xampp\htdocs\produtos
$inserido = $conn -> lastInsertId(); //esse comando armazena o id do produto que foi inserido na base de dados
move_uploaded_file($_FILES['arq']['tmp_name'], "imagens/" . $inserido . "_" . $_FILES['arq']['name']); //esse comando move o arquivo uppado (do endereço temporário para a pasta xampp\htdocs\produtos
$conn -> query("update produtos set imagem='" . $inserido . "_".$_FILES['arq']['name']."' where id=" . $inserido); //esse comando coloca o nome da imagem uppada na base de dados
}
echo "<div class=aviso>produto inserido na base de dados</div><br>\n";
}
}
if(isset($_GET['id'])) { //se houver um id na url, então a página exibe os dados do produto para que o user possa editar
$stmt = $conn -> query("select * from produtos where id=" . $_GET['id']); //busca no db os dados do produto
$row = $stmt->fetch(); //armazena os dados do produto na variável $row
if(is_file("imagens/" . $row['imagem'])) //se existe a imagem
echo "<center><img src='imagens/".$row['imagem']."' style='max-width:300px;'></center><br>\n"; //exibe a imagem do produto
echo "<form action=index.php?id=".$_GET['id']." method=post enctype=multipart/form-data>\n";
echo "<table>\n";
echo "<tr><th colspan=2>Alterar dados do Produto</th></tr>\n";
}
else{ //se não há id na url, então a página exibe o formulário para o user inserir dados
$row['nome']=$row['descricao']=$row['preco']=""; //inicializa as variáveis $row que serão utilizadas no form
echo "<form action=index.php method=post enctype=multipart/form-data>\n";
echo "<table>\n";
echo "<tr><th colspan=2>Cadastro de Produto</th></tr>\n";
}
echo "<tr><td>Nome</td><td><input name=nome value='" . $row['nome'] . "'></td></tr>\n";
echo "<tr><td>Descrição</td><td><textarea style='width:240px; height:66px;' name=descricao>" . $row['descricao'] . "</textarea></td></tr>\n";
echo "<tr><td>Imagem</td><td><input name=arq type=file></td></tr>\n";
echo "<tr><td>Preço</td><td><input name=preco style='width:60px;' value='" . $row['preco'] . "'></td></tr>\n";
echo "<tr><td colspan=2 align=right>";
if(isset($_GET['id'])) //se o form está exibindo dados (para serem editados)
echo "<input type=button value=Novo onclick=\"location.href='index.php';\"> "; //um botão para ir da pag de edição para a pag de criação
echo "<input type=submit value=Salvar></td></tr>\n";
echo "</table>\n";
echo "</form>\n";