SlideShare une entreprise Scribd logo
1  sur  115
Télécharger pour lire hors ligne
PHP
Linguagem + MySQL + MVC
+ AJAX + Session
Prof: Sérgio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Roteiro
Linguagens e framework
PHP e um simples MVC
A linguagem PHP
PHP + MySQL
PHP + MySQL + MVC
PHP + MySQL + MVC + AJAX
Controle de sessão e cookies
Linguagens são compostas por sintaxe,
semântica e pragmática. Em computação
ele deve ser universal e implementável.
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)
Linguagens Framework
JAVA J2EE (JSF, STRUTS...)
RUBY ON RAILS
PHP Zend, CakePHP...
C#, Visual Basic ... .NET
Haskell SNAP,Happstack
Django, ZopePython
Perl Catalyst
CppCMSC++
Frameworks
● Disciplina
● Simplificação
● Agilidade / Rapidez
● Padrões de desenvolvimento / Design
Pattern
● Organização
● Menos código
● Conjunto de utilitários
PHP é a tecnologia base:
Facebook
Yahoo
Wikipedia
Apple Nasa
IBM
Server
side
Client
side
PHP
Guia rápido
http://www.php.net/manual/pt_BR/
Ciclo de vida
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.
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 ?>
Imprimir HTML tags em PHP = bad style
<!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
PHP Frameworks
MVC Objeto relacional Testes
PHPUnitCakePHP
Zend
Simphony2
CakePHP
PROPEL
Doctrine
Code igneter
lime
Antes de vermos detalhes da
LINGUAGEM, veremos um exemplo
simples de um MVC sem o auxilio de
frameworks.
Baixem o arquivo.
Model View Controler
Simplificado, pressuposto -> cliente através da
Web.
Exemplo usado de: http://php-html.net/tutorials/model-view-controller-in-php/
<?php
include_once("controller/Controller.php");
$controller = new Controller();
$controller->invoke();
?>
Index.php
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
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
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
….
<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.
PHP - Linguagem
Imperativa
Dinâmica
Orientada a objeto
Estilo funcional
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.
<?php
$var = 'Bob';
$Var = 'Joe'; // case sensitive, $var e diferente de $Var
echo "$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
<?php
define("CONSTANTE", "Alô Mundo.");
define("SALARIOMINIMO", 1000);
define("DIRETORIOHOME", "/home");
?>
Constante
Constantes 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
Valores e tipos
Primitivos
boolean
integer
Float
string
Compostos:
array
Object
Especiais
resource
NULL
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
?>
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;
?>
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.
<?php
echo 'isto é uma string comum';
echo 'Você pode incluir novas linhas em strings, dessa
maneira que estará
tudo bem';
?>
Array
Um 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"]; // bar
echo $arr[12]; // 1
?>
array( chave => valor
, ...
)
// chave pode ser tanto string ou um integer
// valor pode ser qualquer coisa
Objeto
Um Objeto pode ser criado com o construtor de
linguagem new
<?php
class foo
{
function do_foo() {
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
Objeto
Um Objeto pode ser criado com o construtor de
linguagem new
<?php
class foo
{
function do_foo() {
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
Veremos sobre
classes em
PHP mais a
frente
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");
?>
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().
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)
Recebendo dados de uma
requisição
Para 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
?>
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;
?>
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.
Operadores aritméticos
Operadores Descrição
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo (resto da divisão)
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.
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
<?php
if ($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
“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.
PHP Orientado a objetos
# 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
class ClassName {
# atributos da classe
public $name; # atributos públicos
private $name; # atributos privados
# construtor da classe
public function __construct(parameters) {
statement(s);
}
# métodos – comportamento de cada objeto
public function name(parameters) {
statements;
}
}
Sintaxe para declaração de classe
class ClassName {
# atributos da classe
public $name; # atributos públicos
private $name; # atributos privados
# construtor da classe
public function __construct(parameters) {
statement(s);
}
# métodos – comportamento de cada objeto
public function name(parameters) {
statements;
}
}
Sintaxe para declaração de classe
<?php
class Point {
public $x;
public $y;
# equivalent of a Java constructor
public 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 method
public function __toString() {
return "(" . $this->x . ", " . $this->y . ")";
}
}
$p1 = new Point (2,4);
echo $p1;
?>
Exemplo
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
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
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
Integrando com o banco de dados
PHP + MySQL
Baixem o arquivo.
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.
<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 MySQL book.php
Click aqui para ver o resultado
Voltando ao simples MVC ....
Só mudaremos o Model.php,
o restante se mantêm
PHP + MVC + MySQL
Baixem o arquivo.
Click aqui para ver o resultado
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.
PHP + MVC + MySQL + AJAX
Baixem o arquivo.
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
PHP + MVC + MySQL + AJAX
<?php
require_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
$(".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
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
Interação Cliente/Servidor
Interação Cliente/Servidor
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.
Uniform Resource Locator (URL)
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
Método (GET)
Método (POST)
Get vs Post
Get 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 caracteres
Informação é mais privada (não é visualizada na barra de endereço)
Desvantagens do post :
não pode ser adicionado como favoritos
navegador não pode voltar sem perder dados (o famoso POSTDATA error)
Get vs Post
Get 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 caracteres
Informação é mais privada (não é visualizada na barra de endereço)
Desvantagens do post :
não pode ser adicionado como favoritos
navegador 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.
Interação Cliente/Servidor
Resposta HTTP
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 OKrn
Date: Thu, 17 May 2012 13:21:43 GMTrn
Server: Apachern
X-Powered-By: PHP/5.2.0-8+etch16rn
Expires: Sun, 19 Nov 1978 05:00:00 GMTrn
Last-Modified: Thu, 17 May 2012 13:21:43 GMTrn
Cache-Control: store, no-cache, must-revalidatern
Cache-Control: post-check=0, pre-check=0rn
Vary: Accept-Encodingrn
Content-Encoding: gziprn
Content-Length: 9753rn
Keep-Alive: timeout=2, max=100rn
Connection: Keep-Alivern
Content-Type: text/html; charset=utf-8rn
rn
Content-encoded entity body (gzip): 9753 bytes -> 40621 bytes
Line-based text data: text/html
Resposta
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 GMT
Server: Apache
X-Powered-By: PHP/5.2.0-8+etch16
Set-Cookie: SESS74b6f83f5b7c7d694dc8d5ea132badb9=aab49f44f8990953c218b980400287
e6; expires=Sat, 09 Jun 2012 19:37:50 GMT; path=/; domain=.unifei.edu.br
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Thu, 17 May 2012 16:04:30 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 9739
Connection: close
Content-Type: text/html; charset=utf-8
http://web-sniffer.net/
Requisição
Resposta
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.)
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.
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>
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 servidor
Se o usuário digitar "sergio" como nome, "skosta@gmail.com" as email, e 05/01
como data de nascimento?, quando clicar no submit, o browser ira fazer a
seguinte requisição:
Atividade
● Modifiquem o código anterior, de modo que mostre as
informações recebidas, nome e imagem.
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
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
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
<?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 - BLOB
saving_bd.php
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;
?>
Enviando e gravando arquivos - BLOB
load_image.php?username=sergio
<html>
<body>
<img src="load_image.php?username=skosta" alt="avatar">
</body>
</html>
Ou
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.
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”.
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.
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.
Cookie – Mitos e Fatos
Mitos:
● 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.
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.
Cookies
<?php
setcookie ("nome", "sergio");
echo "te mandei um cookie (nome, sergio)"
?>
Em um dado contexto, um
cookie pode ser enviado.
Cookies
<?php
setcookie ("nome", "sergio");
echo "te mandei um cookie (nome, sergio)"
?>
Em um dado contexto, um
cookie pode ser enviado.
<?php
echo $_COOKIE['nome']." voce por aqui :)";
?>
Acessado em outro contexto.
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.
Removendo Cookies
Se o servidor desejar remover um persistent
cookie, ele deve definir seu valor novamente,
com um timeout presente.
setcookie (“name”, “”, time() )
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
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
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.
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.
Session
Hash
Variáveis de sessão
<?php
session_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
Variáveis de sessão: Criando e acessando
<?php
session_start();
$_SESSION['nome'] = "sergio";
echo $_SESSION['nome'];
?>
<?php
session_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
<?php
session_start();
session_destroy();
?>
Variáveis de sessão: Destruindo
<?php
session_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ção
salvem como sessao3.php e acessem-o
<?php
session_start();
$_SESSION["authuser"] = 1;
$_SESSION["username"] = "Sergio";
echo "criado sessao";
?>
Verificando autenticação
salvem como sessao4.php e acessem-o e depois
tentem novamente acessar o sessao3.php
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
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.
<?php
session_start ();
echo ini_get ("session.gc_maxlifetime");
ini_set ("session.gc_maxlifetime", "3600");
echo ini_get ("session.gc_maxlifetime");
?>
Sessão
● Experimentem os exemplos simples de
sessão:
Baixem aqui.
Mantenham a cabeça aberta, não tenham preconceitos
Prendam se a conceitos, não a linguagens e
frameworks
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.
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.

Contenu connexe

Tendances

Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSSledsifes
 
Basic WordPress Workshop Presentation
Basic WordPress Workshop PresentationBasic WordPress Workshop Presentation
Basic WordPress Workshop PresentationFelix Albutra
 
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...Edureka!
 
HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)Gustavo Zimmermann
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
PHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniterPHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniterKHALID C
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 
PHP complete reference with database concepts for beginners
PHP complete reference with database concepts for beginnersPHP complete reference with database concepts for beginners
PHP complete reference with database concepts for beginnersMohammed Mushtaq Ahmed
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a InternetLeonardo Soares
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Basic WordPress for Beginner ppt
Basic WordPress for Beginner pptBasic WordPress for Beginner ppt
Basic WordPress for Beginner pptDipika Wadhvani
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoNorton Guimarães
 

Tendances (20)

JQuery introduction
JQuery introductionJQuery introduction
JQuery introduction
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSS
 
Introdução CSS
Introdução CSSIntrodução CSS
Introdução CSS
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
Basic WordPress Workshop Presentation
Basic WordPress Workshop PresentationBasic WordPress Workshop Presentation
Basic WordPress Workshop Presentation
 
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
 
HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
PHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniterPHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniter
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
PHP complete reference with database concepts for beginners
PHP complete reference with database concepts for beginnersPHP complete reference with database concepts for beginners
PHP complete reference with database concepts for beginners
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Introdução ao HTML e CSS
Introdução ao HTML e CSSIntrodução ao HTML e CSS
Introdução ao HTML e CSS
 
Curso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTMLCurso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTML
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a Internet
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Basic WordPress for Beginner ppt
Basic WordPress for Beginner pptBasic WordPress for Beginner ppt
Basic WordPress for Beginner ppt
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP Básico
 
Php Lecture Notes
Php Lecture NotesPhp Lecture Notes
Php Lecture Notes
 

En vedette

Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zeroFred Ramos
 
Transtornos de atenção e de aprendizagem
Transtornos de atenção e de aprendizagemTranstornos de atenção e de aprendizagem
Transtornos de atenção e de aprendizagemCaio Grimberg
 
Enfermidades específicas do joelho
Enfermidades específicas do joelhoEnfermidades específicas do joelho
Enfermidades específicas do joelhoThais Benicio
 
Planejamento Estratégico de Marketing (parte 1 de 2)
Planejamento Estratégico de Marketing (parte 1 de 2)Planejamento Estratégico de Marketing (parte 1 de 2)
Planejamento Estratégico de Marketing (parte 1 de 2)Davi Rocha
 
Desenvolvimento Web com Drupal 6
Desenvolvimento Web com Drupal 6Desenvolvimento Web com Drupal 6
Desenvolvimento Web com Drupal 6Vinícius de Paula
 
Plano de-leitura-cronologica
Plano de-leitura-cronologicaPlano de-leitura-cronologica
Plano de-leitura-cronologicaClaudia Marinho
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsGilmar Pupo
 
Visual thinking usability coffee st gallen 19 03 2015
Visual thinking usability coffee st gallen 19 03 2015Visual thinking usability coffee st gallen 19 03 2015
Visual thinking usability coffee st gallen 19 03 2015soultank AG
 
O corpo e a expressão artística e cultural
O corpo e a expressão artística e culturalO corpo e a expressão artística e cultural
O corpo e a expressão artística e culturalaluisiobraga
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume Laforge
 
Analysefinface 140127173213-phpapp02
Analysefinface 140127173213-phpapp02Analysefinface 140127173213-phpapp02
Analysefinface 140127173213-phpapp02OULAAJEB YOUSSEF
 
Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)Elie ALLOUCHE
 
Rails und Scrum in großen Projekten
Rails und Scrum in großen ProjektenRails und Scrum in großen Projekten
Rails und Scrum in großen ProjektenPhillip Oertel
 

En vedette (20)

Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zero
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Transtornos de atenção e de aprendizagem
Transtornos de atenção e de aprendizagemTranstornos de atenção e de aprendizagem
Transtornos de atenção e de aprendizagem
 
Enfermidades específicas do joelho
Enfermidades específicas do joelhoEnfermidades específicas do joelho
Enfermidades específicas do joelho
 
Planejamento Estratégico de Marketing (parte 1 de 2)
Planejamento Estratégico de Marketing (parte 1 de 2)Planejamento Estratégico de Marketing (parte 1 de 2)
Planejamento Estratégico de Marketing (parte 1 de 2)
 
Obsessão e desobsessão
Obsessão e desobsessãoObsessão e desobsessão
Obsessão e desobsessão
 
Desenvolvimento Web com Drupal 6
Desenvolvimento Web com Drupal 6Desenvolvimento Web com Drupal 6
Desenvolvimento Web com Drupal 6
 
Plano de-leitura-cronologica
Plano de-leitura-cronologicaPlano de-leitura-cronologica
Plano de-leitura-cronologica
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Visual thinking usability coffee st gallen 19 03 2015
Visual thinking usability coffee st gallen 19 03 2015Visual thinking usability coffee st gallen 19 03 2015
Visual thinking usability coffee st gallen 19 03 2015
 
O corpo e a expressão artística e cultural
O corpo e a expressão artística e culturalO corpo e a expressão artística e cultural
O corpo e a expressão artística e cultural
 
Motores
MotoresMotores
Motores
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
 
Analysefinface 140127173213-phpapp02
Analysefinface 140127173213-phpapp02Analysefinface 140127173213-phpapp02
Analysefinface 140127173213-phpapp02
 
Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)
 
Rails und Scrum in großen Projekten
Rails und Scrum in großen ProjektenRails und Scrum in großen Projekten
Rails und Scrum in großen Projekten
 
E-commerce et propriété intellectuelle
E-commerce et propriété intellectuelleE-commerce et propriété intellectuelle
E-commerce et propriété intellectuelle
 
Propriété intellectuelle nov 2012
Propriété intellectuelle nov 2012Propriété intellectuelle nov 2012
Propriété intellectuelle nov 2012
 

Similaire à PHP MVC AJAX

Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptRaphael Donaire Albino
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIinfo_cimol
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09Carlos Santos
 
Curso completo php
Curso completo phpCurso completo php
Curso completo phpbreninho94
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisCarlos Santos
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
Introdução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHPIntrodução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHPLeonardo Soares
 

Similaire à PHP MVC AJAX (20)

Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
M5 php rc
M5 php rcM5 php rc
M5 php rc
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScript
 
Minicurso php
Minicurso phpMinicurso php
Minicurso php
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Php
PhpPhp
Php
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
2ª aula php
2ª aula php2ª aula php
2ª aula php
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Curso completo php
Curso completo phpCurso completo php
Curso completo php
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Introdução ao PHP Parte 2
Introdução ao PHP Parte 2Introdução ao PHP Parte 2
Introdução ao PHP Parte 2
 
Aula3
Aula3Aula3
Aula3
 
Php m18
Php m18Php m18
Php m18
 
Introdução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHPIntrodução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHP
 
Aula2
Aula2Aula2
Aula2
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 

Plus de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Plus de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

PHP MVC AJAX

