LAB 11 Programação em JavaScript, JQuery, e AJAX

Documentos relacionados
LAB 11 Programação em JavaScript, JQuery, e AJAX

LAB 10 Programação com o framework CodeIgniter [parte 2]

LAB 9 Programação com o framework Codeigniter [parte 1]

LAB 7 Cookies e Sessões em PHP

LAB 12 Construção de uma E-shop (programação em HTML, CSS, Bootstrap, PHP, CodeIgniter, JavaScript, JQuery, AJAX)

LAB 12 Construção de uma E-shop (programação em HTML, CSS, Bootstrap, PHP, CodeIgniter, JavaScript, JQuery, AJAX)

LAB 8 em PHP. 1. Assume-se neste lab que concluiu com sucesso o LAB7. Copie todos os ficheiros da pasta LAB7 para a pasta LAB8.

LAB 5 Formulários com PHP

LAB 5 Formulários com PHP

Bases de Dados 2015/2016. Enunciado do Projeto Parte 2. O trabalho a desenvolver para a primeira parte do projeto consiste nos seguintes itens:

Começando com Zend Framework

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

O JasperReports Studio é uma ferramenta de software que oferece um ambiente visual para criar relatórios para a plataforma Java. É open source.

Sensor de temperatura Parte 5 Cleiton Bueno Preparando o ambiente do Banco de dados Mysql

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Iniciando com Zend_Auth By Rob Allen, Document Revision Copyright 2007

Marcos Alexandruk Marcos Alexandruk

05/05/2017 Stored Procedures e Functions no MySQL com PhpMyAdmin

Prof. Dr. Joaquim Assunção Banco de Dados. SQL (parte 4) DDL Restrições

Desenvolvimento de Sistemas Web Prof. Leandro Roberto. Aula 18 JavaScript: Eventos MySQL PHP (insert, update e delete)

<html> <body> <h1>pesquisar livros no acervo</h1> <form action="buscalivro.php" method="post">

AMBIENTE WEB PARA GERÊNCIA DE PROCESSO DE SOFTWARE BASEADO NO SCRUM

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS BANCO DE DADOS I PROFA. CLEIANE GONÇALVES OLIVEIRA ATIVIDADE 15

Zabbix 3 Instalação INSTALAÇÃO

Interagindo com Banco de Dados

Database and Applications. Criação, inserção de dados PHP+MySQL

PSI Linguagem de Definição de dados. Módulo 15

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

História. Introdução ao MySQL

(1,n) venda. (1,1) realizacao. cliente. (0,n) (1,1) contem. produto. Laboratório de Banco de Dados Exercicios

C A P I T U L O 10 F U N Ç Õ E S I N T E R N A S P H P P A R A B A N C O D E D A D O S

Personal Home Page PHP. Prof. Luiz Claudio F. de Souza

Transacções. Vitor Vaz da Silva

Many-to-many. Mapear no Context Na classe Context.cs, dentro do método OnModelCreating, adicionar o trecho

GUIA PHP com MYSQL Autor: Everton Mendes Messias

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

Passos Preliminares: Acessando a máquina virtual via ssh.

Linguagem SQL (Parte II)

Banco de Dados. Professora: Luciana Faria

Sistema para Gerenciamento de Lanchonete(hamburgueria)

SQL Básica. Andre Noel

