• Nenhum resultado encontrado

Curso de PHP e MySQL. Ministrantes: Flávio S. Gonzaga Guilherme Birckan

N/A
N/A
Protected

Academic year: 2021

Share "Curso de PHP e MySQL. Ministrantes: Flávio S. Gonzaga Guilherme Birckan"

Copied!
61
0
0

Texto

(1)

Curso de PHP e MySQL

Ministrantes:

Flávio S. Gonzaga bim@inf.ufsc.br Guilherme Birckan birckan@inf.ufsc.br

(2)

Distribuição do curso

Módulo 1:

Banco de Dados MySQL

Módulo 2:

(3)

Módulo 1

MySQL

(4)

Introdução

! SQL: Linguagem de Banco de Dados (Oracle, MySQL, mSQL, Unix dbm, Sybase, etc)

! MySQL: Servidor de Banco de Dados multi-usuário, multi-thread. Principais vantagens: Velocidade

Robustez

(5)

Origem

!Empresa desenvolvedora: T.c.X. DataKonsultAB

!A equipe tem usado o MySQL

desde 1996 em um ambiente com mais de 40 Banco de Dados con-tendo 10.000 tabelas, somando aproximadamente 100Gbytes de Dados.

(6)

Características

! Manipula um número ilimitado de usuários simultâneos

! Alta velocidade de execução ! Permite 16 índices por tabelas

! Trabalha com diferentes plataformas: Unix, Windows, etc

! Sistema de privilégios flexível, simples, eficiente e seguro, que permite

(7)

Características

! Disponibiliza diversos tipos de dados: INT(inteiros sinalizados e não

sina-lizados de 1,2,3,4,8 bytes), FLOAT,

DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP,

YEAR, SET, ENUM

! Suporte completo a operadores e

funções nas cláusulas SELECT e WHERE ! Suporte às cláusulas GROUP BY e

ORDER BY e à funções de grupo

(8)

Características

! Tabelas de disco sob a forma Árvore-B

rápidas com compressão de índices

! Disponibiliza registros de tamanhos

fixos e variados

! Manipula grandes Bancos de Dados, na

ordem de 50.000.000 registros

! Escrita em C e C++. Testada com

diferentes compiladores

! Possui sistema de alocação de memória

(9)

Características

! DELETE, INSERT, REPLACE e UPDATE devolvem o número de linhas afetadas pelo comando

! Nomes de funções não entram em conflito com nomes de tabelas ou colunas

! O servidor pode emitir mensagens de erros em diversas linguagens

! Clientes podem conectar ao servidor

MySQL utilizando conexões TCP/IP, Unix sockets ou sob o Windows NT

(10)

Estrutura

!A estrutura que mantém os blocos (ou registros) de informações é a

TABELA

!Estes registros são constituídos

por objetos menores chamados de tipos de dados

!Hierarquia : Banco de Dados >

(11)

Tipos de Dados

!CHAR(M): Strings de tamanho fixo entre 1 e 255 caracteres

!VARCHAR(M): Strings de tamanho flexível entre 1 e 255 caracteres

!INT(M) [Unsigned]: números inteiros entre –2147483648 e 2147483647. A opção Unsigned usa o intervalo 0 e

4294967295(inteiros não sinalizados) !FLOAT[(M,D)]: números decimais

(12)

Tipos de Dados

!DATE: informação relativa a datas. Padrão: YYYY-MM-DD

!TEXT/BLOB: String entre 255 e

65535 caracteres. Diferença: TEXT é insensível ao caso, e BLOB não

!SET: conjunto de valores de strings !ENUM: conjunto de valores

(13)

Opções especiais

!Primary key: usada para diferen-ciar um registro do outro. Cada registro desta forma não pode ter a mesma chave primária

!Auto_increment: a coluna é

automa-ticamente incrementada quando se insere um registro

!NOT NULL: não permite a inserção de valores nulos

(14)

O sistema de privilégios

!Determinar as permissões de um determinado usuário em um

determinado HOST para

determinadas tabelas

!Permissões: inserir, atualizar,

excluir informações de uma tabela; criar, modificar tabelas, etc.

(15)

O ambiente MySQL

!Para entrar no ambiente: SHELL> mysql –u user –p Enter: password: ****** !Prompt do ambiente:

mysql> !Para sair:

(16)

Comandos

!Mostrar Base de Dados existentes: mysql> show databases;

!Criar uma Base de Dados: mysql> create database

DATABASE;

!Usar uma Base de Dados existente: mysql> use Nome;

(17)

Comandos

! Criar uma tabela:

