[{"data":1,"prerenderedAt":2204},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement":3,"content-page-quiz:none":717,"content-navigation-index":729},{"id":4,"title":5,"audience":6,"body":7,"contentType":702,"course":703,"description":704,"estimateBasis":705,"estimatedDiscussionMinutes":706,"estimatedLiveMinutes":707,"estimatedTotalMinutes":708,"extension":709,"meta":710,"module":711,"navigation":712,"order":713,"path":714,"presentationRole":715,"promptAssist":716,"revision":717,"semester":717,"seo":718,"status":719,"stem":720,"syllabus":717,"tags":721,"updated":717,"videoDuration":725,"videoId":726,"videoLink":727,"videoTitle":5,"week":711,"__hash__":728},"content\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement.md","User Login Enhancement","student",{"type":8,"value":9,"toc":684},"minimark",[10,42,86,100,144,186,228,273,307,384,422,459,491,570,634],[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",{},"One login field can accept either username or email",[24,25,26,30,33,36,39],"ul",{},[27,28,29],"li",{},"The browser collects one identifier value",[27,31,32],{},"PHP detects whether the identifier is an email or username",[27,34,35],{},"Validation follows the detected format",[27,37,38],{},"The account lookup safely checks email or username",[27,40,41],{},"Successful login still rebuilds the full session, including roles",[11,43,45,48],{"id":44,"level":14},"practice-workspace",[16,46,47],{"id":44},"Practice Workspace",[24,49,50,57,60,67,70,76,79],{},[27,51,52,53],{},"Work in ",[54,55,56],"code",{},"public_html\u002Fproject\u002Flogin.php",[27,58,59],{},"Update browser validation in the same login page",[27,61,62,63,66],{},"Update root ",[54,64,65],{},"partials\u002Fnav.php"," for the temporary validation evidence utility",[27,68,69],{},"Preserve the existing successful-login session logic while changing the identifier input",[27,71,72,73],{},"Lesson branch: ",[54,74,75],{},"Milestone1-Part08-User-Login-Enhancement",[27,77,78],{},"This lesson depends on username\u002Fprofile work and user roles authorization",[27,80,81,82,85],{},"After a working change: run ",[54,83,84],{},"git status",", stage the changed files, and commit",[11,87,89,92,97],{"id":88,"level":14},"login-enhancement-flow",[16,90,91],{"id":88},"Login Enhancement Flow",[93,94],"code-snippet",{"language":95,"src":96},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement\u002Flogin-enhancement-flow-01.txt",[20,98,99],{},"Keep one public failure message for all failed login attempts.",[11,101,103,106,112,116],{"id":102,"level":14},"update-login-field",[16,104,105],{"id":102},"Update Login Field",[20,107,108,109,111],{},"In ",[54,110,56],{},", change the email-only field into an identifier field.",[93,113],{"language":114,"src":115},"php","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement\u002Fupdate-login-field-02.php",[24,117,118,125,132,135,141],{},[27,119,120,121,124],{},"Use ",[54,122,123],{},"type=\"text\""," because usernames are not email addresses",[27,126,127,128,131],{},"The ",[54,129,130],{},"pattern"," allows either the username rule or a simple email-shaped value",[27,133,134],{},"Keep the value sticky after failed validation",[27,136,137,140],{},[54,138,139],{},"autocomplete=\"username\""," is appropriate for either username or email login identifiers",[27,142,143],{},"Password field and submit button stay unchanged",[11,145,147,150,153,156],{"id":146,"level":14},"detect-login-identifier",[16,148,149],{"id":146},"Detect Login Identifier",[20,151,152],{},"Replace the old email-only normalization with identifier detection.",[93,154],{"language":114,"src":155},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement\u002Fdetect-login-identifier-03.php",[24,157,158,161,164,174,177,180,183],{},[27,159,160],{},"Email keeps the Module 5 email validation path",[27,162,163],{},"Username keeps the Module 5 username validation path",[27,165,166,167,170,171],{},"The old ",[54,168,169],{},"isset($_POST[\"email\"], $_POST[\"password\"])"," check changes to ",[54,172,173],{},"identifier",[27,175,176],{},"Keep the lookup and successful-login branch inside this same POST-handling block",[27,178,179],{},"The TODO comments mark where the next snippets continue this same handler",[27,181,182],{},"Invalid identifiers should not run a database lookup",[27,184,185],{},"The visible login failure should still stay generic after lookup\u002Fpassword failures",[11,187,189,192,195,198],{"id":188,"level":14},"lookup-by-identifier",[16,190,191],{"id":188},"Lookup By Identifier",[20,193,194],{},"Use the detected identifier in one prepared query.",[93,196],{"language":114,"src":197},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement\u002Flookup-by-identifier-04.php",[24,199,200,203,209,212,219,225],{},[27,201,202],{},"The same normalized value is passed to one named placeholder",[27,204,127,205,208],{},[54,206,207],{},"WHERE"," clause accepts either matching column",[27,210,211],{},"This snippet belongs inside the identifier POST handler from the previous slide",[27,213,214,215,218],{},"A username cannot contain ",[54,216,217],{},"@",", so email and username paths stay separate",[27,220,221,224],{},[54,222,223],{},"password_verify()"," still decides whether the submitted password matches",[27,226,227],{},"The public message does not reveal which part failed",[11,229,231,234,245,249],{"id":230,"level":14},"browser-validation",[16,232,233],{"id":230},"Browser Validation",[20,235,236,237,240,241,244],{},"Update the page-level ",[54,238,239],{},"validate(form)"," in ",[54,242,243],{},"login.php",".",[93,246],{"language":247,"src":248},"html","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement\u002Fbrowser-validation-05.html",[24,250,251,254,260,267,270],{},[27,252,253],{},"This mirrors the PHP identifier split",[27,255,256,257,259],{},"The shared field is ",[54,258,123],{},", so email format needs an explicit client-side check",[27,261,262,263,266],{},"Keep the browser email check aligned with the server-side ",[54,264,265],{},"validate_email()"," expectation",[27,268,269],{},"JavaScript helps users catch easy mistakes before POST",[27,271,272],{},"PHP still validates because browser checks can be skipped",[11,274,276,279,284,287],{"id":275,"level":14},"validation-evidence-utility",[16,277,278],{"id":275},"Validation Evidence Utility",[20,280,281,282,244],{},"Add this near the existing project script includes in root ",[54,283,65],{},[93,285],{"language":247,"src":286},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement\u002Fvalidation-evidence-util-06.html",[24,288,289,292,295,301,304],{},[27,290,291],{},"This is only for easier validation evidence gathering during milestone submissions",[27,293,294],{},"It adds a floating widget that can disable HTML validation and page-level JS validation",[27,296,297,298],{},"It works because the project forms still use ",[54,299,300],{},"onsubmit=\"return validate(this)\"",[27,302,303],{},"PHP validation must still reject invalid submissions after the browser checks are bypassed",[27,305,306],{},"Remove the script during final cleanup after the milestones are complete",[11,308,310,313],{"id":309,"level":14},"test-cases",[16,311,312],{"id":309},"Test Cases",[314,315,316,329],"table",{},[317,318,319],"thead",{},[320,321,322,326],"tr",{},[323,324,325],"th",{},"Test",[323,327,328],{},"Expected Result",[330,331,332,344,353,361,368,376],"tbody",{},[320,333,334,341],{},[335,336,337,338],"td",{},"Correct email + ",[54,339,340],{},"password123",[335,342,343],{},"Redirects to dashboard",[320,345,346,351],{},[335,347,348,349],{},"Correct username + ",[54,350,340],{},[335,352,343],{},[320,354,355,358],{},[335,356,357],{},"Unknown username",[335,359,360],{},"Shows the generic login failure",[320,362,363,366],{},[335,364,365],{},"Existing account + wrong password",[335,367,360],{},[320,369,370,373],{},[335,371,372],{},"Invalid username characters",[335,374,375],{},"Shows validation feedback",[320,377,378,381],{},[335,379,380],{},"Admin account logs in",[335,382,383],{},"Admin navigation still appears",[11,385,387,390,393],{"id":386,"level":14},"milestone-checkpoint",[16,388,389],{"id":386},"Milestone Checkpoint",[20,391,392],{},"Before moving past Milestone 1:",[24,394,395,398,401,404,410,413,419],{},[27,396,397],{},"Registration stores username, email, and password hash",[27,399,400],{},"Login accepts username or email",[27,402,403],{},"Successful login stores the nested user session",[27,405,406,407],{},"Successful login reloads roles into ",[54,408,409],{},"$_SESSION[\"user\"][\"roles\"]",[27,411,412],{},"Profile updates can refresh username\u002Femail values",[27,414,415,416],{},"Admin pages still require ",[54,417,418],{},"Admin",[27,420,421],{},"The temporary validation utility can help capture HTML, JS, and PHP validation evidence",[11,423,425,428],{"id":424,"level":14},"common-mistakes",[16,426,427],{"id":424},"Common Mistakes",[24,429,430,436,439,442,449,456],{},[27,431,432,433],{},"Leaving the login field as ",[54,434,435],{},"type=\"email\"",[27,437,438],{},"Validating every identifier as email",[27,440,441],{},"Hard-coding only one lookup path after adding the shared identifier field",[27,443,444,445,448],{},"Dropping ",[54,446,447],{},"username"," from the selected columns",[27,450,451,452,455],{},"Rebuilding ",[54,453,454],{},"$_SESSION[\"user\"]"," without reloading roles",[27,457,458],{},"Showing separate \"email not found\" and \"wrong password\" messages",[11,460,462,465],{"id":461,"level":14},"knowledge-check",[16,463,464],{"id":461},"Knowledge Check",[24,466,467,473,476,479,485],{},[27,468,469,470,472],{},"Why should the login field use ",[54,471,123],{},"?",[27,474,475],{},"Why does PHP detect email versus username before validating?",[27,477,478],{},"Why should failed login still use one public message?",[27,480,481,482,484],{},"Why does login still need ",[54,483,223],{}," after the row is found?",[27,486,487,488,472],{},"Why does the success branch keep calling ",[54,489,490],{},"get_user_roles()",[11,492,494,498],{"id":493,"level":14},"further-learning",[16,495,497],{"id":496},"key-terms-and-further-learning","Key Terms And Further Learning",[499,500,503,537],"two-col",{"gap":501,"left-width":502,"right-width":502},"lg","1fr",[504,505,507,512,519,525,531],"template",{"v-slot:left":506},"",[508,509,511],"h3",{"id":510},"key-terms","Key Terms",[20,513,514,518],{},[515,516,517],"strong",{},"Identifier"," - Login value that identifies an account",[20,520,521,524],{},[515,522,523],{},"Account enumeration"," - Testing responses to discover whether an account exists",[20,526,527,530],{},[515,528,529],{},"Identifier routing"," - Choosing email or username validation based on the submitted value",[20,532,533,536],{},[515,534,535],{},"Generic login failure"," - One public message for failed lookup or password checks",[504,538,539,542],{"v-slot:right":506},[508,540,541],{"id":493},"Further Learning",[24,543,544,553,563],{},[27,545,546],{},[547,548,552],"a",{"href":549,"rel":550},"https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FAuthentication_Cheat_Sheet.html",[551],"nofollow","OWASP Authentication Cheat Sheet",[27,554,555],{},[547,556,559,560],{"href":557,"rel":558},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Ffunction.str-contains.php",[551],"PHP ",[54,561,562],{},"str_contains",[27,564,565],{},[547,566,569],{"href":567,"rel":568},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Ffilter.filters.validate.php",[551],"PHP validation filters",[11,571,573,577],{"id":572,"level":14},"finish-lesson-branch",[16,574,576],{"id":575},"finish-the-lesson-branch","Finish The Lesson Branch",[578,579,580,585,591,597,603,613,624],"ol",{},[27,581,582,583],{},"Check the final file list: ",[54,584,84],{},[27,586,587,588],{},"Stage the lesson work: ",[54,589,590],{},"git add public_html\u002Fproject\u002Flogin.php partials\u002Fnav.php",[27,592,593,594],{},"Commit the practice work: ",[54,595,596],{},"git commit -m \"Enhance login identifier\"",[27,598,599,600],{},"Push the branch: ",[54,601,602],{},"git push origin Milestone1-Part08-User-Login-Enhancement",[27,604,605,606,608,609,612],{},"On GitHub, open a pull request from ",[54,607,75],{}," into ",[54,610,611],{},"qa",", review it, then merge",[27,614,615,616,618,619,608,621],{},"Briefly test ",[54,617,611],{},", then open and merge a pull request from ",[54,620,611],{},[54,622,623],{},"prod",[27,625,626,627,630,631],{},"Prepare for the next lesson: ",[54,628,629],{},"git checkout qa"," then ",[54,632,633],{},"git pull origin qa",[11,635,637,640],{"id":636,"level":14},"summary",[16,638,639],{"id":636},"Summary",[24,641,642,645,648,659,662,665,676],{},[27,643,644],{},"Login now accepts either a username or an email in one field",[27,646,647],{},"PHP validates the identifier based on its detected shape",[27,649,650,651,654,655,658],{},"The lookup checks ",[54,652,653],{},"Users.email"," or ",[54,656,657],{},"Users.username"," safely",[27,660,661],{},"Password verification and generic failure messages still protect the login flow",[27,663,664],{},"Successful login preserves the full session shape, including active roles",[27,666,667,668,671,672,675],{},"Update Dashboard to show ",[54,669,670],{},"get_user_username()"," instead of ",[54,673,674],{},"get_user_email()"," to preserve privacy",[27,677,678,679],{},"GitHub reference checkpoint: ",[547,680,683],{"href":681,"rel":682},"https:\u002F\u002Fgithub.com\u002FMattToegel\u002FIT202-2026\u002Ftree\u002FMilestone1-Part08-User-Login-Enhancement",[551],"Milestone1-Part08-User-Login-Enhancement branch",{"title":506,"searchDepth":685,"depth":685,"links":686},2,[687,688,689,690,691,692,693,694,695,696,697,698,699,700,701],{"id":13,"depth":685,"text":18},{"id":44,"depth":685,"text":47},{"id":88,"depth":685,"text":91},{"id":102,"depth":685,"text":105},{"id":146,"depth":685,"text":149},{"id":188,"depth":685,"text":191},{"id":230,"depth":685,"text":233},{"id":275,"depth":685,"text":278},{"id":309,"depth":685,"text":312},{"id":386,"depth":685,"text":389},{"id":424,"depth":685,"text":427},{"id":461,"depth":685,"text":464},{"id":496,"depth":685,"text":497},{"id":575,"depth":685,"text":576},{"id":636,"depth":685,"text":639},"presentation","Internet Applications","Update login so one identifier field accepts either a username or an email address while preserving role-loaded sessions.","Face-to-face class of about 40 students; includes typing time, troubleshooting, checks, and short questions.","10","50","60","md",{},"6",true,"20","\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","Core",false,null,{"title":5,"description":704},"published","internet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",[722,723,724],"login","accounts","authorization","23:06","y-toZQBXYv4","https:\u002F\u002Fyoutu.be\u002Fy-toZQBXYv4","AjhiYUmWdAHxMYvwXxMG6ZiuCA7DBiDctjDo3uMVu8k",[730,733,739,742,745,748,752,755,759,762,765,768,772,775,779,782,785,789,792,795,798,800,802,804,806,808,810,812,815,818,821,824,827,829,832,835,839,843,847,851,854,857,860,864,868,871,874,877,880,883,886,889,891,894,897,900,903,906,909,912,915,919,923,927,931,934,937,940,943,946,949,952,955,958,961,964,967,970,973,975,978,982,985,988,991,994,997,1000,1003,1006,1009,1012,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1055,1058,1061,1064,1067,1070,1073,1076,1079,1082,1085,1088,1091,1094,1097,1100,1103,1106,1109,1112,1115,1118,1121,1124,1127,1130,1133,1136,1139,1142,1145,1148,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187,1190,1193,1196,1199,1202,1205,1208,1211,1214,1217,1220,1223,1226,1229,1232,1235,1238,1241,1244,1247,1250,1253,1256,1259,1262,1265,1268,1271,1274,1277,1280,1283,1286,1289,1292,1295,1298,1301,1304,1307,1310,1313,1316,1319,1322,1325,1328,1331,1334,1337,1340,1343,1346,1349,1352,1355,1358,1361,1364,1367,1370,1374,1377,1380,1383,1386,1389,1392,1395,1398,1401,1404,1407,1410,1413,1416,1419,1422,1425,1428,1431,1434,1437,1440,1443,1446,1449,1452,1455,1458,1461,1464,1467,1470,1473,1476,1479,1482,1485,1488,1491,1494,1497,1500,1503,1506,1509,1512,1515,1518,1521,1524,1527,1530,1533,1536,1539,1542,1545,1548,1551,1554,1557,1560,1563,1566,1569,1572,1575,1578,1581,1584,1587,1590,1593,1596,1599,1602,1605,1608,1611,1614,1617,1620,1623,1626,1629,1632,1635,1638,1641,1644,1647,1650,1653,1656,1659,1662,1665,1668,1671,1674,1677,1680,1683,1686,1689,1692,1695,1698,1701,1704,1707,1710,1713,1716,1719,1722,1725,1728,1731,1734,1737,1740,1743,1746,1749,1752,1755,1759,1762,1765,1768,1771,1774,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1824,1826,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1857,1861,1865,1868,1872,1876,1879,1882,1885,1888,1891,1894,1898,1901,1904,1907,1910,1912,1914,1916,1918,1921,1924,1927,1930,1933,1936,1939,1942,1945,1948,1951,1954,1957,1960,1963,1966,1969,1972,1975,1978,1981,1984,1987,1990,1993,1996,1999,2002,2005,2008,2011,2014,2017,2020,2023,2026,2029,2032,2035,2038,2041,2044,2047,2050,2053,2056,2059,2062,2065,2068,2071,2074,2077,2080,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2167,2170,2173,2176,2179,2181,2183,2186,2189,2192,2195,2198,2201],{"path":731,"title":732,"order":717,"module":717,"status":717},"\u002Fabout","About Content Version 3",{"path":734,"title":735,"order":736,"module":737,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","5","1","draft",{"path":740,"title":741,"order":706,"module":737,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":743,"title":744,"order":713,"module":737,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?",{"path":746,"title":747,"order":706,"module":14,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":749,"title":750,"order":706,"module":751,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory","3",{"path":753,"title":754,"order":713,"module":751,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":756,"title":757,"order":706,"module":758,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics","4",{"path":760,"title":761,"order":713,"module":758,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":763,"title":764,"order":706,"module":736,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":766,"title":767,"order":713,"module":711,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype",{"path":769,"title":770,"order":706,"module":771,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design","8",{"path":773,"title":774,"order":713,"module":771,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":776,"title":777,"order":706,"module":778,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems","9",{"path":780,"title":781,"order":706,"module":706,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":783,"title":784,"order":713,"module":706,"status":738},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":786,"title":787,"order":737,"module":788,"status":719},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design","0",{"path":790,"title":791,"order":737,"module":788,"status":738},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":793,"title":794,"order":717,"module":717,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":796,"title":797,"order":717,"module":717,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":799,"title":741,"order":706,"module":737,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":801,"title":744,"order":713,"module":737,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":803,"title":747,"order":706,"module":14,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":805,"title":750,"order":706,"module":751,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":807,"title":754,"order":713,"module":751,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":809,"title":757,"order":706,"module":758,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":811,"title":761,"order":713,"module":758,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":813,"title":814,"order":706,"module":736,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":816,"title":817,"order":706,"module":711,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":819,"title":820,"order":713,"module":711,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":822,"title":823,"order":706,"module":771,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":825,"title":826,"order":713,"module":771,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":828,"title":777,"order":706,"module":778,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":830,"title":831,"order":706,"module":706,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":833,"title":834,"order":713,"module":706,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":836,"title":837,"order":706,"module":838,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces","11",{"path":840,"title":841,"order":706,"module":842,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations","12",{"path":844,"title":845,"order":706,"module":846,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":848,"title":849,"order":706,"module":850,"status":738},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine","14",{"path":852,"title":853,"order":737,"module":788,"status":738},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":855,"title":856,"order":706,"module":788,"status":738},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":858,"title":859,"order":713,"module":788,"status":738},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":861,"title":862,"order":863,"module":788,"status":738},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice","40",{"path":865,"title":866,"order":867,"module":788,"status":738},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint","30",{"path":869,"title":870,"order":706,"module":737,"status":738},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":872,"title":873,"order":713,"module":737,"status":738},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":875,"title":876,"order":867,"module":737,"status":738},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":878,"title":879,"order":863,"module":737,"status":738},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":881,"title":882,"order":707,"module":737,"status":738},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions",{"path":884,"title":885,"order":708,"module":737,"status":738},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations",{"path":887,"title":888,"order":717,"module":717,"status":717},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":890,"title":888,"order":706,"module":737,"status":717},"\u002Fgeneral\u002Fbasic-command-line",{"path":892,"title":893,"order":717,"module":717,"status":719},"\u002F","Ethereal Lab Course Materials",{"path":895,"title":896,"order":788,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":898,"title":899,"order":706,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":901,"title":902,"order":713,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":904,"title":905,"order":867,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":907,"title":908,"order":863,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":910,"title":911,"order":707,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":913,"title":914,"order":708,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":916,"title":917,"order":918,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":920,"title":921,"order":922,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":924,"title":925,"order":926,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox","90",{"path":928,"title":929,"order":930,"module":737,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware","100",{"path":932,"title":933,"order":706,"module":14,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":935,"title":936,"order":713,"module":14,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":938,"title":939,"order":706,"module":751,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":941,"title":942,"order":713,"module":751,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":944,"title":945,"order":867,"module":751,"status":738},"\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":947,"title":948,"order":706,"module":758,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Intro To SQL",{"path":950,"title":951,"order":713,"module":758,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":953,"title":954,"order":867,"module":758,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":956,"title":957,"order":863,"module":758,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","User Login",{"path":959,"title":960,"order":706,"module":736,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Intro To Regex",{"path":962,"title":963,"order":713,"module":736,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":965,"title":966,"order":867,"module":736,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":968,"title":969,"order":863,"module":736,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":971,"title":972,"order":706,"module":711,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":974,"title":5,"order":713,"module":711,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":976,"title":977,"order":867,"module":711,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":979,"title":980,"order":706,"module":981,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Working With API Data","7",{"path":983,"title":984,"order":713,"module":981,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":986,"title":987,"order":867,"module":981,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":989,"title":990,"order":706,"module":771,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Milestone 2 Bootstrap And Reusability",{"path":992,"title":993,"order":713,"module":771,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":995,"title":996,"order":867,"module":771,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":998,"title":999,"order":706,"module":778,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Add User Associations",{"path":1001,"title":1002,"order":713,"module":778,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":1004,"title":1005,"order":706,"module":706,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":1007,"title":1008,"order":713,"module":706,"status":738},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":1010,"title":1011,"order":737,"module":788,"status":719},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":1013,"title":1014,"order":863,"module":706,"status":1015},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":1017,"title":1018,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":1020,"title":1021,"order":713,"module":771,"status":1015},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":1023,"title":1024,"order":867,"module":778,"status":1015},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":1026,"title":1027,"order":736,"module":758,"status":719},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":1029,"title":1030,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":1032,"title":1033,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":1035,"title":1036,"order":717,"module":717,"status":717},"\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":1038,"title":1039,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":1041,"title":1042,"order":717,"module":717,"status":717},"\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":1044,"title":1045,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":1047,"title":1048,"order":717,"module":717,"status":717},"\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":1050,"title":1051,"order":717,"module":717,"status":717},"\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":1053,"title":1054,"order":717,"module":717,"status":717},"\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":1056,"title":1057,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":1059,"title":1060,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":1062,"title":1063,"order":717,"module":717,"status":717},"\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":1065,"title":1066,"order":717,"module":717,"status":717},"\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":1068,"title":1069,"order":717,"module":717,"status":717},"\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":1071,"title":1072,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":1074,"title":1075,"order":717,"module":717,"status":717},"\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":1077,"title":1078,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":1080,"title":1081,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":1083,"title":1084,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":1086,"title":1087,"order":717,"module":717,"status":717},"\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":1089,"title":1090,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":1092,"title":1093,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":1095,"title":1096,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":1098,"title":1099,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":1101,"title":1102,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":1104,"title":1105,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":1107,"title":1108,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":1110,"title":1111,"order":717,"module":717,"status":717},"\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":1113,"title":1114,"order":717,"module":717,"status":717},"\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":1116,"title":1117,"order":717,"module":717,"status":717},"\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":1119,"title":1120,"order":717,"module":717,"status":717},"\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":1122,"title":1123,"order":717,"module":717,"status":717},"\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":1125,"title":1126,"order":717,"module":717,"status":717},"\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":1128,"title":1129,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":1131,"title":1132,"order":717,"module":717,"status":717},"\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":1134,"title":1135,"order":717,"module":717,"status":717},"\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":1137,"title":1138,"order":717,"module":717,"status":717},"\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":1140,"title":1141,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":1143,"title":1144,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":1146,"title":1147,"order":717,"module":717,"status":717},"\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":1149,"title":1150,"order":717,"module":717,"status":717},"\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":1152,"title":1153,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":1155,"title":1156,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":1158,"title":1159,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":1161,"title":1162,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":1164,"title":1165,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":1167,"title":1168,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":1170,"title":1171,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":1173,"title":1174,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":1176,"title":1177,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":1179,"title":1180,"order":717,"module":717,"status":717},"\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":1182,"title":1183,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":1185,"title":1186,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":1188,"title":1189,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":1191,"title":1192,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":1194,"title":1195,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":1197,"title":1198,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":1200,"title":1201,"order":717,"module":717,"status":717},"\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":1203,"title":1204,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":1206,"title":1207,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":1209,"title":1210,"order":717,"module":717,"status":717},"\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":1212,"title":1213,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":1215,"title":1216,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":1218,"title":1219,"order":717,"module":717,"status":717},"\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":1221,"title":1222,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":1224,"title":1225,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":1227,"title":1228,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":1230,"title":1231,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":1233,"title":1234,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":1236,"title":1237,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":1239,"title":1240,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":1242,"title":1243,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":1245,"title":1246,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":1248,"title":1249,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":1251,"title":1252,"order":717,"module":717,"status":717},"\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":1254,"title":1255,"order":717,"module":717,"status":717},"\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":1257,"title":1258,"order":717,"module":717,"status":717},"\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":1260,"title":1261,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":1263,"title":1264,"order":717,"module":717,"status":717},"\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":1266,"title":1267,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":1269,"title":1270,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":1272,"title":1273,"order":717,"module":717,"status":717},"\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":1275,"title":1276,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":1278,"title":1279,"order":717,"module":717,"status":717},"\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":1281,"title":1282,"order":717,"module":717,"status":717},"\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":1284,"title":1285,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":1287,"title":1288,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":1290,"title":1291,"order":717,"module":717,"status":717},"\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":1293,"title":1294,"order":717,"module":717,"status":717},"\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":1296,"title":1297,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":1299,"title":1300,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":1302,"title":1303,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":1305,"title":1306,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":1308,"title":1309,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":1311,"title":1312,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":1314,"title":1315,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":1317,"title":1318,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":1320,"title":1321,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":1323,"title":1324,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":1326,"title":1327,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":1329,"title":1330,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":1332,"title":1333,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":1335,"title":1336,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":1338,"title":1339,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":1341,"title":1342,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":1344,"title":1345,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":1347,"title":1348,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":1350,"title":1351,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":1353,"title":1354,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":1356,"title":1357,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":1359,"title":1360,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":1362,"title":1363,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":1365,"title":1366,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":1368,"title":1369,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":1371,"title":1372,"order":717,"module":717,"status":1373},"\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":1375,"title":1376,"order":717,"module":717,"status":1373},"\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":1378,"title":1379,"order":717,"module":717,"status":1373},"\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":1381,"title":1382,"order":717,"module":717,"status":1373},"\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":1384,"title":1385,"order":717,"module":717,"status":1373},"\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":1387,"title":1388,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":1390,"title":1391,"order":717,"module":717,"status":1373},"\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":1393,"title":1394,"order":717,"module":717,"status":1373},"\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":1396,"title":1397,"order":717,"module":717,"status":1373},"\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":1399,"title":1400,"order":717,"module":717,"status":1373},"\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":1402,"title":1403,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":1405,"title":1406,"order":717,"module":717,"status":1373},"\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":1408,"title":1409,"order":717,"module":717,"status":1373},"\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":1411,"title":1412,"order":717,"module":717,"status":717},"\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":1414,"title":1415,"order":717,"module":717,"status":1373},"\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":1417,"title":1418,"order":717,"module":717,"status":1373},"\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":1420,"title":1421,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":1423,"title":1424,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":1426,"title":1427,"order":717,"module":717,"status":717},"\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":1429,"title":1430,"order":717,"module":717,"status":717},"\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":1432,"title":1433,"order":717,"module":717,"status":1373},"\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":1435,"title":1436,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":1438,"title":1439,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":1441,"title":1442,"order":717,"module":717,"status":717},"\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":1444,"title":1445,"order":717,"module":717,"status":1373},"\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":1447,"title":1448,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":1450,"title":1451,"order":717,"module":717,"status":1373},"\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":1453,"title":1454,"order":717,"module":717,"status":1373},"\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":1456,"title":1457,"order":717,"module":717,"status":717},"\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":1459,"title":1460,"order":717,"module":717,"status":1373},"\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":1462,"title":1463,"order":717,"module":717,"status":1373},"\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":1465,"title":1466,"order":717,"module":717,"status":717},"\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":1468,"title":1469,"order":717,"module":717,"status":717},"\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":1471,"title":1472,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":1474,"title":1475,"order":717,"module":717,"status":1373},"\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":1477,"title":1478,"order":717,"module":717,"status":1373},"\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":1480,"title":1481,"order":717,"module":717,"status":1373},"\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":1483,"title":1484,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":1486,"title":1487,"order":717,"module":717,"status":1373},"\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":1489,"title":1490,"order":717,"module":717,"status":717},"\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":1492,"title":1493,"order":717,"module":717,"status":717},"\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":1495,"title":1496,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":1498,"title":1499,"order":717,"module":717,"status":1373},"\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":1501,"title":1502,"order":717,"module":717,"status":1373},"\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":1504,"title":1505,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":1507,"title":1508,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":1510,"title":1511,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":1513,"title":1514,"order":717,"module":717,"status":717},"\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":1516,"title":1517,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":1519,"title":1520,"order":717,"module":717,"status":1373},"\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":1522,"title":1523,"order":717,"module":717,"status":1373},"\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":1525,"title":1526,"order":717,"module":717,"status":1373},"\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":1528,"title":1529,"order":717,"module":717,"status":1373},"\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":1531,"title":1532,"order":717,"module":717,"status":1373},"\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":1534,"title":1535,"order":717,"module":717,"status":1373},"\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":1537,"title":1538,"order":717,"module":717,"status":1373},"\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":1540,"title":1541,"order":717,"module":717,"status":1373},"\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":1543,"title":1544,"order":717,"module":717,"status":1373},"\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":1546,"title":1547,"order":717,"module":717,"status":1373},"\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":1549,"title":1550,"order":717,"module":717,"status":1373},"\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":1552,"title":1553,"order":717,"module":717,"status":717},"\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":1555,"title":1556,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":1558,"title":1559,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":1561,"title":1562,"order":717,"module":717,"status":1373},"\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":1564,"title":1565,"order":717,"module":717,"status":1373},"\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":1567,"title":1568,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":1570,"title":1571,"order":717,"module":717,"status":1373},"\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":1573,"title":1574,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":1576,"title":1577,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":1579,"title":1580,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":1582,"title":1583,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":1585,"title":1586,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":1588,"title":1589,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":1591,"title":1592,"order":717,"module":717,"status":1373},"\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":1594,"title":1595,"order":717,"module":717,"status":1373},"\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":1597,"title":1598,"order":717,"module":717,"status":1373},"\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":1600,"title":1601,"order":717,"module":717,"status":1373},"\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":1603,"title":1604,"order":717,"module":717,"status":1373},"\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":1606,"title":1607,"order":717,"module":717,"status":1373},"\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":1609,"title":1610,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":1612,"title":1613,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":1615,"title":1616,"order":717,"module":717,"status":1373},"\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":1618,"title":1619,"order":717,"module":717,"status":1373},"\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":1621,"title":1622,"order":717,"module":717,"status":1373},"\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":1624,"title":1625,"order":717,"module":717,"status":1373},"\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":1627,"title":1628,"order":717,"module":717,"status":717},"\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":1630,"title":1631,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":1633,"title":1634,"order":717,"module":717,"status":717},"\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":1636,"title":1637,"order":717,"module":717,"status":1373},"\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":1639,"title":1640,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":1642,"title":1643,"order":717,"module":717,"status":1373},"\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":1645,"title":1646,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":1648,"title":1649,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":1651,"title":1652,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":1654,"title":1655,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":1657,"title":1658,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":1660,"title":1661,"order":717,"module":717,"status":1373},"\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":1663,"title":1664,"order":717,"module":717,"status":1373},"\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":1666,"title":1667,"order":717,"module":717,"status":1373},"\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":1669,"title":1670,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":1672,"title":1673,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":1675,"title":1676,"order":717,"module":717,"status":717},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":1678,"title":1679,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":1681,"title":1682,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":1684,"title":1685,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":1687,"title":1688,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":1690,"title":1691,"order":717,"module":717,"status":1373},"\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":1693,"title":1694,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":1696,"title":1697,"order":717,"module":717,"status":1373},"\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":1699,"title":1700,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":1702,"title":1703,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":1705,"title":1706,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":1708,"title":1709,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":1711,"title":1712,"order":717,"module":717,"status":1373},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":1714,"title":1715,"order":737,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":1717,"title":1718,"order":14,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":1720,"title":1721,"order":751,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":1723,"title":1724,"order":758,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":1726,"title":1727,"order":736,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":1729,"title":1730,"order":711,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":1732,"title":1733,"order":981,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":1735,"title":1736,"order":788,"module":788,"status":738},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":1738,"title":1739,"order":706,"module":737,"status":738},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":1741,"title":1742,"order":713,"module":14,"status":738},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":1744,"title":1745,"order":867,"module":751,"status":738},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":1747,"title":1748,"order":863,"module":758,"status":738},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":1750,"title":1751,"order":707,"module":736,"status":738},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":1753,"title":1754,"order":708,"module":711,"status":738},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":1756,"title":1757,"order":1758,"module":711,"status":738},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":1760,"title":1761,"order":918,"module":981,"status":738},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":1763,"title":1764,"order":922,"module":771,"status":738},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":1766,"title":1767,"order":926,"module":778,"status":738},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":1769,"title":1770,"order":930,"module":706,"status":738},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":1772,"title":1773,"order":717,"module":717,"status":738},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":1775,"title":1776,"order":717,"module":717,"status":738},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":1778,"title":896,"order":788,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":1780,"title":899,"order":706,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":1782,"title":902,"order":713,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":1784,"title":905,"order":867,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":1786,"title":908,"order":863,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":1788,"title":911,"order":707,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":1790,"title":914,"order":708,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":1792,"title":917,"order":918,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":1794,"title":921,"order":922,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":1796,"title":925,"order":926,"module":737,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":1798,"title":929,"order":930,"module":737,"status":738},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":1800,"title":933,"order":706,"module":14,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":1802,"title":936,"order":713,"module":14,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":1804,"title":939,"order":706,"module":751,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":1806,"title":942,"order":713,"module":751,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":1808,"title":945,"order":867,"module":751,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":1810,"title":948,"order":706,"module":758,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":1812,"title":951,"order":713,"module":758,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":1814,"title":954,"order":867,"module":758,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":1816,"title":957,"order":863,"module":758,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":1818,"title":960,"order":706,"module":736,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":1820,"title":963,"order":713,"module":736,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":1822,"title":1823,"order":867,"module":736,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":1825,"title":969,"order":863,"module":736,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":1827,"title":972,"order":706,"module":711,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":714,"title":5,"order":713,"module":711,"status":719},{"path":1830,"title":977,"order":867,"module":711,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":1832,"title":980,"order":706,"module":981,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":1834,"title":984,"order":713,"module":981,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":1836,"title":987,"order":867,"module":981,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":1838,"title":990,"order":706,"module":771,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":1840,"title":993,"order":713,"module":771,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":1842,"title":996,"order":867,"module":771,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":1844,"title":999,"order":706,"module":778,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":1846,"title":1002,"order":713,"module":778,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":1848,"title":1005,"order":706,"module":706,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":1850,"title":1008,"order":713,"module":706,"status":719},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":1852,"title":1011,"order":737,"module":788,"status":719},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":1854,"title":1855,"order":1856,"module":706,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":1858,"title":1859,"order":1860,"module":711,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":1862,"title":1863,"order":1864,"module":711,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":1866,"title":1867,"order":1856,"module":711,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":1869,"title":1870,"order":1871,"module":771,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":1873,"title":1874,"order":1875,"module":778,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":1877,"title":1878,"order":706,"module":737,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":1880,"title":1881,"order":713,"module":14,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":1883,"title":1884,"order":867,"module":751,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":1886,"title":1887,"order":863,"module":758,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":1889,"title":1890,"order":707,"module":736,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":1892,"title":1893,"order":708,"module":711,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":1895,"title":1896,"order":1897,"module":711,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays","62",{"path":1899,"title":1900,"order":918,"module":981,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":1902,"title":1903,"order":922,"module":771,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":1905,"title":1906,"order":926,"module":778,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":1908,"title":1909,"order":930,"module":706,"status":738},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":1911,"title":899,"order":706,"module":737,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":1913,"title":902,"order":713,"module":737,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":1915,"title":905,"order":867,"module":737,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":1917,"title":908,"order":863,"module":737,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":1919,"title":1920,"order":707,"module":737,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":1922,"title":1923,"order":708,"module":737,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":1925,"title":1926,"order":706,"module":14,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":1928,"title":1929,"order":713,"module":14,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":1931,"title":1932,"order":867,"module":14,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":1934,"title":1935,"order":863,"module":14,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":1937,"title":1938,"order":706,"module":751,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":1940,"title":1941,"order":713,"module":751,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":1943,"title":1944,"order":867,"module":751,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":1946,"title":1947,"order":863,"module":751,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":1949,"title":1950,"order":706,"module":758,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":1952,"title":1953,"order":713,"module":758,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":1955,"title":1956,"order":867,"module":758,"status":738},"\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":1958,"title":1959,"order":706,"module":736,"status":738},"\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":1961,"title":1962,"order":713,"module":711,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":1964,"title":1965,"order":867,"module":711,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":1967,"title":1968,"order":706,"module":981,"status":738},"\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":1970,"title":1971,"order":713,"module":981,"status":738},"\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":1973,"title":1974,"order":867,"module":981,"status":738},"\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":1976,"title":1977,"order":863,"module":981,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":1979,"title":1980,"order":707,"module":981,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":1982,"title":1983,"order":706,"module":771,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":1985,"title":1986,"order":713,"module":771,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":1988,"title":1989,"order":867,"module":771,"status":738},"\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":1991,"title":1992,"order":863,"module":771,"status":738},"\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":1994,"title":1995,"order":707,"module":771,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":1997,"title":1998,"order":706,"module":778,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":2000,"title":2001,"order":713,"module":778,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":2003,"title":2004,"order":867,"module":778,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":2006,"title":2007,"order":863,"module":778,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":2009,"title":2010,"order":707,"module":778,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":2012,"title":2013,"order":708,"module":778,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":2015,"title":2016,"order":706,"module":706,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":2018,"title":2019,"order":713,"module":706,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":2021,"title":2022,"order":867,"module":706,"status":738},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":2024,"title":2025,"order":737,"module":788,"status":719},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":2027,"title":2028,"order":706,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":2030,"title":2031,"order":713,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":2033,"title":2034,"order":867,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":2036,"title":2037,"order":706,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":2039,"title":2040,"order":713,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":2042,"title":2043,"order":867,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":2045,"title":2046,"order":706,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":2048,"title":2049,"order":713,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":2051,"title":2052,"order":867,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":2054,"title":2055,"order":863,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":2057,"title":2058,"order":706,"module":758,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":2060,"title":2061,"order":713,"module":758,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":2063,"title":2064,"order":867,"module":758,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":2066,"title":2067,"order":706,"module":736,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":2069,"title":2070,"order":713,"module":736,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":2072,"title":2073,"order":867,"module":736,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":2075,"title":2076,"order":788,"module":788,"status":738},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":2078,"title":2079,"order":717,"module":717,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":2081,"title":2082,"order":717,"module":717,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":2084,"title":899,"order":706,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":2086,"title":902,"order":713,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":2088,"title":905,"order":867,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":2090,"title":908,"order":863,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":2092,"title":1920,"order":707,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":2094,"title":1923,"order":708,"module":737,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":2096,"title":1926,"order":706,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":2098,"title":1929,"order":713,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":2100,"title":1932,"order":867,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":2102,"title":1935,"order":863,"module":14,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":2104,"title":1938,"order":706,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":2106,"title":1941,"order":713,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":2108,"title":1944,"order":867,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":2110,"title":1947,"order":863,"module":751,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":2112,"title":1950,"order":706,"module":758,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":2114,"title":1953,"order":713,"module":758,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":2116,"title":1956,"order":867,"module":758,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":2118,"title":1959,"order":706,"module":736,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":2120,"title":2121,"order":706,"module":711,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":2123,"title":1962,"order":713,"module":711,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":2125,"title":1965,"order":867,"module":711,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":2127,"title":1968,"order":706,"module":981,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":2129,"title":1971,"order":713,"module":981,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":2131,"title":1974,"order":867,"module":981,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":2133,"title":1977,"order":863,"module":981,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":2135,"title":1980,"order":707,"module":981,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":2137,"title":1983,"order":706,"module":771,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":2139,"title":1986,"order":713,"module":771,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":2141,"title":1989,"order":867,"module":771,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":2143,"title":1992,"order":863,"module":771,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":2145,"title":1995,"order":707,"module":771,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":2147,"title":1998,"order":706,"module":778,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":2149,"title":2001,"order":713,"module":778,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":2151,"title":2004,"order":867,"module":778,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":2153,"title":2007,"order":863,"module":778,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":2155,"title":2010,"order":707,"module":778,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":2157,"title":2013,"order":708,"module":778,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":2159,"title":2016,"order":706,"module":706,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":2161,"title":2019,"order":713,"module":706,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":2163,"title":2022,"order":867,"module":706,"status":738},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":2165,"title":2166,"order":706,"module":737,"status":738},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":2168,"title":2169,"order":737,"module":788,"status":719},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":2171,"title":2172,"order":737,"module":788,"status":719},"\u002Fsystems-integration","Systems Integration",{"path":2174,"title":2175,"order":717,"module":717,"status":738},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":2177,"title":2178,"order":717,"module":717,"status":738},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":2180,"title":2166,"order":706,"module":737,"status":719},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":2182,"title":2169,"order":737,"module":788,"status":719},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":2184,"title":2185,"order":717,"module":717,"status":717},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":2187,"title":2188,"order":717,"module":717,"status":717},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":2190,"title":2191,"order":717,"module":717,"status":717},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":2193,"title":2194,"order":717,"module":717,"status":717},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":2196,"title":2197,"order":713,"module":788,"status":738},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":2199,"title":2200,"order":867,"module":788,"status":738},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":2202,"title":2203,"order":706,"module":788,"status":738},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086588]