php: linguagem + mysql + mvc + ajax

115
PHP Linguagem + MySQL + MVC + AJAX + Session Prof: Sérgio Souza Costa

Upload: sergio-souza-costa

Post on 24-May-2015

12.558 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: PHP: Linguagem + Mysql + MVC + AJAX

PHPLinguagem + MySQL + MVC + AJAX + SessionProf: Sérgio Souza Costa

Page 2: PHP: Linguagem + Mysql + MVC + AJAX

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

https://sites.google.com/site/profsergiocosta/home

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

Page 3: PHP: Linguagem + Mysql + MVC + AJAX

RoteiroLinguagens e framework

PHP e um simples MVC

A linguagem PHP

PHP + MySQL

PHP + MySQL + MVC

PHP + MySQL + MVC + AJAXControle de sessão e cookies

Page 4: PHP: Linguagem + Mysql + MVC + AJAX

Linguagens são compostas por sintaxe, semântica e pragmática. Em computação ele deve ser universal e implementável.

Page 5: PHP: Linguagem + Mysql + MVC + AJAX

Linguagens são compostas por sintaxe, semântica e pragmática. Em computação ele deve ser universal e implementável.

Framework é um conjunto de objetos que colaboram com o objetivo de atender um conjunto de responsabilidades para uma aplicação específica ou um domínio de aplicação (Erick Gamma, 1995)

Page 6: PHP: Linguagem + Mysql + MVC + AJAX

Linguagens Framework

JAVA J2EE (JSF, STRUTS...)

RUBY ON RAILS

PHP Zend, CakePHP...

C#, Visual Basic ... .NET

Haskell SNAP,Happstack

Django, ZopePython

Perl Catalyst

CppCMSC++

Page 7: PHP: Linguagem + Mysql + MVC + AJAX

Frameworks

● Disciplina● Simplificação● Agilidade / Rapidez ● Padrões de desenvolvimento / Design

Pattern● Organização● Menos código● Conjunto de utilitários

Page 8: PHP: Linguagem + Mysql + MVC + AJAX

PHP é a tecnologia base:

Facebook

Yahoo

Wikipedia

Apple Nasa

IBM

Page 9: PHP: Linguagem + Mysql + MVC + AJAX

Server side

Client side

Page 10: PHP: Linguagem + Mysql + MVC + AJAX

PHP Guia rápido

http://www.php.net/manual/pt_BR/

Page 11: PHP: Linguagem + Mysql + MVC + AJAX

Ciclo de vida

Page 12: PHP: Linguagem + Mysql + MVC + AJAX

PHP (um acrônimo recursivo para PHP: Hypertext Preprocessor) é uma linguagem de script open source de uso geral, muito utilizada e especialmente guarnecida para o desenvolvimento de aplicações Web embútivel dentro do HTML.

Page 13: PHP: Linguagem + Mysql + MVC + AJAX

PHP (um acrônimo recursivo para PHP: Hypertext Preprocessor) é uma linguagem de script open source de uso geral, muito utilizada e especialmente guarnecida para o desenvolvimento de aplicações Web embútivel dentro do HTML.

O código PHP é delimitado pelas tags <?php ....?> Ou <?= expressao ?>

Page 14: PHP: Linguagem + Mysql + MVC + AJAX

Imprimir HTML tags em PHP = bad style

Page 15: PHP: Linguagem + Mysql + MVC + AJAX

<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title></head><body> <p> <?= "Ola Mundo" ?> </p></body></html>

PHP expression block: good way

Formato: <?= expression ?>

ola.php

Page 16: PHP: Linguagem + Mysql + MVC + AJAX

PHP Frameworks MVC Objeto relacional Testes

PHPUnitCakePHP

Zend

Simphony2

CakePHP

PROPELDoctrine

Code igneter

lime

Page 17: PHP: Linguagem + Mysql + MVC + AJAX

Antes de vermos detalhes da LINGUAGEM, veremos um exemplo simples de um MVC sem o auxilio de frameworks.

Baixem o arquivo.

Page 18: PHP: Linguagem + Mysql + MVC + AJAX

Model View Controler

Simplificado, pressuposto -> cliente através da Web.

Exemplo usado de: http://php-html.net/tutorials/model-view-controller-in-php/

Page 19: PHP: Linguagem + Mysql + MVC + AJAX

<?php include_once("controller/Controller.php");

$controller = new Controller();$controller->invoke();

?>

Index.php

Page 20: PHP: Linguagem + Mysql + MVC + AJAX

class Controller {public $model;public function __construct() {

$this->model = new Model();

} public function invoke() {

if (!isset($_GET['book'])) {// no special book is requested, we'll show a list of all available

books$books = $this->model->getBookList();include 'view/booklist.php';

}else{

// show the requested book$book = $this->model->getBook($_GET['book']);include 'view/viewbook.php';

}}

}

controller.php

MODEL

View 1

View 2

Page 21: PHP: Linguagem + Mysql + MVC + AJAX

class Book {public $title;public $author;public $description;public function __construct($title, $author, $description) {

$this->title = $title; $this->author = $author; $this->description = $description;

} }

