[{"data":1,"prerenderedAt":3140},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login":3,"content-page-quiz:none":1653,"content-navigation-index":1666},{"id":4,"title":5,"audience":6,"body":7,"contentType":1637,"course":1638,"description":1639,"estimateBasis":1640,"estimatedDiscussionMinutes":1641,"estimatedLiveMinutes":1642,"estimatedTotalMinutes":1643,"extension":1644,"meta":1645,"module":1646,"navigation":1647,"order":1648,"path":1649,"presentationRole":1650,"promptAssist":1651,"revision":1652,"semester":1653,"seo":1654,"status":1655,"stem":1656,"syllabus":1653,"tags":1657,"updated":1661,"videoDuration":1662,"videoId":1663,"videoLink":1664,"videoTitle":5,"week":1646,"__hash__":1665},"content\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login.md","User Login","student",{"type":8,"value":9,"toc":1606},"minimark",[10,42,107,129,220,288,360,443,479,572,615,694,755,796,850,904,957,987,1013,1059,1114,1145,1214,1342,1382,1419,1484,1546],[11,12,15,19,23],"slide",{"id":13,"level":14},"main-idea","2",[16,17,18],"h2",{"id":13},"Main Idea",[20,21,22],"p",{},"Login proves identity and stores that result in a session",[24,25,26,30,33,36,39],"ul",{},[27,28,29],"li",{},"Browser and JavaScript checks catch obvious form mistakes first",[27,31,32],{},"Look up the submitted account",[27,34,35],{},"Verify password against the stored hash",[27,37,38],{},"Regenerate the session id after success",[27,40,41],{},"Redirect to a protected page",[11,43,45,48],{"id":44,"level":14},"practice-workspace",[16,46,47],{"id":44},"Practice Workspace",[24,49,50,57,71,85,91,97,100],{},[27,51,52,53],{},"Work mainly in the project folder: ",[54,55,56],"code",{},"public_html\u002Fproject\u002F",[27,58,59,60,63,64,67,68],{},"Shared setup files live beside ",[54,61,62],{},"public_html",": ",[54,65,66],{},"lib\u002F"," and ",[54,69,70],{},"partials\u002F",[27,72,73,74,77,78,81,82],{},"Create or update ",[54,75,76],{},"login.php",", ",[54,79,80],{},"dashboard.php",", and ",[54,83,84],{},"logout.php",[27,86,87,88],{},"Lesson branch: ",[54,89,90],{},"Milestone1-Part03-User-Login",[27,92,93,94],{},"This lesson depends on registered users from ",[54,95,96],{},"Milestone1-Part02-User-Registration",[27,98,99],{},"Keep login, dashboard, and logout behavior together",[27,101,102,103,106],{},"After a working change: run ",[54,104,105],{},"git status",", stage the changed files, and commit",[11,108,110,113,118],{"id":109,"level":14},"login-flow",[16,111,112],{"id":109},"Login Flow",[114,115],"code-snippet",{"language":116,"src":117},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Flogin-flow-01.txt",[24,119,120,123,126],{},[27,121,122],{},"The browser and JavaScript checks happen before PHP receives the request",[27,124,125],{},"PHP still validates after POST because client-side checks can be skipped",[27,127,128],{},"Use one generic error message for failed login",[11,130,132,136,139,217],{"id":131,"level":14},"login-request-states",[16,133,135],{"id":134},"login-outcomes","Login Outcomes",[20,137,138],{},"Think of login as one form with a few possible outcomes.",[140,141,142,158],"table",{},[143,144,145],"thead",{},[146,147,148,152,155],"tr",{},[149,150,151],"th",{},"What Happens",[149,153,154],{},"What The Page Should Do",[149,156,157],{},"Why",[159,160,161,173,184,195,206],"tbody",{},[146,162,163,167,170],{},[164,165,166],"td",{},"First page load",[164,168,169],{},"Show the form and skip the database query",[164,171,172],{},"Nothing was submitted yet",[146,174,175,178,181],{},[164,176,177],{},"Missing or invalid fields",[164,179,180],{},"Show validation feedback",[164,182,183],{},"Do not treat bad form data as a real login",[146,185,186,189,192],{},[164,187,188],{},"Email not found",[164,190,191],{},"First-use code may show \"Email not found\"; final code uses a generic failure",[164,193,194],{},"Learn the branch first, then avoid leaking accounts",[146,196,197,200,203],{},[164,198,199],{},"Password is wrong",[164,201,202],{},"Do not set session values",[164,204,205],{},"A failed login should leave the user logged out",[146,207,208,211,214],{},[164,209,210],{},"Email and password match",[164,212,213],{},"Regenerate the session id, store safe session values, and redirect",[164,215,216],{},"This is the successful login path",[20,218,219],{},"Each outcome either shows an error or creates the session and leaves the login page.",[11,221,223,226,236],{"id":222,"level":14},"create-app-setup",[16,224,225],{"id":222},"Create App Setup",[20,227,228,229,232,233,235],{},"Create ",[54,230,231],{},"lib\u002Fapp.php"," before building ",[54,234,76],{},".",[237,238,242,250],"two-col",{"gap":239,"left-width":240,"right-width":241},"lg","1.05fr","0.95fr",[243,244,246],"template",{"v-slot:left":245},"",[114,247],{"language":248,"src":249},"php","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fapp-setup-02.php",[243,251,252],{"v-slot:right":245},[24,253,254,260,266,276,285],{},[27,255,256,259],{},[54,257,258],{},"app.php"," is the shared setup file for project pages",[27,261,262,265],{},[54,263,264],{},"session_start()"," must run before HTML output",[27,267,268,271,272,275],{},[54,269,270],{},"db.php"," makes ",[54,273,274],{},"getDB()"," available to pages that query MySQL",[27,277,278,279,281,282],{},"Pages in ",[54,280,56],{}," load this file with ",[54,283,284],{},"..\u002F..\u002Flib\u002Fapp.php",[27,286,287],{},"Render helpers are added later when the shared navigation is built",[11,289,291,294,300],{"id":290,"level":14},"start-with-the-login-form",[16,292,293],{"id":290},"Start With The Login Form",[20,295,228,296,299],{},[54,297,298],{},"public_html\u002Fproject\u002Flogin.php"," with a small POST form.",[237,301,304,309],{"gap":239,"left-width":302,"right-width":303},"1.08fr","0.92fr",[243,305,306],{"v-slot:left":245},[114,307],{"language":248,"src":308},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Flogin-form-02.php",[243,310,311],{"v-slot:right":245},[24,312,313,319,331,337,340,343,346,352],{},[27,314,315,318],{},[54,316,317],{},"method=\"post\""," keeps submitted credentials out of the URL",[27,320,321,77,324,81,327,330],{},[54,322,323],{},"required",[54,325,326],{},"type=\"email\"",[54,328,329],{},"minlength=\"8\""," let the browser catch basic input issues",[27,332,333,336],{},[54,334,335],{},"validate(this)"," passes the current form into JavaScript before submission",[27,338,339],{},"JavaScript collects all visible errors instead of stopping at the first one",[27,341,342],{},"Email can be safely repopulated after a failed login",[27,344,345],{},"Password stays blank after errors",[27,347,348,351],{},[54,349,350],{},"autocomplete=\"current-password\""," tells password managers this is an existing account login",[27,353,354,356,357,359],{},[54,355,76],{}," already loads ",[54,358,231],{},", so session and database setup are ready",[11,361,363,366],{"id":362,"level":14},"verify-password",[16,364,365],{"id":362},"Verify Password",[237,367,370,403],{"gap":239,"left-width":368,"right-width":369},"1.15fr","0.85fr",[243,371,372,375,378],{"v-slot:left":245},[114,373],{"language":248,"src":374},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fverify-password-02.php",[20,376,377],{},"After success:",[24,379,380,387,397],{},[27,381,382,383,386],{},"Cast ",[54,384,385],{},"user_id"," before storing it",[27,388,389,390,393,394],{},"Remove ",[54,391,392],{},"password_hash"," from ",[54,395,396],{},"$user",[27,398,399,400],{},"Store the remaining user data in ",[54,401,402],{},"$_SESSION[\"user\"]",[243,404,405,419,425,431,437,440],{"v-slot:right":245},[27,406,407,410,411],{},[54,408,409],{},"password_verify",": compare password to hash\n",[24,412,413,416],{},[27,414,415],{},"Reads the hash, including the salt generated at creation, hashes the raw password with the salt, then compares the hashes",[27,417,418],{},"Verification uses the salt stored inside the hash string",[27,420,421,424],{},[54,422,423],{},"session_regenerate_id(true)",": create a fresh session id and remove the old one",[27,426,427,430],{},[54,428,429],{},"header(\"Location: ...\")",": tells the browser to request another page",[27,432,433,436],{},[54,434,435],{},"exit",": stops this script so it does not keep rendering after the redirect",[27,438,439],{},"Query errors should be logged, not displayed",[27,441,442],{},"The next vertical slide shows how to replace the branch-specific public messages",[11,444,447,451],{"id":445,"level":446},"generic-login-errors","3",[16,448,450],{"id":449},"use-one-public-login-error","Use One Public Login Error",[237,452,453,458],{"gap":239,"left-width":240,"right-width":241},[243,454,455],{"v-slot:left":245},[114,456],{"language":248,"src":457},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fgeneric-login-message-03.php",[243,459,460],{"v-slot:right":245},[24,461,462,465,468,476],{},[27,463,464],{},"Keep the specific logic branches in your head while debugging",[27,466,467],{},"Do not expose those flows to the public login page",[27,469,470,471],{},"A generic message avoids confirming which emails are registered\n",[24,472,473],{},[27,474,475],{},"Prevents letting a potential bad actor confirm any compromised details",[27,477,478],{},"Log unexpected system errors separately",[11,480,482,485,492,566],{"id":481,"level":446},"stop-after-redirect",[16,483,484],{"id":481},"Stop After Redirect",[20,486,487,488,491],{},"The lesson uses ",[54,489,490],{},"header(); exit;"," because it makes the two steps visible.",[140,493,494,507],{},[143,495,496],{},[146,497,498,501,504],{},[149,499,500],{},"Pattern",[149,502,503],{},"Shape",[149,505,506],{},"Notes",[159,508,509,527,548],{},[146,510,511,519,524],{},[164,512,513,516,517],{},[54,514,515],{},"header()"," then ",[54,518,435],{},[164,520,521],{},[54,522,523],{},"header(\"Location: dashboard.php\"); exit;",[164,525,526],{},"Clear: send redirect, then stop PHP",[146,528,529,534,539],{},[164,530,531],{},[54,532,533],{},"die(header())",[164,535,536],{},[54,537,538],{},"die(header(\"Location: dashboard.php\"));",[164,540,541,542,545,546],{},"Compact; ",[54,543,544],{},"die"," is an alias of ",[54,547,435],{},[146,549,550,555,560],{},[164,551,552],{},[54,553,554],{},"exit(header())",[164,556,557],{},[54,558,559],{},"exit(header(\"Location: dashboard.php\"));",[164,561,562,563,565],{},"Also works, but ",[54,564,515],{}," does not return a useful message",[20,567,568,569,571],{},"Without ",[54,570,435],{},", PHP can continue running code after asking the browser to leave.",[11,573,575,578,612],{"id":574,"level":14},"session-request-trace",[16,576,577],{"id":574},"Session Request Trace",[579,580,581,584,587,598,601,604],"ol",{},[27,582,583],{},"Browser submits the login form.",[27,585,586],{},"PHP verifies the email and password.",[27,588,589,590,67,592,595,596,235],{},"PHP stores ",[54,591,385],{},[54,593,594],{},"email"," inside ",[54,597,402],{},[27,599,600],{},"PHP redirects to a protected page.",[27,602,603],{},"Browser makes a new request with the session cookie.",[27,605,606,607,609,610,235],{},"Protected page requires ",[54,608,231],{}," and reads ",[54,611,402],{},[20,613,614],{},"If step 6 is missing, login may succeed but the next page still acts logged out.",[11,616,618,621,691],{"id":617,"level":14},"session-vs-cookie",[16,619,620],{"id":617},"Session Vs Cookie",[237,622,624,658],{"gap":239,"left-width":623,"right-width":623},"1fr",[243,625,626,631],{"v-slot:left":245},[627,628,630],"h3",{"id":629},"cookie","Cookie",[24,632,633,636,652,655],{},[27,634,635],{},"Stored in the browser",[27,637,638,639],{},"Stores simple string values",[24,640,641,647],{},[27,642,643,644],{},"Example: ",[54,645,646],{},"theme=dark",[27,648,643,649],{},[54,650,651],{},"PHPSESSID=abc123",[27,653,654],{},"Sends those values back with later requests",[27,656,657],{},"The session id cookie lets PHP find the matching server-side session",[243,659,660,664],{"v-slot:right":245},[627,661,663],{"id":662},"session","Session",[24,665,666,669,672,678,688],{},[27,667,668],{},"Stored server-side",[27,670,671],{},"Requires a cookie to carry the session id",[27,673,674,675],{},"Read through ",[54,676,677],{},"$_SESSION",[27,679,680,681],{},"Can store structured data such as arrays\n",[24,682,683],{},[27,684,643,685],{},[54,686,687],{},"$_SESSION[\"user\"][\"email\"]",[27,689,690],{},"Holds login state for later requests",[20,692,693],{},"When using sessions, the cookie does not hold the whole session; it usually holds the id PHP uses to find the session.",[11,695,697,700,752],{"id":696,"level":14},"session-storage-locations",[16,698,699],{"id":696},"Session Storage Locations",[140,701,702,715],{},[143,703,704],{},[146,705,706,709,712],{},[149,707,708],{},"Place",[149,710,711],{},"What It Usually Has",[149,713,714],{},"How To Inspect",[159,716,717,728,741],{},[146,718,719,722,725],{},[164,720,721],{},"Browser cookie",[164,723,724],{},"Session id",[164,726,727],{},"DevTools Application panel",[146,729,730,733,738],{},[164,731,732],{},"PHP session",[164,734,735,737],{},[54,736,402],{},", flash messages",[164,739,740],{},"PHP code or server logs",[146,742,743,746,749],{},[164,744,745],{},"Database",[164,747,748],{},"Current user record and role values",[164,750,751],{},"SQL query through PDO",[20,753,754],{},"Do not put database passwords, password hashes, or private API keys in cookies.",[11,756,758,761],{"id":757,"level":14},"session-data-shape",[16,759,760],{"id":757},"Session Data Shape",[237,762,763,768],{"gap":239,"left-width":623,"right-width":623},[243,764,765],{"v-slot:left":245},[114,766],{"language":248,"src":767},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fsession-data-shape-05.php",[243,769,770,773],{"v-slot:right":245},[20,771,772],{},"Keep session data small:",[24,774,775,780,785,790,793],{},[27,776,777,778],{},"Store ",[54,779,385],{},[27,781,782,783],{},"Store display values needed often, such as ",[54,784,594],{},[27,786,787,788],{},"Keep related user data together as ",[54,789,402],{},[27,791,792],{},"Do not store the password or password hash",[27,794,795],{},"Reload full profile details from the database when needed",[11,797,799,802,805,817],{"id":798,"level":14},"add-render-helpers",[16,800,801],{"id":798},"Add Render Helpers",[20,803,804],{},"Update the shared setup when adding the navigation helper.",[237,806,807,812],{"gap":239,"left-width":623,"right-width":623},[243,808,809],{"v-slot:left":245},[114,810],{"language":248,"src":811},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fapp-setup-06.php",[243,813,814],{"v-slot:right":245},[114,815],{"language":248,"src":816},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Frender-functions-06.php",[24,818,819,823,826,835,841,847],{},[27,820,821,259],{},[54,822,258],{},[27,824,825],{},"Keep the existing session and database setup",[27,827,828,829,832,833],{},"Add ",[54,830,831],{},"render_functions.php"," after ",[54,834,270],{},[27,836,837,840],{},[54,838,839],{},"render_nav()"," is a small wrapper now, but the file can grow into reusable page helpers later",[27,842,843,844,846],{},"The nav markup stays in the root ",[54,845,70],{}," folder",[27,848,849],{},"See the slides below for the root nav partial and page require pattern",[11,851,853,856,862],{"id":852,"level":446},"shared-nav-partial",[16,854,855],{"id":852},"Shared Nav Partial",[20,857,858,859,235],{},"Create the shared navigation file at ",[54,860,861],{},"partials\u002Fnav.php",[237,863,864,869],{"gap":239,"left-width":368,"right-width":369},[243,865,866],{"v-slot:left":245},[114,867],{"language":248,"src":868},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fshared-nav-partial-06.php",[243,870,871,874],{"v-slot:right":245},[20,872,873],{},"Navigation should reflect login state:",[24,875,876,884,889,892,895,901],{},[27,877,878,879,881,882,846],{},"Root-level ",[54,880,861],{}," keeps navigation outside one project page and outside the web-accessible ",[54,883,62],{},[27,885,886,888],{},[54,887,839],{}," loads this partial when a page is ready to display it",[27,890,891],{},"Logged-out users see login\u002Fregister links",[27,893,894],{},"Logged-in users see dashboard\u002Flogout links",[27,896,897,898,900],{},"The direct ",[54,899,677],{}," check is temporary until shared auth helpers are introduced",[27,902,903],{},"Page guards still enforce access on the server",[11,905,907,910,913],{"id":906,"level":446},"require-shared-nav",[16,908,909],{"id":906},"Require Shared Nav",[20,911,912],{},"Register and login pages should require the shared app setup before any HTML output.",[237,914,915,920],{"gap":239,"left-width":240,"right-width":241},[243,916,917],{"v-slot:left":245},[114,918],{"language":248,"src":919},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Frequire-shared-nav-07.php",[243,921,922],{"v-slot:right":245},[24,923,924,932,941,952],{},[27,925,926,927,67,930],{},"Use this pattern at the top of ",[54,928,929],{},"register.php",[54,931,76],{},[27,933,934,937,938,940],{},[54,935,936],{},"require_once"," loads ",[54,939,231],{}," once",[27,942,943,945,946,948,949],{},[54,944,839],{}," prints the root ",[54,947,861],{}," markup inside ",[54,950,951],{},"\u003Cbody>",[27,953,954,955],{},"Protected pages use the same app require before checking ",[54,956,402],{},[11,958,960,964,967,970],{"id":959,"level":14},"navigation-vs-access",[16,961,963],{"id":962},"navigation-vs-access-control","Navigation Vs Access Control",[20,965,966],{},"Navigation answers: which links should this user see?",[20,968,969],{},"Page guards answer: may this request view this page?",[24,971,972,975,978,981,984],{},[27,973,974],{},"Hiding a link is not security",[27,976,977],{},"A user can type a protected URL directly",[27,979,980],{},"Every protected page needs its own session check",[27,982,983],{},"Shared navigation reduces copy-paste and setup bugs",[27,985,986],{},"Shared guards reduce missed access checks",[11,988,990,993,996],{"id":989,"level":14},"protected-page",[16,991,992],{"id":989},"Protected Page",[114,994],{"language":248,"src":995},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Fprotected-page-03.php",[24,997,998,1001,1010],{},[27,999,1000],{},"Guard runs before protected content",[27,1002,1003,1004,1006,1007,1009],{},"The guard can read ",[54,1005,402],{}," because ",[54,1008,231],{}," started the session",[27,1011,1012],{},"Session values are still escaped before display",[11,1014,1016,1019,1022],{"id":1015,"level":14},"logout",[16,1017,1018],{"id":1015},"Logout",[114,1020],{"language":248,"src":1021},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login\u002Flogout-04.php",[24,1023,1024,1027,1033,1039,1045,1051,1054],{},[27,1025,1026],{},"Clears server-side login state",[27,1028,1029,1030,1032],{},"Loads ",[54,1031,231],{}," so the session and later shared utilities are available",[27,1034,1035,1038],{},[54,1036,1037],{},"session_unset()"," removes current session variables",[27,1040,1041,1044],{},[54,1042,1043],{},"session_destroy()"," removes the server-side session record",[27,1046,1047,1048,1050],{},"It does not call ",[54,1049,839],{}," because no page content is rendered",[27,1052,1053],{},"Redirects back to login",[27,1055,1056,1057],{},"User should not remain on ",[54,1058,84],{},[11,1060,1062,1065],{"id":1061,"level":14},"test-the-flow",[16,1063,1064],{"id":1061},"Test The Flow",[24,1066,1067,1075,1083,1091,1099,1107],{},[27,1068,1069,1070],{},"Visit dashboard before login\n",[24,1071,1072],{},[27,1073,1074],{},"Should redirect to login",[27,1076,1077,1078],{},"Submit wrong password\n",[24,1079,1080],{},[27,1081,1082],{},"Should show generic error",[27,1084,1085,1086],{},"Submit correct password\n",[24,1087,1088],{},[27,1089,1090],{},"Should redirect to dashboard",[27,1092,1093,1094],{},"Refresh the dashboard after login\n",[24,1095,1096],{},[27,1097,1098],{},"Should still show the logged-in user",[27,1100,1101,1102],{},"Click logout\n",[24,1103,1104],{},[27,1105,1106],{},"Should return to login",[27,1108,1109,1110],{},"Visit dashboard again\n",[24,1111,1112],{},[27,1113,1074],{},[11,1115,1117,1120],{"id":1116,"level":14},"session-debugging-checklist",[16,1118,1119],{"id":1116},"Session Debugging Checklist",[579,1121,1122,1127,1130,1136,1139,1142],{},[27,1123,1124,1125,235],{},"Confirm the login code reaches the branch that sets ",[54,1126,402],{},[27,1128,1129],{},"Confirm the redirect happens immediately after the session value is set.",[27,1131,1132,1133,1135],{},"Confirm the destination page requires ",[54,1134,231],{}," before output.",[27,1137,1138],{},"Confirm the guard reads the same session key that login wrote.",[27,1140,1141],{},"Confirm logout removes the same key.",[27,1143,1144],{},"Refresh the protected page after login to prove the session persisted.",[11,1146,1148,1151],{"id":1147,"level":14},"login-failure-matrix",[16,1149,1150],{"id":1147},"Login Failure Matrix",[140,1152,1153,1163],{},[143,1154,1155],{},[146,1156,1157,1160],{},[149,1158,1159],{},"Symptom",[149,1161,1162],{},"First Check",[159,1164,1165,1176,1184,1195,1206],{},[146,1166,1167,1170],{},[164,1168,1169],{},"Every login fails",[164,1171,1172,1173,1175],{},"Does the query select the ",[54,1174,392],{}," column?",[146,1177,1178,1181],{},[164,1179,1180],{},"New users cannot log in",[164,1182,1183],{},"Did registration store a hash, not plain text?",[146,1185,1186,1189],{},[164,1187,1188],{},"Redirect works, then dashboard redirects back",[164,1190,1191,1192,1194],{},"Does dashboard require ",[54,1193,231],{}," before the guard?",[146,1196,1197,1200],{},[164,1198,1199],{},"Header warning appears",[164,1201,1202,1203,1205],{},"Did output happen before ",[54,1204,515],{},"?",[146,1207,1208,1211],{},[164,1209,1210],{},"User stays logged in after logout",[164,1212,1213],{},"Does logout clear\u002Fdestroy the session and redirect?",[11,1215,1217,1220],{"id":1216,"level":14},"complete-page-shape",[16,1218,1219],{"id":1216},"Complete Page Shape",[140,1221,1222,1232],{},[143,1223,1224],{},[146,1225,1226,1229],{},[149,1227,1228],{},"Stage",[149,1230,1231],{},"What The Page Does",[159,1233,1234,1250,1262,1270,1282,1293,1309,1320,1334],{},[146,1235,1236,1239],{},[164,1237,1238],{},"First load",[164,1240,1241,1242,1245,1246,1249],{},"Start with a blank ",[54,1243,1244],{},"$email"," value and an empty ",[54,1247,1248],{},"$errors"," array",[146,1251,1252,1255],{},[164,1253,1254],{},"Form markup",[164,1256,1257,1258,1261],{},"Collect email and password with clear ",[54,1259,1260],{},"name"," attributes",[146,1263,1264,1267],{},[164,1265,1266],{},"Browser and JS checks",[164,1268,1269],{},"Catch missing, malformed, or too-short fields before the POST request leaves the page",[146,1271,1272,1275],{},[164,1273,1274],{},"POST gate",[164,1276,1277,1278,1281],{},"Use ",[54,1279,1280],{},"isset()"," to confirm the expected fields arrived before reading them",[146,1283,1284,1287],{},[164,1285,1286],{},"PHP validation",[164,1288,1289,1290,1292],{},"Add each validation problem to ",[54,1291,1248],{}," before querying",[146,1294,1295,1298],{},[164,1296,1297],{},"Database read",[164,1299,1300,1301,77,1304,81,1306,1308],{},"Select ",[54,1302,1303],{},"id AS user_id",[54,1305,594],{},[54,1307,392],{}," for one matching email",[146,1310,1311,1314],{},[164,1312,1313],{},"Password check",[164,1315,1277,1316,1319],{},[54,1317,1318],{},"password_verify()"," to compare the submitted password to the stored hash",[146,1321,1322,1325],{},[164,1323,1324],{},"Session success",[164,1326,1327,1328,1330,1331,1333],{},"Regenerate the session id, unset ",[54,1329,392],{},", store ",[54,1332,402],{},", and redirect",[146,1335,1336,1339],{},[164,1337,1338],{},"Failure path",[164,1340,1341],{},"Show the accumulated errors, then use one generic public login error in the final version",[11,1343,1345,1348],{"id":1344,"level":14},"common-mistakes",[16,1346,1347],{"id":1344},"Common Mistakes",[24,1349,1350,1356,1359,1365,1368,1374],{},[27,1351,1352,1353,1355],{},"Calling ",[54,1354,515],{}," after visible output",[27,1357,1358],{},"Forgetting to stop the script after redirect",[27,1360,1361,1362,1364],{},"Storing the whole user row, including ",[54,1363,392],{},", in the session",[27,1366,1367],{},"Leaving separate missing-user and wrong-password errors in the final public page",[27,1369,1370,1371,1373],{},"Requiring ",[54,1372,231],{}," after HTML output",[27,1375,1352,1376,1378,1379,1381],{},[54,1377,839],{}," before ",[54,1380,231],{}," is loaded",[11,1383,1385,1388],{"id":1384,"level":14},"knowledge-check",[16,1386,1387],{"id":1384},"Knowledge Check",[24,1389,1390,1396,1399,1402,1405,1408,1411,1416],{},[27,1391,1392,1393,1395],{},"Why does login use ",[54,1394,409],{}," instead of comparing text?",[27,1397,1398],{},"Why does PHP still validate login input after browser and JavaScript checks?",[27,1400,1401],{},"Why regenerate the session id after successful login?",[27,1403,1404],{},"Why should failed login use one generic message?",[27,1406,1407],{},"What makes a page \"protected\"?",[27,1409,1410],{},"Why should refreshing a protected page still know who is logged in?",[27,1412,1413,1414,1205],{},"What user values are safe and useful to store in ",[54,1415,677],{},[27,1417,1418],{},"Why is hiding a navigation link not enough to protect a page?",[11,1420,1422,1426],{"id":1421,"level":14},"further-learning",[16,1423,1425],{"id":1424},"key-terms-and-further-learning","Key Terms And Further Learning",[237,1427,1428,1452],{"gap":239,"left-width":623,"right-width":623},[243,1429,1430,1434,1441,1446],{"v-slot:left":245},[627,1431,1433],{"id":1432},"key-terms","Key Terms",[20,1435,1436,1440],{},[1437,1438,1439],"strong",{},"Authentication"," - Proving who a user is",[20,1442,1443,1445],{},[1437,1444,663],{}," - Server-side state connected to a browser session id",[20,1447,1448,1451],{},[1437,1449,1450],{},"Redirect guard"," - Code that sends unauthenticated users away from protected pages",[243,1453,1454,1457],{"v-slot:right":245},[627,1455,1456],{"id":1421},"Further Learning",[24,1458,1459,1468,1477],{},[27,1460,1461],{},[1462,1463,1467],"a",{"href":1464,"rel":1465},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Fbook.session.php",[1466],"nofollow","PHP sessions",[27,1469,1470],{},[1462,1471,1474,1475],{"href":1472,"rel":1473},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Ffunction.password-verify.php",[1466],"PHP ",[54,1476,409],{},[27,1478,1479],{},[1462,1480,1483],{"href":1481,"rel":1482},"https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FAuthentication_Cheat_Sheet.html",[1466],"OWASP Authentication Cheat Sheet",[11,1485,1487,1491],{"id":1486,"level":14},"finish-lesson-branch",[16,1488,1490],{"id":1489},"finish-the-lesson-branch","Finish The Lesson Branch",[579,1492,1493,1498,1504,1510,1516,1526,1537],{},[27,1494,1495,1496],{},"Check the final file list: ",[54,1497,105],{},[27,1499,1500,1501],{},"Stage the shared and page files: ",[54,1502,1503],{},"git add lib\u002F partials\u002F public_html\u002Fproject\u002F",[27,1505,1506,1507],{},"Commit the practice work: ",[54,1508,1509],{},"git commit -m \"Add login session pages\"",[27,1511,1512,1513],{},"Push the branch: ",[54,1514,1515],{},"git push origin Milestone1-Part03-User-Login",[27,1517,1518,1519,1521,1522,1525],{},"On GitHub, open a pull request from ",[54,1520,90],{}," into ",[54,1523,1524],{},"qa",", review it, then merge",[27,1527,1528,1529,1531,1532,1521,1534],{},"Briefly test ",[54,1530,1524],{},", then open and merge a pull request from ",[54,1533,1524],{},[54,1535,1536],{},"prod",[27,1538,1539,1540,516,1543],{},"Prepare for the next lesson: ",[54,1541,1542],{},"git checkout qa",[54,1544,1545],{},"git pull origin qa",[11,1547,1549,1552],{"id":1548,"level":14},"summary",[16,1550,1551],{"id":1548},"Summary",[24,1553,1554,1559,1562,1565,1570,1577,1583,1586,1589,1592,1595,1598],{},[27,1555,1556,1557],{},"Login finds an account row, then verifies the submitted password with ",[54,1558,1318],{},[27,1560,1561],{},"Browser and JavaScript checks help users fix obvious login form mistakes before POST",[27,1563,1564],{},"PHP validates the submitted email shape and password minimum length before querying",[27,1566,1567,1569],{},[54,1568,231],{}," starts the session and loads DB access plus render helpers",[27,1571,878,1572,1574,1575],{},[54,1573,861],{}," renders shared navigation through ",[54,1576,839],{},[27,1578,1579,1580,1582],{},"Store safe user data under ",[54,1581,402],{},", not as separate loose session keys",[27,1584,1585],{},"Protected pages need guard logic before private content is rendered",[27,1587,1588],{},"Logout clears session state so the browser no longer acts as a logged-in user",[27,1590,1591],{},"Refreshing a protected page should keep working because the session persists across requests",[27,1593,1594],{},"Navigation can reflect login state, but page guards enforce access",[27,1596,1597],{},"The full login flow should test success, failure, protected access, and logout",[27,1599,1600,1601],{},"GitHub reference checkpoint: ",[1462,1602,1605],{"href":1603,"rel":1604},"https:\u002F\u002Fgithub.com\u002FMattToegel\u002FIT202-2026\u002Ftree\u002FMilestone1-Part03-User-Login",[1466],"Milestone1-Part03-User-Login branch",{"title":245,"searchDepth":1607,"depth":1607,"links":1608},2,[1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636],{"id":13,"depth":1607,"text":18},{"id":44,"depth":1607,"text":47},{"id":109,"depth":1607,"text":112},{"id":134,"depth":1607,"text":135},{"id":222,"depth":1607,"text":225},{"id":290,"depth":1607,"text":293},{"id":362,"depth":1607,"text":365},{"id":449,"depth":1607,"text":450},{"id":481,"depth":1607,"text":484},{"id":574,"depth":1607,"text":577},{"id":617,"depth":1607,"text":620},{"id":696,"depth":1607,"text":699},{"id":757,"depth":1607,"text":760},{"id":798,"depth":1607,"text":801},{"id":852,"depth":1607,"text":855},{"id":906,"depth":1607,"text":909},{"id":962,"depth":1607,"text":963},{"id":989,"depth":1607,"text":992},{"id":1015,"depth":1607,"text":1018},{"id":1061,"depth":1607,"text":1064},{"id":1116,"depth":1607,"text":1119},{"id":1147,"depth":1607,"text":1150},{"id":1216,"depth":1607,"text":1219},{"id":1344,"depth":1607,"text":1347},{"id":1384,"depth":1607,"text":1387},{"id":1424,"depth":1607,"text":1425},{"id":1489,"depth":1607,"text":1490},{"id":1548,"depth":1607,"text":1551},"presentation","Internet Applications","Create a login page that verifies credentials, starts a PHP session on success, and redirects the user.","Face-to-face class of about 40 students; includes typing time, troubleshooting, checks, and short questions.","10","50","60","md",{},"4",true,"40","\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","Core",false,"25",null,{"title":5,"description":1639},"published","internet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",[1658,1659,1660],"mysql","database","accounts","2026-06-24T11:36:41-04:00","54:50","2NHKtAZF6wU","https:\u002F\u002Fyoutu.be\u002F2NHKtAZF6wU","Cf0SU1fPfuvE0BfuesP9X-Sp9FGqzwIX-py9EjSS7Eg",[1667,1670,1676,1679,1683,1686,1689,1692,1695,1698,1701,1705,1709,1712,1716,1719,1722,1726,1729,1732,1735,1737,1739,1741,1743,1745,1747,1749,1752,1755,1758,1761,1764,1766,1769,1772,1776,1780,1784,1788,1791,1794,1797,1800,1804,1807,1810,1813,1816,1819,1822,1825,1827,1830,1833,1836,1839,1842,1845,1848,1851,1855,1859,1863,1867,1870,1873,1876,1879,1882,1885,1888,1891,1893,1896,1899,1902,1905,1908,1911,1914,1918,1921,1924,1927,1930,1933,1936,1939,1942,1945,1948,1952,1955,1958,1961,1964,1967,1970,1973,1976,1979,1982,1985,1988,1991,1994,1997,2000,2003,2006,2009,2012,2015,2018,2021,2024,2027,2030,2033,2036,2039,2042,2045,2048,2051,2054,2057,2060,2063,2066,2069,2072,2075,2078,2081,2084,2087,2090,2093,2096,2099,2102,2105,2108,2111,2114,2117,2120,2123,2126,2129,2132,2135,2138,2141,2144,2147,2150,2153,2156,2159,2162,2165,2168,2171,2174,2177,2180,2183,2186,2189,2192,2195,2198,2201,2204,2207,2210,2213,2216,2219,2222,2225,2228,2231,2234,2237,2240,2243,2246,2249,2252,2255,2258,2261,2264,2267,2270,2273,2276,2279,2282,2285,2288,2291,2294,2297,2300,2303,2306,2310,2313,2316,2319,2322,2325,2328,2331,2334,2337,2340,2343,2346,2349,2352,2355,2358,2361,2364,2367,2370,2373,2376,2379,2382,2385,2388,2391,2394,2397,2400,2403,2406,2409,2412,2415,2418,2421,2424,2427,2430,2433,2436,2439,2442,2445,2448,2451,2454,2457,2460,2463,2466,2469,2472,2475,2478,2481,2484,2487,2490,2493,2496,2499,2502,2505,2508,2511,2514,2517,2520,2523,2526,2529,2532,2535,2538,2541,2544,2547,2550,2553,2556,2559,2562,2565,2568,2571,2574,2577,2580,2583,2586,2589,2592,2595,2598,2601,2604,2607,2610,2613,2616,2619,2622,2625,2628,2631,2634,2637,2640,2643,2646,2649,2652,2655,2658,2661,2664,2667,2670,2673,2676,2679,2682,2685,2688,2691,2695,2698,2701,2704,2707,2710,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2752,2754,2756,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2793,2797,2801,2804,2808,2812,2815,2818,2821,2824,2827,2830,2834,2837,2840,2843,2846,2848,2850,2852,2854,2857,2860,2863,2866,2869,2872,2875,2878,2881,2884,2887,2890,2893,2896,2899,2902,2905,2908,2911,2914,2917,2920,2923,2926,2929,2932,2935,2938,2941,2944,2947,2950,2953,2956,2959,2962,2965,2968,2971,2974,2977,2980,2983,2986,2989,2992,2995,2998,3001,3004,3007,3010,3013,3016,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3103,3106,3109,3112,3115,3117,3119,3122,3125,3128,3131,3134,3137],{"path":1668,"title":1669,"order":1653,"module":1653,"status":1653},"\u002Fabout","About Content Version 3",{"path":1671,"title":1672,"order":1673,"module":1674,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","5","1","draft",{"path":1677,"title":1678,"order":1641,"module":1674,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":1680,"title":1681,"order":1682,"module":1674,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?","20",{"path":1684,"title":1685,"order":1641,"module":14,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":1687,"title":1688,"order":1641,"module":446,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory",{"path":1690,"title":1691,"order":1682,"module":446,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":1693,"title":1694,"order":1641,"module":1646,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics",{"path":1696,"title":1697,"order":1682,"module":1646,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":1699,"title":1700,"order":1641,"module":1673,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":1702,"title":1703,"order":1682,"module":1704,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype","6",{"path":1706,"title":1707,"order":1641,"module":1708,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design","8",{"path":1710,"title":1711,"order":1682,"module":1708,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":1713,"title":1714,"order":1641,"module":1715,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems","9",{"path":1717,"title":1718,"order":1641,"module":1641,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":1720,"title":1721,"order":1682,"module":1641,"status":1675},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":1723,"title":1724,"order":1674,"module":1725,"status":1655},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design","0",{"path":1727,"title":1728,"order":1674,"module":1725,"status":1675},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":1730,"title":1731,"order":1653,"module":1653,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":1733,"title":1734,"order":1653,"module":1653,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":1736,"title":1678,"order":1641,"module":1674,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":1738,"title":1681,"order":1682,"module":1674,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":1740,"title":1685,"order":1641,"module":14,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":1742,"title":1688,"order":1641,"module":446,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":1744,"title":1691,"order":1682,"module":446,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":1746,"title":1694,"order":1641,"module":1646,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":1748,"title":1697,"order":1682,"module":1646,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":1750,"title":1751,"order":1641,"module":1673,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":1753,"title":1754,"order":1641,"module":1704,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":1756,"title":1757,"order":1682,"module":1704,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":1759,"title":1760,"order":1641,"module":1708,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":1762,"title":1763,"order":1682,"module":1708,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":1765,"title":1714,"order":1641,"module":1715,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":1767,"title":1768,"order":1641,"module":1641,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":1770,"title":1771,"order":1682,"module":1641,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":1773,"title":1774,"order":1641,"module":1775,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces","11",{"path":1777,"title":1778,"order":1641,"module":1779,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations","12",{"path":1781,"title":1782,"order":1641,"module":1783,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":1785,"title":1786,"order":1641,"module":1787,"status":1675},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine","14",{"path":1789,"title":1790,"order":1674,"module":1725,"status":1675},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":1792,"title":1793,"order":1641,"module":1725,"status":1675},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":1795,"title":1796,"order":1682,"module":1725,"status":1675},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":1798,"title":1799,"order":1648,"module":1725,"status":1675},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice",{"path":1801,"title":1802,"order":1803,"module":1725,"status":1675},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint","30",{"path":1805,"title":1806,"order":1641,"module":1674,"status":1675},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":1808,"title":1809,"order":1682,"module":1674,"status":1675},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":1811,"title":1812,"order":1803,"module":1674,"status":1675},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":1814,"title":1815,"order":1648,"module":1674,"status":1675},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":1817,"title":1818,"order":1642,"module":1674,"status":1675},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions",{"path":1820,"title":1821,"order":1643,"module":1674,"status":1675},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations",{"path":1823,"title":1824,"order":1653,"module":1653,"status":1653},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":1826,"title":1824,"order":1641,"module":1674,"status":1653},"\u002Fgeneral\u002Fbasic-command-line",{"path":1828,"title":1829,"order":1653,"module":1653,"status":1655},"\u002F","Ethereal Lab Course Materials",{"path":1831,"title":1832,"order":1725,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":1834,"title":1835,"order":1641,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":1837,"title":1838,"order":1682,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":1840,"title":1841,"order":1803,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":1843,"title":1844,"order":1648,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":1846,"title":1847,"order":1642,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":1849,"title":1850,"order":1643,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":1852,"title":1853,"order":1854,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":1856,"title":1857,"order":1858,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":1860,"title":1861,"order":1862,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox","90",{"path":1864,"title":1865,"order":1866,"module":1674,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware","100",{"path":1868,"title":1869,"order":1641,"module":14,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":1871,"title":1872,"order":1682,"module":14,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":1874,"title":1875,"order":1641,"module":446,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":1877,"title":1878,"order":1682,"module":446,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":1880,"title":1881,"order":1803,"module":446,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates","Understanding CSS\u002FJS Selectors And DOM Updates",{"path":1883,"title":1884,"order":1641,"module":1646,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Intro To SQL",{"path":1886,"title":1887,"order":1682,"module":1646,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":1889,"title":1890,"order":1803,"module":1646,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":1892,"title":5,"order":1648,"module":1646,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":1894,"title":1895,"order":1641,"module":1673,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Intro To Regex",{"path":1897,"title":1898,"order":1682,"module":1673,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":1900,"title":1901,"order":1803,"module":1673,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":1903,"title":1904,"order":1648,"module":1673,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":1906,"title":1907,"order":1641,"module":1704,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":1909,"title":1910,"order":1682,"module":1704,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","User Login Enhancement",{"path":1912,"title":1913,"order":1803,"module":1704,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":1915,"title":1916,"order":1641,"module":1917,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Working With API Data","7",{"path":1919,"title":1920,"order":1682,"module":1917,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":1922,"title":1923,"order":1803,"module":1917,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":1925,"title":1926,"order":1641,"module":1708,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Milestone 2 Bootstrap And Reusability",{"path":1928,"title":1929,"order":1682,"module":1708,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":1931,"title":1932,"order":1803,"module":1708,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":1934,"title":1935,"order":1641,"module":1715,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Add User Associations",{"path":1937,"title":1938,"order":1682,"module":1715,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":1940,"title":1941,"order":1641,"module":1641,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":1943,"title":1944,"order":1682,"module":1641,"status":1675},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":1946,"title":1947,"order":1674,"module":1725,"status":1655},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":1949,"title":1950,"order":1648,"module":1641,"status":1951},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":1953,"title":1954,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":1956,"title":1957,"order":1682,"module":1708,"status":1951},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":1959,"title":1960,"order":1803,"module":1715,"status":1951},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":1962,"title":1963,"order":1673,"module":1646,"status":1655},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":1965,"title":1966,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":1968,"title":1969,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":1971,"title":1972,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02a-basic-cli-commands-for-course-work","Basic CLI Commands For Web Development",{"path":1974,"title":1975,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":1977,"title":1978,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03-version-control-with-git-and-github","Version Control With Git And GitHub",{"path":1980,"title":1981,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":1983,"title":1984,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F04-adding-the-instructor-template-to-your-repository","Starting From A Starter Template",{"path":1986,"title":1987,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F05-editing-locally-and-seeing-changes-run","Editing Locally And Seeing Changes Run",{"path":1989,"title":1990,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F06-building-a-local-ubuntu-web-server","Building A Local Ubuntu Web Server",{"path":1992,"title":1993,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":1995,"title":1996,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":1998,"title":1999,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F09-your-first-php-page-through-apache","Your First PHP Page Through Apache",{"path":2001,"title":2002,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F10-how-http-works-requests-and-responses","How HTTP Works: Requests And Responses",{"path":2004,"title":2005,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F11-http-methods-get-post-and-status-codes","HTTP Methods: GET, POST, And Status Codes",{"path":2007,"title":2008,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":2010,"title":2011,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F01-how-php-runs-on-the-server","How PHP Runs On The Server",{"path":2013,"title":2014,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":2016,"title":2017,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":2019,"title":2020,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":2022,"title":2023,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F05-data-types-strings-numbers-booleans-and-null","Data Types: Strings, Numbers, Booleans, And Null",{"path":2025,"title":2026,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":2028,"title":2029,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":2031,"title":2032,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":2034,"title":2035,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":2037,"title":2038,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":2040,"title":2041,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":2043,"title":2044,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":2046,"title":2047,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F03-common-html-elements-and-semantic-tags","Common HTML Elements And Semantic Tags",{"path":2049,"title":2050,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F04-building-forms-inputs-labels-and-buttons","Building Forms: Inputs, Labels, And Buttons",{"path":2052,"title":2053,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F05-get-requests-and-query-string-data","GET Requests And Query String Data",{"path":2055,"title":2056,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F06-post-requests-and-form-body-data","POST Requests And Form Body Data",{"path":2058,"title":2059,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F07-css-fundamentals-selectors-properties-and-values","CSS Fundamentals: Selectors, Properties, And Values",{"path":2061,"title":2062,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F08-the-box-model-margin-border-padding-and-content","The Box Model: Margin, Border, Padding, And Content",{"path":2064,"title":2065,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":2067,"title":2068,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09a-css-positioning-fixed-headers-and-body-offsets","CSS Positioning: Fixed Headers And Body Offsets",{"path":2070,"title":2071,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F10-selecting-and-changing-elements-with-javascript","Selecting And Changing Elements With JavaScript",{"path":2073,"title":2074,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F11-inline-validation-and-client-side-feedback","Inline Validation And Client-Side Feedback",{"path":2076,"title":2077,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":2079,"title":2080,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":2082,"title":2083,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F02-relational-concepts-tables-rows-columns-and-primary-keys","Relational Concepts: Tables, Rows, Columns, And Primary Keys",{"path":2085,"title":2086,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F03-writing-sql-create-insert-select-update-delete","Writing SQL: CREATE, INSERT, SELECT, UPDATE, DELETE",{"path":2088,"title":2089,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":2091,"title":2092,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":2094,"title":2095,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":2097,"title":2098,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":2100,"title":2101,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":2103,"title":2104,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":2106,"title":2107,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":2109,"title":2110,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":2112,"title":2113,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":2115,"title":2116,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F01-why-client-side-validation-is-not-enough","Why Client-Side Validation Is Not Enough",{"path":2118,"title":2119,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":2121,"title":2122,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":2124,"title":2125,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":2127,"title":2128,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":2130,"title":2131,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":2133,"title":2134,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":2136,"title":2137,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F08-allowing-login-by-username-or-email","Allowing Login By Username Or Email",{"path":2139,"title":2140,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":2142,"title":2143,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":2145,"title":2146,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F11-review-the-full-account-system-so-far","Review: The Full Account System So Far",{"path":2148,"title":2149,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":2151,"title":2152,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":2154,"title":2155,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F03-protecting-a-page-with-an-access-check","Protecting A Page With An Access Check",{"path":2157,"title":2158,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":2160,"title":2161,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":2163,"title":2164,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":2166,"title":2167,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":2169,"title":2170,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":2172,"title":2173,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":2175,"title":2176,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":2178,"title":2179,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":2181,"title":2182,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":2184,"title":2185,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":2187,"title":2188,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F02-json-a-common-data-format-for-the-web","JSON: A Common Data Format For The Web",{"path":2190,"title":2191,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F03-building-a-php-endpoint-that-returns-json","Building A PHP Endpoint That Returns JSON",{"path":2193,"title":2194,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F04-sending-requests-from-javascript-with-fetch","Sending Requests From JavaScript With Fetch",{"path":2196,"title":2197,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":2199,"title":2200,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F06-updating-the-page-with-returned-data","Updating The Page With Returned Data",{"path":2202,"title":2203,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":2205,"title":2206,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":2208,"title":2209,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F09-making-authenticated-api-calls-from-php","Making Authenticated API Calls From PHP",{"path":2211,"title":2212,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":2214,"title":2215,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F11-cors-and-cross-origin-request-basics","CORS And Cross-Origin Request Basics",{"path":2217,"title":2218,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F12-browser-devtools-for-web-application-debugging","Browser DevTools For Web Application Debugging",{"path":2220,"title":2221,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":2223,"title":2224,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":2226,"title":2227,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F03-responding-to-events-clicks-inputs-and-submissions","Responding To Events: Clicks, Inputs, And Submissions",{"path":2229,"title":2230,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F04-updating-the-dom-after-a-user-action","Updating The DOM After A User Action",{"path":2232,"title":2233,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":2235,"title":2236,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":2238,"title":2239,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":2241,"title":2242,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":2244,"title":2245,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":2247,"title":2248,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":2250,"title":2251,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":2253,"title":2254,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":2256,"title":2257,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":2259,"title":2260,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":2262,"title":2263,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":2265,"title":2266,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":2268,"title":2269,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":2271,"title":2272,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":2274,"title":2275,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":2277,"title":2278,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":2280,"title":2281,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":2283,"title":2284,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":2286,"title":2287,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":2289,"title":2290,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":2292,"title":2293,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":2295,"title":2296,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":2298,"title":2299,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":2301,"title":2302,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":2304,"title":2305,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":2307,"title":2308,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","Quiz - What Internet Applications Build","ready",{"path":2311,"title":2312,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Quiz - Files, Folders, And Project Structure",{"path":2314,"title":2315,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02a-basic-cli-commands-for-course-work","Quiz - Basic CLI Commands For Web Development",{"path":2317,"title":2318,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Quiz - Install Git And Terminal Tools",{"path":2320,"title":2321,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03-version-control-with-git-and-github","Quiz - Version Control With Git And GitHub",{"path":2323,"title":2324,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":2326,"title":2327,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F04-adding-the-instructor-template-to-your-repository","Quiz - Starting From A Starter Template",{"path":2329,"title":2330,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F05-editing-locally-and-seeing-changes-run","Quiz - Editing Locally And Seeing Changes Run",{"path":2332,"title":2333,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F06-building-a-local-ubuntu-web-server","Quiz - Building A Local Ubuntu Web Server",{"path":2335,"title":2336,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Quiz - Git Recovery And Common Mistakes",{"path":2338,"title":2339,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":2341,"title":2342,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F09-your-first-php-page-through-apache","Quiz - Your First PHP Page Through Apache",{"path":2344,"title":2345,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F10-how-http-works-requests-and-responses","Quiz - How HTTP Works: Requests And Responses",{"path":2347,"title":2348,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F11-http-methods-get-post-and-status-codes","Quiz - HTTP Methods: GET, POST, And Status Codes",{"path":2350,"title":2351,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Quiz - Local, QA, And Production Environments",{"path":2353,"title":2354,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F01-how-php-runs-on-the-server","Quiz - How PHP Runs On The Server",{"path":2356,"title":2357,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":2359,"title":2360,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":2362,"title":2363,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Quiz - Variables: Storing And Naming Values",{"path":2365,"title":2366,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F05-data-types-strings-numbers-booleans-and-null","Quiz - Data Types: Strings, Numbers, Booleans, And Null",{"path":2368,"title":2369,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Quiz - Arrays: Storing Lists Of Values",{"path":2371,"title":2372,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":2374,"title":2375,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":2377,"title":2378,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Quiz - Functions: Reusable Blocks Of Logic",{"path":2380,"title":2381,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Quiz - Reading And Debugging Error Messages",{"path":2383,"title":2384,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":2386,"title":2387,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Quiz - Writing A Valid HTML Document",{"path":2389,"title":2390,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F03-common-html-elements-and-semantic-tags","Quiz - Common HTML Elements And Semantic Tags",{"path":2392,"title":2393,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F04-building-forms-inputs-labels-and-buttons","Quiz - Building Forms: Inputs, Labels, And Buttons",{"path":2395,"title":2396,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F05-get-requests-and-query-string-data","Quiz - GET Requests And Query String Data",{"path":2398,"title":2399,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F06-post-requests-and-form-body-data","Quiz - POST Requests And Form Body Data",{"path":2401,"title":2402,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F07-css-fundamentals-selectors-properties-and-values","Quiz - CSS Fundamentals: Selectors, Properties, And Values",{"path":2404,"title":2405,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F08-the-box-model-margin-border-padding-and-content","Quiz - The Box Model: Margin, Border, Padding, And Content",{"path":2407,"title":2408,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":2410,"title":2411,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09a-css-positioning-fixed-headers-and-body-offsets","Quiz - CSS Positioning: Fixed Headers And Body Offsets",{"path":2413,"title":2414,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F10-selecting-and-changing-elements-with-javascript","Quiz - Selecting And Changing Elements With JavaScript",{"path":2416,"title":2417,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F11-inline-validation-and-client-side-feedback","Quiz - Inline Validation And Client-Side Feedback",{"path":2419,"title":2420,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":2422,"title":2423,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Quiz - Why Web Applications Need A Database",{"path":2425,"title":2426,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F02-relational-concepts-tables-rows-columns-and-primary-keys","Quiz - Relational Concepts: Tables, Rows, Columns, And Primary Keys",{"path":2428,"title":2429,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F03-writing-sql-create-insert-select-update-delete","Quiz - Writing SQL: CREATE, INSERT, SELECT, UPDATE, DELETE",{"path":2431,"title":2432,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":2434,"title":2435,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Quiz - Connecting PHP To MySQL With PDO",{"path":2437,"title":2438,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Quiz - Parameterized Queries And SQL Injection Prevention",{"path":2440,"title":2441,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":2443,"title":2444,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":2446,"title":2447,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":2449,"title":2450,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Quiz - Sessions: Remembering The Logged-In User",{"path":2452,"title":2453,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":2455,"title":2456,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Quiz - Navigation That Responds To Login State",{"path":2458,"title":2459,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F01-why-client-side-validation-is-not-enough","Quiz - Why Client-Side Validation Is Not Enough",{"path":2461,"title":2462,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Quiz - Sanitizing And Escaping User Input",{"path":2464,"title":2465,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Quiz - Required Fields And Length Rules",{"path":2467,"title":2468,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Quiz - Regular Expressions For Pattern Matching",{"path":2470,"title":2471,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Quiz - Server-Side Validation In PHP",{"path":2473,"title":2474,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Quiz - Cross-Site Scripting (XSS) Prevention",{"path":2476,"title":2477,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Quiz - Flash Messages And Persistent Feedback",{"path":2479,"title":2480,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F08-allowing-login-by-username-or-email","Quiz - Allowing Login By Username Or Email",{"path":2482,"title":2483,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Quiz - Building A Profile Edit Page",{"path":2485,"title":2486,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Quiz - Debugging Account And Authentication Problems",{"path":2488,"title":2489,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F11-review-the-full-account-system-so-far","Quiz - Review: The Full Account System So Far",{"path":2491,"title":2492,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":2494,"title":2495,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":2497,"title":2498,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F03-protecting-a-page-with-an-access-check","Quiz - Protecting A Page With An Access Check",{"path":2500,"title":2501,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Quiz - Safe Redirects After Login And Logout",{"path":2503,"title":2504,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":2506,"title":2507,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Quiz - Creating New Records With A Form",{"path":2509,"title":2510,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":2512,"title":2513,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":2515,"title":2516,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":2518,"title":2519,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":2521,"title":2522,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":2524,"title":2525,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":2527,"title":2528,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","Quiz - What Asynchronous Requests (AJAX) Solve",{"path":2530,"title":2531,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F02-json-a-common-data-format-for-the-web","Quiz - JSON: A Common Data Format For The Web",{"path":2533,"title":2534,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F03-building-a-php-endpoint-that-returns-json","Quiz - Building A PHP Endpoint That Returns JSON",{"path":2536,"title":2537,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F04-sending-requests-from-javascript-with-fetch","Quiz - Sending Requests From JavaScript With Fetch",{"path":2539,"title":2540,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Quiz - Handling Fetch Responses And Errors",{"path":2542,"title":2543,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F06-updating-the-page-with-returned-data","Quiz - Updating The Page With Returned Data",{"path":2545,"title":2546,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":2548,"title":2549,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":2551,"title":2552,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F09-making-authenticated-api-calls-from-php","Quiz - Making Authenticated API Calls From PHP",{"path":2554,"title":2555,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Quiz - Storing And Caching API Responses",{"path":2557,"title":2558,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F11-cors-and-cross-origin-request-basics","Quiz - CORS And Cross-Origin Request Basics",{"path":2560,"title":2561,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F12-browser-devtools-for-web-application-debugging","Quiz - Browser DevTools For Web Application Debugging",{"path":2563,"title":2564,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","Quiz - jQuery: Simplified DOM And Event Work",{"path":2566,"title":2567,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":2569,"title":2570,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F03-responding-to-events-clicks-inputs-and-submissions","Quiz - Responding To Events: Clicks, Inputs, And Submissions",{"path":2572,"title":2573,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F04-updating-the-dom-after-a-user-action","Quiz - Updating The DOM After A User Action",{"path":2575,"title":2576,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":2578,"title":2579,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Quiz - Saving External API Data Through PHP",{"path":2581,"title":2582,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":2584,"title":2585,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":2587,"title":2588,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":2590,"title":2591,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":2593,"title":2594,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":2596,"title":2597,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Quiz - Joining Tables: INNER JOIN, LEFT JOIN",{"path":2599,"title":2600,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","Quiz - User-Owned Records And Access Enforcement",{"path":2602,"title":2603,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Quiz - Connecting API Data To User Records",{"path":2605,"title":2606,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":2608,"title":2609,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":2611,"title":2612,"order":1653,"module":1653,"status":1653},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":2614,"title":2615,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":2617,"title":2618,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":2620,"title":2621,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":2623,"title":2624,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":2626,"title":2627,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Quiz - Refreshing And Expiring External API Data",{"path":2629,"title":2630,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":2632,"title":2633,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Quiz - Cross-Site Request Forgery (CSRF) Protection",{"path":2635,"title":2636,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":2638,"title":2639,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":2641,"title":2642,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":2644,"title":2645,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":2647,"title":2648,"order":1653,"module":1653,"status":2309},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":2650,"title":2651,"order":1674,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":2653,"title":2654,"order":14,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":2656,"title":2657,"order":446,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":2659,"title":2660,"order":1646,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":2662,"title":2663,"order":1673,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":2665,"title":2666,"order":1704,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":2668,"title":2669,"order":1917,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":2671,"title":2672,"order":1725,"module":1725,"status":1675},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":2674,"title":2675,"order":1641,"module":1674,"status":1675},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":2677,"title":2678,"order":1682,"module":14,"status":1675},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":2680,"title":2681,"order":1803,"module":446,"status":1675},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":2683,"title":2684,"order":1648,"module":1646,"status":1675},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":2686,"title":2687,"order":1642,"module":1673,"status":1675},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":2689,"title":2690,"order":1643,"module":1704,"status":1675},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":2692,"title":2693,"order":2694,"module":1704,"status":1675},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":2696,"title":2697,"order":1854,"module":1917,"status":1675},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":2699,"title":2700,"order":1858,"module":1708,"status":1675},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":2702,"title":2703,"order":1862,"module":1715,"status":1675},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":2705,"title":2706,"order":1866,"module":1641,"status":1675},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":2708,"title":2709,"order":1653,"module":1653,"status":1675},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":2711,"title":2712,"order":1653,"module":1653,"status":1675},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":2714,"title":1832,"order":1725,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":2716,"title":1835,"order":1641,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":2718,"title":1838,"order":1682,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":2720,"title":1841,"order":1803,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":2722,"title":1844,"order":1648,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":2724,"title":1847,"order":1642,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":2726,"title":1850,"order":1643,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":2728,"title":1853,"order":1854,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":2730,"title":1857,"order":1858,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":2732,"title":1861,"order":1862,"module":1674,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":2734,"title":1865,"order":1866,"module":1674,"status":1675},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":2736,"title":1869,"order":1641,"module":14,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":2738,"title":1872,"order":1682,"module":14,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":2740,"title":1875,"order":1641,"module":446,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":2742,"title":1878,"order":1682,"module":446,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":2744,"title":1881,"order":1803,"module":446,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":2746,"title":1884,"order":1641,"module":1646,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":2748,"title":1887,"order":1682,"module":1646,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":2750,"title":1890,"order":1803,"module":1646,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":1649,"title":5,"order":1648,"module":1646,"status":1655},{"path":2753,"title":1895,"order":1641,"module":1673,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":2755,"title":1898,"order":1682,"module":1673,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":2757,"title":2758,"order":1803,"module":1673,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":2760,"title":1904,"order":1648,"module":1673,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":2762,"title":1907,"order":1641,"module":1704,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":2764,"title":1910,"order":1682,"module":1704,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":2766,"title":1913,"order":1803,"module":1704,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":2768,"title":1916,"order":1641,"module":1917,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":2770,"title":1920,"order":1682,"module":1917,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":2772,"title":1923,"order":1803,"module":1917,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":2774,"title":1926,"order":1641,"module":1708,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":2776,"title":1929,"order":1682,"module":1708,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":2778,"title":1932,"order":1803,"module":1708,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":2780,"title":1935,"order":1641,"module":1715,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":2782,"title":1938,"order":1682,"module":1715,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":2784,"title":1941,"order":1641,"module":1641,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":2786,"title":1944,"order":1682,"module":1641,"status":1655},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":2788,"title":1947,"order":1674,"module":1725,"status":1655},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":2790,"title":2791,"order":2792,"module":1641,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":2794,"title":2795,"order":2796,"module":1704,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":2798,"title":2799,"order":2800,"module":1704,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":2802,"title":2803,"order":2792,"module":1704,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":2805,"title":2806,"order":2807,"module":1708,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":2809,"title":2810,"order":2811,"module":1715,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":2813,"title":2814,"order":1641,"module":1674,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":2816,"title":2817,"order":1682,"module":14,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":2819,"title":2820,"order":1803,"module":446,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":2822,"title":2823,"order":1648,"module":1646,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":2825,"title":2826,"order":1642,"module":1673,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":2828,"title":2829,"order":1643,"module":1704,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":2831,"title":2832,"order":2833,"module":1704,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays","62",{"path":2835,"title":2836,"order":1854,"module":1917,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":2838,"title":2839,"order":1858,"module":1708,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":2841,"title":2842,"order":1862,"module":1715,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":2844,"title":2845,"order":1866,"module":1641,"status":1675},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":2847,"title":1835,"order":1641,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":2849,"title":1838,"order":1682,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":2851,"title":1841,"order":1803,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":2853,"title":1844,"order":1648,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":2855,"title":2856,"order":1642,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":2858,"title":2859,"order":1643,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":2861,"title":2862,"order":1641,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":2864,"title":2865,"order":1682,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":2867,"title":2868,"order":1803,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":2870,"title":2871,"order":1648,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":2873,"title":2874,"order":1641,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":2876,"title":2877,"order":1682,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":2879,"title":2880,"order":1803,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":2882,"title":2883,"order":1648,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":2885,"title":2886,"order":1641,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":2888,"title":2889,"order":1682,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":2891,"title":2892,"order":1803,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1","Java Sockets: Multi-Client Chat Server Part 1",{"path":2894,"title":2895,"order":1641,"module":1673,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2","Java Sockets: Multi-Client Chat Server Part 2",{"path":2897,"title":2898,"order":1682,"module":1704,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":2900,"title":2901,"order":1803,"module":1704,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":2903,"title":2904,"order":1641,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check","Java Advanced Programming Milestone 2: GameRooms and Ready Check",{"path":2906,"title":2907,"order":1682,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns","Java Advanced Programming Milestone 2: Turn-based Turns (Round-Robin)",{"path":2909,"title":2910,"order":1803,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns","Java Advanced Programming Milestone 2: Phase-based Turns",{"path":2912,"title":2913,"order":1648,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":2915,"title":2916,"order":1642,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":2918,"title":2919,"order":1641,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":2921,"title":2922,"order":1682,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":2924,"title":2925,"order":1803,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project","Java Advanced Programming Milestone 2: Equals 6 Mini Project",{"path":2927,"title":2928,"order":1648,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin","Java Advanced Programming Milestone 2: Project \"Nice Day For Fishin'\"",{"path":2930,"title":2931,"order":1642,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":2933,"title":2934,"order":1641,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":2936,"title":2937,"order":1682,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":2939,"title":2940,"order":1803,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":2942,"title":2943,"order":1648,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":2945,"title":2946,"order":1642,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":2948,"title":2949,"order":1643,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":2951,"title":2952,"order":1641,"module":1641,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":2954,"title":2955,"order":1682,"module":1641,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":2957,"title":2958,"order":1803,"module":1641,"status":1675},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":2960,"title":2961,"order":1674,"module":1725,"status":1655},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":2963,"title":2964,"order":1641,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":2966,"title":2967,"order":1682,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":2969,"title":2970,"order":1803,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":2972,"title":2973,"order":1641,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":2975,"title":2976,"order":1682,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":2978,"title":2979,"order":1803,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":2981,"title":2982,"order":1641,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":2984,"title":2985,"order":1682,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":2987,"title":2988,"order":1803,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":2990,"title":2991,"order":1648,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":2993,"title":2994,"order":1641,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":2996,"title":2997,"order":1682,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":2999,"title":3000,"order":1803,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":3002,"title":3003,"order":1641,"module":1673,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":3005,"title":3006,"order":1682,"module":1673,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":3008,"title":3009,"order":1803,"module":1673,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":3011,"title":3012,"order":1725,"module":1725,"status":1675},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":3014,"title":3015,"order":1653,"module":1653,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":3017,"title":3018,"order":1653,"module":1653,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":3020,"title":1835,"order":1641,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":3022,"title":1838,"order":1682,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":3024,"title":1841,"order":1803,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":3026,"title":1844,"order":1648,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":3028,"title":2856,"order":1642,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":3030,"title":2859,"order":1643,"module":1674,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":3032,"title":2862,"order":1641,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":3034,"title":2865,"order":1682,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":3036,"title":2868,"order":1803,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":3038,"title":2871,"order":1648,"module":14,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":3040,"title":2874,"order":1641,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":3042,"title":2877,"order":1682,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":3044,"title":2880,"order":1803,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":3046,"title":2883,"order":1648,"module":446,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":3048,"title":2886,"order":1641,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":3050,"title":2889,"order":1682,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":3052,"title":2892,"order":1803,"module":1646,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":3054,"title":2895,"order":1641,"module":1673,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":3056,"title":3057,"order":1641,"module":1704,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":3059,"title":2898,"order":1682,"module":1704,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":3061,"title":2901,"order":1803,"module":1704,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":3063,"title":2904,"order":1641,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":3065,"title":2907,"order":1682,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":3067,"title":2910,"order":1803,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":3069,"title":2913,"order":1648,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":3071,"title":2916,"order":1642,"module":1917,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":3073,"title":2919,"order":1641,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":3075,"title":2922,"order":1682,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":3077,"title":2925,"order":1803,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":3079,"title":2928,"order":1648,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":3081,"title":2931,"order":1642,"module":1708,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":3083,"title":2934,"order":1641,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":3085,"title":2937,"order":1682,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":3087,"title":2940,"order":1803,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":3089,"title":2943,"order":1648,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":3091,"title":2946,"order":1642,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":3093,"title":2949,"order":1643,"module":1715,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":3095,"title":2952,"order":1641,"module":1641,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":3097,"title":2955,"order":1682,"module":1641,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":3099,"title":2958,"order":1803,"module":1641,"status":1675},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":3101,"title":3102,"order":1641,"module":1674,"status":1675},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":3104,"title":3105,"order":1674,"module":1725,"status":1655},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":3107,"title":3108,"order":1674,"module":1725,"status":1655},"\u002Fsystems-integration","Systems Integration",{"path":3110,"title":3111,"order":1653,"module":1653,"status":1675},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":3113,"title":3114,"order":1653,"module":1653,"status":1675},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":3116,"title":3102,"order":1641,"module":1674,"status":1655},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":3118,"title":3105,"order":1674,"module":1725,"status":1655},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":3120,"title":3121,"order":1653,"module":1653,"status":1653},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":3123,"title":3124,"order":1653,"module":1653,"status":1653},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":3126,"title":3127,"order":1653,"module":1653,"status":1653},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":3129,"title":3130,"order":1653,"module":1653,"status":1653},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":3132,"title":3133,"order":1682,"module":1725,"status":1675},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":3135,"title":3136,"order":1803,"module":1725,"status":1675},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":3138,"title":3139,"order":1641,"module":1725,"status":1675},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086313]