English Português. By erickalves 25 Julho, :08. Devido à política (#) de segurança. Encontrar Blogs Crie o seu blog de graça Ganhe prêmios

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Análise de transcriptoma usando a base de dados Kegg Orthology

A linguagem SQL

Introdução à linguagem SQL

Lista de exercícios I - RESPOSTAS Servlets e banco de dados


INSERT INTO shop VALUES (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), (3,'D',1.25),(4,'D',19.95);

EXERCÍCIOS PRÁTICOS DE REVISÃO. Banco de Dados

Escola Secundária de Albufeira. Comandos MySQL. (Páginas Web Dinâmicas: PHP e MySQL) Carlos Nunes

Como criar um banco de dados usando o mysql

Fórum Internacional Software Livre 8.0. PEAR::MDB2_Schema. Igor Feghali

U.C Fundamentos de Bases de Dados Resolução e Critérios de Correção INSTRUÇÕES:

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

COMPUTAÇÃO E PROGRAMAÇÃO

1 Criando um blog com o CodeIgniter

AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

Construindo um sistema simples de cadastro de fornecedores em PHP e MySQL.

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

Professor Leonardo Larback

Migrando de rede NAT para rede roteada

Especializado Web Programmer

Curso PHP Aula 08. Bruno Falcão

JAVAWEB AULA 2 Prof. Daniela Pires Sumário

Projeto de Banco de Dados: Empresa X

Tabelas. Banco de Dados I MySQL

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

LEIA ATENTAMENTE AS SEGUINTES INSTRUÇÕES:

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

'%'! $!0" $ 8 ' %%! % '! $ $$% + ' %!%$/)!'4!+,"/)!)+,/)% *! +,"0''% * %$!*!$$ #!"%&%'%'%$! "94(# ' %'$%$$$%0%$%' *!% %%%'!**% > %% %%!31?

Integração por Web Services

Web Development. Apresentação. Destinatários. Pré-requisitos. Web Design & Development

Bem vindos ao Curso de ASP.NET MVC 3 Razor e C#

SQL Linguagem de Definição de Dados

Programação WEB. Prof. André Gustavo Duarte de Almeida www3.ifrn.edu.br/~andrealmeida. Aula II jquery UI

Importar e Exportar Dados

22/05/2012 CRIANDO UM PROJETO COM TELAS ESTRUTURA DA APLICAÇÃO LOGIN BANCO DE DADOS TAREFAS PHP MYSQL PARTE 2

Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API

BCD29008 Banco de dados

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

Programação WEB é à Quinta-feira!

AULA 8 CRIANDO UMA CLASSE EM PHP INTERAGINDO COM BANCO DE DADOS - COM RELACIONAMENTO ENTRE TABELAS

Prof. Carlos Majer Aplicações Corporativas UNICID

Tarefa Orientada 8 Criação de tabelas

Aplicação MVC + Entity + MySQL

PROJETOS EXEMPLO DE ASP.NET MVC

SISTEMA GERENCIAMENTO DE PRODUTOS PHP E MySQL 1. APRESENTAÇÃO


MySQL + PHP 06/05/2015. IFSC/campus Florianópolis Programação para a WEB Prof. Herval Daminelli

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26

6. Introdução à Linguagem PHP

Transcrição:

LAB 11 Programação em JavaScript, JQuery, e AJAX Assume-se aqui que já realizou com sucesso o LAB9 e LAB10 Faça uma cópia da pasta LAB9_10 para a pasta LAB11 a12345@daw:~/public_html$ cp -R LAB9_10 LAB11 Actualize a variavel base_url no ficheiro configphp 1 a12345@australia:~/public_html/lab11/application/config$nano configphp $config['base_url'] = '/~a12345/lab11 ; Actualize as permissões na pastas templates_c a12345@daw:~/public_html/lab11/application/views$ chmod g+rw templates_c FUNCIONALIDADE REPLY TO POST 1 Adicione a tabela replies à sua base de dados a12345@daw:~$mysql -u a12345 -p -h 101023183 db_a12345 mysql> CREATE TABLE `replies` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` text CHARACTER SET utf8 COLLATE utf8_bin, `user_id` int(11) DEFAULT NULL, `micropost_id` int(11) DEFAULT NULL, `created_at` datetime NOT NULL, PRIMARY KEY (`id`), CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), CONSTRAINT FOREIGN KEY (`micropost_id`) REFERENCES `microposts` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 Nota: se desejar pode realizar o comando utilizando a interface web em http://alldeeifctualgpt/phpmyadmin 2 Actualize o template index_templatetpl que foi realizado no LAB9, de forma a ter o link 1 Nota: se modificou o ficheiro htaccess, terá que actualizar também a RewriteBase no ficheiro LAB11/htaccess: RewriteBase /~a12345/lab11 LabJavaScript 1/10