mysql> create table ALUNO (

ID int auto_increment primary key, Nome varchar(40),

Email varchar(30), DataNasc date,

Matricula char(9) );

(18)

Comandos

!Mostrar tabelas:

mysql> show tables;

!Mostrar descrição de uma tabela: mysql> desc TABELA;

!Alterar campos de uma tabela:

mysql> alter table TABELA drop Campo; mysql> alter table TABELA

(19)

Comandos

!Inserir registros em uma tabela:

mysql> insert into TABELA values( NULL, ‘valor_string’, valor_numero ); !Pesquisa de Dados:

mysql> select * from TABELA;

mysql> select Campo1 from TABELA where Campo1 < 10;

mysql> select Campo1, Campo2 ... CampoN from TABELA;

(20)

Comandos

!Apagar registros de uma tabela:

mysql> delete from TABELA where Campo=‘valor’;

!Atualizar registros de uma tabela: mysql> update TABELA set

Campo=‘valor’ where Campo2=‘valor’;

!Apagar uma tabela:

(21)

Comandos

! Apagar uma database:

mysql> drop database DATABASE;

! Adicionando um usuário e seus privilégios: mysql> grant all privilegies on

DATABASE.TABELA to user@host identified by ‘senha’;

! Sair do Mysql: mysql> quit;

(22)

Exercício

• Crie uma tabela com no mínimo cinco campos e três tipos de dados diferentes. (Sugestão: varchar, int, date). Esta tabela deve possuir uma chave primária.

• Faça consultas de inserção, alteração e remoção de dados sobre esta tabela.

(23)

Módulo 2

PHP

(24)

Introdução

! Linguagem de SCRIPT do lado do servidor, embutida no HTML, portanto a instalação é feita no servidor WEB

! Para UNIX é FREE, assim como o MySQL

! O código é encapsulado em TAGS (<?PHP ...

?>) dentro do próprio arquivo HTML,

mudando apenas a extensão do arquivo para

.php3 ou .php

! Diferente de JavaScript, o código fonte não é mostrado.

(25)

Um breve histórico

! Concebido por Rasmus Lerdof

! Primeira versão utilizada em 1995 e

conhecida como Personal Home Page Tools ! Estima-se no final de 1996: 15000 sites

Metade de 1997: 50000 sites

! O analisador foi reescrito por Zeev Suraski e Andi Gutmans formando a base do PHP

(26)

Principais Características

!include, require

!Tratamento automático de variáveis de formulários

!Suporte a orientação a objetos !Fácil interação com banco de

dados

!Manipulação de cookies !Upload de arquivos

(27)

Um pequeno exemplo

!O script a seguir mostra a data atual: <html><body>

<?php /* Início da TAG do PHP */ $hoje = date(“Y-m-d”);

print “<br>Hoje é dia: $hoje”; ?>

(28)

Comentários

!Todo programa deve conter comentá-rios para futuras consultas:

// ou # comentário da linha /* ... */ comentário em bloco Exemplo:

$base = 2 # Atribuindo o valor da base $altura = 10 // o mesmo para a altura /* Pronto, acabamos de atribuir os

(29)

Variáveis

!Não é necessário declarar !Basta usar o $ antes dela !Não tipada

(30)

Operadores

!Aritméticos: + - * / % !Atribuição: =

!Concatenação de string: .

!Lógicos: and, or, ||, &&, !, xor !Comparação: ==, !=, <, >, <=, >= !Incremento: $v++, ++$v

(31)

Operações matemáticas

!Segue o padrão das demais linguagens ( + , - , * , / , %, sin() , cos() ...)

Conjunto completo de operações:

http://br.php.net/manual/ref.math.php

!Exemplo:

$valorbruto = 10;

$desconto = 10 * $valorbruto / 100;

(32)

Operações com strings

!Concatenação: “.”

!Número de caracteres: strlen(“string”) !Substring: substr(“string”,2,3) -> rin

Segundo parâmetro: início da string Terceiro parâmetro: tamanho

!Converte os primeiros caracteres em maiúsculas: ucwords(“string”)

(33)

Operações com strings

!Verificar se um caracter (ou substring) está contido em uma string:

strpos(“string”,”substring/caracter”) if strpos($email,”@”) {

echo “Email parece correto.\n”; }

!Outras funções relacionadas:

(34)

Estruturas de Controle

if ( condição ) { ... } elseif { ... } else { ... } Switch ($var) { case “a”: ...; break; default: ...; break; }

(35)

Estruturas de repetição

while ( condição ) { ... } do { [break / continue] ... } while (condição);

