CMPE 280 Web UI Design and Development March 19 Class Meeting

Slides:



Advertisements
Similar presentations
Cookies, Sessions. Server Side Includes You can insert the content of one file into another file before the server executes it, with the require() function.
Advertisements

Introducing JavaScript
JavaScript FaaDoOEngineers.com FaaDoOEngineers.com.
HTML 5 and CSS 3, Illustrated Complete Unit L: Programming Web Pages with JavaScript.
1.  Understanding about How to Working with Server Side Scripting using PHP Framework (CodeIgniter) 2.
ASP.NET Programming with C# and SQL Server First Edition Chapter 8 Manipulating SQL Server Databases with ASP.NET.
CS 174: Web Programming February 26 Class Meeting Department of Computer Science San Jose State University Spring 2015 Instructor: Ron Mak
VICTORIA UNIVERSITY OF WELLINGTON Te Whare Wananga o te Upoko o te Ika a Maui SWEN 432 Advanced Database Design and Implementation MongoDB Write Lecturer.
Christopher M. Pascucci Basic Structural Concepts of.NET Browser – Server Interaction.
. If the PHP server is an server or is aware of which server is the server, then one can write code that s information. –For example,
Form Handling, Validation and Functions. Form Handling Forms are a graphical user interfaces (GUIs) that enables the interaction between users and servers.
MySQL in PHP – Page 1 of 17CSCI 2910 – Client/Server-Side Programming CSCI 2910 Client/Server-Side Programming Topic: MySQL in PHP Reading: Williams &
CSCI 6962: Server-side Design and Programming Introduction to AJAX.
Server-side Scripting Powering the webs favourite services.
1 PHP and MySQL. 2 Topics  Querying Data with PHP  User-Driven Querying  Writing Data with PHP and MySQL PHP and MySQL.
Chapter 8 Cookies And Security JavaScript, Third Edition.
INTRODUCTION TO JAVASCRIPT AND DOM Internet Engineering Spring 2012.
School of Computing and Information Systems CS 371 Web Application Programming PHP – Forms, Cookies, Sessions and Database.
Web Scripting [PHP] CIS166AE Wednesdays 6:00pm – 9:50pm Rob Loy.
Introduction to JavaScript 41 Introduction to Programming the WWW I CMSC Winter 2004 Lecture 17.
CS 174: Web Programming September 30 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
Web Scripting [PHP] CIS166AE Wednesdays 6:00pm – 9:50pm Rob Loy.
CS 174: Web Programming September 28 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
CS 174: Web Programming October 12 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
CS 174: Web Programming October 14 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
Web Design and Development. World Wide Web  World Wide Web (WWW or W3), collection of globally distributed text and multimedia documents and files 
8 Chapter Eight Server-side Scripts. 8 Chapter Objectives Create dynamic Web pages that retrieve and display database data using Active Server Pages Process.
ASSIGNMENT POINTS DUE DATE: Monday NOV 30 JAVASCRIPT, INPUT VALIDATION, REGEX See 2 nd slide for Form See 3 rd next slide for the required features.
CS 174: Web Programming November 2 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
Introduction to JavaScript MIS 3502, Spring 2016 Jeremy Shafer Department of MIS Fox School of Business Temple University 2/2/2016.
CS 160 and CMPE/SE 131 Software Engineering February 11 Class Meeting Department of Computer Science Department of Computer Engineering San José State.
Dr. Abdullah Almutairi Spring PHP is a server scripting language, and a powerful tool for making dynamic and interactive Web pages. PHP is a widely-used,
CMPE 226 Database Systems April 19 Class Meeting Department of Computer Engineering San Jose State University Spring 2016 Instructor: Ron Mak
Introduction to JavaScript MIS 3502, Fall 2016 Jeremy Shafer Department of MIS Fox School of Business Temple University 9/29/2016.
PHP using MySQL Database for Web Development (part II)
ASP.NET Programming with C# and SQL Server First Edition
JavaScript, Sixth Edition
CIIT-Human Computer Interaction-CSC456-Fall-2015-Mr
CS 330 Class 7 Comments on Exam Programming plan for today:
Introduction to Dynamic Web Programming
CMPE 280 Web UI Design and Development August 29 Class Meeting
In this session, you will learn about:
Chapter 19 PHP Part III Credits: Parts of the slides are based on slides created by textbook authors, P.J. Deitel and H. M. Deitel by Prentice Hall ©
CMPE 280 Web UI Design and Development October 26 Class Meeting
CMPE 280 Web UI Design and Development October 19 Class Meeting
CMPE 280 Web UI Design and Development October 17 Class Meeting
CMPE 280 Web UI Design and Development October 24 Class Meeting
CMPE 280 Web UI Design and Development October 26 Class Meeting
CMPE 280 Web UI Design and Development November 7 Class Meeting
PHP / MySQL Introduction
CMPE 280 Web UI Design and Development January 30 Class Meeting
ISC440: Web Programming 2 Server-side Scripting PHP 3
CS 174: Server-Side Web Programming January 29 Class Meeting
CMPE 280 Web UI Design and Development January 30 Class Meeting
© 2015, Mike Murach & Associates, Inc.
Web DB Programming: PHP
CMPE 280 Web UI Design and Development October 18 Class Meeting
CMPE 280 Web UI Design and Development January 29 Class Meeting
Web Programming Language
Tutorial 6 PHP & MySQL Li Xu
CMPE/SE 131 Software Engineering March 9 Class Meeting
Tutorial 10: Programming with javascript
CMPE 152: Compiler Design February 28 / March 5 Lab
CMPE 280 Web UI Design and Development March 14 Class Meeting
PHP an introduction.
CMPE 152: Compiler Design March 7/12 Lab
CMPE 280 Web UI Design and Development August 27 Class Meeting
CMPE 280 Web UI Design and Development March 19 Class Meeting
CMPE 280 Web UI Design and Development September 10 Class Meeting
Presentation transcript:

CMPE 280 Web UI Design and Development March 19 Class Meeting Department of Computer Engineering San Jose State University Spring 2019 Instructor: Ron Mak www.cs.sjsu.edu/~mak

Midterm Solution: Question #51 Briefly describe how to use sessions and cookies to enable a web application to maintain conversations with users. A conversation means that the web application running on the web server remembers what a user has done from one visit to another, such as whether or not the user has logged in. This information can be kept in a session object. The user’s id is stored in a cookie which the user’s browser sends to the web server. The id in the cookie enables the web application to retrieve the user’s session object.

Midterm Solution: Question #52 Briefly explain the benefits of using JavaScript to validate user input in a form. Using JavaScript enables user form input to be validated while the data is still in the user’s browser. This avoids round trips to the web server where the form data would instead have to be validated by the web application.

Midterm Solution: Question #53 Briefly explain the benefits of using JavaScript’s DOM manipulation functions instead of using an element’s innerHTML property. Using innerHTML to modify an element’s HTML code is dangerous because of possibly invalid HTML code. The DOM manipulation functions each has a specific task (add a node, delete a node, etc.) and has safeguards against invalid actions.

Midterm Solution: Question #54 Briefly describe what this JavaScript statement on the server means: router.get('/benefits', ctrlMain.isMember, ctrlMain.getMemberBenefits); The get verb and the /benefits URL together route to the controller action ctrlMain.getMemberBenefits, but that occurs only if the user is a member, which is determined by the controller function ctrlMain.isMember returning either true or false.

Midterm Solution: Question #55 Briefly describe how you would use an HTML graphics context. The graphics context is obtained from the HTML canvas element. Using its functions, you can perform various graphics operations on the canvas, including drawing and animation.

Midterm Solution: Question #55 A credit card account number is in the form 9999 9999 9999 9999 where there can be one or more spaces between each block of four digits. Write the JavaScript regular expression that will match an account number in an input text field and later refer to the last four digits. [5 points] ^ and $ match the beginning and end of the string, respectively. [5 points] \d{4} or \d\d\d\d matches a block of four digits. [5 points] A space followed by + matches a group of one or more spaces. [5 points] The parenthesized (\d{4}) enables referring to the last block of matched digits. /^\d{4} +\d{4} +\d{4} +(\d{4})$/

MongoDB Demo Install MongoDB: https://docs.mongodb.com/master/administration/install-community/ Start the MongoDB server: Start the MongoDB interactive shell: /usr/local/Cellar/mongodb/3.2.10/bin/mongod /usr/local/Cellar/mongodb/3.2.10/bin/mongo MongoDB shell version: 3.2.10 connecting to: test >

MongoDB Demo, cont’d Create the school database: Insert a document into the teacher collection: Who’s in there now? > use school switched to db school > db.teacher.insert( {id: 7003, last: "Rogers", first: "Tom"} ) WriteResult({ "nInserted" : 1 }) > db.teacher.find() { "_id" : ObjectId("582a7630f22e3c2f12d899ac"), "id" : 7003, "last" : "Rogers", "first" : "Tom" }

MongoDB Demo, cont’d Insert the rest of the teachers as an array of documents: > db.teacher.insert([ ... { id: 7008, last: "Thompson", first: "Art" }, ... { id: 7012, last: "Lane", first: "John" }, ... { id: 7051, last: "Flynn", first: "Mabel" } ... ])