book.php

Page 22: PHP: Linguagem + Mysql + MVC + AJAX

class Model {public function getBookList(){

return array("Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic

book."),"Moonwalker" => new Book("Moonwalker", "J. Walker", ""),"PHP for Dummies" => new Book("PHP for Dummies", "Some

Smart Guy", ""));

}

public function getBook($title){

$allBooks = $this->getBookList();return $allBooks[$title];

}

}

Simulando um banco

Simulando um “select”

model.php

Page 23: PHP: Linguagem + Mysql + MVC + AJAX

….<tr><td>Title</td><td>Author</td><td>Description</td></tr><?php foreach ($books as $title => $book) { ?><tr><td><a href="index.php?book=<?=$book->title?>"><?=$book->title?></a></td>

<td><?=$book->author?></td><td><?=$book->description?></td>

</tr><?php } ?>….

booklist.php

<html><head></head><body><p> Title: <?= $book->title ?> </p><p> Author: <?= $book->author ?> </p><p> Description: <?= $book->description ?> </p></body></html>

viewbook.php Baixem e experimente estes códigos.

Page 24: PHP: Linguagem + Mysql + MVC + AJAX

PHP - Linguagem

Page 25: PHP: Linguagem + Mysql + MVC + AJAX

Imperativa

Dinâmica

Orientada a objeto

Estilo funcional

Page 26: PHP: Linguagem + Mysql + MVC + AJAX

Variáveis

As variáveis no PHP são representadas por um cifrão ($) seguido pelo nome da variável. Os nomes de variável no PHP fazem distinção entre maiúsculas e minúsculas.

Um nome de variável válido se inicia com uma letra ou sublinhado, seguido de qualquer número de letras, algarismos ou sublinhados.

Page 27: PHP: Linguagem + Mysql + MVC + AJAX

<?php$var = 'Bob';$Var = 'Joe'; // case sensitive, $var e diferente de $Varecho "$var, $Var"; // exibe "Bob, Joe"$4site = 'not yet'; // inválido; começa com um número$_4site = 'not yet'; // válido; começa com um sublinhado$täyte = 'mansikka'; // válido; 'ä' é um caracter ASCII

(extendido) 228$var = 10; // dinamico$var += 5; // soma o valor de $var a 5 e atribui a $var$var /= 2; // divide o valor de $var por 2 e atribui a $var

?>

Variáveis e atribuição

Page 28: PHP: Linguagem + Mysql + MVC + AJAX

<?phpdefine("CONSTANTE", "Alô Mundo.");define("SALARIOMINIMO", 1000);define("DIRETORIOHOME", "/home");

?>

ConstanteConstantes são valores que são declarados e não podem ser alterados durante a sua execução. Para definir uma constante utilizamos a função define

Page 29: PHP: Linguagem + Mysql + MVC + AJAX

Valores e tipos

Primitivos

booleanintegerFloat string

Compostos:

arrayObject

Especiais

resourceNULL

Page 30: PHP: Linguagem + Mysql + MVC + AJAX

Booleanos

Este é o tipo mais simples. Um booleano expressa um valor verdade. Ele pode ser TRUE ou FALSE.

Para especificar um literal booleano, use as palavras-chave TRUE ou FALSE. Ambas são case-insensitive.

<?php$variavel = True; // atribui o valor True para $variavel

?>

Page 31: PHP: Linguagem + Mysql + MVC + AJAX

Ponto flutuante

Números de ponto flutuante (também conhecidos como "floats", "doubles" ou "números reais") podem ser especificados utilizando qualquer uma das seguintes sintaxes:

<?php$a = 1.234; $b = 1.2e3; $c = 7E-10;

?>

Page 32: PHP: Linguagem + Mysql + MVC + AJAX

String

Uma string é uma série de caracteres.

PHP não impõe limite de tamanho de uma string; o único limite é o de memória disponível do computador no qual o PHP está sendo executado.

<?phpecho 'isto é uma string comum';echo 'Você pode incluir novas linhas em strings, dessa

maneira que estarátudo bem';?>

Page 33: PHP: Linguagem + Mysql + MVC + AJAX

ArrayUm array no PHP é um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves.

<?php$arr = array("foo" => "bar", 12 => true);echo $arr["foo"]; // barecho $arr[12]; // 1

?>

array( chave => valor , ... )// chave pode ser tanto string ou um integer// valor pode ser qualquer coisa

Page 34: PHP: Linguagem + Mysql + MVC + AJAX

Objeto

Um Objeto pode ser criado com o construtor de linguagem new

<?phpclass foo{ function do_foo() { echo "Doing foo."; }}

$bar = new foo;$bar->do_foo();?>

Page 35: PHP: Linguagem + Mysql + MVC + AJAX

Objeto

Um Objeto pode ser criado com o construtor de linguagem new

<?phpclass foo{ function do_foo() { echo "Doing foo."; }}

$bar = new foo;$bar->do_foo();?>

Veremos sobre classes em PHP mais a frente

Page 36: PHP: Linguagem + Mysql + MVC + AJAX

Resources

Um recurso é uma variável especial, que mantém uma referência a um recurso externo.

Recursos são criados e usados por funções especiais.

<?php$result = mysql_connect("localhost", "username", "pass");

?>

Page 37: PHP: Linguagem + Mysql + MVC + AJAX

Null

Valor especial NULL representa que a variável não tem valor. NULL é o único valor possível do tipo NULL.

A variável é considerada null se:1. ela foi assimilada com a constante NULL.2. ela não recebeu nenhum valor ainda.3. ela foi apagada com unset().

Page 38: PHP: Linguagem + Mysql + MVC + AJAX

Type casting

A conversão de tipos no PHP funciona como no C: o nome de um tipo desejado é escrito entre parênteses antes da variável em que se deseja a moldagem.

(int), (integer) - molde para inteiro(bool), (boolean) - converte para booleano(float), (double), (real) - converte para número de ponto flutuante(string) - converte para string(array) - converte para array(object) - converte para objeto(unset) - converte para NULL (PHP 5)

Page 39: PHP: Linguagem + Mysql + MVC + AJAX

Recebendo dados de uma requisiçãoPara receber os dados de uma requisição, usamos variáveis pré-definidas pelo PHP ($_POST ou $_GET), conforme o método de envio utilizado no formulário.<?php

//neste caso temos no formulário um campo chamado nome e método de envio POST$nome = $_POST['nome']; //neste caso temos no formulário um campo chamado nome e método de envio GET$nome = $_GET['nome']; $nome = $_REQUEST['nome']; // contem ambos

?>

Page 40: PHP: Linguagem + Mysql + MVC + AJAX

Respondendo uma requisição

Uma resposta do servidor será em geral um texto, estruturado no formato HTML, XML, JSON, texto puro e etc

<?php$nome = $_REQUEST['nome'];echo "respondendo ao ". $nome;

?>

Page 41: PHP: Linguagem + Mysql + MVC + AJAX

Operadores unários

Operadores Descrição++$a Pré-incremento. Incrementa $a em um e, então, retorna

$a;$a++ Pós-incremento. Retorna $a e, então, incrementa $a em

um.--$a Pré-decremento. Decrementa $a em um e, então,

retorna $a;$a-- Pós-incremento. Retorna $a e, então, decrementa $a

em um.

Page 42: PHP: Linguagem + Mysql + MVC + AJAX

Operadores aritméticos

Operadores Descrição+ Adição- Subtração* Multiplicação/ Divisão% Módulo (resto da divisão)

Page 43: PHP: Linguagem + Mysql + MVC + AJAX

Operadores relacionais

Operadores Descrição== Igual. Resulta verdadeiro (TRUE) se expressões forem

iguais=== Idêntico. Resulta verdadeiro (TRUE) se as expressões

forem iguais e do mesmo tipo de dados.!= ou <> Diferente. Resulta verdadeiro se as variáveis forem

diferentes.< Menor que.> Maior que.<= Menor ou igual.>= Maior ou igual.

Page 44: PHP: Linguagem + Mysql + MVC + AJAX

Operadores Descrição($a and $b) E: Verdadeiro (TRUE) se tanto $a quanto $b forem

verdadeiros($a or $b) OU: Verdadeiro (TRUE) se $a ou $b forem verdadeiros($a xor $b) XOR: Verdadeiro (TRUE) se $a ou $b forem verdadeiros, de

forma exclusiva.(! $a) NOT: Verdadeiro (TRUE) se $a for false.($a && $b) E: Verdadeiro (TRUE) se tanto $a quanto $b forem

verdadeiros($a || $b) OU: Verdadeiro (TRUE) se $a ou $b forem verdadeiros

Operadores lógicos

Page 45: PHP: Linguagem + Mysql + MVC + AJAX

<?phpif ($a > $b) { echo "a is bigger than b";} elseif ($a == $b) { echo "a is equal to b";} else { echo "a is smaller than b";}?>

$i = 1;while ($i <= 10) { echo $i++;}

for ($i = 1; $i <= 10; $i++) { echo $i;}

foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n";}

switch ($i) { case 0: echo "i equals 0"; case 1: echo "i equals 1"; case 2: echo "i equals 2";}

Controle de fluxo

Seleção Iteração

Page 46: PHP: Linguagem + Mysql + MVC + AJAX

“Incluindo” arquivos

Include, inclui e avalia o arquivo informado. Se o arquivo não existir produzirá uma mensagem de advertência (warning).

include_once, garante que será avaliado apenas uma vês.require, similar ao include, porem produz uma mensagem de Fatal Error caso o arquivo não exista. require_once, garante que será avaliado apenas uma vês.

Page 47: PHP: Linguagem + Mysql + MVC + AJAX

PHP Orientado a objetos

Page 48: PHP: Linguagem + Mysql + MVC + AJAX

# construi um objeto$name = new ClassName(parameters);

# acessando um atribtuo$name->fieldName

# chamando um método$name->methodName(parameters);

$zip = new ZipArchive(); $zip->open("moviefiles.zip"); $zip->extractTo("images/"); $zip->close();

Estilo orientado a objeto

Page 49: PHP: Linguagem + Mysql + MVC + AJAX

class ClassName { # atributos da classepublic $name; # atributos públicosprivate $name; # atributos privados# construtor da classepublic function __construct(parameters) {

statement(s);}

# métodos – comportamento de cada objetopublic function name(parameters) {

statements;}

}

