[Pitch] - Hello World com Php e Mysql
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.html
É 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><?phpecho "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>
Criando a base de dados (com mouse)
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
create table
seria possível criar a estrutura da base de dados enviando comandos sql
veja esse exemplo rascunho de comando sql:
create table produtos( id integer not null primary key auto_increment, nome varchar);
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 dadosif(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 dadosif($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>\\n"; } echo "</table>\\n";}?><footer></footer>
Comando delete
<?php$conn = new PDO('mysql:host=localhost;dbname=tutorial', 'root', ''); //conexão com a base de dadosif(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çãoecho "<input type=submit value=Salvar></td></tr>\\n";echo "</table>\\n";echo "</form>\\n";