  • 1. PHP Linguagem + MySQL + MVC + AJAX + Session Prof: Sérgio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Roteiro Linguagens e framework PHP e um simples MVC A linguagem PHP PHP + MySQL PHP + MySQL + MVC PHP + MySQL + MVC + AJAX Controle de sessão e cookies
  • 4. Linguagens são compostas por sintaxe, semântica e pragmática. Em computação ele deve ser universal e implementável.
  • 5. 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)
  • 6. Linguagens Framework JAVA J2EE (JSF, STRUTS...) RUBY ON RAILS PHP Zend, CakePHP... C#, Visual Basic ... .NET Haskell SNAP,Happstack Django, ZopePython Perl Catalyst CppCMSC++
  • 7. Frameworks ● Disciplina ● Simplificação ● Agilidade / Rapidez ● Padrões de desenvolvimento / Design Pattern ● Organização ● Menos código ● Conjunto de utilitários
  • 8. PHP é a tecnologia base: Facebook Yahoo Wikipedia Apple Nasa IBM
  • 12. 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.
  • 13. 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 ?>
  • 14. Imprimir HTML tags em PHP = bad style
  • 15. <!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
  • 16. PHP Frameworks MVC Objeto relacional Testes PHPUnitCakePHP Zend Simphony2 CakePHP PROPEL Doctrine Code igneter lime
  • 17. Antes de vermos detalhes da LINGUAGEM, veremos um exemplo simples de um MVC sem o auxilio de frameworks. Baixem o arquivo.
  • 18. Model View Controler Simplificado, pressuposto -> cliente através da Web. Exemplo usado de: http://php-html.net/tutorials/model-view-controller-in-php/
  • 19. <?php include_once("controller/Controller.php"); $controller = new Controller(); $controller->invoke(); ?> Index.php
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. …. <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.
  • 26. 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.
  • 27. <?php $var = 'Bob'; $Var = 'Joe'; // case sensitive, $var e diferente de $Var echo "$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
  • 28. <?php define("CONSTANTE", "Alô Mundo."); define("SALARIOMINIMO", 1000); define("DIRETORIOHOME", "/home"); ?> Constante Constantes 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
  • 30. 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 ?>
  • 31. 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; ?>
  • 32. 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. <?php echo 'isto é uma string comum'; echo 'Você pode incluir novas linhas em strings, dessa maneira que estará tudo bem'; ?>
  • 33. Array Um 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"]; // bar echo $arr[12]; // 1 ?> array( chave => valor , ... ) // chave pode ser tanto string ou um integer // valor pode ser qualquer coisa
  • 34. Objeto Um Objeto pode ser criado com o construtor de linguagem new <?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); ?>
  • 35. Objeto Um Objeto pode ser criado com o construtor de linguagem new <?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); ?> Veremos sobre classes em PHP mais a frente
  • 36. 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"); ?>
  • 37. 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().
  • 38. 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)
  • 39. Recebendo dados de uma requisição Para 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 ?>
  • 40. 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; ?>
  • 41. 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.
  • 42. Operadores aritméticos Operadores Descrição + Adição - Subtração * Multiplicação / Divisão % Módulo (resto da divisão)
  • 43. 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.
  • 44. 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
  • 45. <?php if ($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
  • 46. “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.
  • 47. PHP Orientado a objetos
  • 48. # 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
  • 49. class ClassName { # atributos da classe public $name; # atributos públicos private $name; # atributos privados # construtor da classe public function __construct(parameters) { statement(s); } # métodos – comportamento de cada objeto public function name(parameters) { statements; } } Sintaxe para declaração de classe
  • 50. class ClassName { # atributos da classe public $name; # atributos públicos private $name; # atributos privados # construtor da classe public function __construct(parameters) { statement(s); } # métodos – comportamento de cada objeto public function name(parameters) { statements; } } Sintaxe para declaração de classe
  • 51. <?php class Point { public $x; public $y; # equivalent of a Java constructor public 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 method public function __toString() { return "(" . $this->x . ", " . $this->y . ")"; } } $p1 = new Point (2,4); echo $p1; ?> Exemplo
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. Integrando com o banco de dados PHP + MySQL Baixem o arquivo.
  • 56. 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.
  • 57. <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 MySQL book.php Click aqui para ver o resultado
  • 58. Voltando ao simples MVC .... Só mudaremos o Model.php, o restante se mantêm PHP + MVC + MySQL Baixem o arquivo. Click aqui para ver o resultado
  • 59. 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.
  • 60. PHP + MVC + MySQL + AJAX Baixem o arquivo.
  • 61. 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
  • 62. PHP + MVC + MySQL + AJAX <?php require_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
  • 63. $(".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
  • 64. 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
  • 67. 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.
  • 69. 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
  • 70.
  • 73. Get vs Post Get 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 caracteres Informação é mais privada (não é visualizada na barra de endereço) Desvantagens do post : não pode ser adicionado como favoritos navegador não pode voltar sem perder dados (o famoso POSTDATA error)
  • 74. Get vs Post Get 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 caracteres Informação é mais privada (não é visualizada na barra de endereço) Desvantagens do post : não pode ser adicionado como favoritos navegador 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.
  • 77. 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 OKrn Date: Thu, 17 May 2012 13:21:43 GMTrn Server: Apachern X-Powered-By: PHP/5.2.0-8+etch16rn Expires: Sun, 19 Nov 1978 05:00:00 GMTrn Last-Modified: Thu, 17 May 2012 13:21:43 GMTrn Cache-Control: store, no-cache, must-revalidatern Cache-Control: post-check=0, pre-check=0rn Vary: Accept-Encodingrn Content-Encoding: gziprn Content-Length: 9753rn Keep-Alive: timeout=2, max=100rn Connection: Keep-Alivern Content-Type: text/html; charset=utf-8rn rn Content-encoded entity body (gzip): 9753 bytes -> 40621 bytes Line-based text data: text/html Resposta
  • 78. 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 GMT Server: Apache X-Powered-By: PHP/5.2.0-8+etch16 Set-Cookie: SESS74b6f83f5b7c7d694dc8d5ea132badb9=aab49f44f8990953c218b980400287 e6; expires=Sat, 09 Jun 2012 19:37:50 GMT; path=/; domain=.unifei.edu.br Expires: Sun, 19 Nov 1978 05:00:00 GMT Last-Modified: Thu, 17 May 2012 16:04:30 GMT Cache-Control: store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0 Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 9739 Connection: close Content-Type: text/html; charset=utf-8 http://web-sniffer.net/ Requisição Resposta
  • 79. 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.)
  • 80. 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.
  • 81. 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>
  • 82. 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 servidor Se o usuário digitar "sergio" como nome, "skosta@gmail.com" as email, e 05/01 como data de nascimento?, quando clicar no submit, o browser ira fazer a seguinte requisição:
  • 83. Atividade ● Modifiquem o código anterior, de modo que mostre as informações recebidas, nome e imagem.
  • 84. 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
  • 85. 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
  • 86. 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
  • 87. <?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 - BLOB saving_bd.php
  • 88. 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; ?>
  • 89. Enviando e gravando arquivos - BLOB load_image.php?username=sergio <html> <body> <img src="load_image.php?username=skosta" alt="avatar"> </body> </html> Ou
  • 90. 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.
  • 91. 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”.
  • 92. 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.
  • 93. 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.
  • 94. Cookie – Mitos e Fatos Mitos: ● 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.
  • 95. 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.
  • 96. Cookies <?php setcookie ("nome", "sergio"); echo "te mandei um cookie (nome, sergio)" ?> Em um dado contexto, um cookie pode ser enviado.
  • 97. Cookies <?php setcookie ("nome", "sergio"); echo "te mandei um cookie (nome, sergio)" ?> Em um dado contexto, um cookie pode ser enviado. <?php echo $_COOKIE['nome']." voce por aqui :)"; ?> Acessado em outro contexto.
  • 98. 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.
  • 99. Removendo Cookies Se o servidor desejar remover um persistent cookie, ele deve definir seu valor novamente, com um timeout presente. setcookie (“name”, “”, time() )
  • 100. 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
  • 101. 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
  • 102. 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.
  • 103. 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.
  • 105. Variáveis de sessão <?php session_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
  • 106. Variáveis de sessão: Criando e acessando <?php session_start(); $_SESSION['nome'] = "sergio"; echo $_SESSION['nome']; ?> <?php session_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
  • 108. <?php session_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ção salvem como sessao3.php e acessem-o
  • 109. <?php session_start(); $_SESSION["authuser"] = 1; $_SESSION["username"] = "Sergio"; echo "criado sessao"; ?> Verificando autenticação salvem como sessao4.php e acessem-o e depois tentem novamente acessar o sessao3.php
  • 110. 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
  • 111. 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. <?php session_start (); echo ini_get ("session.gc_maxlifetime"); ini_set ("session.gc_maxlifetime", "3600"); echo ini_get ("session.gc_maxlifetime"); ?>
  • 112. Sessão ● Experimentem os exemplos simples de sessão: Baixem aqui.
  • 113. Mantenham a cabeça aberta, não tenham preconceitos Prendam se a conceitos, não a linguagens e frameworks
  • 114. 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.
  • 115. 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.