[{"data":1,"prerenderedAt":5671},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql":3,"content-page-quiz:none":4189,"content-navigation-index":4203},{"id":4,"title":5,"audience":6,"body":7,"contentType":4176,"course":4177,"description":4178,"estimateBasis":4179,"estimatedDiscussionMinutes":4180,"estimatedLiveMinutes":4181,"estimatedTotalMinutes":4182,"extension":4183,"meta":4184,"module":2812,"navigation":4185,"order":2394,"path":4186,"presentationRole":4187,"promptAssist":4188,"revision":2799,"semester":4189,"seo":4190,"status":4191,"stem":4192,"syllabus":4189,"tags":4193,"updated":4197,"videoDuration":4198,"videoId":4199,"videoLink":4200,"videoTitle":4201,"week":2812,"__hash__":4202},"content\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql.md","Intro To SQL","student",{"type":8,"value":9,"toc":4118},"minimark",[10,66,97,208,306,404,452,499,668,797,942,1070,1205,1333,1471,1609,1668,1710,1742,1798,1931,1976,2019,2057,2088,2136,2174,2223,2355,2528,2666,2713,2825,2935,3086,3221,3354,3502,3604,3715,3758,3830,3876,4006,4070],[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",{},"A database table stores one entity type in rows and columns",[24,25,26,30,33,36,43,49,63],"ul",{},[27,28,29],"li",{},"An entity is one kind of thing the app tracks, such as a user, product, note, or order",[27,31,32],{},"A row is one saved record for that entity",[27,34,35],{},"SQL defines table structure and works with stored rows",[27,37,38,42],{},[39,40,41],"code",{},"CREATE"," defines structure",[27,44,45,48],{},[39,46,47],{},"SELECT"," reads rows",[27,50,51,54,55,58,59,62],{},[39,52,53],{},"INSERT",", ",[39,56,57],{},"UPDATE",", and ",[39,60,61],{},"DELETE"," change rows",[27,64,65],{},"Constraints protect the table even when application code has a bug",[11,67,69,72],{"id":68,"level":14},"practice-workspace",[16,70,71],{"id":68},"Practice Workspace",[24,73,74,81,87,90],{},[27,75,76,77,80],{},"Work inside ",[39,78,79],{},"public_html\u002Fm04\u002Flessons\u002F"," for browser-accessible practice pages",[27,82,83,84],{},"Lesson branch: ",[39,85,86],{},"Module04-SQL-Intro",[27,88,89],{},"Create the folder if it is missing",[27,91,92,93,96],{},"After a working change: run ",[39,94,95],{},"git status",", stage the changed files, and commit",[11,98,100,103,109],{"id":99,"level":14},"table-vs-spreadsheet",[16,101,102],{"id":99},"Table Vs Spreadsheet",[20,104,105,106],{},"To make the database model easier to picture, compare it to a spreadsheet:\n",[107,108],"br",{},[110,111,112,128],"table",{},[113,114,115],"thead",{},[116,117,118,122,125],"tr",{},[119,120,121],"th",{},"Spreadsheet Idea",[119,123,124],{},"Database Idea",[119,126,127],{},"What To Notice",[129,130,131,143,154,164,175,186,197],"tbody",{},[116,132,133,137,140],{},[134,135,136],"td",{},"Workbook",[134,138,139],{},"Database",[134,141,142],{},"Container for related tables",[116,144,145,148,151],{},[134,146,147],{},"Sheet",[134,149,150],{},"Table",[134,152,153],{},"Stores one entity type",[116,155,156,159,161],{},[134,157,158],{},"Column",[134,160,158],{},[134,162,163],{},"Same attribute for every record",[116,165,166,169,172],{},[134,167,168],{},"Row",[134,170,171],{},"Row or record",[134,173,174],{},"One saved entity record",[116,176,177,180,183],{},[134,178,179],{},"Cell",[134,181,182],{},"Value",[134,184,185],{},"One piece of data in one row",[116,187,188,191,194],{},[134,189,190],{},"Filter\u002Fformula",[134,192,193],{},"SQL query",[134,195,196],{},"Requests, changes, or calculates data",[116,198,199,202,205],{},[134,200,201],{},"Data validation \u002F protected cells",[134,203,204],{},"Constraint",[134,206,207],{},"Database rule that enforces valid stored data more reliably",[11,209,211,214,303],{"id":210,"level":14},"sql-command-families",[16,212,213],{"id":210},"SQL Command Families",[110,215,216,229],{},[113,217,218],{},[116,219,220,223,226],{},[119,221,222],{},"Family",[119,224,225],{},"Common Commands",[119,227,228],{},"What They Do",[129,230,231,250,266,287],{},[116,232,233,236,247],{},[134,234,235],{},"Structure",[134,237,238,54,241,54,244],{},[39,239,240],{},"CREATE TABLE",[39,242,243],{},"ALTER TABLE",[39,245,246],{},"DROP TABLE",[134,248,249],{},"Define or change table design",[116,251,252,255,263],{},[134,253,254],{},"Data changes",[134,256,257,54,259,54,261],{},[39,258,53],{},[39,260,57],{},[39,262,61],{},[134,264,265],{},"Add, edit, or remove rows",[116,267,268,271,284],{},[134,269,270],{},"Reading data",[134,272,273,54,275,54,278,54,281],{},[39,274,47],{},[39,276,277],{},"WHERE",[39,279,280],{},"ORDER BY",[39,282,283],{},"LIMIT",[134,285,286],{},"Find and shape result rows",[116,288,289,292,300],{},[134,290,291],{},"Inspection",[134,293,294,54,297],{},[39,295,296],{},"SHOW TABLES",[39,298,299],{},"DESCRIBE table_name",[134,301,302],{},"Check what exists in the database",[20,304,305],{},"Most course work uses the first three families: create the table, insert rows, then read or change the rows carefully.",[11,307,309,312],{"id":308,"level":14},"create-a-practice-table",[16,310,311],{"id":308},"Create A Practice Table",[313,314,318,348],"two-col",{"gap":315,"left-width":316,"right-width":317},"lg","1.1fr","0.9fr",[319,320,322,327,330,343],"template",{"v-slot:left":321},"",[323,324],"code-snippet",{"language":325,"src":326},"sql","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fcreate-practice-notes-table-11.sql",[20,328,329],{},"Each column line follows this basic shape:",[24,331,332,337],{},[27,333,334],{},[39,335,336],{},"column_name DATA_TYPE optional_rules",[27,338,339,340],{},"Example: ",[39,341,342],{},"title VARCHAR(100) NOT NULL",[20,344,345,347],{},[39,346,240],{}," only creates the table when it does not exist. It does not edit an existing table's columns.",[319,349,350,356,373,376,401],{"v-slot:right":321},[20,351,352,353,355],{},"Every ",[39,354,240],{}," statement answers:",[24,357,358,361,364,367,370],{},[27,359,360],{},"What entity type is this table storing?",[27,362,363],{},"What is the table called?",[27,365,366],{},"What columns can each row store?",[27,368,369],{},"Which values are required?",[27,371,372],{},"Which column identifies one row?",[20,374,375],{},"New terms:",[24,377,378,383,389,395],{},[27,379,380,382],{},[39,381,240],{},": define a new table",[27,384,385,388],{},[39,386,387],{},"IF NOT EXISTS",": avoid an error if the table already exists",[27,390,391,394],{},[39,392,393],{},"AUTO_INCREMENT",": MySQL assigns the next id",[27,396,397,400],{},[39,398,399],{},"PRIMARY KEY",": row identifier",[20,402,403],{},"Data types, constraints, and other SQL keywords are unpacked later in this lesson.",[11,405,408,412,415,445],{"id":406,"level":407},"run-create-manually","3",[409,410,411],"h3",{"id":406},"Run CREATE Manually",[20,413,414],{},"Use the VS Code MySQL extension query window for this short practice:",[24,416,417,420,423,426,432,435],{},[27,418,419],{},"Open the MySQL extension panel",[27,421,422],{},"Connect to the course database",[27,424,425],{},"Open a SQL query window",[27,427,428,429,431],{},"Paste or type the ",[39,430,240],{}," statement",[27,433,434],{},"Run the query window statement",[27,436,437,438,441,442],{},"Confirm the table exists with ",[39,439,440],{},"SHOW TABLES;"," or ",[39,443,444],{},"DESCRIBE PracticeNotes;",[20,446,447,448,451],{},"Later project setup uses the provided ",[39,449,450],{},"init_db.php"," workflow so project SQL files are applied consistently.",[11,453,455,458],{"id":454,"level":14},"data-types-and-constraints",[16,456,457],{"id":454},"Data Types And Constraints",[313,459,460,465],{"gap":315,"left-width":316,"right-width":317},[319,461,462],{"v-slot:left":321},[323,463],{"language":325,"src":464},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fdata-types-and-constraints-09.sql",[319,466,467,470],{"v-slot:right":321},[20,468,469],{},"Choose column rules intentionally:",[24,471,472,475,481,487,493,496],{},[27,473,474],{},"Data type controls the stored shape",[27,476,477,480],{},[39,478,479],{},"NOT NULL"," requires a value",[27,482,483,486],{},[39,484,485],{},"UNIQUE"," prevents duplicates",[27,488,489,492],{},[39,490,491],{},"DEFAULT"," fills a value when one is not provided",[27,494,495],{},"Constraints catch bad data even if PHP has a bug",[27,497,498],{},"See the slides below for common type and constraint choices",[11,500,502,505,649,665],{"id":501,"level":407},"common-data-types",[409,503,504],{"id":501},"Common Data Types",[110,506,507,520],{},[113,508,509],{},[116,510,511,514,517],{},[119,512,513],{},"Type",[119,515,516],{},"Use For",[119,518,519],{},"Example Value",[129,521,522,537,552,567,582,597,612,627],{},[116,523,524,529,532],{},[134,525,526],{},[39,527,528],{},"INT",[134,530,531],{},"whole numbers",[134,533,534],{},[39,535,536],{},"42",[116,538,539,544,547],{},[134,540,541],{},[39,542,543],{},"DECIMAL(8,2)",[134,545,546],{},"exact money-style numbers",[134,548,549],{},[39,550,551],{},"19.99",[116,553,554,559,562],{},[134,555,556],{},[39,557,558],{},"VARCHAR(100)",[134,560,561],{},"short text with a max length",[134,563,564],{},[39,565,566],{},"'Ada'",[116,568,569,574,577],{},[134,570,571],{},[39,572,573],{},"TEXT",[134,575,576],{},"longer text",[134,578,579],{},[39,580,581],{},"'Profile bio...'",[116,583,584,589,592],{},[134,585,586],{},[39,587,588],{},"DATE",[134,590,591],{},"calendar date",[134,593,594],{},[39,595,596],{},"'2026-06-19'",[116,598,599,604,607],{},[134,600,601],{},[39,602,603],{},"DATETIME",[134,605,606],{},"literal date and time value",[134,608,609],{},[39,610,611],{},"'2026-06-19 14:30:00'",[116,613,614,619,622],{},[134,615,616],{},[39,617,618],{},"TIMESTAMP",[134,620,621],{},"time MySQL can track\u002Fupdate",[134,623,624],{},[39,625,626],{},"CURRENT_TIMESTAMP",[116,628,629,638,641],{},[134,630,631,634,635],{},[39,632,633],{},"BOOLEAN"," \u002F ",[39,636,637],{},"TINYINT(1)",[134,639,640],{},"true\u002Ffalse-style flags",[134,642,643,441,646],{},[39,644,645],{},"1",[39,647,648],{},"0",[20,650,651,652,654,655,657,658,441,661,664],{},"Use ",[39,653,603],{}," when you want to store the date and time as written. Use ",[39,656,618],{}," for audit fields such as ",[39,659,660],{},"created",[39,662,663],{},"modified",", especially when MySQL should fill or update the value automatically.",[20,666,667],{},"Pick the smallest type that honestly fits the data you expect to store.",[11,669,671,675,785,794],{"id":670,"level":407},"text-data-types",[409,672,674],{"id":673},"text-types","Text Types",[110,676,677,689],{},[113,678,679],{},[116,680,681,683,686],{},[119,682,513],{},[119,684,685],{},"Good Fit",[119,687,688],{},"Limit \u002F Range",[129,690,691,710,727,742,755,770],{},[116,692,693,698,701],{},[134,694,695],{},[39,696,697],{},"CHAR(n)",[134,699,700],{},"fixed-length codes",[134,702,703,705,706,709],{},[39,704,648],{}," to ",[39,707,708],{},"255"," characters",[116,711,712,717,720],{},[134,713,714],{},[39,715,716],{},"VARCHAR(n)",[134,718,719],{},"short variable text",[134,721,722,723,726],{},"up to ",[39,724,725],{},"65,535"," bytes, limited by row size",[116,728,729,734,737],{},[134,730,731],{},[39,732,733],{},"TINYTEXT",[134,735,736],{},"small body text",[134,738,722,739,741],{},[39,740,708],{}," bytes",[116,743,744,748,751],{},[134,745,746],{},[39,747,573],{},[134,749,750],{},"normal body text",[134,752,722,753,741],{},[39,754,725],{},[116,756,757,762,765],{},[134,758,759],{},[39,760,761],{},"MEDIUMTEXT",[134,763,764],{},"large body text",[134,766,722,767,741],{},[39,768,769],{},"16,777,215",[116,771,772,777,780],{},[134,773,774],{},[39,775,776],{},"LONGTEXT",[134,778,779],{},"very large text",[134,781,722,782,741],{},[39,783,784],{},"4,294,967,295",[20,786,651,787,790,791,793],{},[39,788,789],{},"VARCHAR(length)"," for usernames, emails, titles, and statuses. Use a ",[39,792,573],{}," type when the value is long enough that a strict short maximum is not useful.",[20,795,796],{},"Text limits are byte limits, so the number of characters can be lower when a character set uses more than one byte per character.",[11,798,800,804,936],{"id":799,"level":407},"number-types",[409,801,803],{"id":802},"integer-types-and-ranges","Integer Types And Ranges",[110,805,806,821],{},[113,807,808],{},[116,809,810,812,815],{},[119,811,513],{},[119,813,814],{},"Signed Range",[119,816,817,820],{},[39,818,819],{},"UNSIGNED"," Range",[129,822,823,844,866,888,912],{},[116,824,825,830,838],{},[134,826,827],{},[39,828,829],{},"TINYINT",[134,831,832,705,835],{},[39,833,834],{},"-128",[39,836,837],{},"127",[134,839,840,705,842],{},[39,841,648],{},[39,843,708],{},[116,845,846,851,859],{},[134,847,848],{},[39,849,850],{},"SMALLINT",[134,852,853,705,856],{},[39,854,855],{},"-32768",[39,857,858],{},"32767",[134,860,861,705,863],{},[39,862,648],{},[39,864,865],{},"65535",[116,867,868,873,881],{},[134,869,870],{},[39,871,872],{},"MEDIUMINT",[134,874,875,705,878],{},[39,876,877],{},"-8388608",[39,879,880],{},"8388607",[134,882,883,705,885],{},[39,884,648],{},[39,886,887],{},"16777215",[116,889,890,897,905],{},[134,891,892,634,894],{},[39,893,528],{},[39,895,896],{},"INTEGER",[134,898,899,705,902],{},[39,900,901],{},"-2147483648",[39,903,904],{},"2147483647",[134,906,907,705,909],{},[39,908,648],{},[39,910,911],{},"4294967295",[116,913,914,919,928],{},[134,915,916],{},[39,917,918],{},"BIGINT",[134,920,921,922,705,925],{},"about ",[39,923,924],{},"-9.22e18",[39,926,927],{},"9.22e18",[134,929,930,932,933],{},[39,931,648],{}," to about ",[39,934,935],{},"1.84e19",[20,937,938,939,941],{},"Use the smallest integer type that honestly fits the possible values. Many course ids are fine as ",[39,940,528],{},".",[11,943,945,949,1058],{"id":944,"level":407},"decimal-and-approx-number-types",[409,946,948],{"id":947},"decimal-and-approximate-number-types","Decimal And Approximate Number Types",[110,950,951,961],{},[113,952,953],{},[116,954,955,957,959],{},[119,956,513],{},[119,958,685],{},[119,960,688],{},[129,962,963,986,1004,1024,1042],{},[116,964,965,973,976],{},[134,966,967,634,970],{},[39,968,969],{},"DECIMAL(p,s)",[39,971,972],{},"NUMERIC(p,s)",[134,974,975],{},"exact prices and totals",[134,977,978,979,982,983],{},"precision up to ",[39,980,981],{},"65",", scale up to ",[39,984,985],{},"30",[116,987,988,993,996],{},[134,989,990],{},[39,991,992],{},"FLOAT",[134,994,995],{},"approximate decimal values",[134,997,921,998,705,1001],{},[39,999,1000],{},"+-1.18e-38",[39,1002,1003],{},"+-3.40e38",[116,1005,1006,1014,1016],{},[134,1007,1008,634,1011],{},[39,1009,1010],{},"DOUBLE",[39,1012,1013],{},"DOUBLE PRECISION",[134,1015,995],{},[134,1017,921,1018,705,1021],{},[39,1019,1020],{},"+-2.23e-308",[39,1022,1023],{},"+-1.80e308",[116,1025,1026,1031,1034],{},[134,1027,1028],{},[39,1029,1030],{},"BIT(m)",[134,1032,1033],{},"bit fields",[134,1035,1036,705,1038,1041],{},[39,1037,645],{},[39,1039,1040],{},"64"," bits",[116,1043,1044,1051,1053],{},[134,1045,1046,634,1048],{},[39,1047,633],{},[39,1049,1050],{},"BOOL",[134,1052,640],{},[134,1054,1055,1056],{},"alias for ",[39,1057,637],{},[20,1059,651,1060,1063,1064,1066,1067,1069],{},[39,1061,1062],{},"DECIMAL"," for money-like values. Avoid ",[39,1065,992],{}," and ",[39,1068,1010],{}," when exact cents matter.",[11,1071,1073,1077,1202],{"id":1072,"level":407},"binary-choice-json-types",[409,1074,1076],{"id":1075},"binary-choice-and-json-types","Binary, Choice, And JSON Types",[110,1078,1079,1089],{},[113,1080,1081],{},[116,1082,1083,1085,1087],{},[119,1084,513],{},[119,1086,685],{},[119,1088,688],{},[129,1090,1091,1107,1121,1140,1159,1174,1189],{},[116,1092,1093,1098,1101],{},[134,1094,1095],{},[39,1096,1097],{},"BINARY(n)",[134,1099,1100],{},"fixed-length bytes",[134,1102,1103,705,1105,741],{},[39,1104,648],{},[39,1106,708],{},[116,1108,1109,1114,1117],{},[134,1110,1111],{},[39,1112,1113],{},"VARBINARY(n)",[134,1115,1116],{},"variable-length bytes",[134,1118,722,1119,726],{},[39,1120,725],{},[116,1122,1123,1131,1134],{},[134,1124,1125,634,1128],{},[39,1126,1127],{},"TINYBLOB",[39,1129,1130],{},"BLOB",[134,1132,1133],{},"binary files or bytes",[134,1135,722,1136,634,1138,741],{},[39,1137,708],{},[39,1139,725],{},[116,1141,1142,1150,1153],{},[134,1143,1144,634,1147],{},[39,1145,1146],{},"MEDIUMBLOB",[39,1148,1149],{},"LONGBLOB",[134,1151,1152],{},"larger binary data",[134,1154,722,1155,634,1157,741],{},[39,1156,769],{},[39,1158,784],{},[116,1160,1161,1166,1169],{},[134,1162,1163],{},[39,1164,1165],{},"ENUM(...)",[134,1167,1168],{},"one allowed text choice",[134,1170,722,1171,1173],{},[39,1172,725],{}," listed values",[116,1175,1176,1181,1184],{},[134,1177,1178],{},[39,1179,1180],{},"SET(...)",[134,1182,1183],{},"multiple allowed choices",[134,1185,722,1186,1188],{},[39,1187,1040],{}," listed members",[116,1190,1191,1196,1199],{},[134,1192,1193],{},[39,1194,1195],{},"JSON",[134,1197,1198],{},"valid JSON document",[134,1200,1201],{},"must contain valid JSON text",[20,1203,1204],{},"Most course tables should avoid storing large files directly in MySQL unless the assignment specifically asks for it.",[11,1206,1208,1211,1330],{"id":1207,"level":407},"spatial-types",[409,1209,1210],{"id":1207},"Spatial Types",[110,1212,1213,1224],{},[113,1214,1215],{},[116,1216,1217,1219,1221],{},[119,1218,513],{},[119,1220,685],{},[119,1222,1223],{},"Beginner Note",[129,1225,1226,1239,1252,1265,1278,1291,1304,1317],{},[116,1227,1228,1233,1236],{},[134,1229,1230],{},[39,1231,1232],{},"GEOMETRY",[134,1234,1235],{},"any geometry value",[134,1237,1238],{},"broad parent type",[116,1240,1241,1246,1249],{},[134,1242,1243],{},[39,1244,1245],{},"POINT",[134,1247,1248],{},"one coordinate pair",[134,1250,1251],{},"latitude\u002Flongitude-style points",[116,1253,1254,1259,1262],{},[134,1255,1256],{},[39,1257,1258],{},"LINESTRING",[134,1260,1261],{},"connected points",[134,1263,1264],{},"routes or paths",[116,1266,1267,1272,1275],{},[134,1268,1269],{},[39,1270,1271],{},"POLYGON",[134,1273,1274],{},"closed area",[134,1276,1277],{},"regions or boundaries",[116,1279,1280,1285,1288],{},[134,1281,1282],{},[39,1283,1284],{},"MULTIPOINT",[134,1286,1287],{},"many points",[134,1289,1290],{},"grouped point data",[116,1292,1293,1298,1301],{},[134,1294,1295],{},[39,1296,1297],{},"MULTILINESTRING",[134,1299,1300],{},"many line strings",[134,1302,1303],{},"grouped routes",[116,1305,1306,1311,1314],{},[134,1307,1308],{},[39,1309,1310],{},"MULTIPOLYGON",[134,1312,1313],{},"many polygons",[134,1315,1316],{},"grouped regions",[116,1318,1319,1324,1327],{},[134,1320,1321],{},[39,1322,1323],{},"GEOMETRYCOLLECTION",[134,1325,1326],{},"mixed geometry values",[134,1328,1329],{},"collection of spatial values",[20,1331,1332],{},"Most course work will not use spatial types, but they are part of MySQL's full data-type family.",[11,1334,1336,1339,1447,1458],{"id":1335,"level":407},"date-and-time-types",[409,1337,1338],{"id":1335},"Date And Time Types",[110,1340,1341,1352],{},[113,1342,1343],{},[116,1344,1345,1347,1349],{},[119,1346,513],{},[119,1348,685],{},[119,1350,1351],{},"Valid Range",[129,1353,1354,1371,1389,1406,1425],{},[116,1355,1356,1360,1363],{},[134,1357,1358],{},[39,1359,588],{},[134,1361,1362],{},"birthdays, due dates",[134,1364,1365,705,1368],{},[39,1366,1367],{},"1000-01-01",[39,1369,1370],{},"9999-12-31",[116,1372,1373,1378,1381],{},[134,1374,1375],{},[39,1376,1377],{},"TIME",[134,1379,1380],{},"time of day or duration",[134,1382,1383,705,1386],{},[39,1384,1385],{},"-838:59:59",[39,1387,1388],{},"838:59:59",[116,1390,1391,1395,1398],{},[134,1392,1393],{},[39,1394,603],{},[134,1396,1397],{},"scheduled or entered date\u002Ftime values",[134,1399,1400,705,1403],{},[39,1401,1402],{},"1000-01-01 00:00:00",[39,1404,1405],{},"9999-12-31 23:59:59",[116,1407,1408,1412,1415],{},[134,1409,1410],{},[39,1411,618],{},[134,1413,1414],{},"created\u002Fmodified audit fields",[134,1416,1417,1420,1421,1424],{},[39,1418,1419],{},"1970-01-01 00:00:01"," UTC to ",[39,1422,1423],{},"2038-01-19 03:14:07"," UTC",[116,1426,1427,1432,1435],{},[134,1428,1429],{},[39,1430,1431],{},"YEAR",[134,1433,1434],{},"year-only values",[134,1436,1437,705,1440,1443,1444],{},[39,1438,1439],{},"1901",[39,1441,1442],{},"2155",", plus ",[39,1445,1446],{},"0000",[20,1448,1449,1451,1452,1454,1455,1457],{},[39,1450,603],{}," is usually easier for literal dates entered by a user. ",[39,1453,618],{}," is useful when MySQL should track when a row was created or changed; MySQL also applies time-zone conversion for ",[39,1456,618],{}," values.",[20,1459,1460,54,1462,58,1464,1466,1467,1470],{},[39,1461,1377],{},[39,1463,603],{},[39,1465,618],{}," can include fractional seconds with a precision such as ",[39,1468,1469],{},"DATETIME(3)"," when a project needs that detail.",[11,1472,1474,1477,1603,1606],{"id":1473,"level":407},"constraint-choices",[409,1475,1476],{"id":1473},"Constraint Choices",[110,1478,1479,1480,1479,1494,1479,1507],{},"\n  ",[1481,1482,1483,1484,1483,1488,1483,1491,1479],"colgroup",{},"\n    ",[1485,1486],"col",{"style":1487},"width: 24%;",[1485,1489],{"style":1490},"width: 34%;",[1485,1492],{"style":1493},"width: 42%;",[113,1495,1483,1496,1479],{},[116,1497,1498,1499,1498,1501,1498,1504,1483],{},"\n      ",[119,1500,204],{},[119,1502,1503],{},"What It Enforces",[119,1505,1506],{},"Example Use",[129,1508,1483,1509,1483,1523,1483,1535,1483,1547,1483,1559,1483,1573,1483,1588,1479],{},[116,1510,1498,1511,1498,1515,1498,1518,1483],{},[134,1512,1513],{},[39,1514,399],{},[134,1516,1517],{},"one unique row identifier",[134,1519,1520],{},[39,1521,1522],{},"id INT PRIMARY KEY",[116,1524,1498,1525,1498,1529,1498,1532,1483],{},[134,1526,1527],{},[39,1528,393],{},[134,1530,1531],{},"MySQL assigns the next number",[134,1533,1534],{},"generated ids",[116,1536,1498,1537,1498,1541,1498,1544,1483],{},[134,1538,1539],{},[39,1540,479],{},[134,1542,1543],{},"value must be provided",[134,1545,1546],{},"required email",[116,1548,1498,1549,1498,1553,1498,1556,1483],{},[134,1550,1551],{},[39,1552,485],{},[134,1554,1555],{},"no duplicate values",[134,1557,1558],{},"username or email",[116,1560,1498,1561,1498,1565,1498,1568,1483],{},[134,1562,1563],{},[39,1564,491],{},[134,1566,1567],{},"fallback value when omitted",[134,1569,1570],{},[39,1571,1572],{},"is_done DEFAULT 0",[116,1574,1498,1575,1498,1580,1498,1583,1483],{},[134,1576,1577],{},[39,1578,1579],{},"CHECK",[134,1581,1582],{},"value must satisfy a rule",[134,1584,1585],{},[39,1586,1587],{},"CHECK (priority BETWEEN 1 AND 5)",[116,1589,1498,1590,1498,1595,1498,1598,1483],{},[134,1591,1592],{},[39,1593,1594],{},"FOREIGN KEY",[134,1596,1597],{},"value must match a parent table row",[134,1599,1600],{},[39,1601,1602],{},"FOREIGN KEY (user_id) REFERENCES Users(id)",[20,1604,1605],{},"Constraints are the database's safety net. PHP should validate first, but the table should still reject impossible or unsafe data.",[20,1607,1608],{},"A foreign key prevents a child row from pointing at a parent row that does not exist.",[11,1610,1612,1616],{"id":1611,"level":14},"verify-table",[16,1613,1615],{"id":1614},"verify-the-table","Verify The Table",[313,1617,1619,1630],{"gap":315,"left-width":1618,"right-width":1618},"1fr",[319,1620,1621,1624,1627],{"v-slot:left":321},[20,1622,1623],{},"Run in your MySQL client:",[323,1625],{"language":325,"src":1626},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fverify-the-table-05.sql",[20,1628,1629],{},"The table name should appear in the result.",[319,1631,1632,1635,1640,1643],{"v-slot:right":321},[20,1633,1634],{},"Then inspect columns:",[20,1636,651,1637,1639],{},[39,1638,444],{}," with the table you created.",[20,1641,1642],{},"Look for the columns, types, and constraints you expected:",[24,1644,1645,1648,1651,1657,1665],{},[27,1646,1647],{},"Column names",[27,1649,1650],{},"Data types",[27,1652,1653,1656],{},[39,1654,1655],{},"NULL"," rules",[27,1658,1659,1660,441,1663],{},"Keys such as ",[39,1661,1662],{},"PRIMARY",[39,1664,485],{},[27,1666,1667],{},"Default values",[11,1669,1671,1674],{"id":1670,"level":14},"insert-practice-rows",[16,1672,1673],{"id":1670},"Insert Practice Rows",[313,1675,1678,1683],{"gap":315,"left-width":1676,"right-width":1677},"1.15fr","0.85fr",[319,1679,1680],{"v-slot:left":321},[323,1681],{"language":325,"src":1682},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Finsert-practice-notes-12.sql",[319,1684,1685,1690],{"v-slot:right":321},[20,1686,1687,1689],{},[39,1688,53],{}," adds new rows:",[24,1691,1692,1695,1698,1701,1704,1707],{},[27,1693,1694],{},"Name the target table",[27,1696,1697],{},"List the columns being filled",[27,1699,1700],{},"Put values in the same order",[27,1702,1703],{},"Each value set becomes one new entity record",[27,1705,1706],{},"Omitted columns use defaults when available",[27,1708,1709],{},"Text values are wrapped in quotes",[11,1711,1713,1716,1719,1739],{"id":1712,"level":407},"run-insert-manually",[409,1714,1715],{"id":1712},"Run INSERT Manually",[20,1717,1718],{},"Use the query window for short practice rows:",[24,1720,1721,1727,1730,1736],{},[27,1722,1723,1724,1726],{},"Run the ",[39,1725,53],{}," statement after the table exists",[27,1728,1729],{},"Read the affected-row message",[27,1731,1732,1733,1735],{},"Run a ",[39,1734,47],{}," query to verify the new rows",[27,1737,1738],{},"If the insert fails, check table name, column names, value order, and required fields",[20,1740,1741],{},"Manual inserts are useful for practice data; project setup should still use the course init workflow for schema files.",[11,1743,1745,1749],{"id":1744,"level":14},"select-filter-sort",[16,1746,1748],{"id":1747},"select-filter-and-sort","Select, Filter, And Sort",[313,1750,1751,1756],{"gap":315,"left-width":1676,"right-width":1677},[319,1752,1753],{"v-slot:left":321},[323,1754],{"language":325,"src":1755},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fselect-filter-sort-13.sql",[319,1757,1758,1763],{"v-slot:right":321},[20,1759,1760,1762],{},[39,1761,47],{}," reads rows:",[24,1764,1765,1768,1771,1777,1782,1787,1792],{},[27,1766,1767],{},"The selected column list is called a projection",[27,1769,1770],{},"Projection controls which columns appear in the result",[27,1772,1773,1776],{},[39,1774,1775],{},"FROM table_name"," names the table to read from",[27,1778,1779,1781],{},[39,1780,277],{}," filters matching entity records",[27,1783,1784,1786],{},[39,1785,280],{}," sorts the result",[27,1788,1789,1791],{},[39,1790,283],{}," caps how many rows return",[27,1793,1794,1797],{},[39,1795,1796],{},"LIKE"," can match part of a text value",[11,1799,1801,1804,1921],{"id":1800,"level":407},"where-condition-basics",[409,1802,1803],{"id":1800},"WHERE Condition Basics",[110,1805,1806,1819],{},[113,1807,1808],{},[116,1809,1810,1813,1816],{},[119,1811,1812],{},"Pattern",[119,1814,1815],{},"Example",[119,1817,1818],{},"Meaning",[129,1820,1821,1836,1854,1869,1882,1895,1908],{},[116,1822,1823,1826,1831],{},[134,1824,1825],{},"Equality",[134,1827,1828],{},[39,1829,1830],{},"priority = 2",[134,1832,1833,1834],{},"value must equal ",[39,1835,14],{},[116,1837,1838,1841,1849],{},[134,1839,1840],{},"Not equal",[134,1842,1843,441,1846],{},[39,1844,1845],{},"is_done \u003C> 1",[39,1847,1848],{},"is_done != 1",[134,1850,1851,1852],{},"value must not equal ",[39,1853,645],{},[116,1855,1856,1859,1864],{},[134,1857,1858],{},"Comparison",[134,1860,1861],{},[39,1862,1863],{},"priority > 1",[134,1865,1866,1867],{},"value must be greater than ",[39,1868,645],{},[116,1870,1871,1874,1879],{},[134,1872,1873],{},"Range",[134,1875,1876],{},[39,1877,1878],{},"priority BETWEEN 1 AND 3",[134,1880,1881],{},"value must be inside the range",[116,1883,1884,1887,1892],{},[134,1885,1886],{},"Both conditions",[134,1888,1889],{},[39,1890,1891],{},"priority = 2 AND is_done = 0",[134,1893,1894],{},"both parts must be true",[116,1896,1897,1900,1905],{},[134,1898,1899],{},"Either condition",[134,1901,1902],{},[39,1903,1904],{},"priority = 3 OR is_done = 0",[134,1906,1907],{},"at least one part must be true",[116,1909,1910,1913,1918],{},[134,1911,1912],{},"Negation",[134,1914,1915],{},[39,1916,1917],{},"NOT is_done = 1",[134,1919,1920],{},"reverses a condition",[20,1922,1923,1924,634,1927,1930],{},"Use parentheses when mixed ",[39,1925,1926],{},"AND",[39,1928,1929],{},"OR"," logic could be unclear.",[11,1932,1934,1938],{"id":1933,"level":14},"update-and-delete",[16,1935,1937],{"id":1936},"update-and-delete-rows","Update And Delete Rows",[313,1939,1940,1945],{"gap":315,"left-width":1676,"right-width":1677},[319,1941,1942],{"v-slot:left":321},[323,1943],{"language":325,"src":1944},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fupdate-delete-practice-notes-14.sql",[319,1946,1947,1950],{"v-slot:right":321},[20,1948,1949],{},"Write queries need extra caution:",[24,1951,1952,1957,1962,1967,1973],{},[27,1953,1954,1956],{},[39,1955,57],{}," changes existing entity records",[27,1958,1959,1961],{},[39,1960,61],{}," removes existing entity records",[27,1963,1964,1966],{},[39,1965,277],{}," limits which rows are affected",[27,1968,1969,1970,1972],{},"Without ",[39,1971,277],{},", every row may be changed or deleted",[27,1974,1975],{},"Predict the affected rows before running the query",[11,1977,1979,1982,1985,2016],{"id":1978,"level":407},"run-update-delete-manually",[409,1980,1981],{"id":1978},"Run UPDATE \u002F DELETE Manually",[20,1983,1984],{},"Use the query window carefully for write queries:",[24,1986,1987,1993,2004,2007,2010],{},[27,1988,1989,1990,1992],{},"Run a matching ",[39,1991,47],{}," first to preview affected rows",[27,1994,1995,1996,441,1998,2000,2001,2003],{},"Check that the ",[39,1997,57],{},[39,1999,61],{}," statement includes the intended ",[39,2002,277],{}," clause",[27,2005,2006],{},"Run the write query",[27,2008,2009],{},"Check the affected-row message",[27,2011,2012,2013,2015],{},"Run ",[39,2014,47],{}," again to verify the final rows",[20,2017,2018],{},"If the affected-row count surprises you, stop and inspect before running more write queries.",[11,2020,2022,2026],{"id":2021,"level":14},"alter-table-example",[16,2023,2025],{"id":2024},"alter-a-table","Alter A Table",[313,2027,2028,2033],{"gap":315,"left-width":316,"right-width":317},[319,2029,2030],{"v-slot:left":321},[323,2031],{"language":325,"src":2032},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Falter-practice-notes-15.sql",[319,2034,2035,2040],{"v-slot:right":321},[20,2036,2037,2039],{},[39,2038,243],{}," changes an existing table:",[24,2041,2042,2045,2048,2051],{},[27,2043,2044],{},"Add a column when the table needs a new field",[27,2046,2047],{},"Change a column when the stored shape was wrong",[27,2049,2050],{},"Use a new SQL file for changes after a table has already run",[27,2052,2053,2054,2056],{},"Avoid ",[39,2055,246],{}," unless you truly mean to remove the table",[11,2058,2060,2063,2066,2085],{"id":2059,"level":407},"run-alter-manually",[409,2061,2062],{"id":2059},"Run ALTER Manually",[20,2064,2065],{},"Use the query window when practicing table changes:",[24,2067,2068,2073,2077,2082],{},[27,2069,2012,2070,2072],{},[39,2071,444],{}," before the change",[27,2074,1723,2075,431],{},[39,2076,243],{},[27,2078,2012,2079,2081],{},[39,2080,444],{}," again after the change",[27,2083,2084],{},"Confirm the new column, type, default, or constraint appears",[20,2086,2087],{},"For project work, save schema changes in a later numbered SQL file instead of editing an old file that already ran.",[11,2089,2091,2094],{"id":2090,"level":14},"standard-query-shapes",[16,2092,2093],{"id":2090},"Standard Query Shapes",[313,2095,2096,2101],{"gap":315,"left-width":316,"right-width":317},[319,2097,2098],{"v-slot:left":321},[323,2099],{"language":325,"src":2100},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fstandard-query-shapes-08.sql",[319,2102,2103,2106,2133],{"v-slot:right":321},[20,2104,2105],{},"Read the verb first:",[24,2107,2108,2113,2118,2123,2128],{},[27,2109,2110,2112],{},[39,2111,47],{},": retrieve rows",[27,2114,2115,2117],{},[39,2116,53],{},": add rows",[27,2119,2120,2122],{},[39,2121,57],{},": change existing entity records",[27,2124,2125,2127],{},[39,2126,61],{},": remove entity records",[27,2129,2130,2132],{},[39,2131,277],{},": filter which rows are read or changed",[20,2134,2135],{},"The rest of the statement usually names the table, columns, values, and filters.",[11,2137,2139,2142,2145,2171],{"id":2138,"level":407},"run-standard-shapes-manually",[409,2140,2141],{"id":2138},"Run Standard Shapes Manually",[20,2143,2144],{},"Use the query window to practice reading query shape:",[24,2146,2147,2150,2153,2159,2168],{},[27,2148,2149],{},"Run one statement at a time",[27,2151,2152],{},"Read the first verb before the rest of the query",[27,2154,2155,2156,2158],{},"For ",[39,2157,47],{},", inspect the returned result table",[27,2160,2155,2161,54,2163,58,2165,2167],{},[39,2162,53],{},[39,2164,57],{},[39,2166,61],{},", inspect affected rows",[27,2169,2170],{},"For errors, identify whether the problem is syntax, table name, column name, or value shape",[20,2172,2173],{},"This practice builds confidence before the project init and PHP query workflow.",[11,2175,2177,2180],{"id":2176,"level":14},"normalization-basics",[16,2178,2179],{"id":2176},"Normalization Basics",[313,2181,2182,2201],{"gap":315,"left-width":316,"right-width":317},[319,2183,2184,2187],{"v-slot:left":321},[20,2185,2186],{},"Normalization is the habit of organizing tables so each fact lives in one clear place.",[24,2188,2189,2192,2195,2198],{},[27,2190,2191],{},"One table should describe one entity type",[27,2193,2194],{},"Repeated facts usually belong in a related table",[27,2196,2197],{},"Related records connect through ids",[27,2199,2200],{},"More tables can mean more joins, but fewer update problems",[319,2202,2203,2206,2220],{"v-slot:right":321},[20,2204,2205],{},"Questions to ask:",[24,2207,2208,2211,2214,2217],{},[27,2209,2210],{},"Does this column describe this row's main entity?",[27,2212,2213],{},"Is one cell trying to hold several values?",[27,2215,2216],{},"Would changing one fact require editing several rows?",[27,2218,2219],{},"Would deleting one row accidentally delete a fact you still need?",[20,2221,2222],{},"The practical target for this course is usually a clean design near 3NF, not perfect academic normalization.",[11,2224,2226,2230,2233,2240,2277,2280,2352],{"id":2225,"level":407},"first-normal-form",[409,2227,2229],{"id":2228},"_1nf-one-value-per-cell","1NF: One Value Per Cell",[20,2231,2232],{},"First normal form prevents list-like cells.",[20,2234,2235,2236,2239],{},"Bad ",[39,2237,2238],{},"Students"," data:",[110,2241,2242,2255],{},[113,2243,2244],{},[116,2245,2246,2249,2252],{},[119,2247,2248],{},"id",[119,2250,2251],{},"name",[119,2253,2254],{},"subjects",[129,2256,2257,2267],{},[116,2258,2259,2261,2264],{},[134,2260,645],{},[134,2262,2263],{},"Ada",[134,2265,2266],{},"PHP, SQL",[116,2268,2269,2271,2274],{},[134,2270,14],{},[134,2272,2273],{},"Ben",[134,2275,2276],{},"SQL",[20,2278,2279],{},"Better split:",[313,2281,2282,2312],{"gap":315,"left-width":1618,"right-width":1618},[319,2283,2284,2288],{"v-slot:left":321},[20,2285,2286],{},[39,2287,2238],{},[110,2289,2290,2298],{},[113,2291,2292],{},[116,2293,2294,2296],{},[119,2295,2248],{},[119,2297,2251],{},[129,2299,2300,2306],{},[116,2301,2302,2304],{},[134,2303,645],{},[134,2305,2263],{},[116,2307,2308,2310],{},[134,2309,14],{},[134,2311,2273],{},[319,2313,2314,2319],{"v-slot:right":321},[20,2315,2316],{},[39,2317,2318],{},"StudentSubjects",[110,2320,2321,2331],{},[113,2322,2323],{},[116,2324,2325,2328],{},[119,2326,2327],{},"student_id",[119,2329,2330],{},"subject",[129,2332,2333,2340,2346],{},[116,2334,2335,2337],{},[134,2336,645],{},[134,2338,2339],{},"PHP",[116,2341,2342,2344],{},[134,2343,645],{},[134,2345,2276],{},[116,2347,2348,2350],{},[134,2349,14],{},[134,2351,2276],{},[20,2353,2354],{},"Simple test: each cell should hold one value, not a mini-list.",[11,2356,2358,2362,2365,2370,2420,2422,2525],{"id":2357,"level":407},"second-normal-form",[409,2359,2361],{"id":2360},"_2nf-facts-depend-on-the-whole-key","2NF: Facts Depend On The Whole Key",[20,2363,2364],{},"Second normal form matters most when a table uses a combined key.",[20,2366,2235,2367,2239],{},[39,2368,2369],{},"Enrollments",[110,2371,2372,2386],{},[113,2373,2374],{},[116,2375,2376,2378,2381,2383],{},[119,2377,2327],{},[119,2379,2380],{},"course_id",[119,2382,6],{},[119,2384,2385],{},"course",[129,2387,2388,2399,2410],{},[116,2389,2390,2392,2395,2397],{},[134,2391,645],{},[134,2393,2394],{},"10",[134,2396,2263],{},[134,2398,2276],{},[116,2400,2401,2403,2406,2408],{},[134,2402,645],{},[134,2404,2405],{},"20",[134,2407,2263],{},[134,2409,2339],{},[116,2411,2412,2414,2416,2418],{},[134,2413,14],{},[134,2415,2394],{},[134,2417,2273],{},[134,2419,2276],{},[20,2421,2279],{},[2423,2424,1479,2426,1479,2457,1479,2489],"div",{"style":2425},"display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; align-items: start;",[2423,2427,1483,2428,1483,2432,1479],{},[20,2429,2430],{},[39,2431,2238],{},[110,2433,1498,2434,1498,2443,1483],{},[113,2435,2436,2437,1498],{},"\n        ",[116,2438,2439,2441],{},[119,2440,2248],{},[119,2442,2251],{},[129,2444,2436,2445,2436,2451,1498],{},[116,2446,2447,2449],{},[134,2448,645],{},[134,2450,2263],{},[116,2452,2453,2455],{},[134,2454,14],{},[134,2456,2273],{},[2423,2458,1483,2459,1483,2464,1479],{},[20,2460,2461],{},[39,2462,2463],{},"Courses",[110,2465,1498,2466,1498,2475,1483],{},[113,2467,2436,2468,1498],{},[116,2469,2470,2472],{},[119,2471,2248],{},[119,2473,2474],{},"title",[129,2476,2436,2477,2436,2483,1498],{},[116,2478,2479,2481],{},[134,2480,2394],{},[134,2482,2276],{},[116,2484,2485,2487],{},[134,2486,2405],{},[134,2488,2339],{},[2423,2490,1483,2491,1483,2495,1479],{},[20,2492,2493],{},[39,2494,2369],{},[110,2496,1498,2497,1498,2505,1483],{},[113,2498,2436,2499,1498],{},[116,2500,2501,2503],{},[119,2502,2327],{},[119,2504,2380],{},[129,2506,2436,2507,2436,2513,2436,2519,1498],{},[116,2508,2509,2511],{},[134,2510,645],{},[134,2512,2394],{},[116,2514,2515,2517],{},[134,2516,645],{},[134,2518,2405],{},[116,2520,2521,2523],{},[134,2522,14],{},[134,2524,2394],{},[20,2526,2527],{},"Simple test: every non-key column should describe the whole row identity, not just part of it.",[11,2529,2531,2535,2538,2543,2594,2596,2663],{"id":2530,"level":407},"third-normal-form",[409,2532,2534],{"id":2533},"_3nf-facts-depend-on-the-key-only","3NF: Facts Depend On The Key Only",[20,2536,2537],{},"Third normal form removes facts that depend on another non-key column.",[20,2539,2235,2540,2239],{},[39,2541,2542],{},"Users",[110,2544,2545,2563],{},[113,2546,2547],{},[116,2548,2549,2551,2554,2557,2560],{},[119,2550,2248],{},[119,2552,2553],{},"username",[119,2555,2556],{},"zip",[119,2558,2559],{},"city",[119,2561,2562],{},"state",[129,2564,2565,2581],{},[116,2566,2567,2569,2572,2575,2578],{},[134,2568,645],{},[134,2570,2571],{},"ada",[134,2573,2574],{},"07102",[134,2576,2577],{},"Newark",[134,2579,2580],{},"NJ",[116,2582,2583,2585,2588,2590,2592],{},[134,2584,14],{},[134,2586,2587],{},"ben",[134,2589,2574],{},[134,2591,2577],{},[134,2593,2580],{},[20,2595,2279],{},[313,2597,2598,2634],{"gap":315,"left-width":1618,"right-width":1618},[319,2599,2600,2604],{"v-slot:left":321},[20,2601,2602],{},[39,2603,2542],{},[110,2605,2606,2616],{},[113,2607,2608],{},[116,2609,2610,2612,2614],{},[119,2611,2248],{},[119,2613,2553],{},[119,2615,2556],{},[129,2617,2618,2626],{},[116,2619,2620,2622,2624],{},[134,2621,645],{},[134,2623,2571],{},[134,2625,2574],{},[116,2627,2628,2630,2632],{},[134,2629,14],{},[134,2631,2587],{},[134,2633,2574],{},[319,2635,2636,2641],{"v-slot:right":321},[20,2637,2638],{},[39,2639,2640],{},"ZipCodes",[110,2642,2643,2653],{},[113,2644,2645],{},[116,2646,2647,2649,2651],{},[119,2648,2556],{},[119,2650,2559],{},[119,2652,2562],{},[129,2654,2655],{},[116,2656,2657,2659,2661],{},[134,2658,2574],{},[134,2660,2577],{},[134,2662,2580],{},[20,2664,2665],{},"Simple test: each column should describe the key, the whole key, and nothing but the key.",[11,2667,2669,2672],{"id":2668,"level":14},"join-basics",[16,2670,2671],{"id":2668},"JOIN Basics",[313,2673,2674,2679],{"gap":315,"left-width":1676,"right-width":1677},[319,2675,2676],{"v-slot:left":321},[323,2677],{"language":325,"src":2678},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fjoin-basics-01.sql",[319,2680,2681,2684],{"v-slot:right":321},[20,2682,2683],{},"Most joins connect a column from one table to a related column in another table.",[24,2685,2686,2692,2698,2704,2710],{},[27,2687,2688,2691],{},[39,2689,2690],{},"FROM",": starting table",[27,2693,2694,2697],{},[39,2695,2696],{},"JOIN",": related table",[27,2699,2700,2703],{},[39,2701,2702],{},"ON",": matching rule between the tables",[27,2705,2706,2709],{},[39,2707,2708],{},"AS",": alias for a shorter table or output name",[27,2711,2712],{},"Use joins when one page needs related data from more than one table",[11,2714,2716,2719,2722,2816],{"id":2715,"level":407},"join-example-data",[409,2717,2718],{"id":2715},"JOIN Example Data",[20,2720,2721],{},"These small tables are used by the join examples:",[313,2723,2724,2764],{"gap":315,"left-width":1618,"right-width":1618},[319,2725,2726,2731],{"v-slot:left":321},[20,2727,2728],{},[39,2729,2730],{},"Projects",[110,2732,2733,2741],{},[113,2734,2735],{},[116,2736,2737,2739],{},[119,2738,2248],{},[119,2740,2251],{},[129,2742,2743,2750,2757],{},[116,2744,2745,2747],{},[134,2746,645],{},[134,2748,2749],{},"Portfolio",[116,2751,2752,2754],{},[134,2753,14],{},[134,2755,2756],{},"Store",[116,2758,2759,2761],{},[134,2760,407],{},[134,2762,2763],{},"Blog",[319,2765,2766,2771],{"v-slot:right":321},[20,2767,2768],{},[39,2769,2770],{},"ProjectNotes",[110,2772,2773,2784],{},[113,2774,2775],{},[116,2776,2777,2779,2782],{},[119,2778,2248],{},[119,2780,2781],{},"project_id",[119,2783,2474],{},[129,2785,2786,2795,2805],{},[116,2787,2788,2790,2792],{},[134,2789,2394],{},[134,2791,645],{},[134,2793,2794],{},"Draft homepage",[116,2796,2797,2800,2802],{},[134,2798,2799],{},"11",[134,2801,645],{},[134,2803,2804],{},"Add screenshots",[116,2806,2807,2810,2813],{},[134,2808,2809],{},"12",[134,2811,2812],{},"4",[134,2814,2815],{},"Orphan note",[20,2817,2818,2819,2821,2822,2824],{},"The orphan note points to project ",[39,2820,2812],{},", which does not exist in the ",[39,2823,2730],{}," example table.",[11,2826,2828,2832],{"id":2827,"level":407},"join-shape",[409,2829,2831],{"id":2830},"join-shape-and-aliases","Join Shape And Aliases",[313,2833,2836,2898],{"gap":315,"left-width":2834,"right-width":2835},"0.95fr","1.05fr",[319,2837,2838,2841],{"v-slot:left":321},[20,2839,2840],{},"Source tables:",[110,2842,2843,2872],{},[113,2844,2845],{},[116,2846,2847,2859],{},[119,2848,2849,2851,2853,2854,54,2856,2858],{},[39,2850,2542],{},[107,2852],{},"(",[39,2855,2248],{},[39,2857,2553],{},")",[119,2860,2861,2864,2853,2866,54,2869,2858],{},[39,2862,2863],{},"Orders",[107,2865],{},[39,2867,2868],{},"user_id",[39,2870,2871],{},"total",[129,2873,2874,2886],{},[116,2875,2876,2881],{},[134,2877,2878,2880],{},[39,2879,645],{}," ada",[134,2882,2883,2885],{},[39,2884,645],{}," 19.99",[116,2887,2888,2893],{},[134,2889,2890,2892],{},[39,2891,14],{}," ben",[134,2894,2895,2897],{},[39,2896,14],{}," 5.00",[319,2899,2900,2903],{"v-slot:right":321},[323,2901],{"language":325,"src":2902},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fjoin-shape-and-aliases-01.sql",[24,2904,2905,2913,2920,2926,2932],{},[27,2906,2907,2910,2911],{},[39,2908,2909],{},"Users AS u",": table alias for ",[39,2912,2542],{},[27,2914,2915,2910,2918],{},[39,2916,2917],{},"Orders AS o",[39,2919,2863],{},[27,2921,2922,2925],{},[39,2923,2924],{},"o.total AS order_total",": column alias for the output name",[27,2927,2928,2931],{},[39,2929,2930],{},"ON u.id = o.user_id",": matching rule",[27,2933,2934],{},"Aliases make joined queries shorter and reduce ambiguous column names",[11,2936,2938,2941],{"id":2937,"level":407},"inner-join",[409,2939,2940],{"id":2937},"INNER JOIN",[313,2942,2943,3046],{"gap":315,"left-width":2835,"right-width":2834},[319,2944,2945,2980,2982],{"v-slot:left":321},[2946,2947,1479,2952,1479,2958,1479,2965,1479,2968,1479,2976],"svg",{"viewBox":2948,"role":2949,"ariaLabel":2950,"style":2951},"0 0 260 135","img","INNER JOIN Venn diagram: only the overlapping middle is selected","max-width: 280px;",[2953,2954],"path",{"d":2955,"fill":2956,"opacity":2957},"M 130 21 A 48 48 0 0 1 130 103 A 48 48 0 0 1 130 21 Z","#8fd8ff","0.8",[2959,2960],"circle",{"cx":2961,"cy":2962,"r":2963,"fill":2964,"stroke":2956,"strokeWidth":2812},"105","62","48","none",[2959,2966],{"cx":2967,"cy":2962,"r":2963,"fill":2964,"stroke":2956,"strokeWidth":2812},"155",[2969,2970,2975],"text",{"x":2971,"y":2972,"fill":2973,"fontSize":2974},"74","124","#f7f7f7","14","left",[2969,2977,2979],{"x":2978,"y":2972,"fill":2973,"fontSize":2974},"166","right",[20,2981,2840],{},[110,2983,2984,3008],{},[113,2985,2986],{},[116,2987,2988,2998],{},[119,2989,2990,2992,2853,2994,54,2996,2858],{},[39,2991,2730],{},[107,2993],{},[39,2995,2248],{},[39,2997,2251],{},[119,2999,3000,3002,2853,3004,54,3006,2858],{},[39,3001,2770],{},[107,3003],{},[39,3005,2781],{},[39,3007,2474],{},[129,3009,3010,3022,3034],{},[116,3011,3012,3017],{},[134,3013,3014,3016],{},[39,3015,645],{}," Portfolio",[134,3018,3019,3021],{},[39,3020,645],{}," Draft homepage",[116,3023,3024,3029],{},[134,3025,3026,3028],{},[39,3027,14],{}," Store",[134,3030,3031,3033],{},[39,3032,645],{}," Add screenshots",[116,3035,3036,3041],{},[134,3037,3038,3040],{},[39,3039,407],{}," Blog",[134,3042,3043,3045],{},[39,3044,2812],{}," Orphan note",[319,3047,3048,3051,3054,3057,3083],{"v-slot:right":321},[20,3049,3050],{},"Keeps only rows where both tables match.",[323,3052],{"language":325,"src":3053},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002F3-commit-the-practice-wo-02.sql",[20,3055,3056],{},"Result:",[110,3058,3059,3069],{},[113,3060,3061],{},[116,3062,3063,3066],{},[119,3064,3065],{},"project",[119,3067,3068],{},"note",[129,3070,3071,3077],{},[116,3072,3073,3075],{},[134,3074,2749],{},[134,3076,2794],{},[116,3078,3079,3081],{},[134,3080,2749],{},[134,3082,2804],{},[20,3084,3085],{},"Left-only projects and right-only notes are not returned.",[11,3087,3089,3092],{"id":3088,"level":407},"left-join",[409,3090,3091],{"id":3088},"LEFT JOIN",[313,3093,3094,3168],{"gap":315,"left-width":2835,"right-width":2834},[319,3095,3096,3108,3110],{"v-slot:left":321},[2946,3097,1479,3099,1479,3102,1479,3104,1479,3106],{"viewBox":2948,"role":2949,"ariaLabel":3098,"style":2951},"LEFT JOIN Venn diagram: the left circle and the overlapping middle are selected",[2959,3100],{"cx":2961,"cy":2962,"r":2963,"fill":2956,"opacity":3101,"stroke":2956,"strokeWidth":2812},"0.75",[2959,3103],{"cx":2967,"cy":2962,"r":2963,"fill":2964,"stroke":2956,"strokeWidth":2812},[2969,3105,2975],{"x":2971,"y":2972,"fill":2973,"fontSize":2974},[2969,3107,2979],{"x":2978,"y":2972,"fill":2973,"fontSize":2974},[20,3109,2840],{},[110,3111,3112,3136],{},[113,3113,3114],{},[116,3115,3116,3126],{},[119,3117,3118,3120,2853,3122,54,3124,2858],{},[39,3119,2730],{},[107,3121],{},[39,3123,2248],{},[39,3125,2251],{},[119,3127,3128,3130,2853,3132,54,3134,2858],{},[39,3129,2770],{},[107,3131],{},[39,3133,2781],{},[39,3135,2474],{},[129,3137,3138,3148,3158],{},[116,3139,3140,3144],{},[134,3141,3142,3016],{},[39,3143,645],{},[134,3145,3146,3021],{},[39,3147,645],{},[116,3149,3150,3154],{},[134,3151,3152,3028],{},[39,3153,14],{},[134,3155,3156,3033],{},[39,3157,645],{},[116,3159,3160,3164],{},[134,3161,3162,3040],{},[39,3163,407],{},[134,3165,3166,3045],{},[39,3167,2812],{},[319,3169,3170,3173,3176,3178,3218],{"v-slot:right":321},[20,3171,3172],{},"Keeps every left-table row and matching right-table rows.",[323,3174],{"language":325,"src":3175},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002F3-commit-the-practice-wo-03.sql",[20,3177,3056],{},[110,3179,3180,3188],{},[113,3181,3182],{},[116,3183,3184,3186],{},[119,3185,3065],{},[119,3187,3068],{},[129,3189,3190,3196,3202,3210],{},[116,3191,3192,3194],{},[134,3193,2749],{},[134,3195,2794],{},[116,3197,3198,3200],{},[134,3199,2749],{},[134,3201,2804],{},[116,3203,3204,3206],{},[134,3205,2756],{},[134,3207,3208],{},[39,3209,1655],{},[116,3211,3212,3214],{},[134,3213,2763],{},[134,3215,3216],{},[39,3217,1655],{},[20,3219,3220],{},"Use when the left entity should appear even when related data is missing.",[11,3222,3224,3227],{"id":3223,"level":407},"right-join",[409,3225,3226],{"id":3223},"RIGHT JOIN",[313,3228,3229,3304],{"gap":315,"left-width":2835,"right-width":2834},[319,3230,3231,3244,3246],{"v-slot:left":321},[2946,3232,1479,3234,1479,3238,1479,3240,1479,3242],{"viewBox":2948,"role":2949,"ariaLabel":3233,"style":2951},"RIGHT JOIN Venn diagram: the right circle and the overlapping middle are selected",[2959,3235],{"cx":2961,"cy":2962,"r":2963,"fill":3236,"opacity":3237,"stroke":2956,"strokeWidth":2812},"#22303d","0.9",[2959,3239],{"cx":2967,"cy":2962,"r":2963,"fill":2956,"opacity":3101,"stroke":2956,"strokeWidth":2812},[2969,3241,2975],{"x":2971,"y":2972,"fill":2973,"fontSize":2974},[2969,3243,2979],{"x":2978,"y":2972,"fill":2973,"fontSize":2974},[20,3245,2840],{},[110,3247,3248,3272],{},[113,3249,3250],{},[116,3251,3252,3262],{},[119,3253,3254,3256,2853,3258,54,3260,2858],{},[39,3255,2730],{},[107,3257],{},[39,3259,2248],{},[39,3261,2251],{},[119,3263,3264,3266,2853,3268,54,3270,2858],{},[39,3265,2770],{},[107,3267],{},[39,3269,2781],{},[39,3271,2474],{},[129,3273,3274,3284,3294],{},[116,3275,3276,3280],{},[134,3277,3278,3016],{},[39,3279,645],{},[134,3281,3282,3021],{},[39,3283,645],{},[116,3285,3286,3290],{},[134,3287,3288,3028],{},[39,3289,14],{},[134,3291,3292,3033],{},[39,3293,645],{},[116,3295,3296,3300],{},[134,3297,3298,3040],{},[39,3299,407],{},[134,3301,3302,3045],{},[39,3303,2812],{},[319,3305,3306,3309,3312,3314,3346],{"v-slot:right":321},[20,3307,3308],{},"Keeps every right-table row and matching left-table rows.",[323,3310],{"language":325,"src":3311},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002F3-commit-the-practice-wo-04.sql",[20,3313,3056],{},[110,3315,3316,3324],{},[113,3317,3318],{},[116,3319,3320,3322],{},[119,3321,3065],{},[119,3323,3068],{},[129,3325,3326,3332,3338],{},[116,3327,3328,3330],{},[134,3329,2749],{},[134,3331,2794],{},[116,3333,3334,3336],{},[134,3335,2749],{},[134,3337,2804],{},[116,3339,3340,3344],{},[134,3341,3342],{},[39,3343,1655],{},[134,3345,2815],{},[20,3347,3348,3350,3351,3353],{},[39,3349,3226],{}," is less common in this course because the same idea can usually be written as a ",[39,3352,3091],{}," with table order swapped.",[11,3355,3357,3361],{"id":3356,"level":407},"full-outer-join",[409,3358,3360],{"id":3359},"full-outer-join-concept","FULL OUTER JOIN Concept",[313,3362,3363,3436],{"gap":315,"left-width":2835,"right-width":2834},[319,3364,3365,3376,3378],{"v-slot:left":321},[2946,3366,1479,3368,1479,3370,1479,3372,1479,3374],{"viewBox":2948,"role":2949,"ariaLabel":3367,"style":2951},"FULL OUTER JOIN Venn diagram: both circles are selected",[2959,3369],{"cx":2961,"cy":2962,"r":2963,"fill":2956,"opacity":3101,"stroke":2956,"strokeWidth":2812},[2959,3371],{"cx":2967,"cy":2962,"r":2963,"fill":2956,"opacity":3101,"stroke":2956,"strokeWidth":2812},[2969,3373,2975],{"x":2971,"y":2972,"fill":2973,"fontSize":2974},[2969,3375,2979],{"x":2978,"y":2972,"fill":2973,"fontSize":2974},[20,3377,2840],{},[110,3379,3380,3404],{},[113,3381,3382],{},[116,3383,3384,3394],{},[119,3385,3386,3388,2853,3390,54,3392,2858],{},[39,3387,2730],{},[107,3389],{},[39,3391,2248],{},[39,3393,2251],{},[119,3395,3396,3398,2853,3400,54,3402,2858],{},[39,3397,2770],{},[107,3399],{},[39,3401,2781],{},[39,3403,2474],{},[129,3405,3406,3416,3426],{},[116,3407,3408,3412],{},[134,3409,3410,3016],{},[39,3411,645],{},[134,3413,3414,3021],{},[39,3415,645],{},[116,3417,3418,3422],{},[134,3419,3420,3028],{},[39,3421,14],{},[134,3423,3424,3033],{},[39,3425,645],{},[116,3427,3428,3432],{},[134,3429,3430,3040],{},[39,3431,407],{},[134,3433,3434,3045],{},[39,3435,2812],{},[319,3437,3438,3441,3444,3447,3495],{"v-slot:right":321},[20,3439,3440],{},"Keeps all rows from both tables.",[323,3442],{"language":325,"src":3443},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002F3-commit-the-practice-wo-05.sql",[20,3445,3446],{},"Conceptual result:",[110,3448,3449,3457],{},[113,3450,3451],{},[116,3452,3453,3455],{},[119,3454,3065],{},[119,3456,3068],{},[129,3458,3459,3465,3471,3479,3487],{},[116,3460,3461,3463],{},[134,3462,2749],{},[134,3464,2794],{},[116,3466,3467,3469],{},[134,3468,2749],{},[134,3470,2804],{},[116,3472,3473,3475],{},[134,3474,2756],{},[134,3476,3477],{},[39,3478,1655],{},[116,3480,3481,3483],{},[134,3482,2763],{},[134,3484,3485],{},[39,3486,1655],{},[116,3488,3489,3493],{},[134,3490,3491],{},[39,3492,1655],{},[134,3494,2815],{},[20,3496,3497,3498,3501],{},"MySQL does not support ",[39,3499,3500],{},"FULL OUTER JOIN"," directly. It can be simulated with multiple queries when a project truly needs it.",[11,3503,3505,3508],{"id":3504,"level":407},"cross-join",[409,3506,3507],{"id":3504},"CROSS JOIN",[313,3509,3510,3556],{"gap":315,"left-width":2835,"right-width":2834},[319,3511,3512,3514,3553],{"v-slot:left":321},[20,3513,2840],{},[110,3515,3516,3537],{},[113,3517,3518],{},[116,3519,3520,3528],{},[119,3521,3522,3524,2853,3526,2858],{},[39,3523,2542],{},[107,3525],{},[39,3527,2553],{},[119,3529,3530,3533,2853,3535,2858],{},[39,3531,3532],{},"Colors",[107,3534],{},[39,3536,2251],{},[129,3538,3539,3546],{},[116,3540,3541,3543],{},[134,3542,2263],{},[134,3544,3545],{},"Red",[116,3547,3548,3550],{},[134,3549,2273],{},[134,3551,3552],{},"Blue",[323,3554],{"language":325,"src":3555},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fcross-join-06.sql",[319,3557,3558,3561,3564,3601],{"v-slot:right":321},[20,3559,3560],{},"Returns every combination of rows from both tables.",[20,3562,3563],{},"Sample result:",[110,3565,3566,3575],{},[113,3567,3568],{},[116,3569,3570,3572],{},[119,3571,2553],{},[119,3573,3574],{},"color",[129,3576,3577,3583,3589,3595],{},[116,3578,3579,3581],{},[134,3580,2263],{},[134,3582,3545],{},[116,3584,3585,3587],{},[134,3586,2263],{},[134,3588,3552],{},[116,3590,3591,3593],{},[134,3592,2273],{},[134,3594,3545],{},[116,3596,3597,3599],{},[134,3598,2273],{},[134,3600,3552],{},[20,3602,3603],{},"Use rarely. It grows quickly because every left row pairs with every right row.",[11,3605,3607,3611],{"id":3606,"level":407},"self-join",[409,3608,3610],{"id":3609},"self-join-pattern","SELF JOIN Pattern",[313,3612,3613,3663],{"gap":315,"left-width":2835,"right-width":2834},[319,3614,3615,3618,3660],{"v-slot:left":321},[20,3616,3617],{},"Source table used twice:",[110,3619,3620,3631],{},[113,3621,3622],{},[116,3623,3624,3626,3628],{},[119,3625,2248],{},[119,3627,2251],{},[119,3629,3630],{},"manager_id",[129,3632,3633,3643,3651],{},[116,3634,3635,3637,3639],{},[134,3636,645],{},[134,3638,2263],{},[134,3640,3641],{},[39,3642,1655],{},[116,3644,3645,3647,3649],{},[134,3646,14],{},[134,3648,2273],{},[134,3650,645],{},[116,3652,3653,3655,3658],{},[134,3654,407],{},[134,3656,3657],{},"Cal",[134,3659,645],{},[323,3661],{"language":325,"src":3662},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql\u002Fself-join-pattern-02.sql",[319,3664,3665,3668,3679,3681],{"v-slot:right":321},[20,3666,3667],{},"A self join compares rows in a table to other rows in the same table.",[24,3669,3670,3673,3676],{},[27,3671,3672],{},"Uses the same table twice",[27,3674,3675],{},"Requires aliases so each copy has a clear name",[27,3677,3678],{},"Common for manager\u002Femployee, category\u002Fsubcategory, or referral relationships",[20,3680,3563],{},[110,3682,3683,3693],{},[113,3684,3685],{},[116,3686,3687,3690],{},[119,3688,3689],{},"employee",[119,3691,3692],{},"manager",[129,3694,3695,3703,3709],{},[116,3696,3697,3699],{},[134,3698,2263],{},[134,3700,3701],{},[39,3702,1655],{},[116,3704,3705,3707],{},[134,3706,2273],{},[134,3708,2263],{},[116,3710,3711,3713],{},[134,3712,3657],{},[134,3714,2263],{},[11,3716,3718,3721,3724,3752],{"id":3717,"level":14},"schema-habit",[16,3719,3720],{"id":3717},"Schema Habit",[20,3722,3723],{},"Project tables should follow a predictable shape:",[24,3725,3726,3731,3736,3741,3744],{},[27,3727,3728,3730],{},[39,3729,2248],{},": primary key that identifies one row",[27,3732,3733,3735],{},[39,3734,660],{},": when the row was first inserted",[27,3737,3738,3740],{},[39,3739,663],{},": when the row was last changed",[27,3742,3743],{},"Entity columns: the facts that belong to this table",[27,3745,3746,3747,54,3749,3751],{},"Constraints: rules such as ",[39,3748,479],{},[39,3750,485],{},", and foreign keys",[20,3753,3754,3755,941],{},"After a structure change, verify the shape with ",[39,3756,3757],{},"DESCRIBE TableName;",[11,3759,3761,3764],{"id":3760,"level":14},"common-mistakes",[16,3762,3763],{"id":3760},"Common Mistakes",[313,3765,3766,3801],{"gap":315,"left-width":1618,"right-width":1618},[319,3767,3768,3772],{"v-slot:left":321},[409,3769,3771],{"id":3770},"query-mistakes","Query Mistakes",[24,3773,3774,3777,3780,3783,3790],{},[27,3775,3776],{},"Missing semicolon after the statement",[27,3778,3779],{},"Table or column casing changes between SQL and PHP",[27,3781,3782],{},"Running a write query before predicting which rows it affects",[27,3784,3785,3786,3789],{},"Changing a table structure without checking ",[39,3787,3788],{},"DESCRIBE"," afterward",[27,3791,3792,3793,441,3795,3797,3798,3800],{},"Forgetting that ",[39,3794,57],{},[39,3796,61],{}," without ",[39,3799,277],{}," can affect every row",[319,3802,3803,3807],{"v-slot:right":321},[409,3804,3806],{"id":3805},"design-and-join-mistakes","Design And Join Mistakes",[24,3808,3809,3812,3815,3821,3824],{},[27,3810,3811],{},"Storing comma-separated lists in one column instead of related rows",[27,3813,3814],{},"Duplicating the same fact in multiple places",[27,3816,3817,3818,3820],{},"Joining tables without the correct ",[39,3819,2702],{}," condition",[27,3822,3823],{},"Selecting ambiguous column names after a join instead of using aliases",[27,3825,3826,3827,3829],{},"Reversing left and right table order and getting unexpected ",[39,3828,1655],{}," values",[11,3831,3833,3836],{"id":3832,"level":14},"knowledge-check",[16,3834,3835],{"id":3832},"Knowledge Check",[24,3837,3838,3841,3847,3851,3854,3857,3862,3873],{},[27,3839,3840],{},"Which column uniquely identifies each row?",[27,3842,3843,3844,3846],{},"What does ",[39,3845,440],{}," prove?",[27,3848,3843,3849,3846],{},[39,3850,3757],{},[27,3852,3853],{},"Which SQL verb retrieves rows?",[27,3855,3856],{},"Which SQL verb adds rows?",[27,3858,3843,3859,3861],{},[39,3860,280],{}," change about the result?",[27,3863,3864,3865,1066,3867,3869,3870,3872],{},"Why should ",[39,3866,57],{},[39,3868,61],{}," usually have a ",[39,3871,277],{}," clause?",[27,3874,3875],{},"Which normal form prevents comma-separated lists inside one column?",[11,3877,3879,3883],{"id":3878,"level":14},"further-learning",[16,3880,3882],{"id":3881},"key-terms-and-further-learning","Key Terms And Further Learning",[313,3884,3885,3955],{"gap":315,"left-width":1618,"right-width":1618},[319,3886,3887,3891,3898,3908,3922,3928,3937,3943],{"v-slot:left":321},[409,3888,3890],{"id":3889},"key-terms","Key Terms",[20,3892,3893,3897],{},[3894,3895,3896],"strong",{},"Entity"," - One kind of thing the app tracks, such as a user, product, note, or order",[20,3899,3900,3903,3904,1066,3906],{},[3894,3901,3902],{},"DDL"," - Data Definition Language; SQL commands that define or change structure, such as ",[39,3905,240],{},[39,3907,243],{},[20,3909,3910,3913,3914,54,3916,54,3918,58,3920],{},[3894,3911,3912],{},"DML"," - Data Manipulation Language; SQL commands that read or change stored rows, such as ",[39,3915,47],{},[39,3917,53],{},[39,3919,57],{},[39,3921,61],{},[20,3923,3924,3927],{},[3894,3925,3926],{},"Normalization"," - Organizing tables so each entity and fact is stored in the right place",[20,3929,3930,3933,3934,3936],{},[3894,3931,3932],{},"Projection"," - The selected columns returned by a ",[39,3935,47],{}," query",[20,3938,3939,3942],{},[3894,3940,3941],{},"Primary key"," - Column used to uniquely identify a row",[20,3944,3945,3947,3948,54,3950,3952,3953],{},[3894,3946,204],{}," - Database rule such as ",[39,3949,479],{},[39,3951,485],{},", or ",[39,3954,399],{},[319,3956,3957,3960],{"v-slot:right":321},[409,3958,3959],{"id":3878},"Further Learning",[24,3961,3962,3971,3978,3985,3992,3999],{},[27,3963,3964],{},[3965,3966,3970],"a",{"href":3967,"rel":3968},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fcreate-table.html",[3969],"nofollow","MySQL CREATE TABLE",[27,3972,3973],{},[3965,3974,3977],{"href":3975,"rel":3976},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fselect.html",[3969],"MySQL SELECT",[27,3979,3980],{},[3965,3981,3984],{"href":3982,"rel":3983},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fjoin.html",[3969],"MySQL JOIN Clause",[27,3986,3987],{},[3965,3988,3991],{"href":3989,"rel":3990},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fcreate-table-foreign-keys.html",[3969],"MySQL Foreign Keys",[27,3993,3994],{},[3965,3995,3998],{"href":3996,"rel":3997},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.4\u002Fen\u002Fdata-types.html",[3969],"MySQL data types",[27,4000,4001],{},[3965,4002,4005],{"href":4003,"rel":4004},"https:\u002F\u002Fmikehillyer.com\u002Farticles\u002Fan-introduction-to-database-normalization\u002F",[3969],"An Introduction to Database Normalization",[11,4007,4009,4013],{"id":4008,"level":14},"finish-lesson-branch",[16,4010,4012],{"id":4011},"finish-the-lesson-branch","Finish The Lesson Branch",[4014,4015,4016,4021,4027,4033,4039,4049,4060],"ol",{},[27,4017,4018,4019],{},"Check the final file list: ",[39,4020,95],{},[27,4022,4023,4024],{},"Stage the lesson work: ",[39,4025,4026],{},"git add public_html\u002Fm04\u002Flessons\u002F",[27,4028,4029,4030],{},"Commit the practice work: ",[39,4031,4032],{},"git commit -m \"Complete lesson practice\"",[27,4034,4035,4036],{},"Push the branch: ",[39,4037,4038],{},"git push origin Module04-SQL-Intro",[27,4040,4041,4042,4044,4045,4048],{},"On GitHub, open a pull request from ",[39,4043,86],{}," into ",[39,4046,4047],{},"qa",", review it, then merge",[27,4050,4051,4052,4054,4055,4044,4057],{},"Briefly test ",[39,4053,4047],{},", then open and merge a pull request from ",[39,4056,4047],{},[39,4058,4059],{},"prod",[27,4061,4062,4063,4066,4067],{},"Prepare for the next lesson: ",[39,4064,4065],{},"git checkout qa"," then ",[39,4068,4069],{},"git pull origin qa",[11,4071,4073,4076],{"id":4072,"level":14},"summary",[16,4074,4075],{"id":4072},"Summary",[24,4077,4078,4081,4084,4098,4103,4112,4115],{},[27,4079,4080],{},"Schema changes should live in versioned SQL files",[27,4082,4083],{},"Tables need clear columns, data types, primary keys, and constraints",[27,4085,4086,4087,4089,4090,4092,4093,4095,4096],{},"CRUD maps to SQL row commands: create with ",[39,4088,53],{},", read with ",[39,4091,47],{},", update with ",[39,4094,57],{},", and delete with ",[39,4097,61],{},[27,4099,4100,4102],{},[39,4101,240],{}," creates structure, not a CRUD row",[27,4104,4105,54,4107,58,4109,4111],{},[39,4106,277],{},[39,4108,280],{},[39,4110,283],{}," shape which rows are read or affected",[27,4113,4114],{},"Normalization keeps each entity type in the right table and prepares tables for relationships",[27,4116,4117],{},"Intro SQL practice should be verified in the query window before the project init workflow is introduced",{"title":321,"searchDepth":4119,"depth":4119,"links":4120},2,[4121,4122,4123,4124,4125,4129,4139,4140,4143,4146,4149,4152,4155,4160,4170,4171,4172,4173,4174,4175],{"id":13,"depth":4119,"text":18},{"id":68,"depth":4119,"text":71},{"id":99,"depth":4119,"text":102},{"id":210,"depth":4119,"text":213},{"id":308,"depth":4119,"text":311,"children":4126},[4127],{"id":406,"depth":4128,"text":411},3,{"id":454,"depth":4119,"text":457,"children":4130},[4131,4132,4133,4134,4135,4136,4137,4138],{"id":501,"depth":4128,"text":504},{"id":673,"depth":4128,"text":674},{"id":802,"depth":4128,"text":803},{"id":947,"depth":4128,"text":948},{"id":1075,"depth":4128,"text":1076},{"id":1207,"depth":4128,"text":1210},{"id":1335,"depth":4128,"text":1338},{"id":1473,"depth":4128,"text":1476},{"id":1614,"depth":4119,"text":1615},{"id":1670,"depth":4119,"text":1673,"children":4141},[4142],{"id":1712,"depth":4128,"text":1715},{"id":1747,"depth":4119,"text":1748,"children":4144},[4145],{"id":1800,"depth":4128,"text":1803},{"id":1936,"depth":4119,"text":1937,"children":4147},[4148],{"id":1978,"depth":4128,"text":1981},{"id":2024,"depth":4119,"text":2025,"children":4150},[4151],{"id":2059,"depth":4128,"text":2062},{"id":2090,"depth":4119,"text":2093,"children":4153},[4154],{"id":2138,"depth":4128,"text":2141},{"id":2176,"depth":4119,"text":2179,"children":4156},[4157,4158,4159],{"id":2228,"depth":4128,"text":2229},{"id":2360,"depth":4128,"text":2361},{"id":2533,"depth":4128,"text":2534},{"id":2668,"depth":4119,"text":2671,"children":4161},[4162,4163,4164,4165,4166,4167,4168,4169],{"id":2715,"depth":4128,"text":2718},{"id":2830,"depth":4128,"text":2831},{"id":2937,"depth":4128,"text":2940},{"id":3088,"depth":4128,"text":3091},{"id":3223,"depth":4128,"text":3226},{"id":3359,"depth":4128,"text":3360},{"id":3504,"depth":4128,"text":3507},{"id":3609,"depth":4128,"text":3610},{"id":3717,"depth":4119,"text":3720},{"id":3760,"depth":4119,"text":3763},{"id":3832,"depth":4119,"text":3835},{"id":3881,"depth":4119,"text":3882},{"id":4011,"depth":4119,"text":4012},{"id":4072,"depth":4119,"text":4075},"presentation","Internet Applications","Introduce SQL tables, schema files, data types, constraints, query shapes, and basic verification habits.","Face-to-face class of about 40 students; includes typing time, troubleshooting, checks, and short questions.","15","60","75","md",{},true,"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Core",false,null,{"title":5,"description":4178},"published","internet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",[4194,4195,4196],"mysql","database","accounts","2026-06-20T12:30:00-04:00","1:05:57","aCtTLHnRI6M","https:\u002F\u002Fyoutu.be\u002FaCtTLHnRI6M","Intro to SQL","-_C72rWWDq-Q0O4AeIoqUdrzkruqJMWAVKtWU8ujMMw",[4204,4207,4212,4215,4218,4221,4224,4227,4230,4233,4236,4240,4244,4247,4251,4254,4257,4260,4263,4266,4269,4271,4273,4275,4277,4279,4281,4283,4286,4289,4292,4295,4298,4300,4303,4306,4309,4312,4316,4319,4322,4325,4328,4332,4335,4338,4341,4344,4347,4351,4354,4357,4359,4362,4365,4368,4371,4374,4377,4380,4383,4387,4391,4395,4399,4402,4405,4408,4411,4414,4416,4419,4422,4425,4428,4431,4434,4437,4440,4443,4446,4450,4453,4456,4459,4462,4465,4468,4471,4474,4477,4480,4484,4487,4490,4493,4496,4499,4502,4505,4508,4511,4514,4517,4520,4523,4526,4529,4532,4535,4538,4541,4544,4547,4550,4553,4556,4559,4562,4565,4568,4571,4574,4577,4580,4583,4586,4589,4592,4595,4598,4601,4604,4607,4610,4613,4616,4619,4622,4625,4628,4631,4634,4637,4640,4643,4646,4649,4652,4655,4658,4661,4664,4667,4670,4673,4676,4679,4682,4685,4688,4691,4694,4697,4700,4703,4706,4709,4712,4715,4718,4721,4724,4727,4730,4733,4736,4739,4742,4745,4748,4751,4754,4757,4760,4763,4766,4769,4772,4775,4778,4781,4784,4787,4790,4793,4796,4799,4802,4805,4808,4811,4814,4817,4820,4823,4826,4829,4832,4835,4838,4842,4845,4848,4851,4854,4857,4860,4863,4866,4869,4872,4875,4878,4881,4884,4887,4890,4893,4896,4899,4902,4905,4908,4911,4914,4917,4920,4923,4926,4929,4932,4935,4938,4941,4944,4947,4950,4953,4956,4959,4962,4965,4968,4971,4974,4977,4980,4983,4986,4989,4992,4995,4998,5001,5004,5007,5010,5013,5016,5019,5022,5025,5028,5031,5034,5037,5040,5043,5046,5049,5052,5055,5058,5061,5064,5067,5070,5073,5076,5079,5082,5085,5088,5091,5094,5097,5100,5103,5106,5109,5112,5115,5118,5121,5124,5127,5130,5133,5136,5139,5142,5145,5148,5151,5154,5157,5160,5163,5166,5169,5172,5175,5178,5181,5184,5187,5190,5193,5196,5199,5202,5205,5208,5211,5214,5217,5220,5223,5227,5230,5233,5236,5239,5242,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275,5277,5278,5280,5282,5284,5286,5288,5291,5293,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5325,5329,5333,5336,5340,5344,5347,5350,5353,5356,5359,5362,5365,5368,5371,5374,5377,5379,5381,5383,5385,5388,5391,5394,5397,5400,5403,5406,5409,5412,5415,5418,5421,5424,5427,5430,5433,5436,5439,5442,5445,5448,5451,5454,5457,5460,5463,5466,5469,5472,5475,5478,5481,5484,5487,5490,5493,5496,5499,5502,5505,5508,5511,5514,5517,5520,5523,5526,5529,5532,5535,5538,5541,5544,5547,5550,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580,5582,5584,5586,5589,5591,5593,5595,5597,5599,5601,5603,5605,5607,5609,5611,5613,5615,5617,5619,5621,5623,5625,5627,5629,5631,5634,5637,5640,5643,5646,5648,5650,5653,5656,5659,5662,5665,5668],{"path":4205,"title":4206,"order":4189,"module":4189,"status":4189},"\u002Fabout","About Content Version 3",{"path":4208,"title":4209,"order":4210,"module":645,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","5","draft",{"path":4213,"title":4214,"order":2394,"module":645,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":4216,"title":4217,"order":2405,"module":645,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?",{"path":4219,"title":4220,"order":2394,"module":14,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":4222,"title":4223,"order":2394,"module":407,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory",{"path":4225,"title":4226,"order":2405,"module":407,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":4228,"title":4229,"order":2394,"module":2812,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics",{"path":4231,"title":4232,"order":2405,"module":2812,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":4234,"title":4235,"order":2394,"module":4210,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":4237,"title":4238,"order":2405,"module":4239,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype","6",{"path":4241,"title":4242,"order":2394,"module":4243,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design","8",{"path":4245,"title":4246,"order":2405,"module":4243,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":4248,"title":4249,"order":2394,"module":4250,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems","9",{"path":4252,"title":4253,"order":2394,"module":2394,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":4255,"title":4256,"order":2405,"module":2394,"status":4211},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":4258,"title":4259,"order":645,"module":648,"status":4191},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design",{"path":4261,"title":4262,"order":645,"module":648,"status":4211},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":4264,"title":4265,"order":4189,"module":4189,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":4267,"title":4268,"order":4189,"module":4189,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":4270,"title":4214,"order":2394,"module":645,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":4272,"title":4217,"order":2405,"module":645,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":4274,"title":4220,"order":2394,"module":14,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":4276,"title":4223,"order":2394,"module":407,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":4278,"title":4226,"order":2405,"module":407,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":4280,"title":4229,"order":2394,"module":2812,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":4282,"title":4232,"order":2405,"module":2812,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":4284,"title":4285,"order":2394,"module":4210,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":4287,"title":4288,"order":2394,"module":4239,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":4290,"title":4291,"order":2405,"module":4239,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":4293,"title":4294,"order":2394,"module":4243,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":4296,"title":4297,"order":2405,"module":4243,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":4299,"title":4249,"order":2394,"module":4250,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":4301,"title":4302,"order":2394,"module":2394,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":4304,"title":4305,"order":2405,"module":2394,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":4307,"title":4308,"order":2394,"module":2799,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces",{"path":4310,"title":4311,"order":2394,"module":2809,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations",{"path":4313,"title":4314,"order":2394,"module":4315,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":4317,"title":4318,"order":2394,"module":2974,"status":4211},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine",{"path":4320,"title":4321,"order":645,"module":648,"status":4211},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":4323,"title":4324,"order":2394,"module":648,"status":4211},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":4326,"title":4327,"order":2405,"module":648,"status":4211},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":4329,"title":4330,"order":4331,"module":648,"status":4211},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice","40",{"path":4333,"title":4334,"order":985,"module":648,"status":4211},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint",{"path":4336,"title":4337,"order":2394,"module":645,"status":4211},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":4339,"title":4340,"order":2405,"module":645,"status":4211},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":4342,"title":4343,"order":985,"module":645,"status":4211},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":4345,"title":4346,"order":4331,"module":645,"status":4211},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":4348,"title":4349,"order":4350,"module":645,"status":4211},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions","50",{"path":4352,"title":4353,"order":4181,"module":645,"status":4211},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations",{"path":4355,"title":4356,"order":4189,"module":4189,"status":4189},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":4358,"title":4356,"order":2394,"module":645,"status":4189},"\u002Fgeneral\u002Fbasic-command-line",{"path":4360,"title":4361,"order":4189,"module":4189,"status":4191},"\u002F","Ethereal Lab Course Materials",{"path":4363,"title":4364,"order":648,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":4366,"title":4367,"order":2394,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":4369,"title":4370,"order":2405,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":4372,"title":4373,"order":985,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":4375,"title":4376,"order":4331,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":4378,"title":4379,"order":4350,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":4381,"title":4382,"order":4181,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":4384,"title":4385,"order":4386,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":4388,"title":4389,"order":4390,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":4392,"title":4393,"order":4394,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox","90",{"path":4396,"title":4397,"order":4398,"module":645,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware","100",{"path":4400,"title":4401,"order":2394,"module":14,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":4403,"title":4404,"order":2405,"module":14,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":4406,"title":4407,"order":2394,"module":407,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":4409,"title":4410,"order":2405,"module":407,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":4412,"title":4413,"order":985,"module":407,"status":4211},"\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":4415,"title":5,"order":2394,"module":2812,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":4417,"title":4418,"order":2405,"module":2812,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":4420,"title":4421,"order":985,"module":2812,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":4423,"title":4424,"order":4331,"module":2812,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","User Login",{"path":4426,"title":4427,"order":2394,"module":4210,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Intro To Regex",{"path":4429,"title":4430,"order":2405,"module":4210,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":4432,"title":4433,"order":985,"module":4210,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":4435,"title":4436,"order":4331,"module":4210,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":4438,"title":4439,"order":2394,"module":4239,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":4441,"title":4442,"order":2405,"module":4239,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","User Login Enhancement",{"path":4444,"title":4445,"order":985,"module":4239,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":4447,"title":4448,"order":2394,"module":4449,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Working With API Data","7",{"path":4451,"title":4452,"order":2405,"module":4449,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":4454,"title":4455,"order":985,"module":4449,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":4457,"title":4458,"order":2394,"module":4243,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Milestone 2 Bootstrap And Reusability",{"path":4460,"title":4461,"order":2405,"module":4243,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":4463,"title":4464,"order":985,"module":4243,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":4466,"title":4467,"order":2394,"module":4250,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Add User Associations",{"path":4469,"title":4470,"order":2405,"module":4250,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":4472,"title":4473,"order":2394,"module":2394,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":4475,"title":4476,"order":2405,"module":2394,"status":4211},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":4478,"title":4479,"order":645,"module":648,"status":4191},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":4481,"title":4482,"order":4331,"module":2394,"status":4483},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":4485,"title":4486,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":4488,"title":4489,"order":2405,"module":4243,"status":4483},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":4491,"title":4492,"order":985,"module":4250,"status":4483},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":4494,"title":4495,"order":4210,"module":2812,"status":4191},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":4497,"title":4498,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":4500,"title":4501,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":4503,"title":4504,"order":4189,"module":4189,"status":4189},"\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":4506,"title":4507,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":4509,"title":4510,"order":4189,"module":4189,"status":4189},"\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":4512,"title":4513,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":4515,"title":4516,"order":4189,"module":4189,"status":4189},"\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":4518,"title":4519,"order":4189,"module":4189,"status":4189},"\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":4521,"title":4522,"order":4189,"module":4189,"status":4189},"\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":4524,"title":4525,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":4527,"title":4528,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":4530,"title":4531,"order":4189,"module":4189,"status":4189},"\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":4533,"title":4534,"order":4189,"module":4189,"status":4189},"\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":4536,"title":4537,"order":4189,"module":4189,"status":4189},"\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":4539,"title":4540,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":4542,"title":4543,"order":4189,"module":4189,"status":4189},"\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":4545,"title":4546,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":4548,"title":4549,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":4551,"title":4552,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":4554,"title":4555,"order":4189,"module":4189,"status":4189},"\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":4557,"title":4558,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":4560,"title":4561,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":4563,"title":4564,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":4566,"title":4567,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":4569,"title":4570,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":4572,"title":4573,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":4575,"title":4576,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":4578,"title":4579,"order":4189,"module":4189,"status":4189},"\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":4581,"title":4582,"order":4189,"module":4189,"status":4189},"\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":4584,"title":4585,"order":4189,"module":4189,"status":4189},"\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":4587,"title":4588,"order":4189,"module":4189,"status":4189},"\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":4590,"title":4591,"order":4189,"module":4189,"status":4189},"\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":4593,"title":4594,"order":4189,"module":4189,"status":4189},"\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":4596,"title":4597,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":4599,"title":4600,"order":4189,"module":4189,"status":4189},"\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":4602,"title":4603,"order":4189,"module":4189,"status":4189},"\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":4605,"title":4606,"order":4189,"module":4189,"status":4189},"\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":4608,"title":4609,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":4611,"title":4612,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":4614,"title":4615,"order":4189,"module":4189,"status":4189},"\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":4617,"title":4618,"order":4189,"module":4189,"status":4189},"\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":4620,"title":4621,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":4623,"title":4624,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":4626,"title":4627,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":4629,"title":4630,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":4632,"title":4633,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":4635,"title":4636,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":4638,"title":4639,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":4641,"title":4642,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":4644,"title":4645,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":4647,"title":4648,"order":4189,"module":4189,"status":4189},"\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":4650,"title":4651,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":4653,"title":4654,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":4656,"title":4657,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":4659,"title":4660,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":4662,"title":4663,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":4665,"title":4666,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":4668,"title":4669,"order":4189,"module":4189,"status":4189},"\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":4671,"title":4672,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":4674,"title":4675,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":4677,"title":4678,"order":4189,"module":4189,"status":4189},"\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":4680,"title":4681,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":4683,"title":4684,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":4686,"title":4687,"order":4189,"module":4189,"status":4189},"\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":4689,"title":4690,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":4692,"title":4693,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":4695,"title":4696,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":4698,"title":4699,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":4701,"title":4702,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":4704,"title":4705,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":4707,"title":4708,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":4710,"title":4711,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":4713,"title":4714,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":4716,"title":4717,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":4719,"title":4720,"order":4189,"module":4189,"status":4189},"\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":4722,"title":4723,"order":4189,"module":4189,"status":4189},"\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":4725,"title":4726,"order":4189,"module":4189,"status":4189},"\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":4728,"title":4729,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":4731,"title":4732,"order":4189,"module":4189,"status":4189},"\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":4734,"title":4735,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":4737,"title":4738,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":4740,"title":4741,"order":4189,"module":4189,"status":4189},"\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":4743,"title":4744,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":4746,"title":4747,"order":4189,"module":4189,"status":4189},"\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":4749,"title":4750,"order":4189,"module":4189,"status":4189},"\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":4752,"title":4753,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":4755,"title":4756,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":4758,"title":4759,"order":4189,"module":4189,"status":4189},"\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":4761,"title":4762,"order":4189,"module":4189,"status":4189},"\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":4764,"title":4765,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":4767,"title":4768,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":4770,"title":4771,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":4773,"title":4774,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":4776,"title":4777,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":4779,"title":4780,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":4782,"title":4783,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":4785,"title":4786,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":4788,"title":4789,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":4791,"title":4792,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":4794,"title":4795,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":4797,"title":4798,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":4800,"title":4801,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":4803,"title":4804,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":4806,"title":4807,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":4809,"title":4810,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":4812,"title":4813,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":4815,"title":4816,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":4818,"title":4819,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":4821,"title":4822,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":4824,"title":4825,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":4827,"title":4828,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":4830,"title":4831,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":4833,"title":4834,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":4836,"title":4837,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":4839,"title":4840,"order":4189,"module":4189,"status":4841},"\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":4843,"title":4844,"order":4189,"module":4189,"status":4841},"\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":4846,"title":4847,"order":4189,"module":4189,"status":4841},"\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":4849,"title":4850,"order":4189,"module":4189,"status":4841},"\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":4852,"title":4853,"order":4189,"module":4189,"status":4841},"\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":4855,"title":4856,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":4858,"title":4859,"order":4189,"module":4189,"status":4841},"\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":4861,"title":4862,"order":4189,"module":4189,"status":4841},"\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":4864,"title":4865,"order":4189,"module":4189,"status":4841},"\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":4867,"title":4868,"order":4189,"module":4189,"status":4841},"\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":4870,"title":4871,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":4873,"title":4874,"order":4189,"module":4189,"status":4841},"\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":4876,"title":4877,"order":4189,"module":4189,"status":4841},"\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":4879,"title":4880,"order":4189,"module":4189,"status":4189},"\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":4882,"title":4883,"order":4189,"module":4189,"status":4841},"\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":4885,"title":4886,"order":4189,"module":4189,"status":4841},"\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":4888,"title":4889,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":4891,"title":4892,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":4894,"title":4895,"order":4189,"module":4189,"status":4189},"\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":4897,"title":4898,"order":4189,"module":4189,"status":4189},"\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":4900,"title":4901,"order":4189,"module":4189,"status":4841},"\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":4903,"title":4904,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":4906,"title":4907,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":4909,"title":4910,"order":4189,"module":4189,"status":4189},"\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":4912,"title":4913,"order":4189,"module":4189,"status":4841},"\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":4915,"title":4916,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":4918,"title":4919,"order":4189,"module":4189,"status":4841},"\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":4921,"title":4922,"order":4189,"module":4189,"status":4841},"\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":4924,"title":4925,"order":4189,"module":4189,"status":4189},"\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":4927,"title":4928,"order":4189,"module":4189,"status":4841},"\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":4930,"title":4931,"order":4189,"module":4189,"status":4841},"\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":4933,"title":4934,"order":4189,"module":4189,"status":4189},"\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":4936,"title":4937,"order":4189,"module":4189,"status":4189},"\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":4939,"title":4940,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":4942,"title":4943,"order":4189,"module":4189,"status":4841},"\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":4945,"title":4946,"order":4189,"module":4189,"status":4841},"\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":4948,"title":4949,"order":4189,"module":4189,"status":4841},"\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":4951,"title":4952,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":4954,"title":4955,"order":4189,"module":4189,"status":4841},"\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":4957,"title":4958,"order":4189,"module":4189,"status":4189},"\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":4960,"title":4961,"order":4189,"module":4189,"status":4189},"\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":4963,"title":4964,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":4966,"title":4967,"order":4189,"module":4189,"status":4841},"\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":4969,"title":4970,"order":4189,"module":4189,"status":4841},"\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":4972,"title":4973,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":4975,"title":4976,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":4978,"title":4979,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":4981,"title":4982,"order":4189,"module":4189,"status":4189},"\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":4984,"title":4985,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":4987,"title":4988,"order":4189,"module":4189,"status":4841},"\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":4990,"title":4991,"order":4189,"module":4189,"status":4841},"\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":4993,"title":4994,"order":4189,"module":4189,"status":4841},"\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":4996,"title":4997,"order":4189,"module":4189,"status":4841},"\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":4999,"title":5000,"order":4189,"module":4189,"status":4841},"\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":5002,"title":5003,"order":4189,"module":4189,"status":4841},"\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":5005,"title":5006,"order":4189,"module":4189,"status":4841},"\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":5008,"title":5009,"order":4189,"module":4189,"status":4841},"\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":5011,"title":5012,"order":4189,"module":4189,"status":4841},"\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":5014,"title":5015,"order":4189,"module":4189,"status":4841},"\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":5017,"title":5018,"order":4189,"module":4189,"status":4841},"\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":5020,"title":5021,"order":4189,"module":4189,"status":4189},"\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":5023,"title":5024,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":5026,"title":5027,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":5029,"title":5030,"order":4189,"module":4189,"status":4841},"\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":5032,"title":5033,"order":4189,"module":4189,"status":4841},"\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":5035,"title":5036,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":5038,"title":5039,"order":4189,"module":4189,"status":4841},"\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":5041,"title":5042,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":5044,"title":5045,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":5047,"title":5048,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":5050,"title":5051,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":5053,"title":5054,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":5056,"title":5057,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":5059,"title":5060,"order":4189,"module":4189,"status":4841},"\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":5062,"title":5063,"order":4189,"module":4189,"status":4841},"\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":5065,"title":5066,"order":4189,"module":4189,"status":4841},"\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":5068,"title":5069,"order":4189,"module":4189,"status":4841},"\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":5071,"title":5072,"order":4189,"module":4189,"status":4841},"\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":5074,"title":5075,"order":4189,"module":4189,"status":4841},"\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":5077,"title":5078,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":5080,"title":5081,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":5083,"title":5084,"order":4189,"module":4189,"status":4841},"\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":5086,"title":5087,"order":4189,"module":4189,"status":4841},"\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":5089,"title":5090,"order":4189,"module":4189,"status":4841},"\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":5092,"title":5093,"order":4189,"module":4189,"status":4841},"\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":5095,"title":5096,"order":4189,"module":4189,"status":4189},"\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":5098,"title":5099,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":5101,"title":5102,"order":4189,"module":4189,"status":4189},"\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":5104,"title":5105,"order":4189,"module":4189,"status":4841},"\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":5107,"title":5108,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":5110,"title":5111,"order":4189,"module":4189,"status":4841},"\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":5113,"title":5114,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":5116,"title":5117,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":5119,"title":5120,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":5122,"title":5123,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":5125,"title":5126,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":5128,"title":5129,"order":4189,"module":4189,"status":4841},"\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":5131,"title":5132,"order":4189,"module":4189,"status":4841},"\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":5134,"title":5135,"order":4189,"module":4189,"status":4841},"\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":5137,"title":5138,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":5140,"title":5141,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":5143,"title":5144,"order":4189,"module":4189,"status":4189},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":5146,"title":5147,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":5149,"title":5150,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":5152,"title":5153,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":5155,"title":5156,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":5158,"title":5159,"order":4189,"module":4189,"status":4841},"\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":5161,"title":5162,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":5164,"title":5165,"order":4189,"module":4189,"status":4841},"\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":5167,"title":5168,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":5170,"title":5171,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":5173,"title":5174,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":5176,"title":5177,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":5179,"title":5180,"order":4189,"module":4189,"status":4841},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":5182,"title":5183,"order":645,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":5185,"title":5186,"order":14,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":5188,"title":5189,"order":407,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":5191,"title":5192,"order":2812,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":5194,"title":5195,"order":4210,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":5197,"title":5198,"order":4239,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":5200,"title":5201,"order":4449,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":5203,"title":5204,"order":648,"module":648,"status":4211},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":5206,"title":5207,"order":2394,"module":645,"status":4211},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":5209,"title":5210,"order":2405,"module":14,"status":4211},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":5212,"title":5213,"order":985,"module":407,"status":4211},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":5215,"title":5216,"order":4331,"module":2812,"status":4211},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":5218,"title":5219,"order":4350,"module":4210,"status":4211},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":5221,"title":5222,"order":4181,"module":4239,"status":4211},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":5224,"title":5225,"order":5226,"module":4239,"status":4211},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":5228,"title":5229,"order":4386,"module":4449,"status":4211},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":5231,"title":5232,"order":4390,"module":4243,"status":4211},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":5234,"title":5235,"order":4394,"module":4250,"status":4211},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":5237,"title":5238,"order":4398,"module":2394,"status":4211},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":5240,"title":5241,"order":4189,"module":4189,"status":4211},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":5243,"title":5244,"order":4189,"module":4189,"status":4211},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":5246,"title":4364,"order":648,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":5248,"title":4367,"order":2394,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":5250,"title":4370,"order":2405,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":5252,"title":4373,"order":985,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":5254,"title":4376,"order":4331,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":5256,"title":4379,"order":4350,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":5258,"title":4382,"order":4181,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":5260,"title":4385,"order":4386,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":5262,"title":4389,"order":4390,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":5264,"title":4393,"order":4394,"module":645,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":5266,"title":4397,"order":4398,"module":645,"status":4211},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":5268,"title":4401,"order":2394,"module":14,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":5270,"title":4404,"order":2405,"module":14,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":5272,"title":4407,"order":2394,"module":407,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":5274,"title":4410,"order":2405,"module":407,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":5276,"title":4413,"order":985,"module":407,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":4186,"title":5,"order":2394,"module":2812,"status":4191},{"path":5279,"title":4418,"order":2405,"module":2812,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":5281,"title":4421,"order":985,"module":2812,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":5283,"title":4424,"order":4331,"module":2812,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":5285,"title":4427,"order":2394,"module":4210,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":5287,"title":4430,"order":2405,"module":4210,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":5289,"title":5290,"order":985,"module":4210,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":5292,"title":4436,"order":4331,"module":4210,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":5294,"title":4439,"order":2394,"module":4239,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":5296,"title":4442,"order":2405,"module":4239,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":5298,"title":4445,"order":985,"module":4239,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":5300,"title":4448,"order":2394,"module":4449,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":5302,"title":4452,"order":2405,"module":4449,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":5304,"title":4455,"order":985,"module":4449,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":5306,"title":4458,"order":2394,"module":4243,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":5308,"title":4461,"order":2405,"module":4243,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":5310,"title":4464,"order":985,"module":4243,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":5312,"title":4467,"order":2394,"module":4250,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":5314,"title":4470,"order":2405,"module":4250,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":5316,"title":4473,"order":2394,"module":2394,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":5318,"title":4476,"order":2405,"module":2394,"status":4191},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":5320,"title":4479,"order":645,"module":648,"status":4191},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":5322,"title":5323,"order":5324,"module":2394,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":5326,"title":5327,"order":5328,"module":4239,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":5330,"title":5331,"order":5332,"module":4239,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":5334,"title":5335,"order":5324,"module":4239,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":5337,"title":5338,"order":5339,"module":4243,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":5341,"title":5342,"order":5343,"module":4250,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":5345,"title":5346,"order":2394,"module":645,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":5348,"title":5349,"order":2405,"module":14,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":5351,"title":5352,"order":985,"module":407,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":5354,"title":5355,"order":4331,"module":2812,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":5357,"title":5358,"order":4350,"module":4210,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":5360,"title":5361,"order":4181,"module":4239,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":5363,"title":5364,"order":2962,"module":4239,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays",{"path":5366,"title":5367,"order":4386,"module":4449,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":5369,"title":5370,"order":4390,"module":4243,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":5372,"title":5373,"order":4394,"module":4250,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":5375,"title":5376,"order":4398,"module":2394,"status":4211},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":5378,"title":4367,"order":2394,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":5380,"title":4370,"order":2405,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":5382,"title":4373,"order":985,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":5384,"title":4376,"order":4331,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":5386,"title":5387,"order":4350,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":5389,"title":5390,"order":4181,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":5392,"title":5393,"order":2394,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":5395,"title":5396,"order":2405,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":5398,"title":5399,"order":985,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":5401,"title":5402,"order":4331,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":5404,"title":5405,"order":2394,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":5407,"title":5408,"order":2405,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":5410,"title":5411,"order":985,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":5413,"title":5414,"order":4331,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":5416,"title":5417,"order":2394,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":5419,"title":5420,"order":2405,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":5422,"title":5423,"order":985,"module":2812,"status":4211},"\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":5425,"title":5426,"order":2394,"module":4210,"status":4211},"\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":5428,"title":5429,"order":2405,"module":4239,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":5431,"title":5432,"order":985,"module":4239,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":5434,"title":5435,"order":2394,"module":4449,"status":4211},"\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":5437,"title":5438,"order":2405,"module":4449,"status":4211},"\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":5440,"title":5441,"order":985,"module":4449,"status":4211},"\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":5443,"title":5444,"order":4331,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":5446,"title":5447,"order":4350,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":5449,"title":5450,"order":2394,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":5452,"title":5453,"order":2405,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":5455,"title":5456,"order":985,"module":4243,"status":4211},"\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":5458,"title":5459,"order":4331,"module":4243,"status":4211},"\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":5461,"title":5462,"order":4350,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":5464,"title":5465,"order":2394,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":5467,"title":5468,"order":2405,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":5470,"title":5471,"order":985,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":5473,"title":5474,"order":4331,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":5476,"title":5477,"order":4350,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":5479,"title":5480,"order":4181,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":5482,"title":5483,"order":2394,"module":2394,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":5485,"title":5486,"order":2405,"module":2394,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":5488,"title":5489,"order":985,"module":2394,"status":4211},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":5491,"title":5492,"order":645,"module":648,"status":4191},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":5494,"title":5495,"order":2394,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":5497,"title":5498,"order":2405,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":5500,"title":5501,"order":985,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":5503,"title":5504,"order":2394,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":5506,"title":5507,"order":2405,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":5509,"title":5510,"order":985,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":5512,"title":5513,"order":2394,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":5515,"title":5516,"order":2405,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":5518,"title":5519,"order":985,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":5521,"title":5522,"order":4331,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":5524,"title":5525,"order":2394,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":5527,"title":5528,"order":2405,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":5530,"title":5531,"order":985,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":5533,"title":5534,"order":2394,"module":4210,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":5536,"title":5537,"order":2405,"module":4210,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":5539,"title":5540,"order":985,"module":4210,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":5542,"title":5543,"order":648,"module":648,"status":4211},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":5545,"title":5546,"order":4189,"module":4189,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":5548,"title":5549,"order":4189,"module":4189,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":5551,"title":4367,"order":2394,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":5553,"title":4370,"order":2405,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":5555,"title":4373,"order":985,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":5557,"title":4376,"order":4331,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":5559,"title":5387,"order":4350,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":5561,"title":5390,"order":4181,"module":645,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":5563,"title":5393,"order":2394,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":5565,"title":5396,"order":2405,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":5567,"title":5399,"order":985,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":5569,"title":5402,"order":4331,"module":14,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":5571,"title":5405,"order":2394,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":5573,"title":5408,"order":2405,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":5575,"title":5411,"order":985,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":5577,"title":5414,"order":4331,"module":407,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":5579,"title":5417,"order":2394,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":5581,"title":5420,"order":2405,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":5583,"title":5423,"order":985,"module":2812,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":5585,"title":5426,"order":2394,"module":4210,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":5587,"title":5588,"order":2394,"module":4239,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":5590,"title":5429,"order":2405,"module":4239,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":5592,"title":5432,"order":985,"module":4239,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":5594,"title":5435,"order":2394,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":5596,"title":5438,"order":2405,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":5598,"title":5441,"order":985,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":5600,"title":5444,"order":4331,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":5602,"title":5447,"order":4350,"module":4449,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":5604,"title":5450,"order":2394,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":5606,"title":5453,"order":2405,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":5608,"title":5456,"order":985,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":5610,"title":5459,"order":4331,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":5612,"title":5462,"order":4350,"module":4243,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":5614,"title":5465,"order":2394,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":5616,"title":5468,"order":2405,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":5618,"title":5471,"order":985,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":5620,"title":5474,"order":4331,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":5622,"title":5477,"order":4350,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":5624,"title":5480,"order":4181,"module":4250,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":5626,"title":5483,"order":2394,"module":2394,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":5628,"title":5486,"order":2405,"module":2394,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":5630,"title":5489,"order":985,"module":2394,"status":4211},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":5632,"title":5633,"order":2394,"module":645,"status":4211},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":5635,"title":5636,"order":645,"module":648,"status":4191},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":5638,"title":5639,"order":645,"module":648,"status":4191},"\u002Fsystems-integration","Systems Integration",{"path":5641,"title":5642,"order":4189,"module":4189,"status":4211},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":5644,"title":5645,"order":4189,"module":4189,"status":4211},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":5647,"title":5633,"order":2394,"module":645,"status":4191},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":5649,"title":5636,"order":645,"module":648,"status":4191},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":5651,"title":5652,"order":4189,"module":4189,"status":4189},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":5654,"title":5655,"order":4189,"module":4189,"status":4189},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":5657,"title":5658,"order":4189,"module":4189,"status":4189},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":5660,"title":5661,"order":4189,"module":4189,"status":4189},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":5663,"title":5664,"order":2405,"module":648,"status":4211},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":5666,"title":5667,"order":985,"module":648,"status":4211},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":5669,"title":5670,"order":2394,"module":648,"status":4211},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086107]