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