[{"data":1,"prerenderedAt":3450},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations":3,"content-page-quiz:none":1962,"content-navigation-index":1976},{"id":4,"title":5,"audience":6,"body":7,"contentType":1947,"course":1948,"description":1949,"estimateBasis":1950,"estimatedDiscussionMinutes":1951,"estimatedLiveMinutes":1952,"estimatedTotalMinutes":1953,"extension":1954,"meta":1955,"module":1956,"navigation":1957,"order":1958,"path":1959,"presentationRole":1960,"promptAssist":1961,"revision":1962,"semester":1962,"seo":1963,"status":1964,"stem":1965,"syllabus":1962,"tags":1966,"updated":1962,"videoDuration":1971,"videoId":1972,"videoLink":1973,"videoTitle":1974,"week":1956,"__hash__":1975},"content\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations.md","Add User Associations","student",{"type":8,"value":9,"toc":1906},"minimark",[10,48,82,172,222,269,350,402,444,490,517,577,604,631,674,698,778,833,875,917,994,1063,1104,1149,1234,1275,1367,1417,1450,1508,1556,1591,1623,1660,1687,1719,1801,1863],[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 connects users to the project entities completed in Milestone 2",[24,25,26,30,33,36,39,42,45],"ul",{},[27,28,29],"li",{},"Improve the existing list query before adding relationship conditions",[27,31,32],{},"Show public-facing project entities with reusable cards and a responsive grid",[27,34,35],{},"Model the connection in a relationship table",[27,37,38],{},"Keep users, entities, and relationships as separate records",[27,40,41],{},"Activate and deactivate relationships through protected POST actions",[27,43,44],{},"Show each logged-in user only the relationships that belong to them",[27,46,47],{},"Continue using shared validation, flash, database, render, role, and URL helpers",[11,49,51,55],{"id":50,"level":14},"practice-workspace",[16,52,54],{"id":53},"project-workspace","Project Workspace",[24,56,57,64,70,73,76,79],{},[27,58,59,60],{},"Continue inside the existing repository and ",[61,62,63],"code",{},"public_html\u002Fproject\u002F",[27,65,66,67],{},"Lesson branch: ",[61,68,69],{},"Milestone3-Part01-User-Associations",[27,71,72],{},"Start from the completed Milestone 2 project state",[27,74,75],{},"Keep all prior imports and helper behavior",[27,77,78],{},"Build the relationship concept selected for your project",[27,80,81],{},"Use the StarCraft II guide watchlist only as a reference implementation",[11,83,85,89,92,167],{"id":84,"level":14},"sorting-foundation",[16,86,88],{"id":87},"add-sorting-before-relationships","Add Sorting Before Relationships",[20,90,91],{},"Update the existing public and Admin guide lists before adding relationship-specific queries.",[93,94,97,136],"two-col",{"gap":95,"left-width":96,"right-width":96},"lg","1fr",[98,99,101,106],"template",{"v-slot:left":100},"",[102,103,105],"h3",{"id":104},"submitted-values","Submitted Values",[24,107,108,114,127,130],{},[27,109,110,113],{},[61,111,112],{},"sort"," selects one approved column",[27,115,116,119,120,123,124],{},[61,117,118],{},"direction"," accepts only ",[61,121,122],{},"asc"," or ",[61,125,126],{},"desc",[27,128,129],{},"Invalid values return to documented defaults",[27,131,132,133],{},"Existing filters continue to combine with ",[61,134,135],{},"AND",[98,137,138,142],{"v-slot:right":100},[102,139,141],{"id":140},"sql-boundary","SQL Boundary",[24,143,144,147,150,157],{},[27,145,146],{},"PDO parameters protect values, not SQL identifiers",[27,148,149],{},"Map submitted keys to trusted column names",[27,151,152,153,156],{},"Add ",[61,154,155],{},"id ASC"," as a stable secondary sort",[27,158,159,160,163,164],{},"Reuse the same state on ",[61,161,162],{},"guides.php"," and ",[61,165,166],{},"admin\u002Flist_guides.php",[24,168,169],{},[27,170,171],{},"See the slides below for the reusable query helpers, page state, and form fields",[11,173,176,180,187,193],{"id":174,"level":175},"query-helpers","3",[16,177,179],{"id":178},"add-reusable-list-query-helpers","Add Reusable List Query Helpers",[20,181,182,183,186],{},"Append these functions to ",[61,184,185],{},"lib\u002Fdb_helpers.php",", below the existing CRUD and select helpers.",[188,189],"code-snippet",{"language":190,"src":191,"max-height":192},"php","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-query-helpers-00.php","22rem",[24,194,195,201,207,213,216,219],{},[27,196,197,200],{},[61,198,199],{},"build_sort_query()"," accepts either a simple list of trusted columns or a submitted-key-to-SQL map",[27,202,203,206],{},[61,204,205],{},"build_list_query_state()"," reads and validates filters, sorting, direction, and limit in one place",[27,208,209,212],{},[61,210,211],{},"db_qualified_identifier()"," safely quotes a column with an optional trusted table or alias prefix",[27,214,215],{},"Invalid or missing sorting defaults to the most recently modified records",[27,217,218],{},"A regular filter entry accepts text; a named entry supplies an allowlist",[27,220,221],{},"Each list page provides trusted configuration instead of repeating request-parsing logic",[11,223,225,229,235,239],{"id":224,"level":175},"guide-filter-query-helper",[16,226,228],{"id":227},"add-the-guide-filter-query-helper","Add The Guide Filter Query Helper",[20,230,231,232,234],{},"Append these project-specific helpers after the generic list helpers in ",[61,233,185],{},".",[188,236],{"language":190,"src":237,"max-height":238},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-filter-query-helper-00k.php","20rem",[24,240,241,247,253,260,266],{},[27,242,243,246],{},[61,244,245],{},"guide_filter_rules()"," defines free-text and allowlisted fields for every Guide list",[27,248,249,252],{},[61,250,251],{},"build_guide_filter_query()"," converts validated values into conditions and parameters",[27,254,255,256,259],{},"Joined pages pass a trusted prefix such as ",[61,257,258],{},"g."," so filter columns are properly qualified and quoted",[27,261,262,263,265],{},"Populated filters are joined with ",[61,264,135],{},", so every additional field narrows the results",[27,267,268],{},"Adapt both helpers to your project's entity and search form",[11,270,272,276],{"id":271,"level":175},"sorting-state",[16,273,275],{"id":274},"build-the-guide-query-state","Build The Guide Query State",[93,277,278,314],{"gap":95,"left-width":96,"right-width":96},[98,279,280,285,289],{"v-slot:left":100},[281,282,284],"h4",{"id":283},"page-setup","Page Setup",[188,286],{"language":190,"src":287,"max-height":288},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-sort-state-00.php","16rem",[24,290,291,297,303,308,311],{},[27,292,293,296],{},[61,294,295],{},"$list_config"," declares only the page-specific filters and sortable columns",[27,298,299,302],{},[61,300,301],{},"$allowed_sort_columns"," comes from the developer-controlled sort-option keys on these pages",[27,304,305,307],{},[61,306,205],{}," returns every validated value needed by the form and queries",[27,309,310],{},"The shared helper always defaults to 10 results and accepts limits from 1 through 100",[27,312,313],{},"A submitted key reaches SQL only after matching that trusted list",[98,315,316,320],{"v-slot:right":100},[281,317,319],{"id":318},"trusted-query-parts","Trusted Query Parts",[24,321,322,329,332,341,347],{},[27,323,324,325,328],{},"Joined queries use a ",[61,326,327],{},"$sort_column_map"," because one alias cannot cover columns from different tables",[27,330,331],{},"Labels remain separate from trusted database column names",[27,333,334,163,337,340],{},[61,335,336],{},"$where",[61,338,339],{},"$params"," come from the same validated filter values",[27,342,343,346],{},[61,344,345],{},"$order_by = $list_state[\"order_by\"]"," carries trusted sorting into the list query",[27,348,349],{},"Public and Admin guide lists can use the same small setup block",[11,351,353,357,367,371],{"id":352,"level":175},"sorting-fields",[16,354,356],{"id":355},"extend-the-shared-guide-search-form","Extend The Shared Guide Search Form",[20,358,359,360,363,364,234],{},"Add these fields to ",[61,361,362],{},"partials\u002Fguide_search.php"," and pass sorting state through ",[61,365,366],{},"render_guide_search()",[188,368],{"language":190,"src":369,"max-height":370},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-sort-fields-00a.php","17rem",[24,372,373,376,379,399],{},[27,374,375],{},"GET keeps filters and sorting visible in the URL",[27,377,378],{},"Sticky values show the active ordering after submission",[27,380,381,382,385,386,385,389,385,392,395,396],{},"Update the partial's usage comment to show all five arguments: ",[61,383,384],{},"$filters",", ",[61,387,388],{},"$limit",[61,390,391],{},"$sort",[61,393,394],{},"$direction",", and ",[61,397,398],{},"$sort_options",[27,400,401],{},"The same partial keeps public and Admin guide searches consistent",[11,403,405,409,412,433],{"id":404,"level":175},"wire-guide-search-state",[16,406,408],{"id":407},"wire-the-search-state","Wire The Search State",[20,410,411],{},"Update the render helper and both existing list-page calls as one coordinated change.",[93,413,414,424],{"gap":95,"left-width":96,"right-width":96},[98,415,416,420],{"v-slot:left":100},[102,417,419],{"id":418},"render-helper","Render Helper",[188,421],{"language":190,"src":422,"max-height":423},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-search-render-helper-00i.php","18rem",[98,425,426,430],{"v-slot:right":100},[102,427,429],{"id":428},"both-list-pages","Both List Pages",[188,431],{"language":190,"src":432,"max-height":423},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-search-page-call-00j.php",[24,434,435,438,441],{},[27,436,437],{},"The partial receives every validated sticky value it displays",[27,439,440],{},"Apply both changes before reloading either list page",[27,442,443],{},"Keep the existing table renderers until the later grid slides",[11,445,447,451,462,465],{"id":446,"level":14},"matching-count",[16,448,450],{"id":449},"count-the-matching-guides","Count The Matching Guides",[20,452,453,454,385,456,395,458,461],{},"Continue after the prior query-state block, which created ",[61,455,336],{},[61,457,339],{},[61,459,460],{},"$order_by",". Run one count query and one list query with the same filters.",[188,463],{"language":190,"src":464,"max-height":192},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fmatching-guide-count-00b.php",[24,466,467,470,473,481,487],{},[27,468,469],{},"The count measures every matching guide before the limit",[27,471,472],{},"The list returns only the number requested by the user",[27,474,475,477,478],{},[61,476,460],{}," is the trusted sorting fragment returned in ",[61,479,480],{},"$list_state[\"order_by\"]",[27,482,483,486],{},[61,484,485],{},"count($guides)"," reports how many rows are currently shown",[27,488,489],{},"Pagination will build on this same count\u002Flist pattern in the next lesson",[11,491,493,497,503,506],{"id":492,"level":175},"result-summary-partial",[16,494,496],{"id":495},"add-the-result-summary-partial","Add The Result Summary Partial",[20,498,499,500,234],{},"Reference file: ",[61,501,502],{},"partials\u002Fresult_summary.php",[188,504],{"language":190,"src":505},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fresult-summary-partial-00c.php",[24,507,508,511,514],{},[27,509,510],{},"\"Showing 10 of 34 matching results\" compares shown rows with filtered matches",[27,512,513],{},"A separate unfiltered grand total is not required",[27,515,516],{},"The partial can be reused by personal and Admin relationship lists",[11,518,520,524,529,533],{"id":519,"level":14},"guide-card-partial",[16,521,523],{"id":522},"add-the-guide-card-partial","Add The Guide Card Partial",[20,525,499,526,234],{},[61,527,528],{},"partials\u002Fguide_card.php",[188,530],{"language":190,"src":531,"max-height":532},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-card-partial-00d.php","23rem",[24,534,535,538,545,551,558,565,574],{},[27,536,537],{},"The card repackages the guide presentation introduced in Module 8",[27,539,540,541,544],{},"Source and video links appear only after ",[61,542,543],{},"sc_nullable_url()"," validates them",[27,546,547,550],{},[61,548,549],{},"show_detail_view"," distinguishes a list card from the single-guide presentation",[27,552,553,554,557],{},"List cards include View; the single-guide page uses an ",[61,555,556],{},"\u003Ch1>"," and Back To Guides",[27,559,560,561,564],{},"When the query includes ",[61,562,563],{},"is_saved",", logged-in users see the appropriate Save Guide or Remove Saved Guide action in both layouts",[27,566,567,568,163,571],{},"The partial internally checks ",[61,569,570],{},"is_logged_in()",[61,572,573],{},"has_role(\"Admin\")",[27,575,576],{},"The saved-guides page enables the saved date through its card options",[11,578,580,584,587,590],{"id":579,"level":175},"guide-grid",[16,581,583],{"id":582},"add-the-guide-grid-partial","Add The Guide Grid Partial",[20,585,586],{},"Use the card partial for user-facing lists; keep dense Admin management lists as tables.",[188,588],{"language":190,"src":589,"max-height":423},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-grid-00e.php",[24,591,592,595,601],{},[27,593,594],{},"Bootstrap row-column classes adapt from one to three columns",[27,596,597,600],{},[61,598,599],{},"render_grid()"," gives public and personal guide lists one stable layout",[27,602,603],{},"This partial targets the StarCraft reference example; adjust its item names and renderer for your project if you use it",[11,605,607,611,617,620],{"id":606,"level":175},"wire-list-renderers",[16,608,610],{"id":609},"wire-the-list-renderers","Wire The List Renderers",[20,612,613,614,234],{},"Append the result-summary, guide-card, and grid render functions at the end of ",[61,615,616],{},"lib\u002Frender_functions.php",[188,618],{"language":190,"src":619,"max-height":238},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Frender-list-helpers-00f.php",[24,621,622,625,628],{},[27,623,624],{},"Each project page passes validated state into a small render interface",[27,626,627],{},"Each partial continues to own its HTML",[27,629,630],{},"The Guide Card and grid remain specific to the reference domain; adapt both to your entity",[11,632,634,638,641,644],{"id":633,"level":175},"use-guide-grid",[16,635,637],{"id":636},"use-the-grid-on-public-lists","Use The Grid On Public Lists",[20,639,640],{},"Replace the public list's prior table call with the summary and grid renderers.",[188,642],{"language":190,"src":643,"max-height":288},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-grid-usage-00g.php",[24,645,646,652,662,668],{},[27,647,648,651],{},[61,649,650],{},"guide_card.php"," automatically adds management actions for an Admin",[27,653,654,655,163,658,661],{},"Remove the public page's now-unused ",[61,656,657],{},"$guide_columns",[61,659,660],{},"$guide_actions"," arrays",[27,663,664,667],{},[61,665,666],{},"my_guides.php"," passes a card option for saved dates",[27,669,670,671],{},"Dense Admin management pages can continue using ",[61,672,673],{},"render_table()",[11,675,677,681,684,687],{"id":676,"level":175},"keep-admin-guide-table",[16,678,680],{"id":679},"keep-the-admin-guide-table","Keep The Admin Guide Table",[20,682,683],{},"Update the Admin page's render calls while retaining its existing management table.",[188,685],{"language":190,"src":686,"max-height":288},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fadmin-guide-list-usage-00h.php",[24,688,689,692,695],{},[27,690,691],{},"The Admin list uses the same filters, sorting state, and matching count",[27,693,694],{},"Existing View, Edit, and Delete actions remain unchanged",[27,696,697],{},"Only the public and personal lists switch to the card grid",[11,699,701,704,707,767],{"id":700,"level":14},"association-concepts",[16,702,703],{"id":700},"Association Concepts",[20,705,706],{},"An association gives a user a meaningful connection to an existing project entity",[708,709,710,723],"table",{},[711,712,713],"thead",{},[714,715,716,720],"tr",{},[717,718,719],"th",{},"Project Concept",[717,721,722],{},"User Relationship",[724,725,726,735,743,751,759],"tbody",{},[714,727,728,732],{},[729,730,731],"td",{},"Media catalog",[729,733,734],{},"Favorites or watchlist",[714,736,737,740],{},[729,738,739],{},"Store catalog",[729,741,742],{},"Wishlist or purchases",[714,744,745,748],{},[729,746,747],{},"Event system",[729,749,750],{},"Registrations",[714,752,753,756],{},[729,754,755],{},"Learning app",[729,757,758],{},"Saved resources",[714,760,761,764],{},[729,762,763],{},"Work tracker",[729,765,766],{},"Assignments or subscriptions",[24,768,769,772,775],{},[27,770,771],{},"Name the relationship after what it means in the project",[27,773,774],{},"Deactivating the relationship should not remove the user or entity",[27,776,777],{},"Decide whether users, admins, or both may create the relationship",[11,779,781,785,828],{"id":780,"level":14},"choose-data-model",[16,782,784],{"id":783},"choose-the-data-model","Choose The Data Model",[93,786,787,808],{"gap":95,"left-width":96,"right-width":96},[98,788,789,793,797],{"v-slot:left":100},[102,790,792],{"id":791},"direct-ownership","Direct Ownership",[188,794],{"language":795,"src":796},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fdirect-ownership-01.txt",[24,798,799,802,805],{},[27,800,801],{},"One entity belongs to one user",[27,803,804],{},"Useful when ownership is part of the entity itself",[27,806,807],{},"Reassigning changes the entity row",[98,809,810,814,817],{"v-slot:right":100},[102,811,813],{"id":812},"relationship-table","Relationship Table",[188,815],{"language":795,"src":816},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Frelationship-table-02.txt",[24,818,819,822,825],{},[27,820,821],{},"A user can connect to many entities",[27,823,824],{},"An entity can connect to many users",[27,826,827],{},"Adding or removing a connection changes only the relationship state",[24,829,830],{},[27,831,832],{},"Milestone 3 normally uses the relationship-table pattern",[11,834,836,840,843],{"id":835,"level":14},"reference-domain",[16,837,839],{"id":838},"reference-saved-sc2-guides","Reference: Saved SC2 Guides",[20,841,842],{},"The reference project lets users save StarCraft II guides to a personal watchlist",[24,844,845,851,857,863,869,872],{},[27,846,847,850],{},[61,848,849],{},"Users"," stores account records",[27,852,853,856],{},[61,854,855],{},"Guides"," stores API and manual guide records from Module 8",[27,858,859,862],{},[61,860,861],{},"UserGuides"," stores each saved user\u002Fguide pair",[27,864,865,868],{},[61,866,867],{},"is_active"," records whether that pair is currently saved",[27,870,871],{},"A saved guide remains one shared guide row",[27,873,874],{},"Your project should replace guide and watchlist terminology with its own entities and relationship concept",[11,876,878,882,887,892],{"id":877,"level":14},"create-relationship-table",[16,879,881],{"id":880},"create-the-relationship-table","Create The Relationship Table",[20,883,499,884,234],{},[61,885,886],{},"sql\u002F010_create_table_userguides.sql",[188,888],{"language":889,"src":890,"max-height":891},"sql","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fcreate-user-guides-01.sql","21rem",[24,893,894,897,900,905,908,911,914],{},[27,895,896],{},"Each row represents one user saving one guide",[27,898,899],{},"The composite unique key prevents duplicate pairs and enables an upsert",[27,901,902,904],{},[61,903,867],{}," supports soft removal and later reactivation",[27,906,907],{},"Foreign keys reject relationships to missing users or guides",[27,909,910],{},"Each foreign-key column uses the same integer type as its parent primary key",[27,912,913],{},"Cascades clean up relationship rows when a parent record is intentionally deleted",[27,915,916],{},"Use your project table names and relationship meaning",[11,918,920,924],{"id":919,"level":175},"relationship-table-details",[16,921,923],{"id":922},"read-the-table-constraints","Read The Table Constraints",[93,925,926,952],{"gap":95,"left-width":96,"right-width":96},[98,927,928,932],{"v-slot:left":100},[102,929,931],{"id":930},"course-metadata","Course Metadata",[24,933,934,940,946],{},[27,935,936,939],{},[61,937,938],{},"id"," identifies the relationship row",[27,941,942,945],{},[61,943,944],{},"created"," records when the relationship began",[27,947,948,951],{},[61,949,950],{},"modified"," records the most recent toggle",[98,953,954,958],{"v-slot:right":100},[102,955,957],{"id":956},"relationship-rules","Relationship Rules",[24,959,960,969,977,982,988,991],{},[27,961,962,965,966],{},[61,963,964],{},"user_id"," points to ",[61,967,968],{},"Users.id",[27,970,971,965,974],{},[61,972,973],{},"guide_id",[61,975,976],{},"Guides.id",[27,978,979,981],{},[61,980,867],{}," marks the pair as currently saved or removed",[27,983,984,987],{},[61,985,986],{},"UNIQUE (user_id, guide_id)"," blocks duplicate saves",[27,989,990],{},"Neither foreign key is nullable because both sides are required",[27,992,993],{},"Reusing the pair preserves its history while avoiding duplicate rows",[11,995,997,1001,1008,1011,1036],{"id":996,"level":14},"load-schema",[16,998,1000],{"id":999},"load-the-schema","Load The Schema",[20,1002,1003,1004,1007],{},"Place the new numbered file in the root ",[61,1005,1006],{},"sql\u002F"," folder.",[188,1009],{"language":795,"src":1010},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Finit-user-guides-02.txt",[1012,1013,1015],"admonition",{"type":1014},"note",[20,1016,1017,1021,1022,1025,1026,385,1029,395,1032,1035],{},[1018,1019,1020],"strong",{},"Remember:"," ",[61,1023,1024],{},"init_db.php"," already sorts migrations correctly because the filenames use left-padded numbers such as ",[61,1027,1028],{},"009",[61,1030,1031],{},"010",[61,1033,1034],{},"011",". There is no need to patch the file when migration numbers reach double or triple digits.",[24,1037,1038,1046,1056],{},[27,1039,1040,1042,1043,1045],{},[61,1041,1031],{}," runs after the ",[61,1044,1028],{}," Guides table because both parent tables must already exist",[27,1047,1048,1049,1052,1053,1055],{},"Open ",[61,1050,1051],{},"public_html\u002Fproject\u002Frun_init_db.php"," in local development and confirm ",[61,1054,861],{}," appears",[27,1057,1058,1059,1062],{},"Apply the same migration to ",[61,1060,1061],{},"qa"," before testing deployed relationships",[11,1064,1066,1070,1090],{"id":1065,"level":14},"updates-and-relationships",[16,1067,1069],{"id":1068},"entity-updates-preserve-relationships","Entity Updates Preserve Relationships",[93,1071,1072,1081],{"gap":95,"left-width":96,"right-width":96},[98,1073,1074,1078],{"v-slot:left":100},[102,1075,1077],{"id":1076},"update-a-guide","Update A Guide",[188,1079],{"language":795,"src":1080},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fupdate-a-guide-03.txt",[98,1082,1083,1087],{"v-slot:right":100},[102,1084,1086],{"id":1085},"relationship-stays","Relationship Stays",[188,1088],{"language":795,"src":1089},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Frelationship-stays-04.txt",[24,1091,1092,1095,1098,1101],{},[27,1093,1094],{},"The relationship points to the stable local primary key",[27,1096,1097],{},"API refreshes and admin edits update the same entity row",[27,1099,1100],{},"Users see the latest entity data without saving it again",[27,1102,1103],{},"Replacing rows with new IDs would break this continuity",[11,1105,1107,1111,1114],{"id":1106,"level":14},"read-join",[16,1108,1110],{"id":1109},"read-the-relationship-join","Read The Relationship Join",[188,1112],{"language":889,"src":1113},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fmy-guides-query-03.sql",[24,1115,1116,1122,1131,1137,1143],{},[27,1117,1118,1119,1121],{},"Start with ",[61,1120,861],{}," because the page is about saved relationships",[27,1123,1124,1125,1127,1128],{},"Join ",[61,1126,855],{}," through ",[61,1129,1130],{},"UserGuides.guide_id = Guides.id",[27,1132,1133,1134],{},"Restrict rows by the session user and ",[61,1135,1136],{},"UserGuides.is_active = 1",[27,1138,1139,1140,1142],{},"Use ",[61,1141,950],{}," as the saved date so a reactivated pair receives a current timestamp",[27,1144,1139,1145,1148],{},[61,1146,1147],{},"LIMIT"," for list pages even when the test data is small",[11,1150,1152,1156,1163],{"id":1151,"level":14},"add-relationship-status",[16,1153,1155],{"id":1154},"show-the-current-relationship","Show The Current Relationship",[20,1157,1158,1159,1162],{},"Replace the existing lookup block in ",[61,1160,1161],{},"public_html\u002Fproject\u002Fguide.php"," so a logged-in user can see whether the guide is saved.",[93,1164,1165,1194],{"gap":95,"left-width":96,"right-width":96},[98,1166,1167,1171,1174],{"v-slot:left":100},[102,1168,1170],{"id":1169},"relationship-state","Relationship State",[188,1172],{"language":190,"src":1173,"max-height":238},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-association-query-04.php",[24,1175,1176,1183],{},[27,1177,1178,1179,1182],{},"The ",[61,1180,1181],{},"SELECT 1 ... FROM UserGuides"," block is a correlated subquery inside the main guide query",[27,1184,1185,1186,1189,1190,1193],{},"Its ",[61,1187,1188],{},"EXISTS"," check returns ",[61,1191,1192],{},"1"," only for the current user's active pair",[98,1195,1196,1200,1204],{"v-slot:right":100},[102,1197,1199],{"id":1198},"reuse-the-guide-card","Reuse The Guide Card",[188,1201],{"language":190,"src":1202,"max-height":1203},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-detail-render-04a.php","10rem",[24,1205,1206,1211,1214,1224,1231],{},[27,1207,1208,1210],{},[61,1209,549],{}," tells the shared partial that this is the single-guide page",[27,1212,1213],{},"Save or Remove appears for logged-in users on both detail and list pages",[27,1215,1216,1217,1219,1220,1223],{},"The current ",[61,1218,563],{}," value chooses the button label and the desired ",[61,1221,1222],{},"new_is_saved"," value",[27,1225,1226,1227,1230],{},"A logged-out visitor uses user ID ",[61,1228,1229],{},"0",", which cannot match a real account",[27,1232,1233],{},"The page remains public while the relationship state appears only when useful",[11,1235,1237,1241,1247,1250],{"id":1236,"level":175},"public-list-relationship-state",[16,1238,1240],{"id":1239},"show-save-state-on-the-public-list","Show Save State On The Public List",[20,1242,1243,1244,1246],{},"After ",[61,1245,861],{}," exists, replace the public list query so every Guide Card knows the current user's relationship state.",[188,1248],{"language":190,"src":1249,"max-height":891},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fguide-list-relationship-query-04b.php",[24,1251,1252,1255,1264,1269],{},[27,1253,1254],{},"The existing count query stays unchanged because it counts guides, not relationships",[27,1256,1257,1258,1260,1261,1263],{},"The correlated ",[61,1259,1188],{}," subquery adds ",[61,1262,563],{}," to each list row",[27,1265,1266,1268],{},[61,1267,563],{}," lets the shared card choose Save Guide or Remove Saved Guide",[27,1270,1271,1272,1274],{},"Logged-out visitors use user ID ",[61,1273,1229],{},", so no personal relationship can match",[11,1276,1278,1282,1287],{"id":1277,"level":14},"toggle-endpoint",[16,1279,1281],{"id":1280},"toggle-one-relationship","Toggle One Relationship",[20,1283,499,1284,234],{},[61,1285,1286],{},"public_html\u002Fproject\u002Finternal\u002Ftoggle_saved_guide.php",[93,1288,1291,1324],{"gap":95,"left-width":1289,"right-width":1290},"1.15fr","0.85fr",[98,1292,1293,1296,1300],{"v-slot:left":100},[188,1294],{"language":190,"src":1295,"max-height":370},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Ftoggle-saved-guide-06.php",[102,1297,1299],{"id":1298},"request-guards","Request Guards",[24,1301,1302,1309,1316,1321],{},[27,1303,1304,1305,1308],{},"Create the ",[61,1306,1307],{},"public_html\u002Fproject\u002Finternal\u002F"," directory first if needed",[27,1310,1311,1312,1315],{},"Load ",[61,1313,1314],{},"lib\u002Fapp.php"," before any output",[27,1317,1318,1319,1223],{},"Require a logged-in user, valid guide ID, and desired ",[61,1320,1222],{},[27,1322,1323],{},"Let the foreign keys reject a missing user or guide",[98,1325,1326,1330,1352,1356],{"v-slot:right":100},[102,1327,1329],{"id":1328},"upsert-behavior","Upsert Behavior",[24,1331,1332,1341,1349],{},[27,1333,1334,1335,1338,1339],{},"Pass the submitted desired state to ",[61,1336,1337],{},"insert()"," as ",[61,1340,867],{},[27,1342,1343,1346,1347],{},[61,1344,1345],{},"update_duplicate"," inserts a missing pair or updates only ",[61,1348,867],{},[27,1350,1351],{},"Use the submitted state to choose feedback without another query",[102,1353,1355],{"id":1354},"safe-return","Safe Return",[24,1357,1358,1361,1364],{},[27,1359,1360],{},"Allowlist the submitted local return path before keeping its query string",[27,1362,1363],{},"Return to the same list or detail page with its current list state",[27,1365,1366],{},"Log technical failures and redirect with friendly feedback",[11,1368,1370,1374,1377,1381,1392],{"id":1369,"level":175},"compare-insert-delete",[16,1371,1373],{"id":1372},"compare-insert-or-delete","Compare: Insert Or Delete",[20,1375,1376],{},"This alternative attempts the insert first and physically removes the pair when its unique key already exists.",[188,1378],{"language":190,"src":1379,"max-height":1380},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Finsert-delete-comparison-06a.php","19rem",[1012,1382,1383],{"type":1014},[20,1384,1385,1388,1389,1391],{},[1018,1386,1387],{},"Comparison only:"," do not combine this hard-delete pattern with the lesson's ",[61,1390,867],{}," upsert. The reference project continues using soft removal so it can preserve and reactivate the same relationship row.",[24,1393,1394,1400,1407,1414],{},[27,1395,1396,1399],{},[61,1397,1398],{},"INSERT"," runs first without a separate relationship lookup",[27,1401,1402,1403,1406],{},"MySQL error ",[61,1404,1405],{},"1062"," identifies the duplicate user-and-guide key",[27,1408,1409,1410,1413],{},"Only that duplicate error enters the ",[61,1411,1412],{},"DELETE","; other database errors are rethrown",[27,1415,1416],{},"The main upsert avoids exceptions as normal control flow and preserves relationship history",[11,1418,1420,1424,1427],{"id":1419,"level":175},"toggle-flow",[16,1421,1423],{"id":1422},"trace-the-toggle-flow","Trace The Toggle Flow",[188,1425],{"language":795,"src":1426},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Ftrace-the-toggle-flow-05.txt",[24,1428,1429,1438,1444,1447],{},[27,1430,1431,1432,1434,1435,1437],{},"The endpoint does not delete the relationship, ",[61,1433,849],{},", or ",[61,1436,855],{}," row",[27,1439,1440,1441,1443],{},"The session supplies ",[61,1442,964],{},"; the browser never chooses another user",[27,1445,1446],{},"Only known project paths are accepted, preventing an open redirect",[27,1448,1449],{},"The accepted query string keeps the user's current list state intact",[11,1451,1453,1457,1462],{"id":1452,"level":14},"my-guides-page",[16,1454,1456],{"id":1455},"list-the-users-saved-guides","List The User's Saved Guides",[20,1458,499,1459,234],{},[61,1460,1461],{},"public_html\u002Fproject\u002Fmy_guides.php",[93,1463,1464,1470],{"gap":95,"left-width":96,"right-width":96},[98,1465,1466],{"v-slot:left":100},[188,1467],{"language":190,"src":1468,"max-height":1469},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fmy-guides-page-07.php","27rem",[98,1471,1472,1476],{"v-slot:right":100},[102,1473,1475],{"id":1474},"page-state-and-filters","Page State And Filters",[24,1477,1478,1481,1486,1489,1496,1499,1505],{},[27,1479,1480],{},"The login guard runs before the query",[27,1482,1483,1485],{},[61,1484,205],{}," reuses filter, sort, direction, and limit validation",[27,1487,1488],{},"The session user ID is bound to the relationship filter",[27,1490,1491,1492,1495],{},"Only relationships with ",[61,1493,1494],{},"is_active = 1"," appear",[27,1497,1498],{},"The shared query helpers add the public list's optional filters and safe sorting",[27,1500,1501,1502,1504],{},"A trusted ",[61,1503,258],{}," prefix qualifies Guide columns in the joined query",[27,1506,1507],{},"Continues in the slide below",[11,1509,1511,1515],{"id":1510,"level":175},"my-guides-output",[16,1512,1514],{"id":1513},"finish-the-saved-guide-output","Finish The Saved-Guide Output",[93,1516,1517,1534],{"gap":95,"left-width":96,"right-width":96},[98,1518,1519,1523],{"v-slot:left":100},[102,1520,1522],{"id":1521},"count-and-sort","Count And Sort",[24,1524,1525,1528,1531],{},[27,1526,1527],{},"The count and list queries share the same ownership condition and parameters",[27,1529,1530],{},"Sorting includes the relationship's saved date as a page-specific option",[27,1532,1533],{},"The result summary compares currently shown rows with matching saved guides",[98,1535,1536,1540],{"v-slot:right":100},[102,1537,1539],{"id":1538},"cards-and-actions","Cards And Actions",[24,1541,1542,1548,1553],{},[27,1543,1544,1547],{},[61,1545,1546],{},"1 AS is_saved"," tells every card that this page contains active saved relationships",[27,1549,1550,1552],{},[61,1551,599],{}," reuses Guide Cards while enabling the saved date",[27,1554,1555],{},"The shared Save or Remove form returns to the same filtered personal list",[11,1557,1559,1563,1568,1571],{"id":1558,"level":14},"clear-relationships",[16,1560,1562],{"id":1561},"remove-all-of-the-users-relationships","Remove All Of The User's Relationships",[20,1564,499,1565,234],{},[61,1566,1567],{},"public_html\u002Fproject\u002Finternal\u002Fclear_saved_guides.php",[188,1569],{"language":190,"src":1570,"max-height":423},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fclear-saved-guides-08.php",[24,1572,1573,1579,1582,1585],{},[27,1574,1575,1576],{},"Sets active relationships for the current session user to ",[61,1577,1578],{},"is_active = 0",[27,1580,1581],{},"Does not accept another user ID from the browser",[27,1583,1584],{},"Keeps every relationship, guide, and user record intact",[27,1586,1587,1588,1590],{},"Add a POST form on ",[61,1589,666],{}," only when the list is not empty",[11,1592,1594,1598,1609,1612],{"id":1593,"level":14},"navigation",[16,1595,1597],{"id":1596},"add-the-user-navigation-link","Add The User Navigation Link",[20,1599,1600,1601,1604,1605,1608],{},"Add the list item inside the existing ",[61,1602,1603],{},"if ($isLoggedIn)"," section of ",[61,1606,1607],{},"partials\u002Fnav.php",", immediately before Dashboard.",[188,1610],{"language":190,"src":1611},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations\u002Fmy-guides-nav-09.php",[24,1613,1614,1617,1620],{},[27,1615,1616],{},"Public visitors keep the existing Guides link",[27,1618,1619],{},"Logged-in users gain My Saved Guides",[27,1621,1622],{},"Admin reporting pages are added in the next lesson",[11,1624,1626,1629],{"id":1625,"level":14},"check-your-work",[16,1627,1628],{"id":1625},"Check Your Work",[24,1630,1631,1634,1637,1643,1648,1654,1657],{},[27,1632,1633],{},"Save one entity and confirm one active relationship row appears",[27,1635,1636],{},"Reload the detail page and confirm the button changes to Remove",[27,1638,1639,1640,1642],{},"Remove it and confirm the pair remains with ",[61,1641,1578],{}," while the entity still exists",[27,1644,1645,1646],{},"Save it again and confirm the same pair returns to ",[61,1647,1494],{},[27,1649,1650,1651,1653],{},"Save at least two entities and confirm ",[61,1652,666],{}," shows only the current user's rows",[27,1655,1656],{},"Clear the list and confirm another user's relationships are untouched",[27,1658,1659],{},"Log out and confirm relationship actions are blocked",[11,1661,1663,1667],{"id":1662,"level":14},"failure-states",[16,1664,1666],{"id":1665},"expected-failure-states","Expected Failure States",[24,1668,1669,1672,1675,1678,1681,1684],{},[27,1670,1671],{},"Missing or invalid guide ID: redirect with a friendly warning",[27,1673,1674],{},"Logged-out POST: redirect to login without changing data",[27,1676,1677],{},"Missing guide row: no relationship is created",[27,1679,1680],{},"Database write failure: log the exception and show a generic failure message",[27,1682,1683],{},"Empty saved list: show a useful no-results message",[27,1685,1686],{},"Advanced hardening: include a project CSRF token in state-changing forms and verify it on each endpoint",[11,1688,1690,1693],{"id":1689,"level":14},"knowledge-check",[16,1691,1692],{"id":1689},"Knowledge Check",[24,1694,1695,1701,1704,1710,1713,1716],{},[27,1696,1697,1698,1700],{},"Why does ",[61,1699,861],{}," need both foreign keys?",[27,1702,1703],{},"What prevents the same user\u002Fguide pair from appearing twice?",[27,1705,1706,1707,1709],{},"Why must ",[61,1708,964],{}," come from the session for a user-facing action?",[27,1711,1712],{},"What changes when a user removes a saved guide?",[27,1714,1715],{},"How does the unique pair make the upsert possible?",[27,1717,1718],{},"Why does updating a guide not require recreating its relationships?",[11,1720,1722,1726],{"id":1721,"level":14},"terms-and-learning",[16,1723,1725],{"id":1724},"key-terms-and-further-learning","Key Terms And Further Learning",[93,1727,1728,1770],{"gap":95,"left-width":96,"right-width":96},[98,1729,1730,1734,1740,1746,1752,1758,1764],{"v-slot:left":100},[102,1731,1733],{"id":1732},"key-terms","Key Terms",[20,1735,1736,1739],{},[1018,1737,1738],{},"Association"," - Meaningful connection between two records",[20,1741,1742,1745],{},[1018,1743,1744],{},"Relationship table"," - Table that stores foreign-key pairs",[20,1747,1748,1751],{},[1018,1749,1750],{},"Composite unique key"," - Uniqueness rule covering multiple columns",[20,1753,1754,1757],{},[1018,1755,1756],{},"Referential integrity"," - Rules that keep foreign-key references valid",[20,1759,1760,1763],{},[1018,1761,1762],{},"Soft delete"," - Marking a row inactive instead of physically deleting it",[20,1765,1766,1769],{},[1018,1767,1768],{},"Upsert"," - Inserting a missing row or updating its existing unique match",[98,1771,1772,1776],{"v-slot:right":100},[102,1773,1775],{"id":1774},"further-learning","Further Learning",[24,1777,1778,1787,1794],{},[27,1779,1780],{},[1781,1782,1786],"a",{"href":1783,"rel":1784},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fjoin.html",[1785],"nofollow","MySQL JOIN Clause",[27,1788,1789],{},[1781,1790,1793],{"href":1791,"rel":1792},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fcreate-table-foreign-keys.html",[1785],"MySQL Foreign Key Constraints",[27,1795,1796],{},[1781,1797,1800],{"href":1798,"rel":1799},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Fbook.session.php",[1785],"PHP Sessions",[11,1802,1804,1808],{"id":1803,"level":14},"finish-lesson-branch",[16,1805,1807],{"id":1806},"finish-the-lesson-branch","Finish The Lesson Branch",[1809,1810,1811,1817,1823,1829,1835,1841,1851],"ol",{},[27,1812,1813,1814],{},"Check the final file list with ",[61,1815,1816],{},"git status",[27,1818,1819,1820],{},"Stage the lesson work with ",[61,1821,1822],{},"git add lib\u002F partials\u002F sql\u002F public_html\u002Fproject\u002F",[27,1824,1825,1826],{},"Commit with ",[61,1827,1828],{},"git commit -m \"Add user entity associations\"",[27,1830,1831,1832],{},"Push with ",[61,1833,1834],{},"git push origin Milestone3-Part01-User-Associations",[27,1836,1837,1838,1840],{},"Open and merge a pull request into ",[61,1839,1061],{},", then review the deployed project",[27,1842,1843,1844,1846,1847,1850],{},"Promote the tested ",[61,1845,1061],{}," work to ",[61,1848,1849],{},"prod"," when required",[27,1852,1853,1854,1856,1857,163,1860],{},"Return to ",[61,1855,1061],{}," with ",[61,1858,1859],{},"git checkout qa",[61,1861,1862],{},"git pull origin qa",[11,1864,1866,1869,1898],{"id":1865,"level":14},"summary",[16,1867,1868],{"id":1865},"Summary",[24,1870,1871,1874,1877,1880,1883,1889,1892,1895],{},[27,1872,1873],{},"Allowlisted sort choices safely control the public guide-list order",[27,1875,1876],{},"Matching-result counts and card grids make filtered public data easier to scan",[27,1878,1879],{},"Milestone 3 normally uses a relationship table between users and project entities",[27,1881,1882],{},"Foreign keys protect references and a composite unique key blocks duplicate pairs",[27,1884,1885,1886,1888],{},"Protected POST actions use an upsert and ",[61,1887,867],{}," to toggle relationship state",[27,1890,1891],{},"Soft removal preserves relationship history without deleting parent records",[27,1893,1894],{},"The logged-in user's list filters by the session user ID",[27,1896,1897],{},"The SC2 watchlist demonstrates the pattern; your project terminology and behavior must match your project decisions",[20,1899,1900,1901],{},"GitHub reference checkpoint: ",[1781,1902,1905],{"href":1903,"rel":1904},"https:\u002F\u002Fgithub.com\u002FMattToegel\u002FIT202-2026\u002Ftree\u002FMilestone3-Part01-User-Associations",[1785],"Milestone3-Part01-User-Associations branch",{"title":100,"searchDepth":1907,"depth":1907,"links":1908},2,[1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946],{"id":13,"depth":1907,"text":18},{"id":53,"depth":1907,"text":54},{"id":87,"depth":1907,"text":88},{"id":178,"depth":1907,"text":179},{"id":227,"depth":1907,"text":228},{"id":274,"depth":1907,"text":275},{"id":355,"depth":1907,"text":356},{"id":407,"depth":1907,"text":408},{"id":449,"depth":1907,"text":450},{"id":495,"depth":1907,"text":496},{"id":522,"depth":1907,"text":523},{"id":582,"depth":1907,"text":583},{"id":609,"depth":1907,"text":610},{"id":636,"depth":1907,"text":637},{"id":679,"depth":1907,"text":680},{"id":700,"depth":1907,"text":703},{"id":783,"depth":1907,"text":784},{"id":838,"depth":1907,"text":839},{"id":880,"depth":1907,"text":881},{"id":922,"depth":1907,"text":923},{"id":999,"depth":1907,"text":1000},{"id":1068,"depth":1907,"text":1069},{"id":1109,"depth":1907,"text":1110},{"id":1154,"depth":1907,"text":1155},{"id":1239,"depth":1907,"text":1240},{"id":1280,"depth":1907,"text":1281},{"id":1372,"depth":1907,"text":1373},{"id":1422,"depth":1907,"text":1423},{"id":1455,"depth":1907,"text":1456},{"id":1513,"depth":1907,"text":1514},{"id":1561,"depth":1907,"text":1562},{"id":1596,"depth":1907,"text":1597},{"id":1625,"depth":1907,"text":1628},{"id":1665,"depth":1907,"text":1666},{"id":1689,"depth":1907,"text":1692},{"id":1724,"depth":1907,"text":1725},{"id":1806,"depth":1907,"text":1807},{"id":1865,"depth":1907,"text":1868},"presentation","Internet Applications","Extend project lists with sorting, counts, and cards, then let logged-in users track project entities through a relationship table.","Face-to-face class of about 40 students; uses a guided walkthrough of sorting, reusable helpers, cards, association design, soft-delete toggles, and the personal list, with full project implementation continuing during milestone work.","15","75","90","md",{},"9",true,"10","\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Core",false,null,{"title":5,"description":1949},"published","internet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",[889,1967,1968,1969,1970],"joins","associations","users","milestone-3","1:03:00","4paZZnwXd5A","https:\u002F\u002Fyoutu.be\u002F4paZZnwXd5A","User Associations","VcMRImBPvXIMDxjhtYUnlEkOhQVIkMLz-u4LHGXrQJw",[1977,1980,1985,1988,1992,1995,1998,2001,2005,2008,2011,2015,2019,2022,2025,2028,2031,2034,2037,2040,2043,2045,2047,2049,2051,2053,2055,2057,2060,2063,2066,2069,2072,2074,2077,2080,2084,2088,2092,2096,2099,2102,2105,2109,2113,2116,2119,2122,2125,2129,2133,2136,2138,2141,2144,2147,2150,2153,2156,2159,2162,2166,2170,2173,2177,2180,2183,2186,2189,2192,2195,2198,2201,2204,2207,2210,2213,2216,2219,2222,2225,2229,2232,2235,2238,2241,2244,2246,2249,2252,2255,2258,2262,2265,2268,2271,2274,2277,2280,2283,2286,2289,2292,2295,2298,2301,2304,2307,2310,2313,2316,2319,2322,2325,2328,2331,2334,2337,2340,2343,2346,2349,2352,2355,2358,2361,2364,2367,2370,2373,2376,2379,2382,2385,2388,2391,2394,2397,2400,2403,2406,2409,2412,2415,2418,2421,2424,2427,2430,2433,2436,2439,2442,2445,2448,2451,2454,2457,2460,2463,2466,2469,2472,2475,2478,2481,2484,2487,2490,2493,2496,2499,2502,2505,2508,2511,2514,2517,2520,2523,2526,2529,2532,2535,2538,2541,2544,2547,2550,2553,2556,2559,2562,2565,2568,2571,2574,2577,2580,2583,2586,2589,2592,2595,2598,2601,2604,2607,2610,2613,2616,2620,2623,2626,2629,2632,2635,2638,2641,2644,2647,2650,2653,2656,2659,2662,2665,2668,2671,2674,2677,2680,2683,2686,2689,2692,2695,2698,2701,2704,2707,2710,2713,2716,2719,2722,2725,2728,2731,2734,2737,2740,2743,2746,2749,2752,2755,2758,2761,2764,2767,2770,2773,2776,2779,2782,2785,2788,2791,2794,2797,2800,2803,2806,2809,2812,2815,2818,2821,2824,2827,2830,2833,2836,2839,2842,2845,2848,2851,2854,2857,2860,2863,2866,2869,2872,2875,2878,2881,2884,2887,2890,2893,2896,2899,2902,2905,2908,2911,2914,2917,2920,2923,2926,2929,2932,2935,2938,2941,2944,2947,2950,2953,2956,2959,2962,2965,2968,2971,2974,2977,2980,2983,2986,2989,2992,2995,2998,3001,3005,3008,3011,3014,3017,3020,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3091,3093,3095,3097,3099,3103,3107,3111,3114,3118,3122,3125,3128,3131,3134,3137,3140,3144,3147,3150,3153,3156,3158,3160,3162,3164,3167,3170,3173,3176,3179,3182,3185,3188,3191,3194,3197,3200,3203,3206,3209,3212,3215,3218,3221,3224,3227,3230,3233,3236,3239,3242,3245,3248,3251,3254,3257,3260,3263,3266,3269,3272,3275,3278,3281,3284,3287,3290,3293,3296,3299,3302,3305,3308,3311,3314,3317,3320,3323,3326,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3413,3416,3419,3422,3425,3427,3429,3432,3435,3438,3441,3444,3447],{"path":1978,"title":1979,"order":1962,"module":1962,"status":1962},"\u002Fabout","About Content Version 3",{"path":1981,"title":1982,"order":1983,"module":1192,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","5","draft",{"path":1986,"title":1987,"order":1958,"module":1192,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":1989,"title":1990,"order":1991,"module":1192,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?","20",{"path":1993,"title":1994,"order":1958,"module":14,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":1996,"title":1997,"order":1958,"module":175,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory",{"path":1999,"title":2000,"order":1991,"module":175,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":2002,"title":2003,"order":1958,"module":2004,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics","4",{"path":2006,"title":2007,"order":1991,"module":2004,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":2009,"title":2010,"order":1958,"module":1983,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":2012,"title":2013,"order":1991,"module":2014,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype","6",{"path":2016,"title":2017,"order":1958,"module":2018,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design","8",{"path":2020,"title":2021,"order":1991,"module":2018,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":2023,"title":2024,"order":1958,"module":1956,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems",{"path":2026,"title":2027,"order":1958,"module":1958,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":2029,"title":2030,"order":1991,"module":1958,"status":1984},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":2032,"title":2033,"order":1192,"module":1229,"status":1964},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design",{"path":2035,"title":2036,"order":1192,"module":1229,"status":1984},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":2038,"title":2039,"order":1962,"module":1962,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":2041,"title":2042,"order":1962,"module":1962,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":2044,"title":1987,"order":1958,"module":1192,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":2046,"title":1990,"order":1991,"module":1192,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":2048,"title":1994,"order":1958,"module":14,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":2050,"title":1997,"order":1958,"module":175,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":2052,"title":2000,"order":1991,"module":175,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":2054,"title":2003,"order":1958,"module":2004,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":2056,"title":2007,"order":1991,"module":2004,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":2058,"title":2059,"order":1958,"module":1983,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":2061,"title":2062,"order":1958,"module":2014,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":2064,"title":2065,"order":1991,"module":2014,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":2067,"title":2068,"order":1958,"module":2018,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":2070,"title":2071,"order":1991,"module":2018,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":2073,"title":2024,"order":1958,"module":1956,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":2075,"title":2076,"order":1958,"module":1958,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":2078,"title":2079,"order":1991,"module":1958,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":2081,"title":2082,"order":1958,"module":2083,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces","11",{"path":2085,"title":2086,"order":1958,"module":2087,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations","12",{"path":2089,"title":2090,"order":1958,"module":2091,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":2093,"title":2094,"order":1958,"module":2095,"status":1984},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine","14",{"path":2097,"title":2098,"order":1192,"module":1229,"status":1984},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":2100,"title":2101,"order":1958,"module":1229,"status":1984},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":2103,"title":2104,"order":1991,"module":1229,"status":1984},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":2106,"title":2107,"order":2108,"module":1229,"status":1984},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice","40",{"path":2110,"title":2111,"order":2112,"module":1229,"status":1984},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint","30",{"path":2114,"title":2115,"order":1958,"module":1192,"status":1984},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":2117,"title":2118,"order":1991,"module":1192,"status":1984},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":2120,"title":2121,"order":2112,"module":1192,"status":1984},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":2123,"title":2124,"order":2108,"module":1192,"status":1984},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":2126,"title":2127,"order":2128,"module":1192,"status":1984},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions","50",{"path":2130,"title":2131,"order":2132,"module":1192,"status":1984},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations","60",{"path":2134,"title":2135,"order":1962,"module":1962,"status":1962},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":2137,"title":2135,"order":1958,"module":1192,"status":1962},"\u002Fgeneral\u002Fbasic-command-line",{"path":2139,"title":2140,"order":1962,"module":1962,"status":1964},"\u002F","Ethereal Lab Course Materials",{"path":2142,"title":2143,"order":1229,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":2145,"title":2146,"order":1958,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":2148,"title":2149,"order":1991,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":2151,"title":2152,"order":2112,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":2154,"title":2155,"order":2108,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":2157,"title":2158,"order":2128,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":2160,"title":2161,"order":2132,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":2163,"title":2164,"order":2165,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":2167,"title":2168,"order":2169,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":2171,"title":2172,"order":1953,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox",{"path":2174,"title":2175,"order":2176,"module":1192,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware","100",{"path":2178,"title":2179,"order":1958,"module":14,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":2181,"title":2182,"order":1991,"module":14,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":2184,"title":2185,"order":1958,"module":175,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":2187,"title":2188,"order":1991,"module":175,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":2190,"title":2191,"order":2112,"module":175,"status":1984},"\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":2193,"title":2194,"order":1958,"module":2004,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Intro To SQL",{"path":2196,"title":2197,"order":1991,"module":2004,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":2199,"title":2200,"order":2112,"module":2004,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":2202,"title":2203,"order":2108,"module":2004,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","User Login",{"path":2205,"title":2206,"order":1958,"module":1983,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Intro To Regex",{"path":2208,"title":2209,"order":1991,"module":1983,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":2211,"title":2212,"order":2112,"module":1983,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":2214,"title":2215,"order":2108,"module":1983,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":2217,"title":2218,"order":1958,"module":2014,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":2220,"title":2221,"order":1991,"module":2014,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","User Login Enhancement",{"path":2223,"title":2224,"order":2112,"module":2014,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":2226,"title":2227,"order":1958,"module":2228,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Working With API Data","7",{"path":2230,"title":2231,"order":1991,"module":2228,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":2233,"title":2234,"order":2112,"module":2228,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":2236,"title":2237,"order":1958,"module":2018,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Milestone 2 Bootstrap And Reusability",{"path":2239,"title":2240,"order":1991,"module":2018,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":2242,"title":2243,"order":2112,"module":2018,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":2245,"title":5,"order":1958,"module":1956,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":2247,"title":2248,"order":1991,"module":1956,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":2250,"title":2251,"order":1958,"module":1958,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":2253,"title":2254,"order":1991,"module":1958,"status":1984},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":2256,"title":2257,"order":1192,"module":1229,"status":1964},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":2259,"title":2260,"order":2108,"module":1958,"status":2261},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":2263,"title":2264,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":2266,"title":2267,"order":1991,"module":2018,"status":2261},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":2269,"title":2270,"order":2112,"module":1956,"status":2261},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":2272,"title":2273,"order":1983,"module":2004,"status":1964},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":2275,"title":2276,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":2278,"title":2279,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":2281,"title":2282,"order":1962,"module":1962,"status":1962},"\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":2284,"title":2285,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":2287,"title":2288,"order":1962,"module":1962,"status":1962},"\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":2290,"title":2291,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":2293,"title":2294,"order":1962,"module":1962,"status":1962},"\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":2296,"title":2297,"order":1962,"module":1962,"status":1962},"\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":2299,"title":2300,"order":1962,"module":1962,"status":1962},"\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":2302,"title":2303,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":2305,"title":2306,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":2308,"title":2309,"order":1962,"module":1962,"status":1962},"\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":2311,"title":2312,"order":1962,"module":1962,"status":1962},"\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":2314,"title":2315,"order":1962,"module":1962,"status":1962},"\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":2317,"title":2318,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":2320,"title":2321,"order":1962,"module":1962,"status":1962},"\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":2323,"title":2324,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":2326,"title":2327,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":2329,"title":2330,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":2332,"title":2333,"order":1962,"module":1962,"status":1962},"\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":2335,"title":2336,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":2338,"title":2339,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":2341,"title":2342,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":2344,"title":2345,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":2347,"title":2348,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":2350,"title":2351,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":2353,"title":2354,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":2356,"title":2357,"order":1962,"module":1962,"status":1962},"\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":2359,"title":2360,"order":1962,"module":1962,"status":1962},"\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":2362,"title":2363,"order":1962,"module":1962,"status":1962},"\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":2365,"title":2366,"order":1962,"module":1962,"status":1962},"\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":2368,"title":2369,"order":1962,"module":1962,"status":1962},"\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":2371,"title":2372,"order":1962,"module":1962,"status":1962},"\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":2374,"title":2375,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":2377,"title":2378,"order":1962,"module":1962,"status":1962},"\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":2380,"title":2381,"order":1962,"module":1962,"status":1962},"\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":2383,"title":2384,"order":1962,"module":1962,"status":1962},"\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":2386,"title":2387,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":2389,"title":2390,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":2392,"title":2393,"order":1962,"module":1962,"status":1962},"\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":2395,"title":2396,"order":1962,"module":1962,"status":1962},"\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":2398,"title":2399,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":2401,"title":2402,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":2404,"title":2405,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":2407,"title":2408,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":2410,"title":2411,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":2413,"title":2414,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":2416,"title":2417,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":2419,"title":2420,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":2422,"title":2423,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":2425,"title":2426,"order":1962,"module":1962,"status":1962},"\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":2428,"title":2429,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":2431,"title":2432,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":2434,"title":2435,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":2437,"title":2438,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":2440,"title":2441,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":2443,"title":2444,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":2446,"title":2447,"order":1962,"module":1962,"status":1962},"\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":2449,"title":2450,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":2452,"title":2453,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":2455,"title":2456,"order":1962,"module":1962,"status":1962},"\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":2458,"title":2459,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":2461,"title":2462,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":2464,"title":2465,"order":1962,"module":1962,"status":1962},"\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":2467,"title":2468,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":2470,"title":2471,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":2473,"title":2474,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":2476,"title":2477,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":2479,"title":2480,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":2482,"title":2483,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":2485,"title":2486,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":2488,"title":2489,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":2491,"title":2492,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":2494,"title":2495,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":2497,"title":2498,"order":1962,"module":1962,"status":1962},"\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":2500,"title":2501,"order":1962,"module":1962,"status":1962},"\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":2503,"title":2504,"order":1962,"module":1962,"status":1962},"\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":2506,"title":2507,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":2509,"title":2510,"order":1962,"module":1962,"status":1962},"\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":2512,"title":2513,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":2515,"title":2516,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":2518,"title":2519,"order":1962,"module":1962,"status":1962},"\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":2521,"title":2522,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":2524,"title":2525,"order":1962,"module":1962,"status":1962},"\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":2527,"title":2528,"order":1962,"module":1962,"status":1962},"\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":2530,"title":2531,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":2533,"title":2534,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":2536,"title":2537,"order":1962,"module":1962,"status":1962},"\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":2539,"title":2540,"order":1962,"module":1962,"status":1962},"\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":2542,"title":2543,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":2545,"title":2546,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":2548,"title":2549,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":2551,"title":2552,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":2554,"title":2555,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":2557,"title":2558,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":2560,"title":2561,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":2563,"title":2564,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":2566,"title":2567,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":2569,"title":2570,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":2572,"title":2573,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":2575,"title":2576,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":2578,"title":2579,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":2581,"title":2582,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":2584,"title":2585,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":2587,"title":2588,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":2590,"title":2591,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":2593,"title":2594,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":2596,"title":2597,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":2599,"title":2600,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":2602,"title":2603,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":2605,"title":2606,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":2608,"title":2609,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":2611,"title":2612,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":2614,"title":2615,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":2617,"title":2618,"order":1962,"module":1962,"status":2619},"\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":2621,"title":2622,"order":1962,"module":1962,"status":2619},"\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":2624,"title":2625,"order":1962,"module":1962,"status":2619},"\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":2627,"title":2628,"order":1962,"module":1962,"status":2619},"\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":2630,"title":2631,"order":1962,"module":1962,"status":2619},"\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":2633,"title":2634,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":2636,"title":2637,"order":1962,"module":1962,"status":2619},"\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":2639,"title":2640,"order":1962,"module":1962,"status":2619},"\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":2642,"title":2643,"order":1962,"module":1962,"status":2619},"\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":2645,"title":2646,"order":1962,"module":1962,"status":2619},"\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":2648,"title":2649,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":2651,"title":2652,"order":1962,"module":1962,"status":2619},"\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":2654,"title":2655,"order":1962,"module":1962,"status":2619},"\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":2657,"title":2658,"order":1962,"module":1962,"status":1962},"\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":2660,"title":2661,"order":1962,"module":1962,"status":2619},"\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":2663,"title":2664,"order":1962,"module":1962,"status":2619},"\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":2666,"title":2667,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":2669,"title":2670,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":2672,"title":2673,"order":1962,"module":1962,"status":1962},"\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":2675,"title":2676,"order":1962,"module":1962,"status":1962},"\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":2678,"title":2679,"order":1962,"module":1962,"status":2619},"\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":2681,"title":2682,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":2684,"title":2685,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":2687,"title":2688,"order":1962,"module":1962,"status":1962},"\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":2690,"title":2691,"order":1962,"module":1962,"status":2619},"\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":2693,"title":2694,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":2696,"title":2697,"order":1962,"module":1962,"status":2619},"\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":2699,"title":2700,"order":1962,"module":1962,"status":2619},"\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":2702,"title":2703,"order":1962,"module":1962,"status":1962},"\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":2705,"title":2706,"order":1962,"module":1962,"status":2619},"\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":2708,"title":2709,"order":1962,"module":1962,"status":2619},"\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":2711,"title":2712,"order":1962,"module":1962,"status":1962},"\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":2714,"title":2715,"order":1962,"module":1962,"status":1962},"\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":2717,"title":2718,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":2720,"title":2721,"order":1962,"module":1962,"status":2619},"\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":2723,"title":2724,"order":1962,"module":1962,"status":2619},"\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":2726,"title":2727,"order":1962,"module":1962,"status":2619},"\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":2729,"title":2730,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":2732,"title":2733,"order":1962,"module":1962,"status":2619},"\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":2735,"title":2736,"order":1962,"module":1962,"status":1962},"\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":2738,"title":2739,"order":1962,"module":1962,"status":1962},"\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":2741,"title":2742,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":2744,"title":2745,"order":1962,"module":1962,"status":2619},"\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":2747,"title":2748,"order":1962,"module":1962,"status":2619},"\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":2750,"title":2751,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":2753,"title":2754,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":2756,"title":2757,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":2759,"title":2760,"order":1962,"module":1962,"status":1962},"\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":2762,"title":2763,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":2765,"title":2766,"order":1962,"module":1962,"status":2619},"\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":2768,"title":2769,"order":1962,"module":1962,"status":2619},"\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":2771,"title":2772,"order":1962,"module":1962,"status":2619},"\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":2774,"title":2775,"order":1962,"module":1962,"status":2619},"\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":2777,"title":2778,"order":1962,"module":1962,"status":2619},"\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":2780,"title":2781,"order":1962,"module":1962,"status":2619},"\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":2783,"title":2784,"order":1962,"module":1962,"status":2619},"\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":2786,"title":2787,"order":1962,"module":1962,"status":2619},"\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":2789,"title":2790,"order":1962,"module":1962,"status":2619},"\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":2792,"title":2793,"order":1962,"module":1962,"status":2619},"\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":2795,"title":2796,"order":1962,"module":1962,"status":2619},"\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":2798,"title":2799,"order":1962,"module":1962,"status":1962},"\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":2801,"title":2802,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":2804,"title":2805,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":2807,"title":2808,"order":1962,"module":1962,"status":2619},"\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":2810,"title":2811,"order":1962,"module":1962,"status":2619},"\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":2813,"title":2814,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":2816,"title":2817,"order":1962,"module":1962,"status":2619},"\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":2819,"title":2820,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":2822,"title":2823,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":2825,"title":2826,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":2828,"title":2829,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":2831,"title":2832,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":2834,"title":2835,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":2837,"title":2838,"order":1962,"module":1962,"status":2619},"\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":2840,"title":2841,"order":1962,"module":1962,"status":2619},"\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":2843,"title":2844,"order":1962,"module":1962,"status":2619},"\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":2846,"title":2847,"order":1962,"module":1962,"status":2619},"\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":2849,"title":2850,"order":1962,"module":1962,"status":2619},"\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":2852,"title":2853,"order":1962,"module":1962,"status":2619},"\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":2855,"title":2856,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":2858,"title":2859,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":2861,"title":2862,"order":1962,"module":1962,"status":2619},"\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":2864,"title":2865,"order":1962,"module":1962,"status":2619},"\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":2867,"title":2868,"order":1962,"module":1962,"status":2619},"\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":2870,"title":2871,"order":1962,"module":1962,"status":2619},"\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":2873,"title":2874,"order":1962,"module":1962,"status":1962},"\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":2876,"title":2877,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":2879,"title":2880,"order":1962,"module":1962,"status":1962},"\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":2882,"title":2883,"order":1962,"module":1962,"status":2619},"\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":2885,"title":2886,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":2888,"title":2889,"order":1962,"module":1962,"status":2619},"\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":2891,"title":2892,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":2894,"title":2895,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":2897,"title":2898,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":2900,"title":2901,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":2903,"title":2904,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":2906,"title":2907,"order":1962,"module":1962,"status":2619},"\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":2909,"title":2910,"order":1962,"module":1962,"status":2619},"\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":2912,"title":2913,"order":1962,"module":1962,"status":2619},"\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":2915,"title":2916,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":2918,"title":2919,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":2921,"title":2922,"order":1962,"module":1962,"status":1962},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":2924,"title":2925,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":2927,"title":2928,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":2930,"title":2931,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":2933,"title":2934,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":2936,"title":2937,"order":1962,"module":1962,"status":2619},"\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":2939,"title":2940,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":2942,"title":2943,"order":1962,"module":1962,"status":2619},"\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":2945,"title":2946,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":2948,"title":2949,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":2951,"title":2952,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":2954,"title":2955,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":2957,"title":2958,"order":1962,"module":1962,"status":2619},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":2960,"title":2961,"order":1192,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":2963,"title":2964,"order":14,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":2966,"title":2967,"order":175,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":2969,"title":2970,"order":2004,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":2972,"title":2973,"order":1983,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":2975,"title":2976,"order":2014,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":2978,"title":2979,"order":2228,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":2981,"title":2982,"order":1229,"module":1229,"status":1984},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":2984,"title":2985,"order":1958,"module":1192,"status":1984},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":2987,"title":2988,"order":1991,"module":14,"status":1984},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":2990,"title":2991,"order":2112,"module":175,"status":1984},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":2993,"title":2994,"order":2108,"module":2004,"status":1984},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":2996,"title":2997,"order":2128,"module":1983,"status":1984},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":2999,"title":3000,"order":2132,"module":2014,"status":1984},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":3002,"title":3003,"order":3004,"module":2014,"status":1984},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":3006,"title":3007,"order":2165,"module":2228,"status":1984},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":3009,"title":3010,"order":2169,"module":2018,"status":1984},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":3012,"title":3013,"order":1953,"module":1956,"status":1984},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":3015,"title":3016,"order":2176,"module":1958,"status":1984},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":3018,"title":3019,"order":1962,"module":1962,"status":1984},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":3021,"title":3022,"order":1962,"module":1962,"status":1984},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":3024,"title":2143,"order":1229,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":3026,"title":2146,"order":1958,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":3028,"title":2149,"order":1991,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":3030,"title":2152,"order":2112,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":3032,"title":2155,"order":2108,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":3034,"title":2158,"order":2128,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":3036,"title":2161,"order":2132,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":3038,"title":2164,"order":2165,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":3040,"title":2168,"order":2169,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":3042,"title":2172,"order":1953,"module":1192,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":3044,"title":2175,"order":2176,"module":1192,"status":1984},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":3046,"title":2179,"order":1958,"module":14,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":3048,"title":2182,"order":1991,"module":14,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":3050,"title":2185,"order":1958,"module":175,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":3052,"title":2188,"order":1991,"module":175,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":3054,"title":2191,"order":2112,"module":175,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":3056,"title":2194,"order":1958,"module":2004,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":3058,"title":2197,"order":1991,"module":2004,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":3060,"title":2200,"order":2112,"module":2004,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":3062,"title":2203,"order":2108,"module":2004,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":3064,"title":2206,"order":1958,"module":1983,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":3066,"title":2209,"order":1991,"module":1983,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":3068,"title":3069,"order":2112,"module":1983,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":3071,"title":2215,"order":2108,"module":1983,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":3073,"title":2218,"order":1958,"module":2014,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":3075,"title":2221,"order":1991,"module":2014,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":3077,"title":2224,"order":2112,"module":2014,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":3079,"title":2227,"order":1958,"module":2228,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":3081,"title":2231,"order":1991,"module":2228,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":3083,"title":2234,"order":2112,"module":2228,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":3085,"title":2237,"order":1958,"module":2018,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":3087,"title":2240,"order":1991,"module":2018,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":3089,"title":2243,"order":2112,"module":2018,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":1959,"title":5,"order":1958,"module":1956,"status":1964},{"path":3092,"title":2248,"order":1991,"module":1956,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":3094,"title":2251,"order":1958,"module":1958,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":3096,"title":2254,"order":1991,"module":1958,"status":1964},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":3098,"title":2257,"order":1192,"module":1229,"status":1964},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":3100,"title":3101,"order":3102,"module":1958,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":3104,"title":3105,"order":3106,"module":2014,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":3108,"title":3109,"order":3110,"module":2014,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":3112,"title":3113,"order":3102,"module":2014,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":3115,"title":3116,"order":3117,"module":2018,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":3119,"title":3120,"order":3121,"module":1956,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":3123,"title":3124,"order":1958,"module":1192,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":3126,"title":3127,"order":1991,"module":14,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":3129,"title":3130,"order":2112,"module":175,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":3132,"title":3133,"order":2108,"module":2004,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":3135,"title":3136,"order":2128,"module":1983,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":3138,"title":3139,"order":2132,"module":2014,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":3141,"title":3142,"order":3143,"module":2014,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays","62",{"path":3145,"title":3146,"order":2165,"module":2228,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":3148,"title":3149,"order":2169,"module":2018,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":3151,"title":3152,"order":1953,"module":1956,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":3154,"title":3155,"order":2176,"module":1958,"status":1984},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":3157,"title":2146,"order":1958,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":3159,"title":2149,"order":1991,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":3161,"title":2152,"order":2112,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":3163,"title":2155,"order":2108,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":3165,"title":3166,"order":2128,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":3168,"title":3169,"order":2132,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":3171,"title":3172,"order":1958,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":3174,"title":3175,"order":1991,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":3177,"title":3178,"order":2112,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":3180,"title":3181,"order":2108,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":3183,"title":3184,"order":1958,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":3186,"title":3187,"order":1991,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":3189,"title":3190,"order":2112,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":3192,"title":3193,"order":2108,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":3195,"title":3196,"order":1958,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":3198,"title":3199,"order":1991,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":3201,"title":3202,"order":2112,"module":2004,"status":1984},"\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":3204,"title":3205,"order":1958,"module":1983,"status":1984},"\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":3207,"title":3208,"order":1991,"module":2014,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":3210,"title":3211,"order":2112,"module":2014,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":3213,"title":3214,"order":1958,"module":2228,"status":1984},"\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":3216,"title":3217,"order":1991,"module":2228,"status":1984},"\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":3219,"title":3220,"order":2112,"module":2228,"status":1984},"\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":3222,"title":3223,"order":2108,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":3225,"title":3226,"order":2128,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":3228,"title":3229,"order":1958,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":3231,"title":3232,"order":1991,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":3234,"title":3235,"order":2112,"module":2018,"status":1984},"\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":3237,"title":3238,"order":2108,"module":2018,"status":1984},"\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":3240,"title":3241,"order":2128,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":3243,"title":3244,"order":1958,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":3246,"title":3247,"order":1991,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":3249,"title":3250,"order":2112,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":3252,"title":3253,"order":2108,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":3255,"title":3256,"order":2128,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":3258,"title":3259,"order":2132,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":3261,"title":3262,"order":1958,"module":1958,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":3264,"title":3265,"order":1991,"module":1958,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":3267,"title":3268,"order":2112,"module":1958,"status":1984},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":3270,"title":3271,"order":1192,"module":1229,"status":1964},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":3273,"title":3274,"order":1958,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":3276,"title":3277,"order":1991,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":3279,"title":3280,"order":2112,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":3282,"title":3283,"order":1958,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":3285,"title":3286,"order":1991,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":3288,"title":3289,"order":2112,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":3291,"title":3292,"order":1958,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":3294,"title":3295,"order":1991,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":3297,"title":3298,"order":2112,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":3300,"title":3301,"order":2108,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":3303,"title":3304,"order":1958,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":3306,"title":3307,"order":1991,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":3309,"title":3310,"order":2112,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":3312,"title":3313,"order":1958,"module":1983,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":3315,"title":3316,"order":1991,"module":1983,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":3318,"title":3319,"order":2112,"module":1983,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":3321,"title":3322,"order":1229,"module":1229,"status":1984},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":3324,"title":3325,"order":1962,"module":1962,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":3327,"title":3328,"order":1962,"module":1962,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":3330,"title":2146,"order":1958,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":3332,"title":2149,"order":1991,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":3334,"title":2152,"order":2112,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":3336,"title":2155,"order":2108,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":3338,"title":3166,"order":2128,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":3340,"title":3169,"order":2132,"module":1192,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":3342,"title":3172,"order":1958,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":3344,"title":3175,"order":1991,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":3346,"title":3178,"order":2112,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":3348,"title":3181,"order":2108,"module":14,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":3350,"title":3184,"order":1958,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":3352,"title":3187,"order":1991,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":3354,"title":3190,"order":2112,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":3356,"title":3193,"order":2108,"module":175,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":3358,"title":3196,"order":1958,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":3360,"title":3199,"order":1991,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":3362,"title":3202,"order":2112,"module":2004,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":3364,"title":3205,"order":1958,"module":1983,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":3366,"title":3367,"order":1958,"module":2014,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":3369,"title":3208,"order":1991,"module":2014,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":3371,"title":3211,"order":2112,"module":2014,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":3373,"title":3214,"order":1958,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":3375,"title":3217,"order":1991,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":3377,"title":3220,"order":2112,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":3379,"title":3223,"order":2108,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":3381,"title":3226,"order":2128,"module":2228,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":3383,"title":3229,"order":1958,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":3385,"title":3232,"order":1991,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":3387,"title":3235,"order":2112,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":3389,"title":3238,"order":2108,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":3391,"title":3241,"order":2128,"module":2018,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":3393,"title":3244,"order":1958,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":3395,"title":3247,"order":1991,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":3397,"title":3250,"order":2112,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":3399,"title":3253,"order":2108,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":3401,"title":3256,"order":2128,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":3403,"title":3259,"order":2132,"module":1956,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":3405,"title":3262,"order":1958,"module":1958,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":3407,"title":3265,"order":1991,"module":1958,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":3409,"title":3268,"order":2112,"module":1958,"status":1984},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":3411,"title":3412,"order":1958,"module":1192,"status":1984},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":3414,"title":3415,"order":1192,"module":1229,"status":1964},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":3417,"title":3418,"order":1192,"module":1229,"status":1964},"\u002Fsystems-integration","Systems Integration",{"path":3420,"title":3421,"order":1962,"module":1962,"status":1984},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":3423,"title":3424,"order":1962,"module":1962,"status":1984},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":3426,"title":3412,"order":1958,"module":1192,"status":1964},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":3428,"title":3415,"order":1192,"module":1229,"status":1964},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":3430,"title":3431,"order":1962,"module":1962,"status":1962},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":3433,"title":3434,"order":1962,"module":1962,"status":1962},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":3436,"title":3437,"order":1962,"module":1962,"status":1962},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":3439,"title":3440,"order":1962,"module":1962,"status":1962},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":3442,"title":3443,"order":1991,"module":1229,"status":1984},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":3445,"title":3446,"order":2112,"module":1229,"status":1984},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":3448,"title":3449,"order":1958,"module":1229,"status":1984},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086900]