MongoDB Demo, cont’d Find all of them and pretty print: > db.teacher.find().pretty() { "_id" : ObjectId("582a7630f22e3c2f12d899ac"), "id" : 7003, "last" : "Rogers", "first" : "Tom" } "_id" : ObjectId("582a7808f22e3c2f12d899ad"), "id" : 7008, "last" : "Thompson", "first" : "Art" "_id" : ObjectId("582a7808f22e3c2f12d899ae"), "id" : 7012, "last" : "Lane", "first" : "John" "_id" : ObjectId("582a7808f22e3c2f12d899af"), "id" : 7051, "last" : "Flynn", "first" : "Mabel" Find all of them and pretty print:

MongoDB Demo, cont’d A simple query with $or: > db.teacher.find( ... { $or: [ {id: 7008}, {first: "John"} ] } ... ).pretty() { "_id" : ObjectId("582a7808f22e3c2f12d899ad"), "id" : 7008, "last" : "Thompson", "first" : "Art" } "_id" : ObjectId("582a7808f22e3c2f12d899ae"), "id" : 7012, "last" : "Lane", "first" : "John"

MongoDB Demo, cont’d Update a document: > db.teacher.update( >" db.teacher.find() { "_id" : ObjectId(582a7630f22e3c2f12d899ac"), "id" : 7003, "last" : "Rogers", "first" : "Tom" } { "_id" : ObjectId("582a7808f22e3c2f12d899ad"), "id" : 7008, "last" : "Thompson", "first" : "Art" } { "_id" : ObjectId("582a7808f22e3c2f12d899ae"), "id" : 7012, "last" : "Lane", "first" : "John" } { "_id" : ObjectId("582a7808f22e3c2f12d899af"), "id" : 7051, "last" : "Flynn", "first" : "Mabel" } > db.teacher.update( ... {id: 7051}, ... {$set: {first: "Mabeline"}} ... ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.teacher.find( {id: 7051} ).pretty() { "_id" : ObjectId("582a7808f22e3c2f12d899af"), "id" : 7051, "last" : "Flynn", "first" : "Mabeline" }

MongoDB Demo, cont’d Projection: Show only the ids and last names: > db.teacher.find( {}, {_id: 0, id: 1, last: 1} ) { "id" : 7003, "last" : "Rogers" } { "id" : 7008, "last" : "Thompson" } { "id" : 7012, "last" : "Lane" } { "id" : 7051, "last" : "Flynn" }

MongoDB Demo, cont’d Sort in ascending or descending order by last name: > db.teacher.find( {}, {_id: 0, id: 1, last: 1} ).sort({last: 1}) { "id" : 7051, "last" : "Flynn" } { "id" : 7012, "last" : "Lane" } { "id" : 7003, "last" : "Rogers" } { "id" : 7008, "last" : "Thompson" } > db.teacher.find( {}, {_id: 0, id: 1, last: 1} ).sort({last: -1}) { "id" : 7008, "last" : "Thompson" } { "id" : 7003, "last" : "Rogers" } { "id" : 7012, "last" : "Lane" } { "id" : 7051, "last" : "Flynn" }

Express/MongoDB Example A very simple example of Express on the server side accessing a MongoDB database. We will display some user documents that each contains a user name and an email address. Recall that a collection is analogous to to a relational table in a relational database. Recall that a document is analogous to a record. We will add new documents.

Project Dependencies: package.json {   "name": "MongoDBExample",   "version": "0.0.0",   "private": true,   "scripts": {       "start": "node app.js"   },   "dependencies": {       "body-parser": "~1.18.2",       "debug": "~2.6.9",       "express": "~4.15.5",       "jade": "~1.11.0",       "mongodb": "^2.2.25",       "monk": "^4.0.0",       "morgan": "~1.9.0",       "nodeunit": "^0.11.2"   } } Monk: “A tiny layer that provides simple yet substantial usability improvements for MongoDB usage within Node.JS.” https://www.npmjs.com/package/monk

Initialize the MongoDB Database Start the MongoDB shell. Insert the first document: /usr/local/Cellar/mongodb/3.2.10: mongo MongoDB shell version: 3.2.10 connecting to: test Server has startup warnings:  2017-10-19T02:30:02.649-0700 I CONTROL  [initandlisten]  2017-10-19T02:30:02.649-0700 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000 > use nodetest1 switched to db nodetest1 > db.usercollection.insert({ "username" : "testuser1", "email" : "testuser1@testdomain.com" }) WriteResult({ "nInserted" : 1 }) Collection usercollection is automatically created the first time we add to it.

Initialize the MongoDB Database, cont’d > db.usercollection.find().pretty() { "_id" : ObjectId("59e8711733b5f794be534cda"), "username" : "testuser1", "email" : "testuser1@testdomain.com" } Yes, it was successfully inserted. So insert two more documents.

Initialize the MongoDB Database, cont’d > newstuff = [{ "username" : "testuser2", "email" : "testuser2@testdomain.com" }, { "username" : "testuser3", "email" : "testuser3@testdomain.com" }] [ { "username" : "testuser2", "email" : "testuser2@testdomain.com" }, "username" : "testuser3", "email" : "testuser3@testdomain.com" } ] > db.usercollection.insert(newstuff) BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 2, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })

Initialize the MongoDB Database, cont’d > db.usercollection.find().pretty() { "_id" : ObjectId("59e8711733b5f794be534cda"), "username" : "testuser1", "email" : "testuser1@testdomain.com" } "_id" : ObjectId("59e8715233b5f794be534cdb"), "username" : "testuser2", "email" : "testuser2@testdomain.com" "_id" : ObjectId("59e8715233b5f794be534cdc"), "username" : "testuser3", "email" : "testuser3@testdomain.com"

Express Project MongoDBExample

Connect to the MongoDB Database app.js var mongo = require('mongodb'); var monk = require('monk'); var db = monk('localhost:27017/nodetest1'); Use Monk to connect to the database nodetest1 at the default MongoDB port 27017. Make the database accessible to the controller: app.use(function(req, res, next) {     req.db = db;     next(); });

Routing routes/index.js var express = require('express'); var router = express.Router(); var ctrlMain = require("../controllers/main"); var modelMain = require("../models/modelMain"); console.log("Router:"); console.log(router); router.get('/', ctrlMain.home); router.get('/userlist’, modelMain.get_userlist); router.get('/newuser', ctrlMain.get_newuser); router.get('/userlist/:username', modelMain.get_showuser); router.post('/adduser', modelMain.post_adduser); router.get('/deleteuser/:username', ctrlMain.get_deleteuser); router.post('/deleteuser/:username', modelMain.post_deleteuser); module.exports = router;

Display all the Users models/modelMain.js module.exports.get_userlist = function(req, res)  {     var db = req.db;     var collection = db.get('usercollection');     collection.find({}, {},                      function(err, docs)                     {                         res.render('userlist', { "userlist" : docs });                     }); }; views/userlist.jade extends layout block content     h1.         User List     ul         each user in userlist             li                 a(href="mailto:#{user.email}")= user.username

Show a User models/modelMain.js module.exports.get_showuser = function(req, res)  {     var uname = req.params.username;     var db = req.db;     var collection = db.get('usercollection');          collection.find( { username : uname },                       function(err, doc)                       {                          if (err) {                              res.send("Find failed.");                          }                          else {                              res.render('showuser',                                          { title: 'Show User: ' + uname,                                           mail: doc[0].email })                      }); };

Show a User, cont’d views/showuser.jade extends layout block content     h1= title     p Email: #{mail}

Display the New User Form module.exports.get_newuser = function(req, res)  {     res.render('newuser', { title: 'Add New User' }); }; controllers/cntrlMain.js views/newuser.jade extends layout block content     h1= title     form#formAddUser(name="adduser",method="post",action="/adduser")         input#inputUserName(type="text", placeholder="username", name="username")         input#inputUserEmail(type="text", placeholder="useremail", name="useremail")         button#btnSubmit(type="submit") submit

Add a New User module.exports.post_adduser = function(req, res) {     // Set our internal DB variable     var db = req.db;     // Get our form values. These rely on the "name" attributes.     var userName = req.body.username;     var userEmail = req.body.useremail;     // Set our collection.     var collection = db.get('usercollection'); models/modelMain.js

Add a New User, cont’d models/modelMain.js // Submit to the database.     collection.insert( { "username" : userName,                          "email" : userEmail },                        function (err, doc)                         {                            if (err) {                                res.send("Insert failed.");                            }                            else {                                // Forward to success page                                res.redirect("userlist");                        }); };

Delete a User module.exports.get_deleteuser = function(req, res) {     var uname = req.params.username;     res.render('deleteuser', { "username" : uname} ); }; controllers/cntrlMain.js

Delete a User, cont’d models/modelMain.js module.exports.post_deleteuser = function(req, res)  {     var uname = req.params.username;     var db = req.db;     var collection = db.get('usercollection');     // Submit to the database.     collection.remove( { "username" : uname },                        function (err, doc)                         {                            if (err) {                                res.send("Delete failed.");                            }                            else {                                res.send("Successfully deleted " + uname);                        }); };

Assignment #5 Add a MongoDB database to your project. Create web pages to: display documents add and delete documents update documents You must use Express and either Monk or Mongoose to talk to the database. Monk: https://www.npmjs.com/package/monk Mongoose: https://www.npmjs.com/package/express-mongoose