Sintaxe para declaração de classe

Page 50: PHP: Linguagem + Mysql + MVC + AJAX

class ClassName { # atributos da classepublic $name; # atributos públicosprivate $name; # atributos privados# construtor da classepublic function __construct(parameters) {

statement(s);}

# métodos – comportamento de cada objetopublic function name(parameters) {

statements;}

}

Sintaxe para declaração de classe

Page 51: PHP: Linguagem + Mysql + MVC + AJAX

<?php class Point {

public $x;public $y;# equivalent of a Java constructorpublic function __construct($x, $y) {

$this->x = $x; $this->y = $y;}public function distance($p) {

$dx = $this->x - $p->x; $dy = $this->y - $p->y; return sqrt($dx * $dx + $dy * $dy);

}# equivalent of Java's toString methodpublic function __toString() {

return "(" . $this->x . ", " . $this->y . ")";}

}$p1 = new Point (2,4);echo $p1;

?>

Exemplo

Page 52: PHP: Linguagem + Mysql + MVC + AJAX

class ClassName extends ClassName { ...

}

class Point3D extends Point { public $z;public function __construct($x, $y, $z) {

parent::__construct($x, $y); $this->z = $z;

} }

$p2 = new Point3D (4,5,6);

Herança

Page 53: PHP: Linguagem + Mysql + MVC + AJAX