<a href="$post_url$blogid">update blog</a> com o texto update blog se o utilizador que fez log in é o autor do post (já existente) com o texto reply to blog se o post não pertence ao utilizador (novidade) Actualize o método index()no ficheiro que define a classe do controlador (public_html/lab11/application/controllers/blogphp) de forma a garantir que em ambos os casos href seja http://alldeeifctualgpt/~a12345/lab11/indexphp/blog/post/xx Utilize as funções base_url() ou site_url() para garantir que o seu site é portável 3 Actualize o método post dentro do ficheiro que define a classe do controlador (public_html/lab11/application/controllers/blogphp) Para: Retornar o template blog_templatetpl novamente, em caso do seu preenchimento estiver vazio (já existente) Chamar o método blog_model->new_blog() caso nenhum blog_id seja transmitido no URL (já existente) Chamar o método blog_model->update_blog($blog_id) caso o utilizador que fez login seja o autor do post (já existente) Chamar o método blog_model->new_reply($blog_id)caso o utilizador que fez login não seja o autor do post (novidade) LabJavaScript 2/10

O template blog_templatetpl já foi desenhado no LAB10, mostra-se aqui novamente public function post($blog_id = FALSE) if ($blog_id) $tupple = $this->blog_model->get_blog($blog_id); $data['content'] = $tupple->content; $data['blog_id'] = $blog_id; $this->load->library('form_validation'); if ($this->form_validation->run() === FALSE) $data['form_validation']=validation_errors(); $this->smarty->view('blog_templatetpl', $data); else if ($blog_id and ($_SESSION['id'] == $user_id) ) $this->blog_model->update_blog($blog_id); elseif ($blog_id and ($_SESSION['id']!= $user_id) ) else $this->blog_model->new_blog(); redirect('/blog'); LabJavaScript 3/10

4 Construa o método new_reply($blog_id) dentro do ficheiro que define os métodos de acesso à base de dados (public_html/lab11/application/models/blog_modelphp) public function new_reply($blog_id) 5 Construa o método get_replies($id) public function get_replies($id) $sql="select where repliesmicropost_id=" $id " order by repliescreated_at desc"; $query = $this->db->query($sql); return $query->result_array(); Utilize a nova funcionalidade do site para introduzir post replies em posts de outros utilizadores (em alternativa coloque manualmente algumas replies acedendo directamente à base de dados) 6 Actualize novamente o template index_templatetpl e o método index()para que em todos os posts em que tenha havido replies estes apareçam imediatamente a seguir ao post respectivo: Esta funcionalidade exige a realização de dois nested loops : um loop exterior ( posts ), e um loop interior ( replies ), funcionalidade trivial se fosse permitido neste laboratório quebrar o paradigma MVC e utilizar código PHP no template Não sendo permitido utilizar código PHP no template existem duas hipóteses: O controlador index() associa os dois arrays num só array; neste caso pode-se continuar a usar a função Smarty foreach no template O controlador index() passa dois arrays distintos ao template * ; neste caso é necessário utilizar a função section com o seguinte controlador associado: * apresenta-se um extracto do template na secção 10 deste guião LabJavaScript 4/10

public function index() $data['blogs'] = $this->blog_model->get_posts(); for($i=0; $i<count($data['blogs']); $i++) $blog_replies[$i] = $this->blog_model->get_replies($data['blogs'][$i]['id']); $data['replies'] = $blog_replies ; O resultado deve ser o seguinte screenshot (ou equivalente) * : FUNCIONALIDADE SHOW/HIDE REPLIES COM JAVASCRIPT/JQUERY 7 Actualize novamente o template index_templatetpl e introduza um button no template <button id="b$blogs[bl]id" onclick="mytoggle('$blogs[bl]id')">show</button> Utilizando JavaScript ou a livraria JQuery construa a função mytoggle(id) <script> function mytoggle(id) </script> * A seccção 10 mostra o código do template index_templatetpl LabJavaScript 5/10

que alternando clicar no botão mostra ou esconde as replies de um determinado post, como se mostra em seguida Replies escondidas: Replies visíveis Teste o funcionamento do botão Considere esta secção do laboratório concluída quando obtiver a mesma funcionalidade do site http://alldeeifctualgpt/~a999993/ci_exame2/blog FUNCIONALIDADE SHOW/HIDE REPLIES COM AJAX 8 Faça uma cópia da pasta LAB11 para a pasta LAB11A a12345@australia:~/public_html$ cp -R LAB11 LAB11A LabJavaScript 6/10

