Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Curso PHP – Sessions, Database & MVC

Curso PHP – Sessions, Database & MVC

Jonata Weber

May 31, 2014
Tweet

More Decks by Jonata Weber

Other Decks in Programming

Transcript

  1. PHP Sessions • Como identificar um usuário na internet? •

    Sessōes trabalham com identificador único (UID) • Armazenamento temporário
  2. PHP Sessions <?php! ! // inicia um PHP Session! session_start();!

    ! // guarda uma informação na sessão! $_SESSION['message'] = 'Hello, Session!';! ! // recupera uma informação da sessão! echo $_SESSION['message'];! ! // remove parte da sessão ! unset($_SESSION['message']);! ! // remove a sessão inteira ! session_destroy();!
  3. Databases • Necessidade de Persistir e Recuperar dados por tempo

    indeterminado • Geralmente possui armazenamento não-volátil
  4. Drivers Nativos • Uma API diferente para cada banco de

    dados • mysqli, pgsql, mssql, etc. • Melhor opção até o PHP 5.1.0
  5. MySQL Extension • Será removida nas próximas versões • Funções

    iniciadas com mysql_* • mysql_connect, mysql_query, mysql_num_rows, etc… • Substituir por mysqli ou PDO Depreciada no PHP 5.5.0
  6. MySQLi Extension http://php.net/mysqli <?php! // mysqli! $mysqli = new mysqli("localhost",

    "root", "mysqlpwd", “test");! ! $result = $mysqli->query("SELECT 'Olá, usuário MySQL!' AS _message FROM DUAL");! ! $row = $result->fetch_assoc();! ! echo $row['_message'];!
  7. PDO Extension http://www.php.net/pdo <?php! ! // PDO! $pdo = new

    PDO('mysql:host=localhost;dbname=test', 'root', ‘mysqlpwd');! ! $statement = $pdo->query("SELECT 'Olá, usuário MySQL!' AS _message FROM DUAL");! ! $row = $statement->fetch(PDO::FETCH_ASSOC);! ! echo $row['_message'];!
  8. PDO Extension • Não irá traduzir suas consultas SQL •

    Conexão com múltiplos banco de dados usando a mesma API • Mais importante: PDO evita ataques de SQL Injections • PDO Statements + Bind Parameters
  9. SQL Injection <?php! ! $pdo = new PDO('sqlite:/path/db/users.db');! $pdo->query("SELECT name

    FROM users WHERE id = ".$_GET['id']); // <-- NO!! SELECT name FROM users WHERE id = 50! http://yourdomain.com/users?id=50 Resultado:
  10. SQL Injection SELECT name FROM users WHERE id = 50;DELETE

    FROM users! E se… http://yourdomain.com/users?id=50%3BDELETE+FROM+users Resultado: <?php! ! $pdo = new PDO('sqlite:/path/db/users.db');! $pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!!
  11. SQL Injection Como evitar? <?php! ! $pdo = new PDO('sqlite:/path/db/users.db');!

    $stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');! $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); // <-- Automatically sanitized by PDO! $stmt->execute();! Maiores informações: https://www.owasp.org/index.php/SQL_Injection
  12. –Wikipédia “É um modelo de arquitetura de software que separa

    a representação da informação da interação do usuário com ele” MVC Model-View-Controller
  13. MVC Model-View-Controller Resultado da Hackathon por Participante PARTICIPANTES PONTUAÇÃO John

    Doe 11 José Carlos 15 Huguinho da Mederi 9 Maria Joaquina 14 Raul Seixas Jr. 21 Exemplo
  14. MVC Model-View-Controller Exemplo Resultado da Hackathon por Participante 0 6

    11 17 22 John Doe José Carlos Huguinho da Mederi Maria Joaquina Raul Seixas Jr. 21 14 9 15 11
  15. MVC Model-View-Controller Exemplo Resultado da Hackathon por Participante 30% 20%

    13% 21% 16% John Doe José Carlos Huguinho da Mederi Maria Joaquina Raul Seixas Jr.
  16. • Model (modelo) • Consiste nos dados da aplicação, regras

    de negócios, lógica e funções; • View (Visão) • Pode ser qualquer saída de representação dos dados, como uma tabela ou um diagrama; • Controller (controlador) • Faz a mediação da entrada, convertendo-a em comandos para o modelo ou visão; MVC Model-View-Controller
  17. MVC + PHP Exemplo simples <? foreach ($fooList as $row):

    ?>! <?= $row['field1'] ?> - <?= $row['field1'] ?>! <? endforeach ?>! views/foo-list.php
  18. MVC + PHP Exemplo simples models/FooModel.php <?php! class Foo()! {!

    ! protected $db;! ! ! public function __construct(PDO $db)! ! {! ! ! $this->db = $db;! ! }! ! ! public functon getAllFoos() {! ! ! return $this->db->query('SELECT * FROM table');! ! }! }!
  19. MVC + PHP Exemplo simples <?php! ! $db = new

    PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');! ! // Make your model available! include 'models/FooModel.php';! ! // Create an instance! $foo = new FooModel($db);! $fooList = $foo->getAllFoos();! ! // Show the view! include 'views/foo-list.php';! foo.php
  20. Front Controller • Padrão Arquitetural • Bastante utilizado em Aplicações

    Web • Responsável pelo Fluxo da Aplicação • Evita duplicação de código • Manipulação de Sessões, Caching, Filtro de dados, Autenticação, etc.
  21. Front Controller Web Application Front Controller User Controller Job Controller

    User Model User View Job Model Job View GET /index.php POST /index.php
  22. Referências • http://www.phptherightway.com/ • http://www.php.net/ • http://st-www.cs.illinois.edu/users/smarch/st-docs/ mvc.html (Artigo Original

    sobre MVC) • http://pt.wikipedia.org/wiki/MVC • http://en.wikipedia.org/wiki/ Front_Controller_pattern#Examples