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