interface InterfaceName { public function name(parameters);public function name(parameters); ...

}

class ClassName implements InterfaceName{ ...

abstract class ClassName { abstract public function name(parameters); ...

}

Interface

Classe abstrata

Page 54: PHP: Linguagem + Mysql + MVC + AJAX

interface InterfaceName { public function name(parameters);public function name(parameters); ...

}

class ClassName implements InterfaceName{ ...

abstract class ClassName { abstract public function name(parameters); ...

}

Interface

Classe abstrata

Possui similaridades, porem classes abstratas podem possuir atribtutos e construtores. Ambas nao são instanciaveis

Page 56: PHP: Linguagem + Mysql + MVC + AJAX

MySQL

Criem um banco chamado "bib", com uma tabela chamada "books", com três atributos (title, author and description)

Pode usar este código sql para inserção.

Page 57: PHP: Linguagem + Mysql + MVC + AJAX

<body><p> livros </p><table><?php$mysqli = new mysqli("localhost", "root", "", "bib");$result = $mysqli->query("SELECT * FROM books");while ($row = $result->fetch_object()) { ?><tr><td><?=$row->title ?></td><td><?=$row->author ?></td><td><?=$row->description ?></td><?php } ?></ul>

</body>

Acessando MySQLbook.php

Click aqui para ver o resultado

Page 59: PHP: Linguagem + Mysql + MVC + AJAX

public function __construct(){$this->mysqli = new mysqli("localhost", "root", "", "bib");

}

public function getBookList(){$result = $this->mysqli->query("SELECT * FROM books");$result_array ;while ($row = $result->fetch_object()) {

$result_array[$row->title] = new Book ($row->title, $row->author, $row->description);

}return $result_array;

}

Usando o MySQL Incluir um construtor, que inicializa um objeto para conexao com o banco

Array de objetos é montado a partir do resultado da consulta ao banco.

Page 61: PHP: Linguagem + Mysql + MVC + AJAX

PHP + MVC + MySQL + AJAX

Usando o mesmo banco e projeto, podemos usar apenas uma view. Ao clicar em um livro, fazemos uma requisição, que retornará o objeto no formato JSON.

O conteúdo irá variar de acordo com a seleção.

Click aqui para ver o resultado

Page 62: PHP: Linguagem + Mysql + MVC + AJAX

PHP + MVC + MySQL + AJAX

<?phprequire_once("../model/Model.php");$model = new Model();$book = $model->getBook($_REQUEST['book']);echo (json_encode ($book));

?>

Incluimos um script, "bookdetail.php", que será responsável por receber a solicitação e encaminhar a resposta.

requisição o titulo do livroresposta JSON

Page 63: PHP: Linguagem + Mysql + MVC + AJAX

$(".title").click( function () {$.getJSON(

"view/bookdetails.php", {book:$.trim($(this).text())},

function (response) { var $book_detail = $("<div/>") $.each (response, function (i, item) { $("<p/>",{

text: (i + " : " + item)}).appendTo($book_detail) ;

}); // each $("#viewbook").html($book_detail) }) })

})

PHP + MVC + MySQL + AJAX

Requisição com parametros

Resposta, de JSON já convertida para objeto JavaScript

Associado ao click do texto

Page 64: PHP: Linguagem + Mysql + MVC + AJAX

Interagindo com o cliente

● Requisição e métodos● Resposta ● Formulário para envio dados ● Upload de arquivos

○ Salvando em arquivo○ Salvando em banco de dados

● Cookie● Session

Page 65: PHP: Linguagem + Mysql + MVC + AJAX

Interação Cliente/Servidor

Page 66: PHP: Linguagem + Mysql + MVC + AJAX

Interação Cliente/Servidor

Page 67: PHP: Linguagem + Mysql + MVC + AJAX

Requisição HTTP

● O recurso a ser solicitado (URL) ● O método HTTP (get, post, put ...)● Os parâmetros a serem enviados como

argumentos ao método.

Page 68: PHP: Linguagem + Mysql + MVC + AJAX

Uniform Resource Locator (URL)

Page 69: PHP: Linguagem + Mysql + MVC + AJAX

Query strings e parâmetros

URL?name=value&name=value...

http://example.com/student_login.php?username=stepp&sid=1234567

● Query string: um conjunto de parametros passdos do browser para o servidor web

● Passado como pares nome/valor no fim da URL● Neste exemplo, paramtror username tem o valor stepp, e sid tem valor

1234567● Código PHP no servidor pode utilizar estes parametros

Page 70: PHP: Linguagem + Mysql + MVC + AJAX
Page 71: PHP: Linguagem + Mysql + MVC + AJAX

Método (GET)

Page 72: PHP: Linguagem + Mysql + MVC + AJAX

Método (POST)

Page 73: PHP: Linguagem + Mysql + MVC + AJAX

Get vs PostGet passa os parâmetros para o servidor como uma "query string"Post embute os parametros dentro da requisção HTTP, não na URL

Vantagens do post :Get é limitado pelo tamanho da URL, aproximadamente 100-200 caracteresInformação é mais privada (não é visualizada na barra de endereço)

Desvantagens do post :não pode ser adicionado como favoritosnavegador não pode voltar sem perder dados (o famoso POSTDATA error)

Page 74: PHP: Linguagem + Mysql + MVC + AJAX

Get vs PostGet passa os parâmetros para o servidor como uma "query string"Post embute os parametros dentro da requisção HTTP, não na URL

Vantagens do post :Get é limitado pelo tamanho da URL, aproximadamente 100-200 caracteresInformação é mais privada (não é visualizada na barra de endereço)

Desvantagens do post :não pode ser adicionado como favoritosnavegador não pode voltar sem perder dados (o famoso POSTDATA error)

Em ambos métodos os dados ficam acessíveis, segurança só através do protocolo HTTPS. Dados como senhas, cartao de crédito só usando HTTPS.

Basta configurar seu servidor WEB.

Page 75: PHP: Linguagem + Mysql + MVC + AJAX

Interação Cliente/Servidor

Page 76: PHP: Linguagem + Mysql + MVC + AJAX

Resposta HTTP

Page 77: PHP: Linguagem + Mysql + MVC + AJAX

Frame 93: 131 bytes on wire (1048 bits), 131 bytes captured (1048 bits)Ethernet II, Src: Cisco_a6:49:bf (00:26:99:a6:49:bf), Dst: Sony_1c:b8:6d (00:1d:ba:1c:b8:6d)Internet Protocol, Src: 200.131.128.6 (200.131.128.6), Dst: 200.131.132.208 (200.131.132.208)Transmission Control Protocol, Src Port: http (80), Dst Port: 35782 (35782), Seq: 10137, Ack: 394, Len: 65[Reassembled TCP Segments (10201 bytes): #79(1448), #81(1448), #83(1448), #85(1448), #87(1448), #89(1448), #91(1448), #93(65)]Hypertext Transfer Protocol HTTP/1.1 200 OK\r\n Date: Thu, 17 May 2012 13:21:43 GMT\r\n Server: Apache\r\n X-Powered-By: PHP/5.2.0-8+etch16\r\n Expires: Sun, 19 Nov 1978 05:00:00 GMT\r\n Last-Modified: Thu, 17 May 2012 13:21:43 GMT\r\n Cache-Control: store, no-cache, must-revalidate\r\n Cache-Control: post-check=0, pre-check=0\r\n Vary: Accept-Encoding\r\n Content-Encoding: gzip\r\n Content-Length: 9753\r\n Keep-Alive: timeout=2, max=100\r\n Connection: Keep-Alive\r\n Content-Type: text/html; charset=utf-8\r\n \r\n Content-encoded entity body (gzip): 9753 bytes -> 40621 bytesLine-based text data: text/html

Resposta

Page 78: PHP: Linguagem + Mysql + MVC + AJAX

GET / HTTP/1.1[CRLF]Host: www.unifei.edu.br[CRLF]Connection: close[CRLF]User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)[CRLF]Accept-Encoding: gzip[CRLF]Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]Cache-Control: no-cache[CRLF]Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]Referer: http://web-sniffer.net/[CRLF]

Name Value

Status: HTTP/1.1 200 OK

Date: Thu, 17 May 2012 16:04:29 GMTServer: ApacheX-Powered-By: PHP/5.2.0-8+etch16Set-Cookie: SESS74b6f83f5b7c7d694dc8d5ea132badb9=aab49f44f8990953c218b980400287

e6; expires=Sat, 09 Jun 2012 19:37:50 GMT; path=/; domain=.unifei.edu.brExpires: Sun, 19 Nov 1978 05:00:00 GMTLast-Modified: Thu, 17 May 2012 16:04:30 GMTCache-Control: store, no-cache, must-revalidateCache-Control: post-check=0, pre-check=0Vary: Accept-EncodingContent-Encoding: gzipContent-Length: 9739Connection: closeContent-Type: text/html; charset=utf-8

http://web-sniffer.net/

Requisição

Resposta

Page 79: PHP: Linguagem + Mysql + MVC + AJAX

Formulários HTML

● Um formulário HTML é um grupo de elemento UI que aceitam informações do cliente e envia ao servidor

● Exemplos (buttons, checkboxes, text fields, etc.)

Page 80: PHP: Linguagem + Mysql + MVC + AJAX

Formulários HTML

<form action="web app URL" method="get or post"> <fieldset> form controls </fieldset></form>

● atributo action indica a URL do servidor que irá processar os dados do formulário.

● atributo method expecifica os métodos HTTP GET or POST.

Page 81: PHP: Linguagem + Mysql + MVC + AJAX

Formulários HTML: Exemplo<form action="http://foo.com/app.php" method="get"><fieldset><legend>Pessoal:</legend><label>Nome: <input type="text" name="nome" /></label><label>Email: <input type="text" name = "email"/></label><label>Data de nascimento: <input type="text" name="dt_nasc" /></label><input type="submit" /></fieldset></form>

Page 82: PHP: Linguagem + Mysql + MVC + AJAX

Formulários HTML: Exemplo<form action="http://foo.com/app.php" method="get"><fieldset><legend>Pessoal:</legend><label>Nome: <input type="text" name="nome" /></label><label>Email: <input type="text" name = "email"/></label><label>Data de nascimento: <input type="text" name="dt_nasc" /></label><input type="submit" /></fieldset></form>

http://www.foo.com/app.php?nome=sergio&email=skosta%40gmail.com&dt_nasc=05%2F01

O atributo name especifica o nome do parametro que será passado ao servidorSe o usuário digitar "sergio" como nome, "[email protected]" as email, e 05/01 como data de nascimento?, quando clicar no submit, o browser ira fazer a seguinte requisição:

Page 83: PHP: Linguagem + Mysql + MVC + AJAX

Atividade

● Modifiquem o código anterior, de modo que mostre as informações recebidas, nome e imagem.

Page 84: PHP: Linguagem + Mysql + MVC + AJAX

Enviando e gravando arquivos - BLOB

● Ao invés de armazenar no sistema de arquivos, os bancos de dados atuais permitem armazenar qualquer arquivo exm um campo do tipo BLOB (Binart large object).

● Um BLOB é um objeto binario grande que pode guardar um montante variado de dados.

● No MySQL, os quatro tipos BLOB diferem apenas no tamanho maximo dos valores que eles podem guardar.○ TINYBLOB, 255 bytes○ BLOB, 64 KB○ MEDIUMBLOB, 16 MB○ LONGBLOB, 4GB

Page 85: PHP: Linguagem + Mysql + MVC + AJAX

Enviando e gravando arquivos - BLOB

create database aula_blob; uses database aula_blob; create table users (user varchar(60), avatar mediumblob, type varchar(50));

Criem o seguinte banco de dados e tabela

Page 86: PHP: Linguagem + Mysql + MVC + AJAX

Enviando e gravando arquivos - BLOB

<form action="saving_bd.php" method="post" enctype="multipart/form-data">

<label>User Name <input type="text" name="username" /></label><br />

<label>Upload an image as your avatar:<input type="file" name="avatar" /></label> <br /><input type="submit" />

</form>

Modifiquem o action do “upload_file.php”

upload_file.php

Page 87: PHP: Linguagem + Mysql + MVC + AJAX

<?php$mysqli = new mysqli("localhost", "root", "root", "aula");$username = $_REQUEST["username"];$file_name = $_FILES["avatar"]["tmp_name"];$size = $_FILES["avatar"]['size'];$tipo = $_FILES['avatar']['type'];

if (is_uploaded_file($file_name)) {$fp = fopen($file_name, "rb");$avatar = fread($fp, $size);$avatar = addslashes($avatar);fclose($fp);$qry = "INSERT INTO users VALUES ('$username', '$avatar', '$tipo')";if($mysqli->query($qry))

print "O arquivo foi gravado na base de dados.";else

print "Não foi possível gravar o arquivo na base de dados.";}

?>

Enviando e gravando arquivos - BLOBsaving_bd.php

Page 88: PHP: Linguagem + Mysql + MVC + AJAX

Carregando imagem do blob

<?php$mysqli = new mysqli("localhost", "root", "root", "aula"); $username = $_REQUEST['username'];$qry = "SELECT type, avatar FROM users WHERE user='$username'";$res = $mysqli->query($qry);$row = $res->fetch_object ();$tipo = $row->type;$conteudo = $row->avatar; header("Content-type: $tipo");print $conteudo; ?>

Page 89: PHP: Linguagem + Mysql + MVC + AJAX

Enviando e gravando arquivos - BLOBload_image.php?username=sergio

<html><body><img src="load_image.php?username=skosta" alt="avatar"></body></html>

Ou

Page 90: PHP: Linguagem + Mysql + MVC + AJAX

Atividade

1 Adaptem a solução anterior, de modo a gravar o arquivo diretamente no sistema de arquivo e guardar apenas um link para este.

2. Analisem criticamente o algoritmo das duas soluções, identificando os pontos fracos e fortes de ambas.

Page 91: PHP: Linguagem + Mysql + MVC + AJAX

Mantendo “estado” cliente/servidor

● HTTP é um protocolo stateless; ele apenas permite um cliente requisitar/receber um recurso de um dado servidor .

● Cookies e sessions existem para contornar este problema, como veremos.

Eventuamente precisamos manter alguns dados do cliente entre requições, saber que ainda se trata da mesma “sessão”.

Page 92: PHP: Linguagem + Mysql + MVC + AJAX

Cookies

Cookie, são dados no fomato (chave, valor) que podem ser enviado (header) para o cliente e que serão transmitidos entre todas as futuras conexões, enquanto ele existir.

● Autenticação● Rastreamento de usuário● Manter preferencias do usuário, carrinhos de compra,

etc.

Page 93: PHP: Linguagem + Mysql + MVC + AJAX

Cookies

Quando o cliente requisita uma pagina, o servidor pode responder enviando alguns cookie(s).Se o cliente recebeu algum cookie de um servidor, estes seram enviados de volta nas futuras requisições.

Page 94: PHP: Linguagem + Mysql + MVC + AJAX

Cookie – Mitos e FatosMitos: ● Cookies são similares a worms/viruses e podem apagar dados

do computador do usuario.● Cookies são formas de spyware e podem roubar informações

pessoais do usuário● Cookies geram popups espam.● Cookies são somente usados para propaganda.

Fatos: ● Cookies are somente dados, não código de programa.● Cookies não podem apagar ou ler informações do usuário● Cookies são usualmente anonymous (não contem informações

pessoais).● Cookies PODEM ser usado para rastrear seus habitos

particulares em uma visita particular em um site.

Page 95: PHP: Linguagem + Mysql + MVC + AJAX

Cookies persistência

● Session cookie : temporário cookie armazenado na memória do browser, é perdida com o fechamento do browser.○ Não pode ser usado para manter informações do usuário○ Seguro, por que nenhum programa é capaz de altera-lo

● Persistent cookie : é armazenado em um arquivo do computador.○ Pode ser usado para manter informações do usuario.○ Menos seguro, um usuário ou programa pode abrir o

arquivo, ver e alterar os seus valores.

Page 96: PHP: Linguagem + Mysql + MVC + AJAX

Cookies

<?phpsetcookie ("nome", "sergio");echo "te mandei um cookie (nome, sergio)"

?>

Em um dado contexto, um cookie pode ser enviado.

Page 97: PHP: Linguagem + Mysql + MVC + AJAX

Cookies

<?phpsetcookie ("nome", "sergio");echo "te mandei um cookie (nome, sergio)"

?>

Em um dado contexto, um cookie pode ser enviado.

<?phpecho $_COOKIE['nome']." voce por aqui :)";

?>

Acessado em outro contexto.

Page 98: PHP: Linguagem + Mysql + MVC + AJAX

Cookies

<?php$expire=time()+60*60*24*30;setcookie("user", "Alex Porter", $expire);

?>

O cookie pode ter um tempo pre-definido para expirar, um mês neste exemplo.

Page 99: PHP: Linguagem + Mysql + MVC + AJAX

Removendo Cookies

Se o servidor desejar remover um persistent cookie, ele deve definir seu valor novamente, com um timeout presente.

setcookie (“name”, “”, time() )

Page 100: PHP: Linguagem + Mysql + MVC + AJAX

function setCookie(c_name,value,exdays)...

}

function getCookie(c_name) {....

}

No Java Script os cookies podem ser criados e acessados pelo atributo document.cookie, que é uma string composta pelo conjunto de cookies separados por ponto e virgula:

document.cookie = “username=sergio;password=123”

Se quiser saber quais cookies existente, basta:console.log (document.cookie)

Cookies no cliente

cookies.js

Page 101: PHP: Linguagem + Mysql + MVC + AJAX

Atividade - Cookie

● Versão 1: Usando apenas cookies, façam um simples aplicativo de “coisas a fazer”. Botão adicionar insere a atividade de texto a lista e o remover tudo apaga.○ A última entrada precisa ser mantida entre as requisições.○ Pode ser feito apenas com código no cliente.

Ao clicar em uma tarefa, ele passa a cor para um cinza claro, e texto tachado (text-decoration:line-through). Por hora, não precisa salvar este estado.

Remove as tarefas da lista e apaga o cookie

Page 102: PHP: Linguagem + Mysql + MVC + AJAX

Session

● Session (sessão): um conceito abstrato que representa uma série de requisições e respostas HTTP entre um cliente e um servidor específico. O protocolo HTTP não suporta o conceito de sessão, porém no PHP é possível.

● Sessions vs. cookies: ○ Um cookie é um dado armazenado no cliente○ A sessão é armazenado no servido (somente 1 sessão por cliente)

● Sessions frequentemente utilizam cookies. O único cook que o cliente armazena é o session ID.

● Em uma requisição o cliente envia o session ID, e o servidor utiliza esta informação para pegar os dados de sessão.

Page 103: PHP: Linguagem + Mysql + MVC + AJAX

Session

● Cliente faz uma requisição ao servidor .

● Servidor armazena os dados da sessão e envia um identificador daquela sessão para o cliente.

● Cliente envia o identificador da sessão nas futuras requisições.

● Servidor usa este identificador para identificar os dados daquela sessão.

Page 104: PHP: Linguagem + Mysql + MVC + AJAX

Session

Hash

Page 105: PHP: Linguagem + Mysql + MVC + AJAX

Variáveis de sessão

<?phpsession_start();$_SESSION['nome'] = "sergio";echo $_SESSION['nome'];

?>

sessao1.php

Crio uma variavel de sessão

sempre deverá ser chamada para tratar as variaveis de sessões

Page 106: PHP: Linguagem + Mysql + MVC + AJAX

Variáveis de sessão: Criando e acessando

<?phpsession_start();$_SESSION['nome'] = "sergio";echo $_SESSION['nome'];

?>

<?phpsession_start();echo $_SESSION['nome'];

?>

sessao1.php

sessao2.php

sempre deverá ser chamada para tratar as variaveis de sessões

acessando uma variável criada em outro contexto

Page 107: PHP: Linguagem + Mysql + MVC + AJAX

<?phpsession_start();session_destroy();

?>

Variáveis de sessão: Destruindo

Page 108: PHP: Linguagem + Mysql + MVC + AJAX

<?phpsession_start();if ($_SESSION["authuser"] != 1) {echo "acesso negado";exit();}?><html><head><title></title></head><body><p>Bom dia <?=$_SESSION["username"]?> !!</p></body></html>

Verificando autenticaçãosalvem como sessao3.php e acessem-o

Page 109: PHP: Linguagem + Mysql + MVC + AJAX

<?phpsession_start();$_SESSION["authuser"] = 1;$_SESSION["username"] = "Sergio";echo "criado sessao";

?>

Verificando autenticaçãosalvem como sessao4.php e acessem-o e depois tentem novamente acessar o sessao3.php

Page 110: PHP: Linguagem + Mysql + MVC + AJAX

Sessão – Time out

● Como o HTTP é stateless, é dificil para o servidor saber quando uma sessão termina

● Idealmente, usuario explicitamente finalizaria, mais em muitos casos isto não acontece.

● Abordagens○ Client deleta cookie de sessão com o fechamento do

browser.○ Servidor automaticamente apaga as sessões depois de

um tempo.○ Sessões antigas consomem recursos e podem causar

problemas de segurança.○ Pode ser ajustado no arquivo de configuração

Page 111: PHP: Linguagem + Mysql + MVC + AJAX

Sessão – Time out

A variável "session.gc_maxlifetime" define o tempo de uma sessão, que por padrão é 1440 segundos, ou seja 24 minutos.

Podemos modificar estes valores através das funções ini_set.

<?phpsession_start ();echo ini_get ("session.gc_maxlifetime");ini_set ("session.gc_maxlifetime", "3600");echo ini_get ("session.gc_maxlifetime");

?>

Page 113: PHP: Linguagem + Mysql + MVC + AJAX

Mantenham a cabeça aberta, não tenham preconceitos

Prendam se a conceitos, não a linguagens e frameworks

Page 114: PHP: Linguagem + Mysql + MVC + AJAX

Mantenham a cabeça aberta, não tenham preconceitos

Prendam se a conceitos, não a linguagens e frameworks

Aprender novas linguagens é uma boa forma de treinar e se prepararem para aprender.

Page 115: PHP: Linguagem + Mysql + MVC + AJAX

PHP deve ser considerada em projetos de aplicações Web, principalmente em pequenos projetos e em protótipos.

Conclusão

Dependendo das necessidades, existem diversos frameworks completos, para persistência, MVC e testes de unidade. Similarmente ao Java, possuem um conjunto de regras, arquivos de onfiguração ....

A agilidade do PHP, é o fato dela ser uma linguagem interpretada, tornando o processo de "implantação" muito mais fácil.

PHP é uma linguagem leve, ágil, muito utilizada na web, e com muitos recursos que permite desenvolver software de qualidade.

Contudo, mesmo em grandes projetos PHP continua sendo usado, por exemplo, Facebook.