for ( $i=0; $i<=$size; $i++) { ... } foreach($elemento in $lista ) { ... }

(36)

Exercício

!Faça um script que conte o

número de vogais existentes em uma frase

(37)

Solução

<?PHP $palavra = strtoupper($p); $cont=0; for ($i=0;$i<strlen($palavra );$i++) { switch ($palavra[$i]) { case "A": case "E": case "I": case "O": case "U": $cont++; break; } }

print "Total de vogais da palavra $p:

$cont"; ?>

(38)

Arrays

Simples: $gostosas[0] = “Tiazinha”; $gostosas[1] = “Feiticeira”; $lista2[“a”] = “elemento”; if ( in_array(“Feiticeira”, $gostosas ) ) { ... }

(39)

Arrays

Multidimencionais: $a[1][2] = 33123;

$conta[“sala”][3][“mesa”][8] = “Professor”; Funções:

$comidas = array(“arroz” , “feijão”, “bife”); array_pop( $comidas, “batata frita” );

array_push( $comidas ); sort($comidas);

(40)

Variáveis de variáveis

$a = “hello”;

$$a = “world”; # $hello = “world”

echo “$a $a{$a}”; # saída: “hello world” $checkbox42 = “banana”;

$i = 42;

$nome = “checkbox”.$i;

(41)

Exercício

Você tem uma variável $total que

contém o total de variáveis do tipo $checkbox1 ... $checkboxn

Coloque todas elas em um array e depois imprima todos em ordem inversa.

(42)

Solução

for ($i=1; $i <= $total; $i++) { $temp = “checkbox” . $i;

$lista[$i] = ${$temp}; }

for ($i=$total; $i >= 1; $i--) { echo $i . “: $lista[$i] <br>”; }

(43)

Funções

!Precisam ser declaradas

!Parâmetros por valor ou referência !Quantidade variável de parâmetros !Valor default para parâmetros

!Não pode ser redefinida