Actualize a variavel base_url no ficheiro configphp * a12345@australia:~/public_html/lab11a/application/config$nano configphp $config['base_url'] = '/~a12345/lab11a; Actualize as permissões na pastas templates_c a12345@australia:~/public_html/lab11a/application/views$ chmod g+rw templates_c 9 No método index() remova a funcionalidade de acesso à tabela de queries public function index() $data['blogs'] = $this->blog_model->get_posts(); for($i=0; $i<count($data['blogs']); $i++) $blog_replies[$i] = $data['replies'] = $blog_replies ; 10 No template index_templatetpl remova o loop interior (se quiser pode voltar a implementar o loop exterior com a função foreach): <div id="d$blogs[bl]id" style="display:none;"> section name=rpl loop=$replies[bl] <div class="w3-card-4"> <div class="w3-khaki" style="text-align:left;"> $replies[bl][rpl]name posts: $replies[bl][rpl]total </div> <div class="w3-container"> <p>$replies[bl][rpl]content<p> </div> <div class="w3-khaki" style="text-align:left;"> $replies[bl][rpl]created_at </div> </div> <br> LabJavaScript 7/10

/section </div> 11 Construa o método replies($id) public function replies($id) $data['replies'] = this->blog_model->get_replies($id)); $this->smarty->view( 'replies_templatetpl', $data ); 12 Construa o template replies_templatetpl Este template contem uma função Smarty foreach e gera o código HTML necessário para mostrar todas as replies a um determinado post (no caso de zero replies gera rigorosamente nada) Nota: este template não é um documento HTML completo! 13 Utilizando JavaScript ou a livraria JQuery construa a função mytoggle(id) <script> function mytoggle(id) </script> Esta função é uma função AJAX: Se o botão de um determinado post disser Show O botão passa a dizer Hide É feito um GET ao URL base_url(blog/replies/id) Nota: este GET é apenas feito uma vez para um determinado id! A <div> que se encontra escondida (style="display:none;") passa a ser visivel (style="display:block;") e o seu conteúdo é preenchido com a resposta ao GET LabJavaScript 8/10

Se o botão de um determinado post disser Hide O botão passa a dizer Show A <div> que se encontra visivel (style="display:block;") passa a estar escondida (style="display:none;") Teste o funcionamento do botão Considere o laboratório concluído quando obtiver a mesma funcionalidade do site http://alldeeifctualgpt/~a999993/ci_exame2a/blog REFERÊNCIAS: http://alldeeifctualgpt/~a999993/ci_exame2/blog http://alldeeifctualgpt/~a999993/ci_exame2a/blog https://wwwsmartynet/docs/en/ https://wwww3schoolscom/js/defaultasp https://wwww3schoolscom/jquery/defaultasp https://wwww3schoolscom/js/js_ajax_introasp https://wwww3schoolscom/jquery/jquery_ajax_introasp LabJavaScript 9/10

ANEXO 1 : estrutura da base de dados A estrutura da base de dados pode ser consultada em http://alldeeifctualgpt/phpmyadmin CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) default NULL, `email` varchar(255) default NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `password_digest` varchar(255) default NULL, `remember_digest` varchar(255) default NULL, `admin` tinyint(1) default NULL, `activation_digest` varchar(255) default NULL, `activated` tinyint(1) default NULL, `activated_at` datetime default NULL, `reset_digest` varchar(255) default NULL, `reset_sent_at` datetime default NULL, PRIMARY KEY (`id`), UNIQUE KEY `index_users_on_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `microposts` ( `id` int(11) NOT NULL auto_increment, `content` text, `user_id` int(11) default NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `replies` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` text CHARACTER SET utf8 COLLATE utf8_bin, `user_id` int(11) DEFAULT NULL, `micropost_id` int(11) DEFAULT NULL, `created_at` datetime NOT NULL, PRIMARY KEY (`id`), CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), CONSTRAINT FOREIGN KEY (`micropost_id`) REFERENCES `microposts` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 LabJavaScript 10/10