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