function fatorial( $inteiro ) { ...

(44)

Suporte a OO

Class Pessoa { var $nome; var $idade; function incrementeIdade() { $this->idade++; } }

(45)

Suporte a OO

class Pessoa { var $nome; var $idade = 0; function incrementeIdade() { $this->idade++; } function setNome($nNome){ $this->nome = $nNome; } }

class Aluno extends Pessoa { var $matricula;

function Aluno($m) { $this->matricula = $m; }

}

$joao = new Aluno(“972”); $joao->setNome(“João”); $joao->incrementeIdade();

(46)

Exercício

• Crie uma Classe com no mínimo 5 atributos, 4 funções (pelo menos uma retorne um valor) e um

(47)

Acesso a Banco de Dados

!Suporte nativo a: ADABAS, ORACLE, SYBASE, SQL SERVER, DBASE,

INFORMIX, mSQL, MySQL, POSTGRESQL, ODBC

!MySQL: servidor de banco de dados que utilizaremos

!Acesso: criar banco de dados, fazer conexão, selecionar database, fazer

(48)

Funções para uso do

MySQL

mysql_connect( $host, $user, $passwd ) mysql_select_db($dbname);

mysql_query(“insert into Aluno values(“Antonio”, 35)”)

$res = mysql_query(“select * from Aluno”) while ( $linha = mysql_fetch_array($res) ) {

echo $linha[´Nome´] . “<br>”; }

(49)

Exercício

• Faça um script para inserir um

registro e, em seguida, mostrar os dados da tabela alunos.

+---+---+ | Field | Type | +---+---+ | id | int(11) | | matricula | varchar(5) | | senha | varchar(32) | | nome | varchar(250) | | fone | varchar(20) | | data_inscricao | datetime | +---+---+

(50)

Sugestão

mysql_connect(“localhost”,”aluno”,”aluno”) OR DIE ("Erro ao conectar!");

mysql_select_db(“CursoPHP”); $senha = “minhaSenhaFácil”;

$res = mysql_query( "insert into alunos values (null, “345”, ‘$senha’, “Juli”, “2251932”, sysdate() );

$result = mysql_query( "select * from alunos“ ); $num=mysql_numrows( $result );

$i=0;

while ($i<$num) {

$matr = mysql_result( $result, $i, ”matricula”); $nome = mysql_result( $result, $i, ”nome”); ...

print ”Matrícula: $matr<br>Nome: $nome<br>...<hr>"; $i++;

(51)

HTTP & FTP

• header ("Location: http://www.php.net");

• setcookie (nome [, valor [, int expire [, path [, domain [, secure]]]]])

• $conn = ftp_connect(“ftp.matrix.com.br”); $log = ftp_login($conn, “login”, “pass”); ftp_put($con, “arq_remoto”, “arq_local”, FTP_ASCII/FTP_BINARY);

(52)

Exercício

• Faça um script que armazene um

cookie com o valor do IP do usuário e em seguida envie um arquivo qualquer por FTP. Se o cookie estiver setado

apenas redirecione o usuário para a página da INF.

(53)

Sugestão

<?php

if (isset($ip)) {

header( "Location: http://www.inf.ufsc.br“ ); }else{

setcookie ("ip" , $REMOTE_ADDR);

$conn = ftp_connect("devel.matrix.com.br"); $log = ftp_login($conn, "php", "php");

ftp_put($conn, "arq_remoto", "teste_ftp",FTP_ASCII); ftp_quit($conn);

print "O arquivo foi enviado com sucesso."; }

(54)

Controle de Sessão

• Preservar dados em acessos subseqüentes

• Registrar variáveis de sessão • session_start();

• session_register(”USER"); • session_destroy();

(55)

Exercício

• Faça um script para autenticar um usuário da tabela alunos. Crie um formulário de login e verifique a senha do usuário, se conferir crie uma variável de sessão com o número da

matrícula do usuário.

• Sugestão: um arquivo para o formulário de login, outro para checar usuário e um último com a página protegida.

(56)

Sugestão

<?php // Arquivo: verifica.php

session_start();

mysql_connect(“localhost”,”aluno”,”aluno”) OR DIE ("Erro ao conectar!"); mysql_select_db(“CursoPHP");

$res = mysql_query("select * from alunos where matricula='$matr' and senha='$senha'"); $num = mysql_numrows($res); if ($num==0) { header("Location: form.php"); } else { $SESSION_MATR = mysql_result($res,0,"matricula"); session_register("SESSION_MATR"); header("Location: passou.php"); } ?>

(57)

Sugestão (cont.)

<?php // passou.php session_start(); session_register("SESSION_MATR"); function test_login() { global $SESSION_MATR; if (!isset($SESSION_MATR)) { header("Location: form.php"); } } test_login();

print "hello world!"; ?>

(58)

Tratamento de arquivos

int fopen($filename, “mode”, [$dir] ) int fclose($fp)

“mode” pode ser: !r / r+

!w / w+ !a / a+

(59)

Tratamento de arquivos

fgets($fp, $tamanho) filesize( $filename )

fread ($fp, filesize ($filename)) feof(int fp)

Exemplo:

$nome = "/tmp/teste.txt"; $fp = fopen ($nome, "r");

$contents = fread ($fd, filesize ($nome)); fclose ($fp);

(60)

Tratamento de arquivos

$fp = fopen(“/tmp/teste.txt”, “a”); fwrite($fp, “bla bla bla \n”);

fclose($fp); $fp = fopen ("/tmp/teste.txt", "r"); while ( !feof($fp) ) { $buffer = fgets($fp, 4096); echo “$buffer <br>”; } fclose ($fp);

(61)

Exercício

Fazer um contador de acesso de uma página utilizando arquivos.

Referências

Documentos relacionados

Contudo, não é possível imaginar que essas formas de pensar e agir, tanto a orientada à Sustentabilidade quanto a tradicional cartesiana, se fomentariam nos indivíduos

(10) A liquidação dos contratos de derivados poderá suscitar perdas adicionais que não são tidas em conta na avaliação realizada na perspetiva da continuidade das

No primeiro, destacam-se as percepções que as cuidadoras possuem sobre o hospital psiquiátrico e os cuidados com seus familiares durante o internamento; no segundo, evidencia-se

A baixa taxa de desconto ao longo dos anos de produção do campo, para o cálculo da função objetivo, aliada a baixa produção de água que a locação de

Brahman a Campo Gir (dupla aptidão) Gir Leiteiro Pré-classificação Nelore Sindi 03.05 (Quinta-feira) Brahman Guzerá Nelore Sindi Tabapuã Campeonato Modelo Frigorífico

Todavia, há poucos trabalhos sobre interferência de herbicidas no crescimento da cultura; portanto, visando avaliar os efeitos de amicarbazone e diuron + paraquat, estes foram

Na terceita parte foi desenvolvida a ferramenta, que partindo de ficheiros de entrada com o posicionamento dos jogadores e da bola durante um jogo, consegue calcular automaticamente

Componentes curriculares voltados para o planejamento e desenvolvimento de projetos de sistemas de informação, passando pelo estudo de viabilidade, coleta de requisitos, modelagem