1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Woche 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard University] 3 00:00:04,740 --> 00:00:07,170 [Dies ist CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Gut. Willkommen zurück. Dies ist CS50, und dies ist der Beginn der Woche 9. 5 00:00:12,350 --> 00:00:16,600 Heute sind wir in besonderem Schwerpunkt auf Design, nicht mehr im Rahmen der C 6 00:00:16,600 --> 00:00:20,010 aber im Kontext von PHP und ein wenig SQL und ein wenig JavaScript, 7 00:00:20,010 --> 00:00:23,730 besonders in Richtung eines Endes der beiden pset 7 und auch das endgültige Projekt. 8 00:00:23,730 --> 00:00:26,310 In der Tat, wenn Sie an dieser Stelle in das endgültige Projekt 9 00:00:26,310 --> 00:00:30,100 wo vermutlich als einer Stunde oder so vor Ihnen zumindest begonnen, sich Gedanken zu geben 10 00:00:30,100 --> 00:00:33,730 Ihre endgültige Projekt und du denkst, du würdest gerne mit 1 oder 2 Klassenkameraden zusammenarbeiten, 11 00:00:33,730 --> 00:00:36,150 wenn Sie Probleme mit der Verbindung mit dem Klassenkameraden, 12 00:00:36,150 --> 00:00:40,570 fühlen Sie sich frei, füllen Sie das Formular auf cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Es fragt nur, wer du bist, welche Art von Projekt Sie über das Denken, 14 00:00:42,880 --> 00:00:44,870 wo Sie leben nur aus logistischen Gründen. 15 00:00:44,870 --> 00:00:49,510 Und dann, wenn Sie im Auge behalten in der nächsten Woche oder so der Tabellenkalkulation URL gibt, 16 00:00:49,510 --> 00:00:53,520 Sie können dann eine Nur-Lese-Version des Google doc 17 00:00:53,520 --> 00:00:56,010 in denen wir sammeln diese Informationen. 18 00:00:56,010 --> 00:00:58,930 Also, wenn Sie mit jemandem arbeiten wollen, mit allen Mitteln zögern Sie nicht auf die Menschen zugehen 19 00:00:58,930 --> 00:01:00,480 über diesen Mechanismus. 20 00:01:00,480 --> 00:01:02,690 Aber die Mehrheit der Leute tun Arbeit solo. Das ist völlig in Ordnung. 21 00:01:02,690 --> 00:01:06,120 Also nicht das Gefühl, dass dies in keiner Weise verpflichtend ist. 22 00:01:06,120 --> 00:01:09,680 Am Freitag war es nur mich und ein paar der Team hier 23 00:01:09,680 --> 00:01:11,100 leeren Theater zum größten Teil. 24 00:01:11,100 --> 00:01:14,600 Es wurden 3 Touristen up sitzen, das war also ein wenig umständlich. 25 00:01:14,600 --> 00:01:18,970 Was wir darüber gesprochen war Datenbanken und wir sprachen über pset 7 ein wenig. 26 00:01:18,970 --> 00:01:22,200 Und wenn Sie nicht zufällig, dass auf Video nur noch zu fangen, ist das in Ordnung. 27 00:01:22,200 --> 00:01:26,770 Ich werde versuchen, alle Begriffe zu definieren, dass wir sonst für selbstverständlich 28 00:01:26,770 --> 00:01:28,840 basierend auf Freitag Vortrag. 29 00:01:28,840 --> 00:01:32,550 >> Aber heute werden wir versuchen, Sie auf den Punkt kommen 30 00:01:32,550 --> 00:01:34,990 der nicht nur in der Lage, so etwas wie pset 7 do 31 00:01:34,990 --> 00:01:37,360 aber wirklich zu verstehen, was los ist unter der Haube, 32 00:01:37,360 --> 00:01:41,910 Besonders einige der Abstraktionen, dass wir in Kraft gesetzt in der functions.php-Datei 33 00:01:41,910 --> 00:01:45,780 um euer Leben ein bisschen einfacher, aber so, dass Sie letztlich zu verstehen 34 00:01:45,780 --> 00:01:48,760 so dass, wenn die Stützräder off kommen in ein paar Wochen kann man noch überleben 35 00:01:48,760 --> 00:01:53,750 in der realen Welt und machen dieses Zeug ohne CS50 Rahmen unter Ihnen. 36 00:01:53,750 --> 00:01:57,500 Diese $ _SESSION, für diejenigen von euch, die vertraut sind 37 00:01:57,500 --> 00:02:01,960 oder wer bereits gefangen das Video am Freitag, was bedeutet SESSION lassen Sie uns 38 00:02:01,960 --> 00:02:04,330 in einer PHP-basierte Web-Anwendung? 39 00:02:04,330 --> 00:02:09,650 Dies ist eine superglobal Variable, die es im Geiste gleich GET und POST bedeutet, 40 00:02:09,650 --> 00:02:13,970 und ein paar andere, aber was ist dieses Ding geeignet? 41 00:02:13,970 --> 00:02:18,320 >> Was ist SESSION verwendet? Yeah. [Schüler] Logging in. 42 00:02:18,320 --> 00:02:21,040 Sorry? [Schüler] Logging in. Logging in. In der Tat. 43 00:02:21,040 --> 00:02:25,100 In pset 7 verwenden wir diese SESSION superglobal zu erleichtern Logging in. 44 00:02:25,100 --> 00:02:28,600 Und was ist schön zu dieser superglobal ist, dass es ein assoziatives Array ist. 45 00:02:28,600 --> 00:02:33,190 Ein assoziatives Array, Rückruf, ist nur ein Array, aber deren Indizes nicht mehr Zahlen 46 00:02:33,190 --> 00:02:37,670 wie 012. Sie können Zahlen sein, oder sie können sogar Strings sein. 47 00:02:37,670 --> 00:02:44,890 Und so, wenn Sie in pset 7 tauchten schon besitzen, können Sie sich erinnern, dass wir speichern einen Schlüssel namens ID 48 00:02:44,890 --> 00:02:50,330 Innere dieses assoziatives Array, dessen Wert ist so etwas wie 123 - 49 00:02:50,330 --> 00:02:53,780 was die derzeit in Benutzer-ID angemeldet ist. 50 00:02:53,780 --> 00:02:59,470 Die Motivation dafür besteht darin, dass auch nach der Benutzer besucht localhost 51 00:02:59,470 --> 00:03:02,720 oder meine Website mehr allgemein und dann haben sie angemeldet 52 00:03:02,720 --> 00:03:07,320 auch wenn sie nicht auf einen Link klicken oder zurück zu meiner Website für 5 Minuten 53 00:03:07,320 --> 00:03:10,730 oder sogar eine Stunde oder sogar einen Tag, aber sie lassen ihre Browser-Fenster geöffnet, 54 00:03:10,730 --> 00:03:14,370 über diese superglobal kann ich mich erinnern, dass sie angemeldet sind in. 55 00:03:14,370 --> 00:03:21,140 >> In anderen Worten, erlaubt es mir leicht langfristige was ich will über einen Benutzer zu speichern. 56 00:03:21,140 --> 00:03:24,390 Und Sie können es wirklich als Inkarnation eines Einkaufswagens. 57 00:03:24,390 --> 00:03:27,740 Orte wie Amazon natürlich können Sie die Dinge in einem Einkaufswagen, 58 00:03:27,740 --> 00:03:32,230 aber HTTP, das Protokoll, die Befugnisse der Web, ist staatenlos 59 00:03:32,230 --> 00:03:34,230 in dem Sinne, dass, wenn Sie eine Website besuchen, 60 00:03:34,230 --> 00:03:37,290 zum größten Teil Sie nicht über einige konstante Netzwerkverbindung 61 00:03:37,290 --> 00:03:39,270 zwischen Ihrem Browser und dem Server. 62 00:03:39,270 --> 00:03:42,190 Sobald Sie haben das HTML und die JPEGs und die GIFs heruntergeladen und all das, 63 00:03:42,190 --> 00:03:48,200 die Verbindung geht weg und Sie müssen nur eine Kopie der Datei und so weiter aus dem Server. 64 00:03:48,200 --> 00:03:53,000 Aber wenn der Server will etwas über dich erinnern, 65 00:03:53,000 --> 00:03:57,580 die Last auf dem Server tatsächlich aufnehmen, dass die Informationen. 66 00:03:57,580 --> 00:04:00,130 Und so der Programmierer, der die Kontrolle über den Server haben 67 00:04:00,130 --> 00:04:04,400 können die meisten, was Sie wollen hineinlegen dieser superglobal assoziatives Array 68 00:04:04,400 --> 00:04:06,850 und es wird dort das nächste Mal der Benutzer kommt zurück, 69 00:04:06,850 --> 00:04:12,070 ob es sich um Minuten oder sogar Tage später, wenn sie ihre Browser-Fenster schließen, 70 00:04:12,070 --> 00:04:14,360 an welcher Stelle SESSION verschwindet. 71 00:04:14,360 --> 00:04:17,779 So vergänglich Speicher, es ist non-persistent, und es soll weg 72 00:04:17,779 --> 00:04:22,360 sobald der Benutzer schließt seinen Browser - nicht nur, dass Reiter, die oft das gesamte Browser, 73 00:04:22,360 --> 00:04:24,930 dadurch wirksam Anmeldung des Benutzers aus. 74 00:04:24,930 --> 00:04:28,000 Also, wie ist das Ding tatsächlich umgesetzt? 75 00:04:28,000 --> 00:04:31,360 Werfen wir einen kurzen Blick auf ein einfaches Beispiel wir am Freitag sah. 76 00:04:31,360 --> 00:04:33,340 Für die Leser, es war so einfach wie diese. 77 00:04:33,340 --> 00:04:35,910 Dies ist eine Web-Seite, deren einziger Zweck im Leben ist, mir zu sagen, 78 00:04:35,910 --> 00:04:38,000 wie oft habe ich diese Seite besucht. 79 00:04:38,000 --> 00:04:41,670 Dies ist das erste Mal hier am Montag, dass ich sie besuchte, so heißt es 0 mal. 80 00:04:41,670 --> 00:04:46,940 >> Aber wenn ich diese Seite neu laden zu starten, heißt es 1 Mal, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 und dies wird schließlich nur auf das Zählen bis zu halten, up, up, up, up 82 00:04:49,800 --> 00:04:53,130 für jedes Mal, wenn ich tatsächlich klicken Sie darauf laden. 83 00:04:53,130 --> 00:04:58,830 Also, wie ist diese Arbeit? Lassen Sie mich reingehen dieser Datei aufgerufen counter.php. 84 00:04:58,830 --> 00:05:02,490 Der obere Teil ist es alle blauen Kommentare, aber der interessante Teil ist hier. 85 00:05:02,490 --> 00:05:06,670 In Zeile 13 rufen wir diese Funktion session_start, 86 00:05:06,670 --> 00:05:09,600 und das ist wörtlich alles, was Sie tun müssen, wenn Sie den Zugriff haben wollen 87 00:05:09,600 --> 00:05:13,610 um diese spezielle superglobal namens $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Das macht es möglich, und wir werden in einem Moment, wie das alles möglich zu sehen. 89 00:05:17,430 --> 00:05:20,350 In Zeile 16 bemerken, was ich tue. 90 00:05:20,350 --> 00:05:25,960 Wenn der Schlüssel, genannt Zähler - mit anderen Worten: der Indexwert - "counter" 91 00:05:25,960 --> 00:05:32,310 existiert innerhalb dieses Array namens SESSION, dann was mache ich mit ihm in der Zeile darunter? 92 00:05:32,310 --> 00:05:36,650 Was ist Zeile 18 zu tun? 93 00:05:36,650 --> 00:05:40,360 >> [Unverständlich Studenten Antwort] Was ist das? [Schüler] Speichern des Wertes. Gut. 94 00:05:40,360 --> 00:05:45,800 Es speichert den Wert, der in SESSION ist jetzt in einer neuen lokalen temporären Variablen, 95 00:05:45,800 --> 00:05:48,250 $ Counter in Kleinbuchstaben. 96 00:05:48,250 --> 00:05:50,770 Beachten Sie, dass PHP wird bereits ein wenig faul hier. 97 00:05:50,770 --> 00:05:55,550 Beachten Sie, wir haben keine Erwähnung von int oder float oder String oder so etwas 98 00:05:55,550 --> 00:06:00,480 weil PHP schwach typisiert wird, wobei man nicht um den Typ einer Variablen angeben, 99 00:06:00,480 --> 00:06:03,310 und in diesem Fall hier habe ich noch nicht einmal erklärt, es noch nicht. 100 00:06:03,310 --> 00:06:08,980 Ich erkläre es innerhalb dieser geschweiften Klammern und im Gegensatz zu C, das ist eigentlich okay. 101 00:06:08,980 --> 00:06:13,800 Egal wie tief eine variable Erklärung verschachtelt ist in PHP - 102 00:06:13,800 --> 00:06:16,650 Innere geschweiften Klammer, innerhalb der geschweiften Klammer und dergleichen - 103 00:06:16,650 --> 00:06:21,230 es wird in diesem Moment in der Zeit für den Rest des Programms vorhanden ist, 104 00:06:21,230 --> 00:06:22,680 zum Besseren oder zum Schlechteren. 105 00:06:22,680 --> 00:06:26,930 So wird es sofort global, sobald Sie es definieren, wie wir hier sind. 106 00:06:26,930 --> 00:06:31,620 >> Ansonsten, wenn ich nicht feststellen, dass es etwas gibt in der SESSION superglobal, 107 00:06:31,620 --> 00:06:34,680 Ich bin anscheinend der Initialisierung dieses variable Zähler auf 0, 108 00:06:34,680 --> 00:06:37,580 dabei ebenso vorausgesetzt, der Benutzer hat nie hier gewesen. 109 00:06:37,580 --> 00:06:40,030 Und dann dies natürlich wird Inkrementieren des Zählers, wie? 110 00:06:40,030 --> 00:06:44,480 Ich bin Aktualisierung der Wert, der im Inneren ist dieses assoziativen Arrays 111 00:06:44,480 --> 00:06:49,530 indem sie gleich, was Zähler derzeit + 1. 112 00:06:49,530 --> 00:06:53,520 Wenn ich hier unten scrollen, um den HTML-Code der Seite, es ist eigentlich ziemlich einfach. 113 00:06:53,520 --> 00:06:58,920 Alles, was ich in den Körper dieser Seite ist: "Sie haben diese Seite so-und-so-mal besucht." 114 00:06:58,920 --> 00:07:00,350 Und dies ist ein PHP Konstrukt. 115 00:07:00,350 --> 00:07:06,080 Wenn Sie das tun 00:07:12,600 Es ist wirklich entspricht etwas wie printf, die wir oft gesehen habe in C, 117 00:07:12,600 --> 00:07:15,940 obwohl, wie Sie vielleicht schon wissen aus der spec in pset 7, 118 00:07:15,940 --> 00:07:20,160 Druck ist auch eine Funktion, die gerade druckt etwas aus, ist es nicht wirklich nutzen Format-Codes, 119 00:07:20,160 --> 00:07:23,270 und man kann tatsächlich sagen, Echo als gut. 120 00:07:23,270 --> 00:07:27,460 Sie sind alle immer so leicht unterschiedlichen obwohl die Netto-Effekt ist letztlich das gleiche. 121 00:07:27,460 --> 00:07:31,270 So diese Verwendung des Gleichheitszeichens ist nur eine Art elegante Weise, es zu tun 122 00:07:31,270 --> 00:07:34,910 kurz und bündig, als Sie vielleicht anders sein können. 123 00:07:34,910 --> 00:07:38,370 So, das ist alles this site tut. Es druckt den Wert des Zählers. 124 00:07:38,370 --> 00:07:40,550 Wie ist das alles wirklich passiert? 125 00:07:40,550 --> 00:07:43,250 Sie erinnern sich vielleicht eine Woche oder so begannen wir suchen unter der Haube 126 00:07:43,250 --> 00:07:47,910 , wie eine Web-Seite mit diesem Inspector Registerkarte funktioniert. 127 00:07:47,910 --> 00:07:51,900 >> Chrome hat diese sowohl in der Mac-Version, die Windows-Version, und auch die Linux-Version, 128 00:07:51,900 --> 00:07:59,510 und Firefox und IE haben ähnliche Mechanismen, durch die Sie diese integrierten Debugger haben 129 00:07:59,510 --> 00:08:01,400 innerhalb des Browsers. 130 00:08:01,400 --> 00:08:03,040 Werfen wir einen Blick auf die folgenden. 131 00:08:03,040 --> 00:08:06,960 Wir haben eine ganze Reihe von Registerkarten hier, und daran erinnern, dass die am weitesten links ein Elements ist, 132 00:08:06,960 --> 00:08:10,700 und egal wie godawful die HTML-und JavaScript in einer Seite ist, 133 00:08:10,700 --> 00:08:15,710 daran erinnern, dass mit der Registerkarte Elemente kann man tatsächlich navigieren HTML hierarchisch 134 00:08:15,710 --> 00:08:17,050 und schön und ordentlich. 135 00:08:17,050 --> 00:08:19,370 Also, wenn Sie versuchen, von einer Website wie Google oder Facebook zu lernen 136 00:08:19,370 --> 00:08:22,370 oder wirklich jede Website, erkennen, dass Sie wahrscheinlich besser dran 137 00:08:22,370 --> 00:08:26,360 Blick auf den Quellcode auf diese Weise zu betrachten das rohe Quelle Gegensatz 138 00:08:26,360 --> 00:08:29,580 was kann ein Chaos, wie wir vor allem auf die Google-Website zu sehen. 139 00:08:29,580 --> 00:08:32,220 Also, wenn ich stattdessen auf der Registerkarte Netzwerk klicken Sie hier, 140 00:08:32,220 --> 00:08:34,830 Mal sehen, was los ist, wenn ich diese Seite zu besuchen. 141 00:08:34,830 --> 00:08:38,669 Zunächst lassen Sie mich klar meinen Cache. 142 00:08:38,669 --> 00:08:43,570 Ich werde in Einstellungen in Chrome gehen und gehen Sie dann zu Geschichte 143 00:08:43,570 --> 00:08:46,420 und deaktivieren Sie alle Browser-Daten. 144 00:08:46,420 --> 00:08:48,170 Man könnte dies zu tun für andere Zwecke verwendet werden, [Gelächter] 145 00:08:48,170 --> 00:08:51,990 aber wenn es um die Entwicklung von Websites geht, ist es tatsächlich nützlich - 146 00:08:51,990 --> 00:08:55,980 wenn Sie lachen wirst du wissen. [Gelächter] 147 00:08:55,980 --> 00:08:59,310 Es ist eigentlich sehr nützlich, wenn die Entwicklung von Websites, weil die Realität ist, 148 00:08:59,310 --> 00:09:04,100 Dinge wie Cookies und ähnliche Dinge zwischengespeichert HTML-Dateien zwischengespeichert JavaScript-Dateien 149 00:09:04,100 --> 00:09:06,390 kann tatsächlich eine große Kopfschmerzen geworden, denn wenn aus irgendeinem Grund 150 00:09:06,390 --> 00:09:11,500 Der Browser entscheidet, einige Dateien zwischenspeichern und doch haben Sie Änderungen an der Datei auf dem Server vorgenommen 151 00:09:11,500 --> 00:09:14,670 aber der Browser hat nicht wirklich realisiert, dass die Datei geändert hat 152 00:09:14,670 --> 00:09:19,060 und daher eigentlich nicht erneut herunterladen, auch wenn Sie die Reload-Taste klicken, 153 00:09:19,060 --> 00:09:23,210 einer der todsichere Möglichkeiten, um nur sicherzustellen, dass die Störung nicht mit Ihrem Code, 154 00:09:23,210 --> 00:09:26,480 Es ist mit dem Verhalten des Browsers, ist hier in Ihrem Browser gehen 155 00:09:26,480 --> 00:09:29,950 und löschen Sie einfach die ganze Geschichte so, dass es keine Verwirrung. 156 00:09:29,950 --> 00:09:33,210 >> Und dann, wenn Sie wirklich wollen, paranoid zu sein, den Browser beenden, neu starten, 157 00:09:33,210 --> 00:09:35,660 und dann stellen Sie sicher, alles funktioniert wie erwartet. 158 00:09:35,660 --> 00:09:38,820 Also kurz gesagt, ist Clearing-Cache gut, wenn dabei die Entwicklung. 159 00:09:38,820 --> 00:09:40,690 Also hier haben wir die Registerkarte Netzwerk. 160 00:09:40,690 --> 00:09:46,020 Ich zuvor besucht die Website 9 mal, aber lassen Sie mich gehen Sie jetzt und klicken Sie auf Neu laden. 161 00:09:46,020 --> 00:09:47,500 Und ich bin wieder auf 0. 162 00:09:47,500 --> 00:09:52,100 Lassen Sie tatsächlich sehen, wie es ist, dass diese Sitzung superglobal umgesetzt wird. 163 00:09:52,100 --> 00:09:55,990 Ich werde auf dem 1 HTTP-Anforderung, die gemacht wurde klicken, 164 00:09:55,990 --> 00:09:58,810 und das Debugging-Fenster lässt mich hineinschauen davon. 165 00:09:58,810 --> 00:10:01,970 Hier sehe ich nur die Antwort vom Server, das ist nicht interessant. 166 00:10:01,970 --> 00:10:04,030 Ich habe dies in einer beliebigen Anzahl von Möglichkeiten gesehen. 167 00:10:04,030 --> 00:10:06,350 Aber was ist technisch interessant sind die Header. 168 00:10:06,350 --> 00:10:11,770 Wenn ich nach unten scrollen hier und konzentrieren sich auf die Request-Header, und klicken Sie Quelltext, 169 00:10:11,770 --> 00:10:14,400 was ich zu sehen, ist buchstäblich die HTTP-Anforderung 170 00:10:14,400 --> 00:10:17,250 das ging einfach aus meinem Browser auf dem Server, 171 00:10:17,250 --> 00:10:21,400 GET ist das richtige Wort und dann / counter.php ist der Name der Datei, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 einfach nur die Version von HTTP, dass mein Browser verwendet. 173 00:10:25,670 --> 00:10:31,070 Diese Linie ist hier eine kleine Erinnerung vom Browser zum Server, was der Name des Servers ist 174 00:10:31,070 --> 00:10:33,020 dass es will zu reden. 175 00:10:33,020 --> 00:10:38,200 Und dann der Rest ist manchmal interessant, aber nicht relevant jetzt. 176 00:10:38,200 --> 00:10:40,090 >> Dies ist nur eine Art Neugier. 177 00:10:40,090 --> 00:10:43,530 Cryptic obwohl diese Zeichenfolge ist, zu jeder Zeit Ihres Browsers besucht eine Website 178 00:10:43,530 --> 00:10:47,110 es informiert den Server, welchen Browser Sie verwenden 179 00:10:47,110 --> 00:10:50,040 und welches Betriebssystem Sie verwenden und welche Version davon. 180 00:10:50,040 --> 00:10:52,650 Also, wenn Sie sich jemals gefragt, wie Websites wie CNN und so weiter 181 00:10:52,650 --> 00:10:56,860 wissen, was die Prozentsätze der Mac-Anwender sind auf den Web-, PC-Anwender, 182 00:10:56,860 --> 00:11:00,820 IE-Benutzer, Chrome-Nutzer und dergleichen, ist es, weil alle unsere Browser 183 00:11:00,820 --> 00:11:04,300 sagen jede einzelne Website gibt, was wir sind. 184 00:11:04,300 --> 00:11:07,410 Es muss nicht unbedingt enthalten persönliche Daten 185 00:11:07,410 --> 00:11:13,060 aber es macht Sie dem Server, was Ihre IP-Adresse ist und welchen Browser und Betriebssystem Sie verwenden. 186 00:11:13,060 --> 00:11:14,720 Also das ist, wo diese Informationen. 187 00:11:14,720 --> 00:11:19,960 Aber was ist mehr interessant, jetzt, wenn es um diesen Sitzungen kommt, ist die Antwort-Header. 188 00:11:19,960 --> 00:11:22,530 Lassen Sie mich auf Quelle neben Reaktion zu sehen. 189 00:11:22,530 --> 00:11:24,590 Was interessant ist hier ein paar Dinge. 190 00:11:24,590 --> 00:11:27,580 1, haben wir wieder einen Status Code 200. 191 00:11:27,580 --> 00:11:29,840 Wir sehen nie diesen Status Code, weil das bedeutet, alles ist gut. 192 00:11:29,840 --> 00:11:32,920 Es bedeutet wörtlich Ordnung im Gegensatz zu etwas anderem. 193 00:11:32,920 --> 00:11:36,380 Was ist eine Zahl, die wir manchmal das ist schlecht? [Schüler] 404. 194 00:11:36,380 --> 00:11:39,860 404, Datei nicht gefunden, vielleicht 403 Sie auf bereits stolpern, 195 00:11:39,860 --> 00:11:43,660 was verboten ist, was bedeutet, dass Sie vergessen haben, chmod etwas, wahrscheinlich. 196 00:11:43,660 --> 00:11:45,190 Und es gibt eine Reihe von anderen. 197 00:11:45,190 --> 00:11:47,760 >> Hier unten ist ein wenig verrückt. 198 00:11:47,760 --> 00:11:52,340 Ich schrieb gerade diese Datei ein paar Minuten durch Einfügen in gedit. 199 00:11:52,340 --> 00:11:57,100 Warum hat diese Seite im Jahr 1981 auslaufen, bevor es war wirklich ein Web? 200 00:11:58,010 --> 00:12:00,730 Was ist da los? 201 00:12:00,730 --> 00:12:04,390 >> [Unverständlich Studenten Antwort] Der Zeitstempel. Aber warum? 202 00:12:06,110 --> 00:12:09,120 Es ist etwas willkürlich, aber es ist tatsächlich nützlich ist. 203 00:12:09,120 --> 00:12:15,500 Was dies ist mein Browser sagt, ist diese PHP Datei, die Sie gerade angefordert haben bereits abgelaufen ist. 204 00:12:15,500 --> 00:12:18,580 In der Tat, abgelaufen vor 30 Jahren. 205 00:12:18,580 --> 00:12:20,260 Aber was bedeutet das eigentlich? 206 00:12:20,260 --> 00:12:22,500 Es bedeutet nur, das nächste Mal den Besuch der Seite, 207 00:12:22,500 --> 00:12:25,540 sei es durch neu zu laden oder die Eingabe der URL in der Adressleiste, 208 00:12:25,540 --> 00:12:28,010 stellen Sie sicher gehen und holen eine neue Kopie. 209 00:12:28,010 --> 00:12:30,840 Dies ist eine Art Beispiel für Cache-Busting, 210 00:12:30,840 --> 00:12:33,790 ein dummes Wort, das bedeutet nur versuchen, den Browser zu entmutigen 211 00:12:33,790 --> 00:12:37,260 von tatsächlich Caching HTML Das ist von einem Server gesendet 212 00:12:37,260 --> 00:12:41,490 so dass Sie nicht versehentlich reload getroffen und dann sehen die gleiche Version der Datei. 213 00:12:41,490 --> 00:12:43,730 Sie wirklich wollen, dass der Server eine neue Kopie zu senden. 214 00:12:43,730 --> 00:12:47,440 So ist die Tatsache, dass es 1981 ist nur, dass das ist, was das Gerät der Wahl 215 00:12:47,440 --> 00:12:50,280 als beliebiges Datum in der Vergangenheit. 216 00:12:50,280 --> 00:12:53,380 Aber die wirkliche saftige Linie ist nun diese. 217 00:12:53,380 --> 00:12:57,550 Schon vor 50 du bist wahrscheinlich vage vertraut mit Cookies. 218 00:12:57,550 --> 00:13:01,820 Ab jetzt, besonders unter denen weniger komfortabel oder zwischen 219 00:13:01,820 --> 00:13:04,120 Was ist ein Cookie in Ihrem Verständnis gerade 220 00:13:04,120 --> 00:13:06,980 obwohl wir um Ihr Verständnis mehr technische bist? 221 00:13:08,150 --> 00:13:10,070 Was ist ein Cookie? Yeah. 222 00:13:10,070 --> 00:13:13,890 [Schüler] Informationen über den Benutzer, wie wenn sie ihren Benutzernamen oder etwas geschrieben habe. 223 00:13:13,890 --> 00:13:17,370 >> Gut. Es ist Informationen über den Benutzer, ob sie schon in ihren Benutzernamen eingegeben schon. 224 00:13:17,370 --> 00:13:21,190 Cookies sind ein Weg, auf dem Server etwas über einem Benutzer erinnern kann. 225 00:13:21,190 --> 00:13:25,810 Und was für ein Cookie wirklich ist eine Textdatei oder eine Folge von Bytes 226 00:13:25,810 --> 00:13:28,340 Das ist durch die Server innerhalb Ihres Browsers gepflanzt, 227 00:13:28,340 --> 00:13:31,960 und innerhalb der genannten Datei oder unter jenen Bytes ist eine Art von Kennung. 228 00:13:31,960 --> 00:13:35,640 Vielleicht ist es buchstäblich Ihren Benutzernamen, aber oft ist es etwas kryptisch anmutenden 229 00:13:35,640 --> 00:13:43,700 wie dieses Ding hier - bo8dal3ct und so weiter - das ist wirklich große alphanumerische Zeichenfolge 230 00:13:43,700 --> 00:13:47,050 das ist wirklich nur gedacht eine eindeutige Kennung für Sie sein. 231 00:13:47,050 --> 00:13:49,790 Oder Sie können es als eine Art virtuelle Handstempel denken. 232 00:13:49,790 --> 00:13:53,020 Wenn Sie einem Club oder einem Vergnügungspark zu gehen, sich daran zu erinnern, dass Sie tatsächlich gezahlten 233 00:13:53,020 --> 00:13:55,850 gegangen und in, legte sie einen kleinen roten Aufkleber auf der Hand von einer Art, 234 00:13:55,850 --> 00:13:59,270 und dass erinnert die Menschen an der Theke, die Sie bereits bezahlt 235 00:13:59,270 --> 00:14:01,340 und Sie können kommen und gehen, wie es Ihnen beliebt. 236 00:14:01,340 --> 00:14:04,250 Cookies sind ein wenig im Geiste gleich dazu. 237 00:14:04,250 --> 00:14:08,070 Das erste Mal besuchte ich diese Website, wie ich nur nach dem Löschen meinen Cache, 238 00:14:08,070 --> 00:14:11,620 der Web-Server, das Gerät in diesem Fall, setzen Sie einen Stempel auf meiner Hand 239 00:14:11,620 --> 00:14:15,030 dessen Name PHPSESSID, Session-ID, 240 00:14:15,030 --> 00:14:18,260 deren Wert das ist wirklich lange alphanumerische Zeichenkette. 241 00:14:18,260 --> 00:14:22,470 >> Also das ist jetzt eine Art prangt auf meine Hand, so dass ich das nächste Mal traf laden 242 00:14:22,470 --> 00:14:25,230 oder manuell besuchen Sie diese URL in einem Browser 243 00:14:25,230 --> 00:14:29,230 mein Browser nach Definition von HTTP wird den Handstempel präsentieren 244 00:14:29,230 --> 00:14:31,940 wieder und wieder und wieder. 245 00:14:31,940 --> 00:14:34,550 Also auch wenn der Server nicht unbedingt wissen, wer ich bin, 246 00:14:34,550 --> 00:14:39,610 sie wenigstens wissen, dass ich den gleichen Benutzer oder zumindest, genauer gesagt, der gleiche Browser bin. 247 00:14:39,610 --> 00:14:45,660 Und dies ist letztlich, wie die Sitzung superglobal umgesetzt wird. 248 00:14:45,660 --> 00:14:51,200 Der Server hat keine Ahnung, wer Sie sind, wenn Sie eine Website für die zweite oder die dritte Zeit erneut 249 00:14:51,200 --> 00:14:53,410 es sei denn, Ihnen diese Handstempel. 250 00:14:53,410 --> 00:14:55,530 Und sobald du diesen Handstempel präsentieren, 251 00:14:55,530 --> 00:14:59,370 der Web-Server geht in einen im wesentlichen kleine eigene Datenbank 252 00:14:59,370 --> 00:15:06,040 und prüft, okay, ich habe gerade die Hand Stempel Benutzer bo8dal3ct gesehen und so weiter. 253 00:15:06,040 --> 00:15:09,850 Lassen Sie mich sehen, welche Informationen der Programmierer gespeichert hat 254 00:15:09,850 --> 00:15:12,380 Innenseite des superglobal Über diesen Nutzer, 255 00:15:12,380 --> 00:15:17,000 und dann lassen Sie mich darauf achten, dass die Daten wieder im Inneren des SESSION superglobal 256 00:15:17,000 --> 00:15:19,830 so dass der Programmierer kann wieder Zugriff auf die Daten 257 00:15:19,830 --> 00:15:23,360 auch wenn es einige Minuten oder Stunden eingestellt. 258 00:15:23,360 --> 00:15:26,150 Mit anderen Worten, Cookies, die einen schlechten Ruf für einige Zeit erhielt 259 00:15:26,150 --> 00:15:29,990 wegen der Unsicherheiten in Browsern und können sie wirklich verletzt unsere Privatsphäre und all diese, 260 00:15:29,990 --> 00:15:31,900 sie tatsächlich haben großen Nutzen, denn ohne sie 261 00:15:31,900 --> 00:15:36,110 Sie würden ständig werden Sie sich in jedem Facebook-Seite besuchen 262 00:15:36,110 --> 00:15:40,680 oder jeder Google Mail lesen Sie, wenn der Browser nicht über einen Weg des Erinnerns 263 00:15:40,680 --> 00:15:43,320 dass Sie bereits authentifiziert. 264 00:15:43,320 --> 00:15:46,640 >> So auf diese Weise Cookies werden vor und zurück über die Verbindung gesendet. 265 00:15:46,640 --> 00:15:52,470 Eine weitere Kuriosität über Cookies, besonders hier ist, dass diese vollständig im Klartext. 266 00:15:52,470 --> 00:15:54,930 Es gibt keine Verschlüsselung geht hier immer, 267 00:15:54,930 --> 00:15:57,240 und ja, ich bin mit HTTP im Moment. 268 00:15:57,240 --> 00:16:00,890 Einer unserer Favoriten Momente in CS50, das ist jetzt 2 Jahre her, 269 00:16:00,890 --> 00:16:04,750 wurde in der Zeit ein Tool namens Firesheep kam heraus. 270 00:16:04,750 --> 00:16:08,320 Dies war eine kostenlose Software, die von einem Security Researcher gemacht wurde 271 00:16:08,320 --> 00:16:13,250 als Weckruf für die Gemeinde zu sagen, wie grausam umgesetzt 272 00:16:13,250 --> 00:16:17,900 bestimmte Authentifizierungsmechanismen im Web waren. 273 00:16:17,900 --> 00:16:22,880 Also für einige Zeit war Facebook fast ausschließlich über HTTP, kein HTTPS. 274 00:16:22,880 --> 00:16:25,640 Und selbst wenn Sie keine Ahnung, wie die Krypto funktioniert haben, ist S sichere 275 00:16:25,640 --> 00:16:27,950 so dass es bedeutet, dass es zumindest einige Verschlüsselung beteiligt. 276 00:16:27,950 --> 00:16:30,610 Facebook hat verwendet, um Benutzernamen und Passwörter zu verschlüsseln, 277 00:16:30,610 --> 00:16:33,560 aber sobald Sie an Ihrem sah stochert oder Ihre Nachrichten oder Ihre News-Feed, 278 00:16:33,560 --> 00:16:35,360 All das war unverschlüsselt. 279 00:16:35,360 --> 00:16:37,870 So war bis vor einem Jahr oder 2 vor Gmail. 280 00:16:37,870 --> 00:16:41,100 Jedes Mal, wenn Sie sich angemeldet haben, ja, benutzten sie eine sichere Verschlüsselung, 281 00:16:41,100 --> 00:16:44,300 danach aber sie tat es nicht. Und warum könnte das sein? 282 00:16:44,300 --> 00:16:49,210 Warum nicht einfach Kryptografie die ganze Zeit in Gebrauch Fällen wie diesem? 283 00:16:49,210 --> 00:16:53,700 Was ist das? Ich glaube, ich habe etwas gehört. [Schüler] Speed. 284 00:16:53,700 --> 00:16:56,250 Geschwindigkeit, nicht wahr? Es gibt Möglichkeiten, dies zu umgehen. 285 00:16:56,250 --> 00:16:59,610 Aber wenn man solche nur darüber logisch zu denken, wenn Sie verschlüsseln etwas, 286 00:16:59,610 --> 00:17:01,820 Sie müssen mindestens ein wenig mehr Arbeit zu tun. 287 00:17:01,820 --> 00:17:05,460 In pset 2, wenn Sie Caesar oder Vigenere umgesetzt oder sogar Crack, 288 00:17:05,460 --> 00:17:07,760 nur Druck einen String ist relativ einfach. 289 00:17:07,760 --> 00:17:12,040 Verschlüsseln und Drucken eine Zeichenfolge minimal erfordert ein wenig mehr Arbeit. 290 00:17:12,040 --> 00:17:14,520 >>  Für super beliebte Websites wie Google und Facebook, 291 00:17:14,520 --> 00:17:18,839 wenn Sie mehr Arbeit für jeden Benutzer zu tun für jede einzelne Webseite, die sie besuchen, 292 00:17:18,839 --> 00:17:20,520 das dauert nur mehr CPU-Zeit. 293 00:17:20,520 --> 00:17:22,920 Und wenn Sie mehr CPU-Zeit benötigen, müssen Sie mehrere Server, 294 00:17:22,920 --> 00:17:24,270 das heißt, Sie könnten mehr Geld benötigen. 295 00:17:24,270 --> 00:17:27,579 Und so für viele Jahre das nur wirklich nicht die beste Praxis. 296 00:17:27,579 --> 00:17:31,440 Die Leute würden SSL-Verschlüsselung nur dann, wenn sie benötigt werden. 297 00:17:31,440 --> 00:17:34,960 Aber es stellte sich heraus, und als dieser Kerl mit Firesheep gemacht super klar, 298 00:17:34,960 --> 00:17:37,920 wenn Sie Kerle, die derzeit auf Facebook jetzt - 299 00:17:37,920 --> 00:17:39,880 Aus Neugier, lasst uns sehen, ob Sie fess werde auf. 300 00:17:39,880 --> 00:17:42,620 Wenn Sie auf Facebook jetzt in einigen Registerkarte, auch wenn es nicht im Vordergrund ist, 301 00:17:42,620 --> 00:17:46,610 Ihr URL HTTP oder HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Mehrere Schüler] S. S? [Gelächter] 303 00:17:50,560 --> 00:17:55,510 Okay. Jede HTTP? Nur 1? Okay. 304 00:17:55,510 --> 00:17:58,940 So können wir alle dieses Kerls Facebook-Account jetzt hacken. 305 00:17:58,940 --> 00:18:04,100 Für den größten Teil dieser hat sich standardmäßig eingeschaltet, zumindest in einigen Websites. 306 00:18:04,100 --> 00:18:08,120 Und lange Rede kurzer Sinn, wenn Ihre Web-Verkehr nicht verschlüsselt ist, 307 00:18:08,120 --> 00:18:12,960 nicht nur der HTML hin und her über die WIFIs unverschlüsselt, 308 00:18:12,960 --> 00:18:16,760 also Dinge wie Cookies hin und her in der Luft 309 00:18:16,760 --> 00:18:18,940 ohne jegliche Form der Verschlüsselung. 310 00:18:18,940 --> 00:18:23,540 Also, wenn Sie nur ein bisschen Programmierung versierte oder ein bisschen Googlen Fähigkeiten 311 00:18:23,540 --> 00:18:27,410 auf freie Software, die dies tut zu finden, ist alles, was Sie tun müssen, Starbucks sitzen 312 00:18:27,410 --> 00:18:30,680 oder in einem Flughafen sitzen, wo es in der Regel unverschlüsselt ist WiFi 313 00:18:30,680 --> 00:18:36,070 oder PHPSESSID: und nur nach Schlüsselwörtern wie Set-Cookie zu sehen 314 00:18:36,070 --> 00:18:39,300 denn wenn man die technische versierte müssen zusehen, wie die WiFi 315 00:18:39,300 --> 00:18:43,010 für alle Bits, die Strömung in der Luft für dieses Muster, 316 00:18:43,010 --> 00:18:50,840 Sie können dann sagen, dass Kerl PHPSESSID sein bo8dal und so weiter passiert. 317 00:18:50,840 --> 00:18:53,890 Und dann wieder, wenn Sie ausreichend technisch versierte oder das richtige Werkzeug, 318 00:18:53,890 --> 00:18:58,890 Sie können dann einfach neu eigenen Browser zu starten präsentieren, dass Handstempel 319 00:18:58,890 --> 00:19:05,030 um Facebook.com und Facebook ist nur davon ausgehen, dass Sie, dass Kerl sind 320 00:19:05,030 --> 00:19:09,880 weil alles, was sie wissen, ist nicht, wer du bist, sondern dass Sie diese eindeutige Kennung haben. 321 00:19:09,880 --> 00:19:14,650 Also, wenn Sie zu stehlen, dass eindeutige Kennung und präsentieren es auf der Web-Server als eigene, 322 00:19:14,650 --> 00:19:16,860 sie sind gerade dabei, zeigen Ihnen dieser Person Newsfeed 323 00:19:16,860 --> 00:19:18,980 oder dieser Person Nachrichten steckt. 324 00:19:18,980 --> 00:19:23,190 >> Und ich würde jetzt Google, wie HTTPS für Facebook vielleicht zu aktivieren. 325 00:19:23,190 --> 00:19:25,150 Aber es ist wirklich so einfach. 326 00:19:25,150 --> 00:19:27,660 Und so Facebook und Google und dergleichen bekommen haben wirklich gut darin, 327 00:19:27,660 --> 00:19:31,870 aber halten Sie ein Auge umso mehr für alle von Ihnen besuchten Websites, die nicht mit HTTP 328 00:19:31,870 --> 00:19:35,020 und haben eine Art von sensiblen Informationen über sie, 329 00:19:35,020 --> 00:19:37,490 ob es sich um finanzielle oder persönliche oder dergleichen. 330 00:19:37,490 --> 00:19:43,180 Wenn sie nicht verwenden Damit kann womöglich Cookies wie diese sehr leicht gestohlen 331 00:19:43,180 --> 00:19:46,270 und dann geschmiedet, und das ist genau das, was Firesheep tat. 332 00:19:46,270 --> 00:19:48,250 Sie hatten nicht ein Programmierer zu sein. 333 00:19:48,250 --> 00:19:51,680 Alles, was Sie tun musste, war eine Internet-Verbindung, laden Sie dieses kostenlose Tool, 334 00:19:51,680 --> 00:19:56,490 und was sie tun würde, ist, dass Sie sich anmelden und dann würde es zeigen Ihnen die Facebook-Namen 335 00:19:56,490 --> 00:20:00,170 von jeder in Sanders, in diesem besonderen Demonstration, um Sie 336 00:20:00,170 --> 00:20:03,260 und alles, was Sie tun musste, war auf ihren Namen klicken und die Software automatisiert den Prozess 337 00:20:03,260 --> 00:20:05,970 von Sniffing das Cookie, präsentiert es auf Facebook als Ihre eigene, 338 00:20:05,970 --> 00:20:07,990 und, voila, du eingeloggt 339 00:20:07,990 --> 00:20:11,190 Also das ist einer von diesen "dies nicht tun" offiziell. 340 00:20:11,190 --> 00:20:14,660 Wenn Sie Ihr eigenes Heimnetzwerk und haben Sie zu basteln, mit allen Mitteln, 341 00:20:14,660 --> 00:20:17,530 aber erkennen, das tut die Linie auf einem universitären Umfeld. 342 00:20:17,530 --> 00:20:20,030 >> Aber das Ziel ist hier wirklich zu betonen, nicht, wie dies zu tun 343 00:20:20,030 --> 00:20:22,320 aber wie man sich gegen diese Art von Dingen zu verteidigen. 344 00:20:22,320 --> 00:20:26,180 Und die triviale Lösung hier, obwohl es selbst fehlerhaft ist, 345 00:20:26,180 --> 00:20:31,360 ist es wirklich reduzieren den Einsatz von Websites, die nicht mit HTTPS ständig. 346 00:20:31,360 --> 00:20:34,520 So Sites wie Facebook und Google haben zunehmend Checkboxen 347 00:20:34,520 --> 00:20:36,200 wo Sie entscheiden, um diese Art der Sache, 348 00:20:36,200 --> 00:20:40,000 und Banken haben dies seit Jahren aus ähnlichen Gründen. 349 00:20:40,000 --> 00:20:43,580 Also nur ein wenig von einer Angst-Faktor, wenn wir können. Aber das ist es auf den Punkt. 350 00:20:43,580 --> 00:20:46,420 Das ist wie ein Server merkt sich, wer Sie sind. 351 00:20:46,420 --> 00:20:50,760 Und sobald sie sich erinnern können, wer Sie sind, können sie sich erinnern, etwas über Sie 352 00:20:50,760 --> 00:20:56,140 dass der Programmierer hat im Inneren dieser besonderen superglobal namens $ _SESSION gespeichert. 353 00:20:56,140 --> 00:20:59,750 Und für pset 7 verwenden wir es trivial, nur um eine int erinnern, 354 00:20:59,750 --> 00:21:02,260 nämlich die eindeutige ID des Benutzers, der sich angemeldet hat, 355 00:21:02,260 --> 00:21:05,880 so dass wir wissen, dass sie dort gewesen. 356 00:21:05,880 --> 00:21:12,450 Fragen Sie dann auf Sitzungen oder Cookies oder dergleichen? 357 00:21:12,450 --> 00:21:15,130 Firesheep nicht so gut funktionieren nicht mehr, 358 00:21:15,130 --> 00:21:18,310 und Sie müssen Ihren Computer in einen speziellen Promiscuous-Modus zu versetzen 359 00:21:18,310 --> 00:21:20,700 so dass Sie tatsächlich hören für den Verkehr neben euch. 360 00:21:20,700 --> 00:21:23,940 Also, wenn Sie gerade runterlädst Firesheep, erkennen, es ist nicht ganz so einfach 361 00:21:23,940 --> 00:21:26,850 wie es einmal war, zu demonstrieren. 362 00:21:26,850 --> 00:21:29,070 Gut. Und tun Sie es nicht in Sanders. Tun Sie es zu Hause. 363 00:21:29,070 --> 00:21:30,890 Datenbanken. 364 00:21:30,890 --> 00:21:33,580 Eines der Dinge, die wir in pset 7 hat ganz bewusst 365 00:21:33,580 --> 00:21:37,780 war, dass wir Ihnen eine Probe Datenbank-Tabelle für Benutzer, die einige Benutzer-IDs hat, 366 00:21:37,780 --> 00:21:41,020 einige Benutzernamen und einige verschlüsselte Passwörter darin. 367 00:21:41,020 --> 00:21:44,520 Und wie Sie sehen werden, wenn Sie nicht bereits haben, sind Sie gehen zu müssen, ändern Sie die Tabelle ein wenig. 368 00:21:44,520 --> 00:21:47,710 Sie gehen zu müssen, um etwas Cache zu jedem der Benutzer in dieser Tabelle hinzuzufügen, 369 00:21:47,710 --> 00:21:51,130 und du wirst zu haben, um eine andere Geschichte Tisch, ein Portfolios Tabelle hinzuzufügen, 370 00:21:51,130 --> 00:21:53,310 oder vielleicht nennen es etwas anderes. 371 00:21:53,310 --> 00:21:56,740 Aber in Bezug auf darüber nachzudenken, wie dies zu tun, öffnen wir bis dieses Tool 372 00:21:56,740 --> 00:22:00,570 denen wir verwendet am Freitag, aber wenn nicht vertraut, kommt das Gerät mit einem Werkzeug 373 00:22:00,570 --> 00:22:04,680 genannt phpMyAdmin die zufällig in PHP geschrieben ist, 374 00:22:04,680 --> 00:22:07,950 aber ihr Zweck im Leben, nachdem ich hier einloggen als jharvard mit roten, 375 00:22:07,950 --> 00:22:15,160 ist mir eine benutzerfreundliche Weise zum Anzeigen und Ändern meiner Datenbank. 376 00:22:15,160 --> 00:22:18,040 >> Die Datenbank, die ich auf dem Gerät ausgeführt wird, als MySQL. 377 00:22:18,040 --> 00:22:23,420 Dies ist sehr beliebt, und es ist ein freies Open-Source-Datenbank, die sich wunderbar einfach zu bedienen ist, 378 00:22:23,420 --> 00:22:25,620 vor allem mit Frontends wie diese. 379 00:22:25,620 --> 00:22:29,350 Was dieses Tool mir erlaubt, zu tun, zum Beispiel, ist herumzustochern Tabellen. 380 00:22:29,350 --> 00:22:30,890 Lassen Sie mich gehen Sie vor und tun dies. 381 00:22:30,890 --> 00:22:36,580 Am Freitag haben wir eine Tabelle namens Studenten, die super einfach war. 382 00:22:36,580 --> 00:22:41,680 Es hatte 3 Spalten - ID, Name und E-Mail - und ich manuell eingefügt ein paar Zeilen 383 00:22:41,680 --> 00:22:44,420 wie David und Mike in diesem speziellen Beispiel. 384 00:22:44,420 --> 00:22:47,290 Lassen Sie uns das ein bisschen weiter zu gehen, und nehmen wir an, dass wir mehr erinnern wollen 385 00:22:47,290 --> 00:22:49,660 als nur Namen und E-Mail über einen Benutzer. 386 00:22:49,660 --> 00:22:53,090 Lassen Sie mich auf Struktur hier an der Spitze. 387 00:22:53,090 --> 00:22:55,440 Und wieder geht der pset Sie durch die erforderlichen Schritte hier 388 00:22:55,440 --> 00:22:58,150 so mach dir keine Sorgen, wenn einige das ist ein bisschen schnell. 389 00:22:58,150 --> 00:22:59,690 Dann werde ich klicken Sie hier. 390 00:22:59,690 --> 00:23:02,270 Ich werde eine bestimmte Anzahl von Spalten nach E-Mail hinzufügen 391 00:23:02,270 --> 00:23:04,130 weil ich etwas wie Haus hinzufügen möchten. 392 00:23:04,130 --> 00:23:06,640 Ich habe vergessen, ein Student das Haus aufzunehmen. 393 00:23:06,640 --> 00:23:11,400 Lassen Sie mich auf Go, und jetzt haben wir diese Form, die leider ein wenig breit von links nach rechts, 394 00:23:11,400 --> 00:23:13,710 aber ich werde den Namen dieses Feldes Haus anrufen, 395 00:23:13,710 --> 00:23:16,050 und dann die Art habe ich jetzt zu wählen. 396 00:23:16,050 --> 00:23:18,870 So lassen Sie uns einen kurzen Plausch über die verschiedenen Arten in MySQL 397 00:23:18,870 --> 00:23:24,590 denn während PHP schwach typisiert und es irgendwie spielt schnell und locker mit Typen, 398 00:23:24,590 --> 00:23:29,430 in einer Datenbank vor allem ist es super wichtig, um tatsächlich Typisierung zu Ihrem Vorteil 399 00:23:29,430 --> 00:23:33,260 weil man der Dinge, MySQL und anderen Datenbank-Engines für Sie tun können 400 00:23:33,260 --> 00:23:37,910 ist sicherzustellen, dass Sie nicht setzen falsche Daten in Ihre Datenbank. 401 00:23:37,910 --> 00:23:41,850 Dies ist eine Art der freien Fehlerprüfung zur Verfügung. 402 00:23:41,850 --> 00:23:46,250 >> Für Haus, das wir natürlich nicht wollen, dass es ein int, die eine 32-Bit-Wert in MySQL ist. 403 00:23:46,250 --> 00:23:49,810 Wir haben zu reden kurz auf Freitag über varchar, die für variable Länge char steht. 404 00:23:49,810 --> 00:23:54,720 Was ist das? Diese können Sie angeben, dass Sie diese in einen String von einer Art sein soll. 405 00:23:54,720 --> 00:23:56,840 Es ist nicht wirklich im Voraus, wie lange es wissen, 406 00:23:56,840 --> 00:24:00,100 so dass wir willkürlich sagen, ein Haus Name kann 255 Zeichen lang sein, 407 00:24:00,100 --> 00:24:04,190 aber man konnte mit 32, 64 gehen - eine beliebige Anzahl wirklich. 408 00:24:04,190 --> 00:24:10,700 Aber der Vorteil der Verwendung eines varchar über ein Feld namens char ist was? 409 00:24:10,700 --> 00:24:15,110 Nur intuitiv, wenn ich nach unten scrollen hier bemerken, gibt es char und es gibt varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar variabler Länge char; char ist ein fester Länge char. 411 00:24:19,520 --> 00:24:24,730 Also nur auf dieser Definition, ist das, was der Vorteil oder Nachteil von jedem von diesen? 412 00:24:24,730 --> 00:24:30,490 Mit anderen Worten, wer interessiert sich schon die Unterscheidung, oder warum sollten Sie darauf? 413 00:24:31,660 --> 00:24:35,750 >> Yeah. [Schüler] Varchar hat mehr Flexibilität, sondern nimmt mehr Speicher. 414 00:24:35,750 --> 00:24:40,730 Gut. Varchar nimmt mehr - Mal sehen. Ich bin mir nicht sicher, ob ich das richtig gehört. 415 00:24:40,730 --> 00:24:42,360 Können Sie sagen, dass einmal mehr? 416 00:24:42,360 --> 00:24:45,850 [Schüler] Ich sagte varchar hat wahrscheinlich mehr Flexibilität, aber es braucht mehr Speicher. 417 00:24:45,850 --> 00:24:51,170 Interesting. Okay. Varchar wahrscheinlich gibt Ihnen mehr Flexibilität, sondern nimmt mehr Speicher. 418 00:24:51,170 --> 00:24:53,220 Letzteres ist nicht unbedingt wahr. 419 00:24:53,220 --> 00:24:56,290 Es hängt vom Kontext ab, aber wir kommen darauf zurück. 420 00:24:56,290 --> 00:25:03,230 >> [Unverständlich Student Response] Genau. 421 00:25:03,230 --> 00:25:06,900 Es ist tatsächlich der Fall, dass char wird in der Regel mehr Speicherplatz 422 00:25:06,900 --> 00:25:10,950 weil ein char, wie in C, ist wie eine Kette, es ist ein Array von Zeichen. 423 00:25:10,950 --> 00:25:13,690 Also, wenn Sie sagen, ein char-Feld der Länge 255, 424 00:25:13,690 --> 00:25:16,910 die Datenbank wird buchstäblich werde Ihnen 255 Zeichen. 425 00:25:16,910 --> 00:25:22,290 Und wenn das Haus endet als MATHER und 6 Zeichen insgesamt, 426 00:25:22,290 --> 00:25:25,090 Sie mehr als 200 Zeichen zu verschwenden. 427 00:25:25,090 --> 00:25:29,640 >> So ein varchar effektiv verwendet nur so viele Zeichen wie nötig 428 00:25:29,640 --> 00:25:31,590 bis zu einer maximalen Menge. 429 00:25:31,590 --> 00:25:35,470 Aber der Preis, den Sie zahlen, ist tatsächlich die Leistung, möglicherweise. 430 00:25:35,470 --> 00:25:39,740 Wenn Sie im Voraus wissen, dass alle Ihre Saiten gehen zu 8 Zeichen lang sein - 431 00:25:39,740 --> 00:25:43,090 zum Beispiel annehmen, dass Sie Passwörter der Länge 8 erfordern - 432 00:25:43,090 --> 00:25:47,350 der Vorteil der Verwendung eines char-Feld gelegentlich, wenn auch nicht oft, 433 00:25:47,350 --> 00:25:51,100 ist eine feste Länge für so etwas wie ein Kennwort angeben 434 00:25:51,100 --> 00:25:53,300 denn jetzt kann die Datenbank noch klüger sein. 435 00:25:53,300 --> 00:25:58,160 Wenn es, dass jedes Feld Zeichen weiß ist jede Zeichenfolge in einer Spalte die gleiche Länge haben, 436 00:25:58,160 --> 00:26:00,780 Sie wieder die Funktion der wahlfreien Zugriff. 437 00:26:00,780 --> 00:26:05,110 Sie können hüpfen zwischen den verschiedenen char Felder in Ihrer Datenbank-Tabelle 438 00:26:05,110 --> 00:26:07,940 wegen einer Datenbank denken, wie Zeilen und Spalten. 439 00:26:07,940 --> 00:26:11,670 Also, wenn jeder von den Saiten ist die gleiche Länge, 440 00:26:11,670 --> 00:26:17,820 Sie wissen, dass das erste Byte 0 ist, ist die nächste bei Byte 8 441 00:26:17,820 --> 00:26:20,240 und dann 16 und dann 24 und so weiter. 442 00:26:20,240 --> 00:26:24,500 Also, wenn alle Saiten von gleicher Länge sind, können Sie hüpfen viel effizienter. 443 00:26:24,500 --> 00:26:26,710 Also das kann ein Vorteil in Bezug auf Leistung sein, 444 00:26:26,710 --> 00:26:29,420 aber in der Regel müssen Sie nicht den Luxus im Voraus zu wissen, 445 00:26:29,420 --> 00:26:32,170 so dass ein varchar ist der Weg zu gehen. 446 00:26:32,170 --> 00:26:36,030 Hier ist ein weiteres Detail, dass auch Facebook in schließlich lief. 447 00:26:36,030 --> 00:26:39,670 Ints sind groß, und wir haben irgendwie nutzen sie standardmäßig zu jeder Zeit wollen wir eine Zahl, 448 00:26:39,670 --> 00:26:41,750 aber es ist nur 32 Bit. 449 00:26:41,750 --> 00:26:46,210 >> Und obwohl Facebook nicht ganz haben 4 Milliarden Nutzer jetzt 450 00:26:46,210 --> 00:26:48,680 es gibt definitiv einige Leute da draußen mit mehreren Konten 451 00:26:48,680 --> 00:26:50,960 oder Konten wurden geöffnet und wieder geschlossen, 452 00:26:50,960 --> 00:26:55,130 und so Facebook selbst. Ich glaube, vor ein paar Jahren musste Übergang von int 453 00:26:55,130 --> 00:27:00,010 um, wie es treffend genannt, bigint, die nur 64 Bit statt ist. 454 00:27:00,010 --> 00:27:02,230 So auch das ist eine Design-Entscheidung. 455 00:27:02,230 --> 00:27:06,570 Sie wäre unglaublich glücklich, wenn das endgültige Projekt wendet Start 456 00:27:06,570 --> 00:27:10,010 hat 4 Milliarden und 1 Benutzer, geben oder nehmen, 457 00:27:10,010 --> 00:27:13,200 in diesem Fall mit ints vielleicht ein wenig kurzsichtig. 458 00:27:13,200 --> 00:27:16,230 Aber in Wirklichkeit ist Ihr Benutzer-Tabelle wahrscheinlich gut mit ints. 459 00:27:16,230 --> 00:27:19,340 Aber für so etwas wie pset 7, wie Ihre Geschichte Tisch, 460 00:27:19,340 --> 00:27:23,700 haben Sie vielleicht Tausende, Millionen von Nutzern, wenn Sie entwickeln sich zu etrade.com. 461 00:27:23,700 --> 00:27:26,020 So während Sie vielleicht nicht mehr als 4 Milliarden Anwender 462 00:27:26,020 --> 00:27:30,070 jene Benutzer, die Sie zu tun haben könnte mehr als 4 Milliarden Transaktionen im Laufe der Zeit - 463 00:27:30,070 --> 00:27:33,200 kauft und verkauft und Dinge in ihrer Geschichte. 464 00:27:33,200 --> 00:27:38,090 Also, wenn Sie erwarten, zu tun - wieder, das sind gute Probleme haben, wenn Sie so viel Daten haben - 465 00:27:38,090 --> 00:27:40,920 wenn Sie erwarten, Daten über die Größe eines int, 466 00:27:40,920 --> 00:27:47,740 gehen mit so etwas wie bigint ist eine Richtung, die nicht häufig genug von Designern verabschiedet 467 00:27:47,740 --> 00:27:49,710 weil die Menschen Zahl, die nicht ist ein Problem zu sein, 468 00:27:49,710 --> 00:27:51,930 aber es ist so einfach, etwas größer als die Auswahl. 469 00:27:51,930 --> 00:27:55,380 Decimal wir in pset 7, die fester Genauigkeit legt mit 470 00:27:55,380 --> 00:27:59,840 so können Sie vermeiden, die Fragen im Zusammenhang mit Schwimmern und Doppelzimmer und Realen und dergleichen. 471 00:27:59,840 --> 00:28:02,440 >> Und dann gibt es einige andere Felder hier. Wir werden unsere Hände auf sie winken bis zu einem gewissen Ausmaß. 472 00:28:02,440 --> 00:28:07,270 Aber Daten, Zeiten haben alle einen vorgeschriebenen Format in MySQL, 473 00:28:07,270 --> 00:28:10,830 und der Vorteil der Speicherung von Daten als Daten und nicht VARCHARs 474 00:28:10,830 --> 00:28:15,730 bedeutet, dass die Datenbank tatsächlich formatieren sie in verschiedenen Formaten, 475 00:28:15,730 --> 00:28:18,800 ob ein US-Format oder europäischem Format oder dergleichen - aber Sie wollen, dass es - 476 00:28:18,800 --> 00:28:22,700 viel effizienter, als wenn es nur einige generische varchar. 477 00:28:22,700 --> 00:28:25,150 Und dann gibt es einige andere binary, varbinary Blobs. 478 00:28:25,150 --> 00:28:28,580 Dies sind binary large objects, und Sie können auch binäre Daten 479 00:28:28,580 --> 00:28:30,750 sowie geometrische Daten in einer Datenbank. 480 00:28:30,750 --> 00:28:34,350 Aber für uns wir typischerweise etwa ints und VARCHARs und dergleichen zu kümmern. 481 00:28:34,350 --> 00:28:36,230 Wir beenden dieses Beispiel mit Haus. 482 00:28:36,230 --> 00:28:40,030 Haus werde ich willkürlich sagen werde wird 255 Zeichen sein. 483 00:28:40,030 --> 00:28:42,850 Dann Standardwert konnten wir dies tun. 484 00:28:42,850 --> 00:28:47,440 Wir könnten standardmäßig jeden in Mather House, zum Beispiel. 485 00:28:47,440 --> 00:28:49,710 Das ist, wie wir angeben, dass die Datenbank 486 00:28:49,710 --> 00:28:52,460 sollten sicherstellen, dass immer jemand hat einen Wert. Aber ich lasse das sein. 487 00:28:52,460 --> 00:28:55,270 In der Tat, für Menschen, die aus leben Campus und nicht in einem Haus, 488 00:28:55,270 --> 00:28:59,590 vielleicht habe ich wirklich wollen, um anzugeben, dass der Standardwert für Haus NULL ist, 489 00:28:59,590 --> 00:29:04,890 und dann muss ich dieses Kontrollkästchen und geben Sie die Datenbank, es ist okay, wenn die Benutzer-Haus ist NULL. 490 00:29:04,890 --> 00:29:07,270 >> Auch dies ist ein weiterer Abwehrmechanismus Sie an Stelle setzen können 491 00:29:07,270 --> 00:29:10,590 Sie müssen also nicht einmal, um es in Ihrem PHP-Code unbedingt setzen. 492 00:29:10,590 --> 00:29:14,630 Die Datenbank wird sichergestellt, dass die Dinge sind oder nicht NULL. 493 00:29:14,630 --> 00:29:17,310 Und dann schließlich Attribute. 494 00:29:17,310 --> 00:29:18,920 Keiner von ihnen sind wirklich relevant. 495 00:29:18,920 --> 00:29:22,880 Binary, unsigniert - keiner von denen sind für eine varchar. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 Hat jemand wissen oder vergessen haben oder eine Vermutung, was ein Index ist 498 00:29:27,320 --> 00:29:29,510 für so etwas wie Haus? 499 00:29:29,510 --> 00:29:35,240 Auch dies ist tatsächlich ein wichtiges und relativ einfach Design-Entscheidung. 500 00:29:35,240 --> 00:29:39,200 Für diejenigen, die sie noch nicht gesehen, am Freitag sprachen wir kurz über Primärschlüssel. 501 00:29:39,200 --> 00:29:43,240 In einer Datenbank-Tabelle ist ein Primärschlüssel das Feld oder Spalte 502 00:29:43,240 --> 00:29:46,270 eindeutig identifiziert Zeilen in der Tabelle. 503 00:29:46,270 --> 00:29:49,150 So in der aktuellen Tabelle haben wir IDs haben wir Namen und E-Mails. 504 00:29:49,150 --> 00:29:52,050 Welche von denen ist der beste Kandidat für ein Primärschlüssel sein, 505 00:29:52,050 --> 00:29:55,810 deren Aufgabe es ist eindeutig zu identifizieren Zeilen? 506 00:29:55,810 --> 00:29:57,530 Wahrscheinlich ID. 507 00:29:57,530 --> 00:29:59,930 Wohl konnten wir auch nutzen, was eigentlich? 508 00:29:59,930 --> 00:30:02,860 Vielleicht könnten Sie nutzen E-Mail, weil es in der Theorie einzigartig ist 509 00:30:02,860 --> 00:30:05,380 es sei denn, die Menschen teilen sich E-Mail-Konten. 510 00:30:05,380 --> 00:30:09,980 Aber die Realität ist, dass, wenn Sie mit einer numerischen ID wie 1234, 511 00:30:09,980 --> 00:30:14,170 das ist nur 32 Bit, während ein E-Mail-Adresse Diese viele Bytes oder diese viele Bytes sein könnte. 512 00:30:14,170 --> 00:30:16,610 So in Bezug auf Effizienz eindeutige Kennungen, 513 00:30:16,610 --> 00:30:19,270 es neigt dazu, eine gute Übung, nur um eine int verwenden 514 00:30:19,270 --> 00:30:23,090 auch wenn Sie eine Schnur Kandidaten, dass Sie wohl gebrauchen könnte. 515 00:30:23,090 --> 00:30:26,760 >> Für so etwas wie Haus, sollte dies nicht ein Primärschlüssel sein 516 00:30:26,760 --> 00:30:30,770 weil dann nur 1 Person könnte in Mather leben und 1 Person im Currier und dergleichen. 517 00:30:30,770 --> 00:30:32,790 Desgleichen sollte diese nicht eindeutig sein. 518 00:30:32,790 --> 00:30:37,830 Die Differenz zwischen primären und einzigartig ist, dass im Fall der aktuellen Tabelle, 519 00:30:37,830 --> 00:30:42,620 ID wäre primär, sondern E-Mail ist nicht primär für den Grund, warum wir gerade erwähnt - 520 00:30:42,620 --> 00:30:44,740 Leistung - aber es sollte noch eindeutig sein. 521 00:30:44,740 --> 00:30:47,200 So können Sie immer noch Eindeutigkeit erzwingen, ohne den Anspruch 522 00:30:47,200 --> 00:30:49,520 dass es ein super wichtig primären Sichtfeld. 523 00:30:49,520 --> 00:30:52,610 Aber dieses ist sehr hilfreich: Index. 524 00:30:52,610 --> 00:30:56,180 Wenn Sie wissen im Voraus für Ihre Abschlussarbeit, für pset 7, oder im allgemeinen, 525 00:30:56,180 --> 00:30:59,480 dass dieses Feld Haus wird etwas, das man auf eine Menge zu suchen sein, 526 00:30:59,480 --> 00:31:01,910 mit dem Schlüsselwort SELECT oder etwas anderes, 527 00:31:01,910 --> 00:31:05,180 dann kann man präventiv sagen, die Datenbank, um ihre Magie zu arbeiten 528 00:31:05,180 --> 00:31:10,510 und stellen Sie sicher, dass es in Erinnerung schafft keine Lust Datenstrukturen notwendig 529 00:31:10,510 --> 00:31:13,770 Recherchen nach Hause Basis zu beschleunigen. 530 00:31:13,770 --> 00:31:17,860 Vielleicht wird es eine Hash-Tabelle zu verwenden, vielleicht wird es mit einem verketteten Liste. 531 00:31:17,860 --> 00:31:21,260 In Wirklichkeit ist es, einen Baum zu verwenden pflegt, heißt oft eine Struktur eines B-Baum - 532 00:31:21,260 --> 00:31:24,090 kein binärer Baum, sondern ein B-Baum - das ist ein sehr breit Baum 533 00:31:24,090 --> 00:31:27,370 dass Sie vielleicht in einer Klasse wie cs124 die Datenstrukturen Klasse zu sehen. 534 00:31:27,370 --> 00:31:31,800 Aber kurz gesagt, müssen Sie nicht über, dass bei Verwendung intelligente Datenbank-Software kümmern. 535 00:31:31,800 --> 00:31:35,890 Sie können nur sagen, dass es, "Index dieses Feld, damit ich auf sie effizienter durchsuchen können." 536 00:31:35,890 --> 00:31:40,250 >> Wenn Sie diese aus und lassen Sie versuchen, für alle in der Datenbank, die in Mather lebt suchen, 537 00:31:40,250 --> 00:31:42,710 es wird in eine lineare Suche über. 538 00:31:42,710 --> 00:31:45,360 Und wenn du hast 6.000 undergrads alle leben in einem Haus, 539 00:31:45,360 --> 00:31:47,900 Sie gehen, um die gesamte Tabelle zu suchen, um die Matherites finden, 540 00:31:47,900 --> 00:31:52,190 während, wenn Sie sagen Index, hoffentlich wird es etwas enger zu einer logarithmischen Suche sein 541 00:31:52,190 --> 00:31:54,510 diese Arten von Studenten. 542 00:31:54,510 --> 00:31:56,750 Dies ist nur eine kostenlose Funktion einzuschalten, 543 00:31:56,750 --> 00:31:59,530 obwohl es nicht zu einem Preis von rund Menge an Speicherplatz kommen. 544 00:31:59,530 --> 00:32:02,690 Schließlich auto-increment, diese AI Feld 545 00:32:02,690 --> 00:32:05,830 das bedeutet nur, wenn es ein int ist und Sie nicht wollen, zu kümmern zu erhöhen it yourself 546 00:32:05,830 --> 00:32:07,570 jedes Mal, wenn es einen neuen Benutzer zu überprüfen, dass 547 00:32:07,570 --> 00:32:11,910 und jeder Benutzer, die eingefügt wird, erhalten automatisch eine neue ID. 548 00:32:11,910 --> 00:32:15,620 Lassen Sie auf Speichern, und jetzt lassen Sie uns Fehler mit diesem Entwurf. 549 00:32:15,620 --> 00:32:20,200 Wenn ich gehe in Blättern Beachten Sie, dass sowohl Mike und mein Haus NULL ist. 550 00:32:20,200 --> 00:32:22,420 Ich kann phpMyAdmin diese manuell bearbeiten. 551 00:32:22,420 --> 00:32:25,110 Ich kann gehen, hier und geben Mather und dann die Eingabetaste drücken, 552 00:32:25,110 --> 00:32:27,740 und jetzt feststellen, die Tabelle ist anders. 553 00:32:27,740 --> 00:32:29,270 Aber ich merke, könnte auch noch etwas anderes zu tun. 554 00:32:29,270 --> 00:32:33,530 Davids ID ist 1, so phpMyAdmin ist wieder nur ein administratives Werkzeug; 555 00:32:33,530 --> 00:32:35,970 Das ist nicht etwas, was Ihre Benutzer immer gehen, um zu sehen. 556 00:32:35,970 --> 00:32:38,810 Also, wenn ich stattdessen auf die Registerkarte SQL up top - 557 00:32:38,810 --> 00:32:41,450 und wieder wird pset 7 Sie mehr von dieser Abfragen einzuführen - 558 00:32:41,450 --> 00:32:45,260 Ich kann manuell ausführen SQL Structured Query Language-Befehl 559 00:32:45,260 --> 00:32:56,410 UPDATE users SET Haus = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Diese SQL-Abfragen, schön genug, ziemlich lesbar von links nach rechts. 561 00:33:00,830 --> 00:33:04,350 Aktualisieren Sie die Benutzer-Tabelle, setzen Sie das Feld namens Haus Pfoho 562 00:33:04,350 --> 00:33:06,830 sich der Benutzer-ID 1 ist. 563 00:33:06,830 --> 00:33:11,480 Oder ich könnte auch tun, wo email = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Solange eindeutig identifiziert mir, das wäre so gut funktionieren. 565 00:33:14,860 --> 00:33:18,810 Aber ID um eine höhere Leistung zu sein pflegt, so lasst uns das tun. 566 00:33:18,810 --> 00:33:22,950 Lasst uns auf Go. Okay, nicht lecture.users nicht existieren. Was ist mein Fehler? 567 00:33:22,950 --> 00:33:26,220 Was ist die Tabelle tatsächlich als hier? 568 00:33:26,220 --> 00:33:28,770 Es heißt Schüler, nur weil das ist, was wir hier getan hat oben links. 569 00:33:28,770 --> 00:33:31,860 Es nennt sich Studenten, nicht Nutzer. So klicken Sie jetzt gehen. 570 00:33:31,860 --> 00:33:34,330 1 row betroffen. Abfrage dauerte 0,01 Sekunden. 571 00:33:34,330 --> 00:33:38,010 Wenn ich auf Jetzt durchsuchen, jetzt Malan lebt in Pfoho. 572 00:33:38,010 --> 00:33:42,070 Also das ist ein weiterer Vorgeschmack auf SQL, aber die pset werden Sie durch ein bisschen mehr von diesem Spaziergang. 573 00:33:42,070 --> 00:33:44,710 >> Es ist eine dumme Entscheidung, die ich schon gemacht habe hier. 574 00:33:44,710 --> 00:33:47,820 Ich würde argumentieren, dass diese Datenbank-Design ist ineffizient 575 00:33:47,820 --> 00:33:51,650 denn je mehr Leute, die ich in den der Schüler Tisch, 576 00:33:51,650 --> 00:33:54,730 Je mehr von uns beginne ich hinzufügen, die mehrere der TFs ich damit beginnen, 577 00:33:54,730 --> 00:33:58,320 werden wir beginnen, zu sehen, was Redundanzen in dieser Tabelle? 578 00:34:00,840 --> 00:34:06,020 >> Yeah. [Schüler] Sehen, dass es bei den Schülern ist, verwenden wir die gleiche [unverständlich] 579 00:34:06,020 --> 00:34:07,360 Das Gleiche - Richtig, genau. 580 00:34:07,360 --> 00:34:10,400 Also, wenn 400 Menschen in Mather leben, geben oder nehmen, 581 00:34:10,400 --> 00:34:15,000 schließlich diese Tabelle wird auf 400 Zeilen, die "Mather", "Mather sagen haben" 582 00:34:15,000 --> 00:34:16,590 "Mather", "Mather", "Mather." 583 00:34:16,590 --> 00:34:19,820 Wir verschwenden all diese Bytes, und es gibt ein paar Imbissbuden gibt. 584 00:34:19,820 --> 00:34:23,080 1, gibt es das verrückte Ecke Fall, wenn jemand zahlt eine Menge Geld 585 00:34:23,080 --> 00:34:25,949 und benennt Mather, haben wir jetzt unsere ganze Datenbank-Tabelle zu ändern. 586 00:34:25,949 --> 00:34:29,730 Das ist nicht zu oft passieren, obwohl Pfoho einmal genannt wurde North House vor 15 Jahren, 587 00:34:29,730 --> 00:34:32,310 so ist es passiert. Aber das ist nicht alles, was überzeugend. 588 00:34:32,310 --> 00:34:36,000 Zwingender als eine Ecke Fall wie dem des Müssens, um die Daten in großen Mengen zu aktualisieren 589 00:34:36,000 --> 00:34:41,150 für eine Datenbank ist, warum sind Sie die Speicherung MATHER wieder und wieder und wieder und wieder? 590 00:34:41,150 --> 00:34:43,020 Das ist eine Menge von Zeichen, 6 Zeichen. 591 00:34:43,020 --> 00:34:45,500 Können wir nicht noch besser machen als die, vor allem für Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Sicherlich können wir besser machen, als dass viele Zeichen. 593 00:34:48,320 --> 00:34:51,790 Warum nicht einfach zuordnen eine eindeutige Kennung mit jedem Haus 594 00:34:51,790 --> 00:34:55,020 und speichern, die für jeden Benutzer? Also lasst uns versuchen. 595 00:34:55,020 --> 00:35:00,610 Anstatt einfach die Schüler Tisch, lass mich gehen bis zu meinem Vortrag Datenbank hier oben links. 596 00:35:00,610 --> 00:35:02,600 Beachten Sie hier heißt es Tabelle erstellen. 597 00:35:02,600 --> 00:35:04,550 Lassen Sie mich eine neue Tabelle namens Häuser. 598 00:35:04,550 --> 00:35:08,880 Die Anzahl der Spalten wird 2 sein. Enter. 599 00:35:08,880 --> 00:35:11,200 Jetzt habe ich 2 Felder. 600 00:35:11,200 --> 00:35:14,600 Ich werde nennen dies die Namen, und es wird ein varchar der Länge 255 sein, 601 00:35:14,600 --> 00:35:18,770 >> aber das ist ziemlich willkürlich. Lassen Sie mich dies hier unten durch Konvention gestellt. 602 00:35:18,770 --> 00:35:22,840 So setzen Sie eine ID hier. Lassen Sie geben jedem Haus eine eindeutige Kennung. 603 00:35:22,840 --> 00:35:25,360 Geben wir jedem Haus einen Namen. 604 00:35:25,360 --> 00:35:30,980 Lassen Sie festlegen, dass die Kennung wird nur durch Konvention unsigned um nur positive Zahlen. 605 00:35:30,980 --> 00:35:35,020 Fahren wir fort und geben diese ein Auto-increment-Feld für jetzt. 606 00:35:35,020 --> 00:35:38,160 Und brauchen wir etwas anderes? 607 00:35:38,160 --> 00:35:41,010 Fahren wir fort und klicken Sie auf Speichern. 608 00:35:41,010 --> 00:35:42,480 Jetzt habe ich eine zweite Tabelle. 609 00:35:42,480 --> 00:35:45,860 Beachten Sie als beiseite dies der etwas kryptischen SQL-Befehl 610 00:35:45,860 --> 00:35:50,280 Sie hätte, um manuell eingeben, wenn nicht mit einem Administrator-Tool wie phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 So ein weiterer Grund, warum wir sie verwenden. 612 00:35:51,990 --> 00:35:55,480 Es ist wunderbar nützliche Art von pädagogisch, weil Sie klicken können, um 613 00:35:55,480 --> 00:36:01,050 und herauszufinden, wie die Dinge nur durch Kopieren und Einfügen, was phpMyAdmin haben zu arbeiten. 614 00:36:01,050 --> 00:36:04,150 Aber die CREATE TABLE-Befehl ist, was gerade ausgeführt wird, und hier ist mein Tisch. 615 00:36:04,150 --> 00:36:11,370 Lassen Sie mich gehen Sie jetzt und nutzen raw SQL anstatt vereinfachen, indem Sie auf die Registerkarte Einfügen. 616 00:36:11,370 --> 00:36:15,040 Lassen Sie mich nicht in die Häuser INSERT, 617 00:36:15,040 --> 00:36:22,230 und ich werde sagen, der Name des Hauses wird ein Wert von 'Mather' haben. 618 00:36:22,230 --> 00:36:24,790 Das war's. Diese Syntax ist ein wenig mehr kryptisch. 619 00:36:24,790 --> 00:36:26,660 Dies ist der Name der Felder, die wir einfügen wollen. 620 00:36:26,660 --> 00:36:30,390 Dies sind die Werte, die wir wollen in diesen Bereichen einzusetzen. Lassen Sie mich auf Start klicken. 621 00:36:30,390 --> 00:36:34,410 1 Zeile eingefügt dauerte 0,02 Sekunden. Lassen Sie mich auf Jetzt durchsuchen. 622 00:36:34,410 --> 00:36:42,020 >> Beachten Sie, wenn ich auf Durchsuchen klicken, gibt es Mather, dessen ID durch Automatisierung die Nummer 1. 623 00:36:42,020 --> 00:36:45,000 Lass es mich tun eine andere. Lassen Sie mich in der Registerkarte SQL gehen. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO Häuser. Der Name des Hauses wird einen Wert von Pfoho haben und so weiter. 625 00:36:52,950 --> 00:36:56,350 Gehen. Und ich kann weiter machen dies wieder und wieder und wieder. 626 00:36:56,350 --> 00:36:59,470 Oder wenn Sie sich langweilen mit phpMyAdmin, können Sie einfach auf die Registerkarte Einfügen 627 00:36:59,470 --> 00:37:01,000 und nicht um die rohe SQL eingeben. 628 00:37:01,000 --> 00:37:04,690 Sie können einfach schlagen es schneller, indem Sie zum Beispiel, Currier, Enter, 629 00:37:04,690 --> 00:37:07,610 und jetzt, wenn wir auf Durchsuchen klicken, gibt es Currier mit der ID 3. 630 00:37:07,610 --> 00:37:09,920 Also das ist, was wir mit auto-increment bedeuten. 631 00:37:09,920 --> 00:37:12,280 Aber jetzt haben wir etwas bei den Schülern zu beheben. 632 00:37:12,280 --> 00:37:16,240 In die Schüler, was sollte der Datentyp des Hauses Feld nun sein? 633 00:37:16,240 --> 00:37:19,450 Es sollte ein int sein, richtig? 634 00:37:19,450 --> 00:37:23,950 Also das Ziel ist hier ausklammern, sonst wie zu normalisieren bekannt, die Tische 635 00:37:23,950 --> 00:37:27,940 so dass wir speichern keine Informationen redundant in keinem meiner Tabellen. 636 00:37:27,940 --> 00:37:31,130 Und wieder wird der Weg, den wir hier wollten Mather, Mather sagen, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, die sehr überflüssig ist 638 00:37:34,220 --> 00:37:36,240 im Hinblick auf die Verschwendung von den Zeichen. 639 00:37:36,240 --> 00:37:40,820 Also lass mich gehen Sie vor, und dies ändern, indem Sie auf Struktur, 640 00:37:40,820 --> 00:37:44,620 und lassen Sie mich gehen Sie vor und überprüfen Sie das Haus Feld klicken Sie auf Ändern, 641 00:37:44,620 --> 00:37:46,990 und jetzt werde ich dies zu ändern int sein. 642 00:37:46,990 --> 00:37:49,490 255 ist nicht mehr relevant. 643 00:37:49,490 --> 00:37:54,010 Lassen Sie mich gehen Sie vor und sagen, dass ist gut, wenn es immer noch NULL. Speichern. 644 00:37:54,010 --> 00:37:55,870 Jetzt Tabelle Schüler wurde erfolgreich geändert, 645 00:37:55,870 --> 00:37:59,090 und wieder bemerken Haus ist ein int. 646 00:37:59,090 --> 00:38:02,220 Nebenbei, ignorieren Sie die Zahl in Klammern, wenn es um ints kommt. 647 00:38:02,220 --> 00:38:03,770 >> Dies ist für Legacy Gründen. 648 00:38:03,770 --> 00:38:06,920 Zurück in den Tag, wenn Sie nicht über GUIs, Sie stattdessen hatte eine Befehlszeile Umwelt, 649 00:38:06,920 --> 00:38:11,580 die 10 und 11 angegeben, wie viele Zeichen Sie soll zeigen, 650 00:38:11,580 --> 00:38:13,950 in das Terminal-Fenster tatsächlich angezeigt Feldern. 651 00:38:13,950 --> 00:38:19,150 Es hat nichts mit der Bit-Länge des eigentlichen Feld zu tun, so dass wir einfach ignorieren, dass für jetzt. 652 00:38:19,150 --> 00:38:20,990 Jetzt habe ich in dieser Tabelle gehen. 653 00:38:20,990 --> 00:38:24,610 Und wenn David in Mather lebt, sollte Haus nicht 0 sein, 654 00:38:24,610 --> 00:38:27,350 das ist ein Standard-int Wert am nächsten auf NULL. 655 00:38:27,350 --> 00:38:29,810 Er sollte in Haus 1 leben. 656 00:38:29,810 --> 00:38:36,870 Lasst uns willkürlich sagen, dass Mike lebt in Pfoho, so Hausnummer 2. 657 00:38:36,870 --> 00:38:40,160 Jetzt ist meine Tabelle sieht ein wenig mehr kryptisch. 658 00:38:40,160 --> 00:38:41,960 Aber bedenken Sie die Effizienz. 659 00:38:41,960 --> 00:38:44,860 Ich bin jetzt mit nur 32 Bit, um das Haus zu identifizieren, 660 00:38:44,860 --> 00:38:49,530 was bedeutet, es gibt nur 1 kanonischen Definition von meinem Haus Mather und Pfoho 661 00:38:49,530 --> 00:38:52,090 und das ist in den Häusern Tisch. 662 00:38:52,090 --> 00:38:55,880 Also, wenn ich jetzt wieder anzuschließen diese Tabellen wollen, der es auf diese Weise zu denken. 663 00:38:55,880 --> 00:39:01,980 Hier habe ich meinen Schülern Tisch, und auf der rechten Seite gibt es diese Zahlen, 1 und 2. 664 00:39:01,980 --> 00:39:04,180 1 ist Mather, 2 Pfoho. 665 00:39:04,180 --> 00:39:08,580 Wir haben die gleichen Zahlen in dieser anderen Tabelle, die als Häuser wird, 666 00:39:08,580 --> 00:39:11,020 1 und 2 und 3 für die drei Häuser. 667 00:39:11,020 --> 00:39:14,990 Was wir jetzt wollen, ist die Möglichkeit im Code, PHP und SQL, 668 00:39:14,990 --> 00:39:18,800 zur sortieren anzuschließen diese Tische, wo, wenn dies sind die Studenten und das sind die Häuser, 669 00:39:18,800 --> 00:39:22,050 Wir wollen irgendwie kombinieren, so dass ein Linien mit 1, 670 00:39:22,050 --> 00:39:25,670 2 Zeilen mit 2, und damit wir herausfinden können, wo David 671 00:39:25,670 --> 00:39:28,000 und wo Mike und wo alle anderen lebt. 672 00:39:28,000 --> 00:39:31,850 Um dies zu tun, können wir eine SQL-Abfrage wie folgt aus. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM Schüler JOIN Häusern ON - 674 00:39:40,470 --> 00:39:43,000 Und nun, was Feldern wollen wir auf beitreten? 675 00:39:43,000 --> 00:39:49,520 So students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Ein wenig kryptisch, aber dieser Teil bedeutet wörtlich eine neue temporäre Tabelle 677 00:39:54,150 --> 00:39:56,690 Das ist das Ergebnis des Beitritts Studenten und Häuser. 678 00:39:56,690 --> 00:40:00,340 Und wie wollen Sie die Fingerspitzen hier kombinieren? 679 00:40:00,340 --> 00:40:05,280 Set der Studierenden Haus Feld gleich der Häuser ID-Feld. 680 00:40:05,280 --> 00:40:10,220 Und wenn ich jetzt klicken Sie auf Go, bekomme ich wieder genau das, was ich erhofft hatte. 681 00:40:10,220 --> 00:40:15,890 David ist in Mather, ist Mike in Pfoho, und ich sehe auch die eindeutigen IDs. 682 00:40:15,890 --> 00:40:18,640 Aber der Punkt ist jetzt habe ich eine komplette Tabelle. 683 00:40:18,640 --> 00:40:23,020 Und so ist die takeaway hier für pset 7 oder wirklich für das endgültige Projekt: 684 00:40:23,020 --> 00:40:25,830 Wenn Sie feststellen, dass Sie die Speicherung jedes Stück Information redundant 685 00:40:25,830 --> 00:40:28,850 ob es ein Haus ist, vielleicht ist es eine Stadt, Staat und Postleitzahl 686 00:40:28,850 --> 00:40:32,050 wo ZIP können in der Regel, aber nicht immer als eindeutige Kennung verwendet werden, 687 00:40:32,050 --> 00:40:35,810 Sie durch die Ausübung geistig und dann mit so etwas wie phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 Factoring darauf hin, dass gemeinsame Daten, da insbesondere Ihre Website erhält mehr gut genutzt 689 00:40:40,660 --> 00:40:45,440 und mehr populär, ist dies, wie Sie sicher, dass alles super schnell ist zu machen, 690 00:40:45,440 --> 00:40:51,930 indem die Datenbank so viele Hinweise auf Einzigartigkeit als möglich. 691 00:40:51,930 --> 00:40:53,860 Das war eine Menge. 692 00:40:53,860 --> 00:40:59,010 Haben Sie Fragen? Gut. Werfen wir einen 5-minütigen Pause gibt und neu zu gruppieren. 693 00:41:01,600 --> 00:41:03,540 Gut. 694 00:41:03,540 --> 00:41:08,680 Das Folgende ist ein Beispiel, das vor einigen Jahren verwendet wurde, wenn ich CS161 stattfand, 695 00:41:08,680 --> 00:41:10,960 das ist die Betriebssysteme Klasse an der Hochschule 696 00:41:10,960 --> 00:41:15,160 die ist dafür erstaunlich bekannt, aber eine verrückte Menge an Arbeit, 697 00:41:15,160 --> 00:41:19,810 und es konzentriert sich wirklich auf einige der Low-Level-Probleme, die in Betriebssystemen ergeben 698 00:41:19,810 --> 00:41:22,700 und auch selbst in der Welt der Datenbanken. 699 00:41:22,700 --> 00:41:27,040 >> Die Geschichte, die von meinem Professor, Margo Seltzer, wurde gesagt, dass Jahr war wie folgt. 700 00:41:27,040 --> 00:41:30,990 Angenommen, Sie haben ein wenig dorm Kühlschrank für Sie und Ihre Mitbewohner haben 701 00:41:30,990 --> 00:41:34,030 und Sie beide wirklich gerne Milch. 702 00:41:34,030 --> 00:41:36,360 So Sie nach Hause kommen von der Klasse 1 Tag, ist Ihr Mitbewohner noch nicht da, 703 00:41:36,360 --> 00:41:39,650 Sie öffnen den Kühlschrank, und man merkt, "Oh verdammt, wir sind der Milch." 704 00:41:39,650 --> 00:41:42,070 So Sie den Kühlschrank zu schließen, gehen Sie über die Straße zu CVS 705 00:41:42,070 --> 00:41:45,830 und in den immer lange Schlangen zu bekommen, um etwas Milch bei CVS kaufen. 706 00:41:45,830 --> 00:41:48,470 Unterdessen kommt Ihre Mitbewohner Hause von seiner Klasse, 707 00:41:48,470 --> 00:41:51,690 kommt in den Raum, öffnet den Kühlschrank wirklich wollen etwas Milch, 708 00:41:51,690 --> 00:41:54,130 öffnet den Kühlschrank und: "Verdammt, keine Milch." 709 00:41:54,130 --> 00:41:57,890 So schließt er oder sie den Kühlschrank, geht aus der Tür und geht zum ABP 710 00:41:57,890 --> 00:42:00,910 oder irgendwo anders als CVS, wo du nicht gehst, um über den Weg 711 00:42:00,910 --> 00:42:02,790 zu holen etwas Milch. 712 00:42:02,790 --> 00:42:04,820 Natürlich ein paar Minuten später, bekommen Sie beide wieder nach Hause 713 00:42:04,820 --> 00:42:07,740 und jetzt haben Sie doppelt so viel Milch, wie Sie eigentlich wollte. 714 00:42:07,740 --> 00:42:10,670 Und als Milch, jetzt wird es zu gehen schlecht, weil man Milch möchte 715 00:42:10,670 --> 00:42:14,200 aber man weiß nicht wirklich wie Milch, so jetzt haben Sie zu viel Milch, so es wird sauer. 716 00:42:14,200 --> 00:42:16,830 Dies ist eine schreckliche, schreckliche Situation. 717 00:42:16,830 --> 00:42:22,920 Was könnte dieses Dilemma gelöst haben, wenn Sie das erste Mitbewohner zu Hause waren? Ja. 718 00:42:22,920 --> 00:42:25,970 [Student] Sie sollten eine Notiz hinterlassen haben. [Gelächter] 719 00:42:25,970 --> 00:42:28,090 Gut. Sie sollten eine Notiz hinterlassen haben. 720 00:42:28,090 --> 00:42:32,320 Sie sollten einen Post-it Note oder dergleichen zu sagen, gesetzt haben "Gone für Milch," 721 00:42:32,320 --> 00:42:36,830 und dann Ihre Mitbewohner konzeptionell würde gesperrt haben tatsächlich tun. 722 00:42:36,830 --> 00:42:38,010 Oder Sie könnten ein Schritt weiter gehen. 723 00:42:38,010 --> 00:42:41,060 Man konnte buchstäblich sperren den Kühlschrank mit irgendeiner Art von Vorhängeschloss, 724 00:42:41,060 --> 00:42:44,870 und jetzt Ihre Mitbewohner werden buchstäblich aus dem Kühlschrank gesperrt werden. 725 00:42:44,870 --> 00:42:48,520 Wenn wir zurück zu verallgemeinern, um die Programmierung, 726 00:42:48,520 --> 00:42:51,610 Sie können fast aus dem Kühlschrank denken, als eine Art von Variablen oder einer Struktur, 727 00:42:51,610 --> 00:42:53,500 eine Art Container für Informationen. 728 00:42:53,500 --> 00:42:58,290 Das Problem grundlegend ist, dass Sie beide durften zu inspizieren 729 00:42:58,290 --> 00:43:02,370 oder lesen Sie den Zustand dieser Datenstruktur, 730 00:43:02,370 --> 00:43:08,050 aber man sah es zu verschiedenen Zeiten und doch beide von Ihnen eine Entscheidung getroffen 731 00:43:08,050 --> 00:43:11,920 basierend auf dem Zustand der Welt zu diesen verschiedenen Zeitpunkten. 732 00:43:11,920 --> 00:43:15,570 So hatte sie eingesperrt den Kühlschrank, würde man zumindest vermieden haben Ihre Mitbewohner 733 00:43:15,570 --> 00:43:19,070 aus der Lage gewesen, um den Zustand der Welt zu inspizieren, 734 00:43:19,070 --> 00:43:22,530 damit er oder sie nicht die gleiche Entscheidung getroffen haben. 735 00:43:22,530 --> 00:43:25,780 So Datenbanken, wie sich herausstellt, haben dieses Problem ständig. 736 00:43:25,780 --> 00:43:31,050 >> Mal sehen, ob wir ein Szenario konstruieren können. 737 00:43:31,050 --> 00:43:34,310 Angenommen, Sie haben eine Art von schlechten Kerl bist und du gehst an die Bank of America 738 00:43:34,310 --> 00:43:37,950 oder einer der anderen Orten an dem Platz, ein paar Geldautomaten nebeneinander haben, 739 00:43:37,950 --> 00:43:41,200 und irgendwie hat man herausgefunden, wie man eine ATM-Karte duplizieren - gar nicht so schwer. 740 00:43:41,200 --> 00:43:42,730 Es ist nur ein Magnetstreifen. 741 00:43:42,730 --> 00:43:45,180 Und so, was Sie wollen, um zu versuchen zu tun ist, dieses Spiel zu spielen 742 00:43:45,180 --> 00:43:49,060 wobei Sie lege 1 Karte in 1 Maschine, eine weitere Karte in die andere Maschine, 743 00:43:49,060 --> 00:43:51,980 und Sie Wesentlichen wollen versuchen, Geld gleichzeitig abheben, 744 00:43:51,980 --> 00:43:54,930 weil mir vorstellen, dass Geschichte geht wie folgt. 745 00:43:54,930 --> 00:43:57,350 Die Maschine, auf der linken Seite nimmt den Schutz Ihrer Karte und Ihrer PIN, 746 00:43:57,350 --> 00:44:00,240 und dann sagen Sie: "Gib mir 100 Dollar." 747 00:44:00,240 --> 00:44:04,790 Der ATM ist so programmiert, zuerst eine Auswahl ihrer Datenbank oder den Gegenwert - 748 00:44:04,790 --> 00:44:10,780 was Datenbank ist es mit - um zu sehen, bedeutet dies Benutzer haben mindestens $ 100 in seinem Konto? 749 00:44:10,780 --> 00:44:16,180 Wenn ja, dann spuckte die $ 100 und subtrahieren 100 $ aus ihrem Gleichgewicht. 750 00:44:16,180 --> 00:44:20,470 Aber natürlich, wenn es mehrere Maschinen hier oder mehrere Möglichkeiten der Inspektion 751 00:44:20,470 --> 00:44:23,560 der Staat dieser Welt, der Banktresor, um zu sehen, wie viel Geld Sie haben, 752 00:44:23,560 --> 00:44:26,780 annehmen, dass nur durch Zufall die Maschine auf der linken und der rechten 753 00:44:26,780 --> 00:44:30,140 sowohl diese Frage stellen ungefähr zur selben Zeitpunkt. 754 00:44:30,140 --> 00:44:34,160 >> Und das kann durchaus passieren. Geldautomaten sind Computer in diesen Tagen. 755 00:44:34,160 --> 00:44:37,670 Also, wenn die Maschine auf der linken sagt: "Ja, Sie haben mindestens $ 100," 756 00:44:37,670 --> 00:44:42,150 mittlerweile die Maschine auf der rechten sagt: "Ja, du mindestens $ 100 zu haben", 757 00:44:42,150 --> 00:44:47,420 dann beide von ihnen gehen, um ihre Programme zu beenden und tatsächlich spuckte die $ 100 758 00:44:47,420 --> 00:44:50,820 und sagen: "Zuvor $ 200 hatte." 759 00:44:50,820 --> 00:44:54,890 "Lassen Sie mich aktualisieren variable jetzt $ 100 auf dem Konto übrig sein." 760 00:44:54,890 --> 00:44:58,780 Aber wenn sie beide Ihren Kontostand überprüft und festgestellt, dass es $ 200 761 00:44:58,780 --> 00:45:02,000 und beide dann die Mathematik zu tun und zu sagen 200 bis 100, 762 00:45:02,000 --> 00:45:06,990 die Maschinen möglicherweise spuckte zwei $ 100 Rechnungen in jeder Maschine, 763 00:45:06,990 --> 00:45:11,360 aber sie haben nur Ihre Summe Kontostand aktualisiert, um $ 100 sein. 764 00:45:11,360 --> 00:45:15,130 In anderen Worten, Sie haben 200 Euro übernommen, sondern weil sie kontrolliert den Zustand der Welt 765 00:45:15,130 --> 00:45:18,840 gleichzeitig und machte dann eine Entscheidung über diesen Wert basiert, 766 00:45:18,840 --> 00:45:21,930 sie könnten nicht die Mathematik letztlich richtig. 767 00:45:21,930 --> 00:45:25,520 So in einer Bank Situation zu Sie wirklich wollen, um irgendeine Art von Lockout haben 768 00:45:25,520 --> 00:45:28,450 so dass, sobald Sie haben den Zustand einiger variable geprüft 769 00:45:28,450 --> 00:45:31,220 Das ist wirklich wichtig, wie Ihr Kontostand, 770 00:45:31,220 --> 00:45:36,070 lassen Sie sich nicht jemand anderes entscheiden auf der Grundlage dieser, bis Sie fertig machen Ihre Sache, 771 00:45:36,070 --> 00:45:38,920 wobei in diesem Fall sind Sie der ATM auf der linken Seite. 772 00:45:38,920 --> 00:45:41,160 Sperren alle anderen aus. 773 00:45:41,160 --> 00:45:44,650 Sie können tatsächlich diesen Effekt zu erzielen in ein paar verschiedene Möglichkeiten. 774 00:45:44,650 --> 00:45:48,660 >> Der einfachste Weg in MySQL ist eine SQL-Zeile, dass wir euch gegeben haben 775 00:45:48,660 --> 00:45:52,030 das Problem set-Spezifikation, die genau so aussieht. 776 00:45:52,030 --> 00:45:57,420 Legen Sie in der Tabelle - was auch immer es genannt wird - eine ID, ein Symbol und eine Aktie, eine Anzahl von Aktien, 777 00:45:57,420 --> 00:45:59,660 die folgenden Werte, zum Beispiel. 778 00:45:59,660 --> 00:46:03,370 Wenn Sie noch nicht gelesen haben das spec doch ist dies ein Beispiel für die Einbindung, wie Sie gehen über 779 00:46:03,370 --> 00:46:07,340 Kauf von 10 Aktien dieser penny stock for President Skroob, 780 00:46:07,340 --> 00:46:10,340 , deren Benutzer-ID für die Zahlen 7? 781 00:46:10,340 --> 00:46:14,070 Das sagt INSERT INTO Tabelle die folgende ID, Symbol und die Anzahl der Aktien 782 00:46:14,070 --> 00:46:18,200 von 7, 'DVN.V' und 10. 783 00:46:18,200 --> 00:46:21,510 Aber - aber, aber, aber - in der zweiten Zeile ist die wichtigste. 784 00:46:21,510 --> 00:46:26,310 ON DUPLICATE KEY UPDATE Aktien = Aktien + VALUES (Aktien). 785 00:46:26,310 --> 00:46:28,350 So ganz kryptische Aussagen auf den ersten Blick. 786 00:46:28,350 --> 00:46:31,990 Aber die Tatsache, dass diese SQL-Abfrage, obwohl es Wraps auf 2 Linien, 787 00:46:31,990 --> 00:46:35,920 ist ein lange Abfrage, bedeutet dies, es ist Atom 788 00:46:35,920 --> 00:46:41,000 in dem Sinne, dass diese Abfrage entweder alle zusammen oder gar nicht ausgeführt werden. 789 00:46:41,000 --> 00:46:45,100 Und nach Definition von MySQL, das ist, wie sie diese Abfrage durchgeführt. 790 00:46:45,100 --> 00:46:51,010 Es ist per Definition in der Anleitung garantiert alle auf einmal oder überhaupt nicht ausgeführt wird. 791 00:46:51,010 --> 00:46:54,020 Die Motivation dafür ist wie folgt. 792 00:46:54,020 --> 00:46:58,540 Wenn Sie in diesem Fall versuchen, 10 Aktien von Aktien zu kaufen, 793 00:46:58,540 --> 00:47:02,260 es ist irgendwie die gleiche Geschichte wie die Milch, es ist irgendwie die gleiche Geschichte wie der ATM. 794 00:47:02,260 --> 00:47:04,970 >> Wenn Sie machen den Fehler, nicht mit dieser Syntax 795 00:47:04,970 --> 00:47:09,610 sondern die Auswahl aus der Datenbank zu sehen, wie viele Aktien dieser penny stock 796 00:47:09,610 --> 00:47:13,750 hat Präsident Skroob haben, und nehme an, er hat 10 Aktien, 797 00:47:13,750 --> 00:47:19,330 und dann einige Sekundenbruchteile später werden Sie dann tun eine UPDATE-Anweisung, 798 00:47:19,330 --> 00:47:24,810 das ist eine andere Anweisung in SQL, gehen Sie vor und fügen Sie 10 weitere Aktien, sagt 799 00:47:24,810 --> 00:47:28,700 seiner derzeitigen 10, so dass im Idealfall die Summe 20, 800 00:47:28,700 --> 00:47:33,490 das Problem ist, weil in der heutigen Datenbank-Systeme und weil in der heutigen Computern 801 00:47:33,490 --> 00:47:35,990 Sie haben mehrere Prozessoren, mehrere Kerne - 802 00:47:35,990 --> 00:47:38,920 in anderen Worten, können Computer buchstäblich dabei mehrere Dinge auf einmal - 803 00:47:38,920 --> 00:47:44,270 es gibt keine Garantie, dass Ihre SELECT und Ihre UPDATE in diesem Fall 804 00:47:44,270 --> 00:47:46,150 werden passieren Rücken an Rücken. 805 00:47:46,150 --> 00:47:49,140 So ein schlechtes Szenario wäre Sie die SELECT 806 00:47:49,140 --> 00:47:51,670 um zu sehen, wie viele Aktien dieser Penny Stock ist Skroob haben, 807 00:47:51,670 --> 00:47:54,710 und dann nur durch Zufall ein weiteres Datenbank-Abfrage wird ausgeführt - 808 00:47:54,710 --> 00:47:57,740 vielleicht seine Skroob in einem anderen Browserfenster versucht bis 10 Aktien kaufen 809 00:47:57,740 --> 00:48:00,700 in einem anderen Fenster ganz ähnlich wie die ATM - 810 00:48:00,700 --> 00:48:05,410 und annehmen, dass eine weitere Abfrage zwischen SELECT und UPDATE bekommt. 811 00:48:05,410 --> 00:48:10,210 Es könnte sein, dass Skroob verliert jetzt eine gewisse Anzahl von Aktien werden 812 00:48:10,210 --> 00:48:14,340 da ein anderer Prozess wird die Kontrolle des Zustands seiner Welt, 813 00:48:14,340 --> 00:48:17,800 oder er bekommt mehr Aktien, als er haben sollte. 814 00:48:17,800 --> 00:48:23,250 Wir werden nicht in die Einzelheiten genau das, was diese besondere Geschichte Linien würde gehen, 815 00:48:23,250 --> 00:48:28,380 aber der Punkt ist, wenn Sie eine Variablen-Wert überprüfen und dann eine Entscheidung treffen müssen, 816 00:48:28,380 --> 00:48:32,500 wenn es ein Risiko, dass jemand anderes etwas zwischen diesen 2 Aussagen, 817 00:48:32,500 --> 00:48:36,220 wie in Multiprozessor-Systemen auftreten, in Multicore-Systemen, 818 00:48:36,220 --> 00:48:41,220 Computer mit der Fähigkeit, mehrere Dinge gleichzeitig zu tun, können schlimme Dinge passieren 819 00:48:41,220 --> 00:48:44,530 wie Bankkonten falsch, belastet den Kauf doppelt so viel Milch, 820 00:48:44,530 --> 00:48:46,730 oder in diesem Fall die falsche Anzahl der Aktien. 821 00:48:46,730 --> 00:48:48,370 Aber gibt es einen einfacheren Weg, um darüber nachzudenken. 822 00:48:48,370 --> 00:48:53,290 >> Es stellt sich heraus, dass SQL unterstützt auch, wenn Sie Ihren Tisch korrekt zu konfigurieren, 823 00:48:53,290 --> 00:48:56,920 etwas namens Transaktionen, die würde ich argumentieren, ist eigentlich noch einfacher zu verstehen 824 00:48:56,920 --> 00:49:00,650 als dieses, aber es ist nicht eine 1-Liner, so ist es eigentlich ein bisschen komplizierter. 825 00:49:00,650 --> 00:49:04,960 Es ist buchstäblich ein Statement in SQL aufgerufen START TRANSACTION. 826 00:49:04,960 --> 00:49:08,300 So wie es ist SELECT, UPDATE, INSERT, DELETE und JOIN und eine Reihe von anderen, 827 00:49:08,300 --> 00:49:10,970 gibt es Schlüsselwörter wie START TRANSACTION. 828 00:49:10,970 --> 00:49:13,560 Und was Sie dann tun im Rahmen der pset 7 - 829 00:49:13,560 --> 00:49:17,270 Sie müssen nicht, dies für pset 7 zu tun, es ist ausdrücklich als nicht notwendig abgelehnt, 830 00:49:17,270 --> 00:49:18,830 aber für die endgültige Projekten kann es sinnvoll sein - 831 00:49:18,830 --> 00:49:22,820 wenn Sie anrufen eine Abfrage START TRANSACTION und dann eine weitere Abfrage 832 00:49:22,820 --> 00:49:25,620 und dann eine weitere Abfrage und dann noch eine andere, und eine andere, 833 00:49:25,620 --> 00:49:31,860 diese Abfragen nicht wirklich ausgeführt, bis rufen Sie die SQL-Anweisung COMMIT werden, 834 00:49:31,860 --> 00:49:37,220 An diesem Punkt, ob es 2 Aussagen oder 20 Aussagen ist, werden sie alle auf einmal ausgeführt werden, 835 00:49:37,220 --> 00:49:42,770 was bedeutet, niemand sonst kann versehentlich kaufen zu viel Milch oder Debitkarte zu viel Geld 836 00:49:42,770 --> 00:49:46,340 oder kaufen zu viele Aktien, weil alle Ihre Anfragen werden ausgeführt 837 00:49:46,340 --> 00:49:48,410 Rücken an Rücken an Rücken an Rücken. 838 00:49:48,410 --> 00:49:51,580 Und das ist super wichtig, vor allem, wenn du tust so etwas. 839 00:49:51,580 --> 00:49:54,900 Dies ist eine willkürliche Beispiel, lasst uns zu aktualisieren das Bankkonto, sagt 840 00:49:54,900 --> 00:50:00,200 indem ein Gleichgewicht gleich Balance - $ 1000, wo die Kontonummer 2 ist. 841 00:50:00,200 --> 00:50:04,260 Und dann die zweite Aussage ist nun lasst uns hinterlegen, dass 1000 $ 842 00:50:04,260 --> 00:50:07,310 in jemand anderes Bankkonto, dessen Kontonummer 1. 843 00:50:07,310 --> 00:50:10,400 >> Mit anderen Worten, dies ist ein perfektes Beispiel dafür, wo Sie wollen, um sicherzustellen, 844 00:50:10,400 --> 00:50:13,590 dass diese beiden Aussagen geschehen oder überhaupt nicht 845 00:50:13,590 --> 00:50:15,450 weil sonst der Kunde wird bekommen verschraubt 846 00:50:15,450 --> 00:50:17,670 und du wirst ihr Geld nehmen und nicht einzahlen es anderswo, 847 00:50:17,670 --> 00:50:20,470 oder die Bank wird bekommen verschraubt, wohin Sie gehen, um das Geld zu hinterlegen sind 848 00:50:20,470 --> 00:50:23,140 aber nicht tatsächlich subtrahieren sie von dem Konto des Benutzers. 849 00:50:23,140 --> 00:50:25,810 Sie wollen also beide zur Ausführung zusammen. 850 00:50:25,810 --> 00:50:29,140 So tritt in der Welt Transaktionen. 851 00:50:29,140 --> 00:50:31,360 Also das ist etwas in der Rückseite Ihres Geistes zu halten, 852 00:50:31,360 --> 00:50:34,710 nicht so sehr für die Zwecke nur eine endgültige Projekt 853 00:50:34,710 --> 00:50:36,700 aber wenn Sie möchten, um Ihre endgültige Projekt irgendwo treffen, 854 00:50:36,700 --> 00:50:39,040 Wenn Sie starten wollen einige Unternehmen um ihn herum, 855 00:50:39,040 --> 00:50:41,270 wenn Sie wollen, um einige studentische Gruppe das Problem auf dem Campus zu lösen 856 00:50:41,270 --> 00:50:45,210 und tatsächlich eine Live, aktive Website, dies sind die Art der subtilen Fehler, die auftreten können 857 00:50:45,210 --> 00:50:49,480 Wenn Sie nicht ganz zu durchdenken, was passieren kann, wenn 2 Personen 858 00:50:49,480 --> 00:50:54,190 versuchen, Ihre Website zugreifen zu buchstäblich im selben Moment in der Zeit, 859 00:50:54,190 --> 00:50:56,890 wobei deren Abfragen sonst verwoben zu werden. 860 00:50:58,840 --> 00:51:01,420 >> Ready for some JavaScript, a teaser davon? 861 00:51:01,420 --> 00:51:04,320 Dies ist unsere letzte Sprache für das Semester. Gut. 862 00:51:04,320 --> 00:51:09,940 Glücklicherweise sieht JavaScript sehr, sehr, sehr ähnlich zu den 2 Sprachen, C und PHP, 863 00:51:09,940 --> 00:51:11,140 haben wir bisher getan. 864 00:51:11,140 --> 00:51:14,340 Es gibt keine JavaScript in pset 7, aber es ist ein unglaublich nützliches Werkzeug 865 00:51:14,340 --> 00:51:18,840 wenn es darum geht zu tun webbasierte letzten Projekte oder wirklich nur Web-Programmierung im Allgemeinen. 866 00:51:18,840 --> 00:51:20,950 So einen schnellen Überblick über etwas namens DOM. 867 00:51:20,950 --> 00:51:23,600 Hier ist eine super einfache Web-Seite, die wirklich nur sagt Hallo Welt 868 00:51:23,600 --> 00:51:25,970 sowohl im Titel und in den Körper. 869 00:51:25,970 --> 00:51:29,270 Da die Einkerbung hat seit einiger Zeit darauf hindeutet, 870 00:51:29,270 --> 00:51:31,380 es ist in der Tat eine Hierarchie zu Webseiten. 871 00:51:31,380 --> 00:51:34,220 Ich könnte das gleiche Ausschnitt des HTML als Baum zu zeichnen, 872 00:51:34,220 --> 00:51:37,470 Denken zurück zu unserer Diskussion von Datenstrukturen in C, wie folgt. 873 00:51:37,470 --> 00:51:40,710 Ich habe einige spezielle Wurzelknoten bezeichnet das Dokument Knoten 874 00:51:40,710 --> 00:51:43,650 und wir werden das analoge dies in JavaScript in nur einem Augenblick sehen. 875 00:51:43,650 --> 00:51:48,330 Das erste Kind und einzige Kind, dass in diesem Fall ist das HTML-Tag. 876 00:51:48,330 --> 00:51:49,880 Es gibt keine direkte Zuordnung des doctype. 877 00:51:49,880 --> 00:51:53,170 Das ist eine besondere Sache, also sollten wir es einfach ignorieren, wenn es um dieses DOM kommt, 878 00:51:53,170 --> 00:51:55,810 Diese Document Object Model Baum. 879 00:51:55,810 --> 00:51:59,530 Beachten Sie, dass das HTML-Tag, das ich willkürlich habe als Rechteck dargestellt, 880 00:51:59,530 --> 00:52:02,890 hat 2 Kinder: Kopf und Körper. 881 00:52:02,890 --> 00:52:04,840 >> Diese werden ebenfalls als Rechtecke gezeichnet. 882 00:52:04,840 --> 00:52:08,970 Es ist sinnvoll, bildhaft, dass der Kopf auf der linken Körper ist. 883 00:52:08,970 --> 00:52:11,960 Die Implikation ist, dass Kopf zuerst kommt im Baum. 884 00:52:11,960 --> 00:52:14,910 So gibt es tatsächlich eine Bestellung an einen Baum, wenn Sie es so zu zeichnen, 885 00:52:14,910 --> 00:52:17,460 obwohl die Formen und so weiter sind willkürlich. 886 00:52:17,460 --> 00:52:20,360 Leiter der Zwischenzeit hat ein einziges Kind namens Titel, 887 00:52:20,360 --> 00:52:25,170 und Titel hat eigentlich seine eigene Kind, das "Hallo Welt" ist, 888 00:52:25,170 --> 00:52:32,210 die ich bewusst machte, wie eine ovale hier, um es etwas anders aus dem Rechteck. 889 00:52:32,210 --> 00:52:37,420 Diese Rechtecke sind Elemente, während hallo, Welt wirklich ein Text-Knoten. 890 00:52:37,420 --> 00:52:39,850 Es ist also ein Knoten im Baum, aber es ist eine andere Art von Knoten 891 00:52:39,850 --> 00:52:41,730 so zog ich es beliebig anders. 892 00:52:41,730 --> 00:52:45,000 Ähnlich funktioniert Körper haben ein Kind namens hallo, Welt als gut, 893 00:52:45,000 --> 00:52:47,910 so anderen Knoten, obwohl sie zufällig sind die gleichen Text, 894 00:52:47,910 --> 00:52:52,100 aber ich habe es gezeichnet mit der gleichen Form. So who cares? 895 00:52:52,100 --> 00:52:56,820 Nun, was ist schön zu HTML ist, dass es diese hierarchische Natur haben. 896 00:52:56,820 --> 00:53:01,010 Und was ist schön zu JavaScript und insbesondere Bibliotheken, die frei verfügbar sind 897 00:53:01,010 --> 00:53:07,120 und beliebt wie jQuery, können Sie in der Baumstruktur so verblüffend einfach. 898 00:53:07,120 --> 00:53:11,790 Jede der Sachen, die wir in C haben mit Zeigern und Verfahrgeschwindigkeit Bäume und rekursiv auf Knoten 899 00:53:11,790 --> 00:53:15,300 linke Kind nach rechts Kind plötzlich wir sortieren können für selbstverständlich 900 00:53:15,300 --> 00:53:19,450 als erstaunlich aufschlussreich, wenn nicht ein bisschen frustrierend 901 00:53:19,450 --> 00:53:22,470 aber nicht annähernd eine effiziente Möglichkeit, über die Programmierung gehen. 902 00:53:22,470 --> 00:53:24,470 Und so mit diesen höheren Programmiersprachen wie JavaScript 903 00:53:24,470 --> 00:53:28,340 wir in der Lage sein, diesen Baum viel intuitiver navigieren. 904 00:53:28,340 --> 00:53:30,430 >> Und in der Tat ist die Syntax sein wird ziemlich vertraut. 905 00:53:30,430 --> 00:53:32,950 Wenn Sie noch nie JavaScript zuvor gesehen, ist dies eine wirklich schöne Referenz 906 00:53:32,950 --> 00:53:35,910 von den Mozilla Leute, die Leute, die machen Firefox, 907 00:53:35,910 --> 00:53:38,370 also zögern Sie nicht, dass an Ihrer Bequemlichkeit zu durchsuchen. 908 00:53:38,370 --> 00:53:41,590 Was Sie zu finden - und diese Folien sind identisch, was wir früher den anderen Tag - 909 00:53:41,590 --> 00:53:44,030 ebenso ist Haupt gegangen. 910 00:53:44,030 --> 00:53:47,010 Also, wenn Sie ein Programm in JavaScript zu schreiben, gibt es keine Hauptfunktion. 911 00:53:47,010 --> 00:53:48,690 Starten Sie einfach das Schreiben von Code. 912 00:53:48,690 --> 00:53:51,660 Aber ein wesentlicher Unterschied zwischen JavaScript und C und PHP 913 00:53:51,660 --> 00:53:55,890 ist, dass während C und PHP bisher wurden serverseitig ausgeführt 914 00:53:55,890 --> 00:53:59,180 durch das Gerät in diesem Fall oder allgemeiner von einem Server, 915 00:53:59,180 --> 00:54:04,270 JavaScript by design ist in der Regel von einem Browser ausgeführt wird. 916 00:54:04,270 --> 00:54:08,440 In anderen Worten, schreibt man JavaScript-Code, wie wir zu erleben 917 00:54:08,440 --> 00:54:13,080 auf einem Server in das Gerät, aber Sie sind es unter Ihren HTML, unter Ihren CSS, 918 00:54:13,080 --> 00:54:16,100 unter Ihren GIFs und Ihre PNGs und Ihre JPEGs 919 00:54:16,100 --> 00:54:19,170 so dass, wenn der Benutzer Ihre Web-Seite besucht, wenn Sie mit JavaScript, 920 00:54:19,170 --> 00:54:21,770 , dass JavaScript-Code wird vom Server zum Browser, 921 00:54:21,770 --> 00:54:24,540 und es ist der Browser tatsächlich ausführt. 922 00:54:24,540 --> 00:54:27,960 So hat dies sinnvolle Konsequenzen für noch geistigen Eigentums. 923 00:54:27,960 --> 00:54:32,600 Es ist irgendwie albern, auch um den Schutz Ihrer IP denken, wenn es um JavaScript-Code kommt 924 00:54:32,600 --> 00:54:37,560 weil von der Natur der Sprache wird sie in der Regel Browser-Seite ausgeführt. 925 00:54:37,560 --> 00:54:40,360 >> Sie können verschleiern sie, was bedeutet, können Sie es sehen verrückt und hässlich 926 00:54:40,360 --> 00:54:45,400 ohne Leerzeichen, horrible Variablennamen, machen es schwieriger für die Menschen, um Ihre IP stehlen, 927 00:54:45,400 --> 00:54:48,120 aber der Schlüssel ist, dass es seitlich Browser ausgeführt wird. 928 00:54:48,120 --> 00:54:51,790 Obwohl als beiseite JavaScript verwendet werden Server-Seite, 929 00:54:51,790 --> 00:54:54,480 die häufigste Anwendungsfall ist im Moment noch auf dem Browser. 930 00:54:54,480 --> 00:54:59,800 Und hier ist, wie es aussieht. Hier ist ein if-else if-else wie C konstruieren, wie PHP. 931 00:54:59,800 --> 00:55:02,420 Hier ist ein boolescher Ausdruck, wenn Sie "oder" 2 Dinge zusammen. 932 00:55:02,420 --> 00:55:04,330 Hier ist, wenn Sie "und" 2 Dinge zusammen. 933 00:55:04,330 --> 00:55:08,300 Hier ist eine switch-Anweisung, die ähnlich wie PHP ist 934 00:55:08,300 --> 00:55:10,810 dass können Sie auf verschiedene Arten von Werten zu wechseln. 935 00:55:10,810 --> 00:55:15,180 Loops haben ähnlich for-Schleifen hier, was identisch zu dem, was wir bisher gesehen haben strukturiert. 936 00:55:15,180 --> 00:55:18,110 While-Schleifen, wir haben while-Schleifen zu tun. 937 00:55:18,110 --> 00:55:20,290 Variablen, jemals so etwas anders. 938 00:55:20,290 --> 00:55:24,560 Sie Variablen deklarieren, wie Sie in PHP und C zu tun, 939 00:55:24,560 --> 00:55:27,860 aber ähnlich ist JavaScript schwach typisiert. 940 00:55:27,860 --> 00:55:32,730 Sie geben keinen int oder float oder String oder so etwas in der Regel. 941 00:55:32,730 --> 00:55:34,240 Sie können angeben, var. 942 00:55:34,240 --> 00:55:38,040 Sie müssen nicht var angeben, aber es hat Auswirkungen, wenn Sie nicht zu tun. 943 00:55:38,040 --> 00:55:42,000 Normalerweise, wenn Sie var weglassen, Sie versehentlich eine globale Variable statt local. 944 00:55:42,000 --> 00:55:46,420 Also lassen Sie mich schlagen vor, dass Sie fast immer nur sagen var und dann den Namen der Variablen. 945 00:55:46,420 --> 00:55:48,740 Es ist nicht eine Art, es ist nur var für variable. 946 00:55:48,740 --> 00:55:52,930 Dies wäre ein Beispiel sein, ob es 123 oder "Hallo Welt" ist. 947 00:55:52,930 --> 00:55:58,910 Arrays vorhanden sind und syntaktisch ähnlich wie PHP. 948 00:55:58,910 --> 00:56:03,690 Ich werde sagen, var Zahlen und dann verwende ich eckigen Klammern wieder auf eine Variable deklarieren 949 00:56:03,690 --> 00:56:08,870 deren Typ Array, das diese besonderen Zahlen in durch Komma getrennt hat. 950 00:56:08,870 --> 00:56:11,740 Und dann endlich, das ist das einzige, das wirklich anders aussieht. 951 00:56:11,740 --> 00:56:16,700 Daran erinnern, dass in PHP würden wir ein assoziatives Array für einen Studenten umgesetzt haben 952 00:56:16,700 --> 00:56:20,220 wie Zamyla das könnte so aussehen, wo die Variable heißt Student. 953 00:56:20,220 --> 00:56:23,370 Die eckigen Klammern bedeuten, hier kommt ein Array. 954 00:56:23,370 --> 00:56:28,500 >> Die Tatsache, dass ich nicht mit numerischen Indizes, sondern Strings - id, Haus, und der Name - 955 00:56:28,500 --> 00:56:30,990 bedeutet, dass diese ein assoziatives Array ist, 956 00:56:30,990 --> 00:56:34,490 und diese Pfeile mit dem Gleichheitszeichen und dem Winkelhalter 957 00:56:34,490 --> 00:56:37,310 bedeutet, daß der Schlüssel "id" ist, ist der Wert 1; 958 00:56:37,310 --> 00:56:39,310 der Schlüssel ist, "haus", ist der Wert Winthrop House; 959 00:56:39,310 --> 00:56:41,800 der Schlüssel ist "name", ist der Wert Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 So gibt es 3 Tasten innerhalb dieses assoziatives Array, von denen jeder seinen eigenen Wert hat. 961 00:56:47,110 --> 00:56:52,880 Wir haben das in pset 7 oder Sie bald in JavaScript gleiche Idee gesehen 962 00:56:52,880 --> 00:56:55,220 aber es wird so aussehen. 963 00:56:55,220 --> 00:57:00,070 So var Studenten - kein Dollarzeichen und keine Erwähnung der Typ noch, aber var - 964 00:57:00,070 --> 00:57:05,860 entspricht und öffnen Sie dann geschweiften Klammern, weil in JavaScript, wenn Sie Schlüssel-Wert-Paare, 965 00:57:05,860 --> 00:57:08,900 Sie tatsächlich so etwas als Objekt bezeichnet. 966 00:57:08,900 --> 00:57:13,490 Und diejenigen von euch, die APCS beteiligt waren oder dergleichen könnte Objekte aus Java erinnern 967 00:57:13,490 --> 00:57:15,140 oder ähnliche Sprachen. 968 00:57:15,140 --> 00:57:17,880 JavaScript ist nicht Java, in erster Linie. 969 00:57:17,880 --> 00:57:21,600 Es war eine bewusste Design-Entscheidung Jahren zu erledigen etwas anderes, das populär war, 970 00:57:21,600 --> 00:57:25,640 seinen Namen, obwohl es keine grundsätzliche Beziehung zu sich selbst Java hat. 971 00:57:25,640 --> 00:57:31,490 JavaScript muss Objekte und erstellen Sie sie mittels der geschweiften Klammer-Notation. 972 00:57:31,490 --> 00:57:36,710 Objekte in JavaScript sind so ziemlich gleichbedeutend mit assoziativen Arrays in PHP 973 00:57:36,710 --> 00:57:40,030 wenn es um das Speichern von Daten in ihnen. 974 00:57:40,030 --> 00:57:44,100 >> Aber auch stärker in JavaScript können Sie sehr leicht zuordnen Funktionen 975 00:57:44,100 --> 00:57:48,040 im Inneren eines Objekts, und obwohl Sie können dies in anderen Sprachen zu tun, 976 00:57:48,040 --> 00:57:50,040 Es ist durchaus eine gemeinsame Paradigma, wie wir sehen werden. 977 00:57:50,040 --> 00:57:54,380 Kurz gesagt, stellt dieses Objekt ein Student, der sich besonders Zamyla, 978 00:57:54,380 --> 00:58:00,380 und es ist ähnlich wie konzeptionell, nur syntaktisch verschieden ist. 979 00:58:00,380 --> 00:58:03,840 Lassen Sie tatsächlich nutzen JavaScript in einer Datei. 980 00:58:03,840 --> 00:58:05,570 Es stellt sich heraus gibt es ein Skript-Tag. 981 00:58:05,570 --> 00:58:08,180 Wir haben einen Stil tag gesehen und wir haben andere HTML-Tags zu sehen. 982 00:58:08,180 --> 00:58:11,510 Das script-Tag tatsächlich enthalten einige JavaScript-Code. 983 00:58:11,510 --> 00:58:15,500 Lassen Sie mich in das Gerät gehen, wo wir einige Quellcode vorgefertigt haben. 984 00:58:15,500 --> 00:58:18,700 Ich habe es noch nicht auf der Webseite veröffentlicht, aber das werde ich nach dem Unterricht zu tun. 985 00:58:18,700 --> 00:58:21,770 Lasst uns eröffnen diese, blink.html. 986 00:58:21,770 --> 00:58:27,560 Zurück in den 1990er Jahren, es war buchstäblich ein HTML-Tag namens blink tag, 987 00:58:27,560 --> 00:58:30,340 und dies war eines der herrlich überstrapaziert Tags im Internet 988 00:58:30,340 --> 00:58:36,140 wobei Sie hatte Besuch einiger der 1990er Jahre-Stil Web-Seite und starten Sie sehen Text blinkt, wie diese, 989 00:58:36,140 --> 00:58:39,810 die Ergebnisse des Marquis tag hatte die Texte gehen wie diese. 990 00:58:39,810 --> 00:58:45,070 Eines der wenigen Male, wo die Welt tatsächlich auf einem Web-Standard hat sich bereit erklärt, 991 00:58:45,070 --> 00:58:48,250 jeder auf der ganzen Linie tötete den blink tag vor einigen Jahren. 992 00:58:48,250 --> 00:58:52,860 Aber wir können es mit JavaScript auferstehen als Demonstration der Macht haben 993 00:58:52,860 --> 00:58:56,660 wenn Sie ein Programm innerhalb einer Web-Seite zu schreiben. 994 00:58:56,660 --> 00:59:00,240 Lassen Sie uns zunächst über die neuen Sachen zu überspringen und konzentrieren uns nur auf den alten. 995 00:59:00,240 --> 00:59:01,780 >> Hier ist das alte Zeug in diesem Beispiel. 996 00:59:01,780 --> 00:59:06,350 Ich habe ein HTML-Tag, ein Kopf-Tag, und ein title-Tag. 997 00:59:06,350 --> 00:59:11,210 Dann habe ich einen Körper tag haben hier mit einem div, ist die Erinnerung nur ein rechteckiger Bereich auf der Seite 998 00:59:11,210 --> 00:59:14,720 dass ich eine eindeutige ID willkürlich "Begrüßung" gegeben, 999 00:59:14,720 --> 00:59:18,320 nur damit ich einen Weg eindeutig darauf zu verweisen haben, hat, dass einige sehr einfache Text: 1000 00:59:18,320 --> 00:59:20,220 hallo, Welt. 1001 00:59:20,220 --> 00:59:23,940 Nun lassen Sie mich nach oben an die Spitze dieser Datei und sehen, was es Neues gibt. 1002 00:59:23,940 --> 00:59:27,710 Das erste, was die neue up top ist das Skript-Tag, 1003 00:59:27,710 --> 00:59:31,280 und innerhalb des script-Tags Ankündigung Ich habe erklärt, eine Funktion. 1004 00:59:31,280 --> 00:59:34,610 Um eine Funktion in JavaScript, ziemlich ähnlich wie PHP zu erklären, 1005 00:59:34,610 --> 00:59:37,930 Sie buchstäblich Write-Funktion dann den Namen der Funktion, Klammern, 1006 00:59:37,930 --> 00:59:40,400 und vielleicht einige Argumente, wenn es dauert keine. 1007 00:59:40,400 --> 00:59:43,510 Dann habe ich meine geschweiften Klammern wie gewohnt, und jetzt haben wir etwas neuen Code 1008 00:59:43,510 --> 00:59:45,230 aber mal sehen, was das bedeutet. 1009 00:59:45,230 --> 00:59:48,670 So var div, bedeutet dies einfach, geben Sie mir eine Variable namens div. 1010 00:59:48,670 --> 00:59:50,530 Ich konnte es nannte foo haben, aber ich wollte, dass es als div werden 1011 00:59:50,530 --> 00:59:52,620 aus Gründen, die klar sein, wird in einem zweiten. 1012 00:59:52,620 --> 00:59:57,480 Dann stellt sich heraus in JavaScript - und dies ist JavaScript-Code in die Webseite eingebettet - 1013 00:59:57,480 --> 01:00:01,760 gibt es einen speziellen globalen Variablen von Arten als Dokument. 1014 01:00:01,760 --> 01:00:04,780 JavaScript ist in der Tat eine objekt-orientierte Sprache. 1015 01:00:04,780 --> 01:00:07,230 Wir werden nicht ins Detail gehen in 50, was das bedeutet, 1016 01:00:07,230 --> 01:00:11,180 aber jetzt wissen, dass ein Objekt so ziemlich wie ein struct. 1017 01:00:11,180 --> 01:00:14,740 Wie wir sahen Weg zurück, wenn in einer der frühesten Problem stellt 1018 01:00:14,740 --> 01:00:17,150 wo wir eine Vielzahl von Informationen in einer Struktur, 1019 01:00:17,150 --> 01:00:21,330 ähnlich wird dokumentieren eine besondere Struktur, die mit dem Browser geht, 1020 01:00:21,330 --> 01:00:24,810 kommt mit einem beliebigen Web-Seite. Es ist nicht etwas, was ich geschaffen. 1021 01:00:24,810 --> 01:00:28,210 Innerhalb von diesem Dokument Struktur, aber haben Sie nicht nur Daten 1022 01:00:28,210 --> 01:00:30,010 aber Sie haben auch Funktionen. 1023 01:00:30,010 --> 01:00:34,090 >> Und jedes Mal, wenn eine Funktion im Inneren einer Struktur, innerhalb eines Objekts, 1024 01:00:34,090 --> 01:00:36,490 es heißt eine Methode. Aber es ist die gleiche Sache. 1025 01:00:36,490 --> 01:00:40,110 Eine Methode ist eine Funktion, die einfach so passiert, auf der Innenseite der etwas anderes sein. 1026 01:00:40,110 --> 01:00:42,990 Dies bedeutet also, dass diese besondere globale Variable Dokument namens 1027 01:00:42,990 --> 01:00:47,690 hat eine Funktion getElementById, die buchstäblich tut das genannt. 1028 01:00:47,690 --> 01:00:52,460 Es wird Sie ein Element aus dem DOM, Document Object Model Baum, 1029 01:00:52,460 --> 01:00:55,520 dessen ID ist in diesem Fall Begrüßung. 1030 01:00:55,520 --> 01:00:59,200 Mit anderen Worten kommt man die ganze Zeit auf Datenstrukturen verbracht ins Spiel. 1031 01:00:59,200 --> 01:01:01,400 Dieses Bild von einem DOM, dass wir vor einem Moment hatte, 1032 01:01:01,400 --> 01:01:06,100 obwohl die Seite ist ein wenig anders, wenn ich einen div hatten in diesem Bild, 1033 01:01:06,100 --> 01:01:11,180 Welche document.getElementById würde zu mir zurückkehren würde effektiv ein Zeiger sein 1034 01:01:11,180 --> 01:01:15,440 auf das Rechteck in den Baum, ein Verweis auf das Rechteck in den Baum. 1035 01:01:15,440 --> 01:01:18,410 Also das ist, was es eigentlich nennen eine dieser Funktionen bedeutet. 1036 01:01:18,410 --> 01:01:21,960 Auch in diesem Fall ist es ein div. Es ist nicht ein Körper oder ein Titel. 1037 01:01:21,960 --> 01:01:26,480 Also mal sehen, was ich dann tun mit diesem div jetzt, dass ich es habe innerhalb dieses Variable namens div. 1038 01:01:26,480 --> 01:01:32,580 Es stellt sich heraus mit JavaScript haben Sie die Möglichkeit, die CSS Ihrer Seite dynamisch zu zwicken. 1039 01:01:32,580 --> 01:01:39,060 Bis jetzt ist alles der CSS wir getan haben, wenn auch begrenzte, in Stilattribute 1040 01:01:39,060 --> 01:01:41,730 oder wo sonst haben wir setzen CSS? 1041 01:01:42,730 --> 01:01:45,810 Ich Art verwöhnt, dass man. In der Stil-Tags am Anfang der Datei. 1042 01:01:45,810 --> 01:01:49,180 Oder dritten Platz in gewesen? 1043 01:01:50,710 --> 01:01:54,590 >> Eine externe Datei, irgendwas. Css. 1044 01:01:54,590 --> 01:01:56,730 Das sind also die drei Orte, die wir CSS bisher getan haben, 1045 01:01:56,730 --> 01:01:59,310 aber der Haken ist, dass wir haben hart alles codiert. 1046 01:01:59,310 --> 01:02:04,060 Sie haben sich entschieden, wie Sie in pset 7 tauchte, entschieden wir uns vor der Vorlesung, was unsere CSS wäre. 1047 01:02:04,060 --> 01:02:07,380 Aber wenn Sie Ihre CSS ändern möchten, können Sie konkret tun, dass 1048 01:02:07,380 --> 01:02:09,370 wenn man einmal eine tatsächliche Programmiersprache. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - nicht Programmiersprachen. JavaScript ist. 1050 01:02:13,910 --> 01:02:18,200 So stellt sich heraus, dass, sobald Sie eine dieser Rechtecke haben vom Baum 1051 01:02:18,200 --> 01:02:23,050 DOM genannt, hat sie selbst einige Daten darin. 1052 01:02:23,050 --> 01:02:27,820 Also das div, dass ich gerade vom Baum griff hat, was wir eine Eigenschaft innerhalb der es nennen 1053 01:02:27,820 --> 01:02:34,390 als Stil, und die Eigenschaft style hat sich eine Eigenschaft namens Sichtbarkeit. 1054 01:02:34,390 --> 01:02:37,330 Ich würde dies nur durch Nachschlagen eines CSS Bedienungsanleitung kennen. 1055 01:02:37,330 --> 01:02:41,160 Es stellt sich heraus, es gibt eine Sichtbarkeit CSS-Eigenschaft, was es sagt. 1056 01:02:41,160 --> 01:02:44,530 Es macht etwas sichtbar oder nicht, sichtbar oder nicht. 1057 01:02:44,530 --> 01:02:46,810 Und wie Sie tun, ist dies. 1058 01:02:46,810 --> 01:02:50,510 Ich programmatisch zu fragen, ob die Sichtbarkeit dieser div verborgen ist, 1059 01:02:50,510 --> 01:02:53,390 was muss ich ändern, um? Sichtbar. 1060 01:02:53,390 --> 01:02:58,840 Else, wenn die Sichtbarkeit dieser Seite nicht verborgen ist, logisch Ich mache es versteckt. 1061 01:02:58,840 --> 01:03:04,070 Ich habe keine Ahnung, warum es sichtbar und versteckt und nicht sichtbar und unsichtbar ist. 1062 01:03:04,070 --> 01:03:06,000 Das war eine schlechte Design-Entscheidung auf dem Weg. 1063 01:03:06,000 --> 01:03:09,530 Aber das sind ja Gegensätze in CSS: sichtbare und versteckte. 1064 01:03:09,530 --> 01:03:15,520 All dies tut, ist es bedeutet, ändern Sie die CSS meiner Datei ein-und ausschalten, ein-und ausschalten 1065 01:03:15,520 --> 01:03:16,870 für die jeweilige div. 1066 01:03:16,870 --> 01:03:20,630 Aber auch dies ist eine Funktion namens blinken. Wann wird der Blink-Funktion aufgerufen wird? 1067 01:03:20,630 --> 01:03:24,080 Es stellt sich heraus, dass es eine weitere Besonderheit globale Variable namens Fenster 1068 01:03:24,080 --> 01:03:28,220 im Geiste zu dokumentieren, aber während das Dokument bezieht sich auf Ihre Web-Seite, 1069 01:03:28,220 --> 01:03:31,700 wie die DOM-Baum, schickte der HTML Sie vom Server, 1070 01:03:31,700 --> 01:03:35,250 Fenster bezieht sich auf das Chrom um ihn herum, die Adressleiste, die Titelleiste, 1071 01:03:35,250 --> 01:03:37,880 und all das Zeug um Ihre Web-Seite. 1072 01:03:37,880 --> 01:03:42,800 >> Und es stellt sich heraus, dass das Fenster Objekt eine spezielle Funktion innerhalb der es heißt setInterval hat 1073 01:03:42,800 --> 01:03:44,360 das tut, was es sagt. 1074 01:03:44,360 --> 01:03:48,600 Es wird ein Intervall einstellen - in diesem Fall alle 500 Millisekunden - 1075 01:03:48,600 --> 01:03:52,270 und zu erraten, was ist es geht um alle 500 Millisekunden zu tun? 1076 01:03:52,270 --> 01:03:55,240 Es wird diese Funktion blink auszuführen. 1077 01:03:55,240 --> 01:03:58,560 Und was ist schön hier ist, dass wir dies in C gemacht haben, obwohl wir haben nie. 1078 01:03:58,560 --> 01:04:01,580 C hat etwas aufgerufene Funktion Zeigern, wo Sie Funktionen rund um passieren kann 1079 01:04:01,580 --> 01:04:03,140 als Argumente. 1080 01:04:03,140 --> 01:04:07,620 Ähnlich ist es in JavaScript übergeben Sie den Namen einer Funktion in einer anderen Funktion. 1081 01:04:07,620 --> 01:04:10,630 Und bemerken, was ich tue. Ich tue das nicht. 1082 01:04:10,630 --> 01:04:14,380 Wenn ich Klammern setzen nach dem blink, würde das bedeuten, rufen Sie die Blink-Funktion. 1083 01:04:14,380 --> 01:04:17,430 Wenn ich sie weglassen, dh hier ist die Blink-Funktion 1084 01:04:17,430 --> 01:04:21,330 so dass setInterval nennen es alle 500 Millisekunden. 1085 01:04:21,330 --> 01:04:28,200 So das Ergebnis, scheußlich obwohl es ist, ist, dass wenn ich in localhost und gehen Sie zu blink.html, 1086 01:04:28,200 --> 01:04:32,120 Ich habe jetzt dieses Ereignis wieder und wieder. 1087 01:04:32,120 --> 01:04:34,950 Und wenn ich tatsächlich Inspect Element, lasst uns sehen, ob wir das sehen können. 1088 01:04:34,950 --> 01:04:38,550 Lassen Sie mich Inspect Element, lassen Sie mich nach unten scrollen nur ein wenig, 1089 01:04:38,550 --> 01:04:44,320 lassen Sie mich wählen Elements hier rüber, und beachten Sie die DOM Innenseite Chrome Inspektor. 1090 01:04:44,320 --> 01:04:48,840 Es ist buchstäblich verändert hin und her, alle 500 Millisekunden. 1091 01:04:48,840 --> 01:04:55,660 Wenn wir gehen, um unseren Freund Nate, 1092 01:04:55,660 --> 01:05:00,020 Wenn Sie sich jemals gefragt, wie dies funktioniert, ähnliche Idee mit einem Intervall, 1093 01:05:00,020 --> 01:05:04,810 aber Nate ist tatsächlich so sehr effektive Einsatz von Farbe in diesem speziellen Fall hier. 1094 01:05:04,810 --> 01:05:07,350 So was können wir tatsächlich tun mit diesem? 1095 01:05:07,350 --> 01:05:09,990 Lassen Sie eröffnen ein weiteres Beispiel und versuchen, etwas 1096 01:05:09,990 --> 01:05:12,940 das ist programmatisch noch nützlicher als die Dinge blinken. 1097 01:05:12,940 --> 01:05:17,990 Lassen Sie mich in unsere Formen Verzeichnis gehen heute und gehen in form0. 1098 01:05:17,990 --> 01:05:20,820 Das war das hässlichste mögliche Form, dass ich kommen mit, 1099 01:05:20,820 --> 01:05:23,290 und lassen Sie mich nur zeigen Ihnen, wie es in einem Browser aussieht. 1100 01:05:23,290 --> 01:05:28,960 >> Lassen Sie mich in localhost / Formen gehen, und das ist form0. 1101 01:05:28,960 --> 01:05:33,400 Dies ist ein super hässliche HTML-Formular, ein paar Felder für E-Mail hat zum Passwort 1102 01:05:33,400 --> 01:05:37,190 Kennwort ein, und dann ein wenig Kontrollkästchen, um zu einigen Bedingungen einverstanden. 1103 01:05:37,190 --> 01:05:41,350 Der Haken ist, wenn ich dieses Formular aus und besuchen Ich möchte nicht, um Ihnen meine E-Mail-Adresse, 1104 01:05:41,350 --> 01:05:44,730 Ich will nicht zu den Bedingungen vielleicht zustimmen, kann ich klicken Sie auf Registrieren 1105 01:05:44,730 --> 01:05:46,920 und es lässt mich doch durch. 1106 01:05:46,920 --> 01:05:50,800 Dies geschieht zu einem dummen PHP Datei namens dump.php einzureichen. 1107 01:05:50,800 --> 01:05:58,420 Alles, was sie tut, ist Ausdruck der Inhalt von $ _GET nur für diagnostische Zwecke. 1108 01:05:58,420 --> 01:06:01,580 Das war, was durch den Benutzer übermittelt gerade jetzt. 1109 01:06:01,580 --> 01:06:05,010 Aber nehmen wir eigentlich wollen des Benutzers Formularübermittlung validieren. 1110 01:06:05,010 --> 01:06:06,530 Lassen Sie mich in die Version 1 zu gehen. 1111 01:06:06,530 --> 01:06:11,420 Dies ist form1.html. Es sieht ästhetisch genauso schlecht, aber bemerken, wie ausgefallen ist. 1112 01:06:11,420 --> 01:06:15,450 Wenn ich ohne kooperiert klicken Sie auf Registrieren, bekomme ich angeschrien. 1113 01:06:15,450 --> 01:06:17,320 "Sie müssen Ihre E-Mail-Adresse." 1114 01:06:17,320 --> 01:06:21,670 Gut. Also lassen Sie mich versuchen. So malan@harvard.edu. Ich glaube nicht, benötigen Sie ein Passwort. 1115 01:06:21,670 --> 01:06:25,100 Registrieren. "Sie müssen ein Passwort." Gut. 1116 01:06:25,100 --> 01:06:28,470 Also werde ich ein Passwort von Purpur. Registrieren. 1117 01:06:28,470 --> 01:06:32,300 "Die Passwörter stimmen nicht überein." Ich muss jetzt in crimson hier eingeben. 1118 01:06:32,300 --> 01:06:35,710 Ich habe aus Versehen überprüft, dass. Registrieren. 1119 01:06:35,710 --> 01:06:39,860 "Sie müssen den Bedingungen zustimmen." Gut. Stimme es. Registrieren. 1120 01:06:39,860 --> 01:06:43,700 Und jetzt zeigt er mir die Diagnoseausgang drüben. 1121 01:06:43,700 --> 01:06:45,630 >> Also, was ist passiert? 1122 01:06:45,630 --> 01:06:48,330 Wir hatten diese Fähigkeit, Formularen validieren. 1123 01:06:48,330 --> 01:06:51,420 In der Tat, wenn Sie tauchen hat in pset 7, gibt es eine entschuldigen Funktion 1124 01:06:51,420 --> 01:06:54,620 das macht es recht einfach, bei der Benutzer mit einer Meldung auf dem Bildschirm zu schreien. 1125 01:06:54,620 --> 01:06:57,580 Ich bin mit einer etwas anderen Mechanismus, der Alarm-Funktion, 1126 01:06:57,580 --> 01:07:03,690 das ist nicht eine Funktion, belächelt hat, da es sehr hässlich Benutzernachrichten macht. 1127 01:07:03,690 --> 01:07:05,710 Aber mal sehen, was ich hier tue. 1128 01:07:05,710 --> 01:07:09,620 Dies ist form1.html und merke, dass ich ein paar ziemlich bekannte Syntax haben: 1129 01:07:09,620 --> 01:07:12,920 Body-Tag, Form-Tag, action-Attribut, Methode Attribut. 1130 01:07:12,920 --> 01:07:17,050 Aber ich merke, gegeben habe meine Form eine eindeutige ID für die Bequemlichkeit. 1131 01:07:17,050 --> 01:07:19,190 Dann habe ich eine E-Mail Feld, dessen Typ ist Text, 1132 01:07:19,190 --> 01:07:23,780 ein Passwort Feld, dessen Typ ist durch ein Passwort, Bestätigung Feld, dessen Typ ist vergessen, 1133 01:07:23,780 --> 01:07:28,070 und dann eine Checkbox, dessen Name Einigung über hier, ist vom Typ Kontrollkästchen. 1134 01:07:28,070 --> 01:07:30,380 Und dann habe ich noch einen Submit-Button. 1135 01:07:30,380 --> 01:07:33,050 Aber an der Spitze feststellen, was ich noch haben. 1136 01:07:33,050 --> 01:07:35,810 Zunächst einmal gibt es eine andere Nutzung des Skript-Tag. 1137 01:07:35,810 --> 01:07:40,520 Wenn Sie etwas JavaScript-Code in einer anderen Datei haben, genau wie mit CSS können Sie sind es. 1138 01:07:40,520 --> 01:07:44,530 Und Sie tun das mit script Quelle, und dann merke ich bin anscheinend Anschluss 1139 01:07:44,530 --> 01:07:50,349 auf einen sehr langen Weg googleapis.com aber deren Dateiname endet in jquery.min 1140 01:07:50,349 --> 01:07:52,420 zum Minimum. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery ist ein super beliebt Bibliothek für JavaScript, das macht einfach JavaScript 1142 01:07:55,969 --> 01:07:58,230 umso benutzerfreundlicher zu bedienen. 1143 01:07:58,230 --> 01:08:00,610 Es ist tatsächlich zu einem de-facto-Standard. 1144 01:08:00,610 --> 01:08:04,090 Also selbst wenn das, was Sie über zu sehen sind ist nicht rein JavaScript per se, 1145 01:08:04,090 --> 01:08:09,340 es ist eine Bibliothek auf JavaScript ähnlich wie der CS50-Bibliothek ist eine Schicht 1146 01:08:09,340 --> 01:08:13,670 auf der Oberseite des Low-Level-C-Code, die Realität ist fast jeder im Internet nutzt. 1147 01:08:13,670 --> 01:08:18,030 So sind diese nicht Stützräder. Dies ist nur Best Practice in diesen Tagen. 1148 01:08:18,030 --> 01:08:22,830 Jetzt unten bemerken, dass ist meine eigene Skript-Tag, und beachten Sie, was ich hier getan. 1149 01:08:22,830 --> 01:08:27,450 Es stellt sich heraus, dass jQuery etwas ein wenig Phantasie tut. 1150 01:08:27,450 --> 01:08:29,660 JavaScript muss Dollarzeichen, aber sie sind bedeutungslos. 1151 01:08:29,660 --> 01:08:32,870 >> Sie sind wie die Buchstaben A, B oder C. 1152 01:08:32,870 --> 01:08:36,670 jQuery hat einfach die Konvention oder Art erhoben Anspruch auf die Tatsache angenommen 1153 01:08:36,670 --> 01:08:40,280 dass $ ihre Sonderzeichen sein. 1154 01:08:40,280 --> 01:08:44,950 Also, sobald Sie laden diese globale JavaScript-Datei hier mit dem Skript-Tag, 1155 01:08:44,950 --> 01:08:49,080 Sie haben Zugang zu einem speziellen globale Variable, $ heißt. 1156 01:08:49,080 --> 01:08:53,009 Es ist richtig genannt jQuery, aber das bedeutet nicht annähernd so sexy wie $. 1157 01:08:53,009 --> 01:08:56,250 Aber $ hat keine besondere Bedeutung. In PHP hatte eine besondere Bedeutung. 1158 01:08:56,250 --> 01:08:58,440 Sie musste es vor einer Variable. 1159 01:08:58,440 --> 01:09:01,670 Dies ist nur eine sexy Sache, die sie auf nahm. 1160 01:09:01,670 --> 01:09:03,389 Was ist denn hier los? 1161 01:09:03,389 --> 01:09:08,830 Beachten Sie, ich bin auf die jQuery-Funktion Weitergabe meiner globalen variablen Dokuments 1162 01:09:08,830 --> 01:09:10,860 und dann rufe ich an. bereit. 1163 01:09:10,860 --> 01:09:15,480 Welche jQuery Wesentlichen tut, ist es Ihnen erlaubt, einige Vanille JavaScript Dinge nehmen 1164 01:09:15,480 --> 01:09:17,889 wie die Dokument-Objekt, das Fenster Objekt, 1165 01:09:17,889 --> 01:09:20,790 und wenn Sie geben es in der jQuery-Funktion - 1166 01:09:20,790 --> 01:09:24,429 wieder klar zu sein, das ist eine Funktion namens jQuery - 1167 01:09:24,429 --> 01:09:28,240 was es tut, ist es wieder zu Ihnen eine spezielle Version des Dokuments 1168 01:09:28,240 --> 01:09:30,700 das hat mehr Funktionalität zugeordnet. 1169 01:09:30,700 --> 01:09:34,760 So in rohem JavaScript gibt es keine fertige Funktion, 1170 01:09:34,760 --> 01:09:37,810 aber wenn Sie passieren Dokument der jQuery-Funktion erster, 1171 01:09:37,810 --> 01:09:40,960 Es gibt Ihnen eine spezielle Version des document-Objekts 1172 01:09:40,960 --> 01:09:43,030 das hat mehr tollen Features. 1173 01:09:43,030 --> 01:09:48,230 Und das ist, warum die Leute es mögen. Es macht die Dinge nur leichter zu tun, wie wir gleich sehen sind. 1174 01:09:48,230 --> 01:09:49,820 Was bedeutet dies Codezeile bedeuten? 1175 01:09:49,820 --> 01:09:52,690 Diese Codezeile bedeutet hier, wenn das Dokument fertig ist - 1176 01:09:52,690 --> 01:09:56,830 In anderen Worten, sobald der Browser erfolgt Lesen dieser Datei oben nach unten - 1177 01:09:56,830 --> 01:09:59,200 gehen Sie vor und führen Sie die folgende Funktion. 1178 01:09:59,200 --> 01:10:03,540 Was ist wirklich interessant in JavaScript - und PHP hat dies auch - 1179 01:10:03,540 --> 01:10:05,450 ist anonym Funktionen. 1180 01:10:05,450 --> 01:10:10,560 In JavaScript können Sie Funktionen deklarieren, die keinen Namen haben, aber sie haben einen Körper. 1181 01:10:10,560 --> 01:10:12,570 Beachten Sie, was hier passiert. 1182 01:10:12,570 --> 01:10:16,220 >> Dies ist eine Funktion namens bereit, und es bedeutet nur, gehen Sie wie folgt 1183 01:10:16,220 --> 01:10:20,220 wenn die ganze Web-Seite bereit ist, wenn alles wurde in vom Server zu lesen. 1184 01:10:20,220 --> 01:10:23,090 Was wollen Sie tun? Ich will ein Stück Code auszuführen. 1185 01:10:23,090 --> 01:10:27,120 Beachten Sie, dass wir nicht wollen, um diesen Code sofort auszuführen. 1186 01:10:27,120 --> 01:10:34,350 Wenn ich dies unterlassen, würde dies sofort meine starten Ausführung dieser Zeilen Code. 1187 01:10:34,350 --> 01:10:39,040 Aber die Tatsache, dass ich sage, nein, nein, nein, wickeln es bei einer anonymen Funktion wie diese 1188 01:10:39,040 --> 01:10:43,000 Mittel nicht ausführen es noch, rufen sie schließlich. 1189 01:10:43,000 --> 01:10:45,430 Wir sahen dies vor einem Augenblick in unserem bisherigen Form Beispiel. 1190 01:10:45,430 --> 01:10:49,990 Welche Funktion haben wir schließlich nennen, 500 Millisekunden später? Blinken. 1191 01:10:49,990 --> 01:10:51,480 So ist die gleiche Idee. 1192 01:10:51,480 --> 01:10:53,950 Wieder, auch wenn das sieht ein bisschen komisch, gerade jetzt über den Glauben zu nehmen 1193 01:10:53,950 --> 01:10:57,060 , dass zu erklären, eine anonyme Funktion, die schließlich heißt, 1194 01:10:57,060 --> 01:11:01,720 Sie schreiben einfach function () { 1195 01:11:01,720 --> 01:11:05,380 Also, was Code werden wir schließlich ausführen? Die folgende. 1196 01:11:05,380 --> 01:11:10,460 Auch dies sieht ein wenig neu, aber das bedeutet hier die jQuery-Funktion, 1197 01:11:10,460 --> 01:11:13,430 und dies ist jetzt eine Abkürzung. 1198 01:11:13,430 --> 01:11:18,830 Dieser Ausschnitt von HTML am unteren Rand des Bildschirms hat natürlich einige Baum-Darstellung. 1199 01:11:18,830 --> 01:11:21,730 Es ist dies nicht. Diese Seite ist interessanter als dieser Hallo Welt Beispiel. 1200 01:11:21,730 --> 01:11:25,210 Aber es gibt einige Baum, der zu dieser HTML entspricht. 1201 01:11:25,210 --> 01:11:28,910 Es wäre ein Schmerz im Nacken zu haben, um irgendeine Art von rekursive Funktion zu implementieren 1202 01:11:28,910 --> 01:11:34,380 an der Wurzel-Knoten zu starten und dann finden die Knoten, dessen ID ist die Registrierung. 1203 01:11:34,380 --> 01:11:38,340 Also, was jQuery macht super einfach für uns buchstäblich ist. 1204 01:11:38,340 --> 01:11:43,000 Go ahead and get me unabhängig div oder was auch immer Form, unabhängig von HTML-Element 1205 01:11:43,000 --> 01:11:45,820 hat die ID-Registrierung. 1206 01:11:45,820 --> 01:11:52,440 Dies ist gleichbedeutend mit document.getElementById ("Registrierung"). 1207 01:11:52,440 --> 01:11:54,170 >> Warum Leute wie jQuery? 1208 01:11:54,170 --> 01:12:00,110 Weil es kürzer zu tippen. Aber das ist alles. Es ist die gleiche Idee. 1209 01:12:00,110 --> 01:12:02,630 Holen Sie mir den Tag, dessen ID ist die Registrierung. 1210 01:12:02,630 --> 01:12:06,300 Und wenn dieser Tag, der eine Form sein, geschieht, wird vorgelegt, 1211 01:12:06,300 --> 01:12:08,300 gehen Sie vor und führen Sie diesen Code. 1212 01:12:08,300 --> 01:12:11,320 So lasst uns jetzt einen Blick auf, wie wir tun, Formular-Validierung. 1213 01:12:11,320 --> 01:12:15,950 Die Syntax ist zwar kryptisch auf den ersten, aber was ist hier los? 1214 01:12:15,950 --> 01:12:21,050 Wenn diese Codezeile ist wahr, ich werde beim Anwender schreien, um seine E-Mail-Adresse anzugeben. 1215 01:12:21,050 --> 01:12:22,970 Also, was ist diese Codezeile? 1216 01:12:22,970 --> 01:12:25,560 $ Bedeutet jQuery. Jetzt bemerkt. 1217 01:12:25,560 --> 01:12:27,920 Dies ist eine Art, wie CSS. 1218 01:12:27,920 --> 01:12:33,370 Wenn Sie in CSS getaucht habe noch, wirst du wissen, dass dies das Element, dessen ID ist die Registrierung bedeutet. 1219 01:12:33,370 --> 01:12:39,840 Der Raum heißt Sie ein Kind oder ein Nachkomme der Anmeldung, deren Name eingegeben wird. 1220 01:12:39,840 --> 01:12:42,970 Und dann dieses Ding in eckigen Klammern ist ein kleines Filter. 1221 01:12:42,970 --> 01:12:47,010 Und selbst wenn diese kryptische aussieht, bedeutet dies einfach, gehen Sie auf die Form, deren ID ist die Registrierung, 1222 01:12:47,010 --> 01:12:51,230 gehen an den Eingang Element innerhalb der, dass dessen Name E-Mail, 1223 01:12:51,230 --> 01:12:55,440 und dann ihren Wert, was seinen Wert passiert zu sein - 1224 01:12:55,440 --> 01:12:59,670 asdf wenn das alles, was ich getippten oder malan@harvard.edu wenn es das ist, was ich getippt. 1225 01:12:59,670 --> 01:13:05,250 Also, wenn der Wert des Formulars E-Mail-field == nichts, beim Anwender schreien. 1226 01:13:05,250 --> 01:13:09,700 Else, wenn der Wert des Passwortes field == nichts, beim Anwender schreien. 1227 01:13:09,700 --> 01:13:19,520 >> Else, wenn der Wert des Passwort-Feld nicht gleich dem Wert der Bestätigung Feld 1228 01:13:19,520 --> 01:13:22,850 das war die andere Form Element, um den Benutzer zu schreien. 1229 01:13:22,850 --> 01:13:25,680 Und dann schließlich - und auch das hat einige neue Syntax des eigenen, 1230 01:13:25,680 --> 01:13:29,270 aber wenn man es gesehen habe, ist es zumindest ein wenig mehr zumutbar - 1231 01:13:29,270 --> 01:13:34,060 sonst, wenn die Form, deren ID ist die Registrierung hat ein input-Element, dessen Name Vereinbarung 1232 01:13:34,060 --> 01:13:39,720 und es aktiviert ist, gehen Sie vor und schreien den Benutzer. 1233 01:13:39,720 --> 01:13:42,520 Also habe ich ganz zugeben, das ist völlig überwältigend auf den ersten Blick. 1234 01:13:42,520 --> 01:13:46,530 Es gibt eine Menge von neuen Syntax. Aber alle jQuery folgt diesen Arten von Mustern. 1235 01:13:46,530 --> 01:13:49,880 Und ehrlich gesagt, habe ich nicht einmal weiß, dass dies existierte bis vor ein paar Minuten. 1236 01:13:49,880 --> 01:13:53,640 Ich googeln, "Woher weißt du überprüfen, ob eine Checkbox in jQuery aktiviert ist?" 1237 01:13:53,640 --> 01:13:55,680 und dies ist die Syntax, denn es gibt verschiedene Möglichkeiten, es zu tun 1238 01:13:55,680 --> 01:13:58,010 mit den tatsächlichen Roh JavaScript-Code. 1239 01:13:58,010 --> 01:14:01,030 So wie die erste Seite Problem Set 7 betont, 1240 01:14:01,030 --> 01:14:04,500 pset 7 ist sehr viel eine Übung in Bootstrapping selbst 1241 01:14:04,500 --> 01:14:08,650 wo wir bereitgestellt haben, hoffentlich, einen konzeptionellen Rahmen, mit dem die pset anzugehen. 1242 01:14:08,650 --> 01:14:12,280 >> Aber wie so oft der Fall mit Web-Design, ist es an Ihnen wirklich um Sack, 1243 01:14:12,280 --> 01:14:16,680 übernehmen Code-Schnipsel und Beispielen aus dem Web so lange, wie Sie sie nennen 1244 01:14:16,680 --> 01:14:17,960 Gemäß den Bedingungen an diesem ersten Blatt, 1245 01:14:17,960 --> 01:14:21,460 und erkennen, dass das Lernen HTML, CSS, JavaScript und sogar SQL 1246 01:14:21,460 --> 01:14:26,020 ist eigentlich gemeint, dies at-home Übung als wir diese Stützräder abzunehmen beginnen. 1247 01:14:26,020 --> 01:14:29,150 Und realisieren auch es gibt so viele Dinge, die Sie mit einem Browser machen kann. 1248 01:14:29,150 --> 01:14:33,790 Innerhalb der meisten dieser Elemente gibt es andere Dinge als Event-Handler. 1249 01:14:33,790 --> 01:14:37,140 Und obwohl wir sahen diejenigen genannt onsubmit und onready, 1250 01:14:37,140 --> 01:14:40,310 Sie können Dinge wie onkeydown, onkeyup tun, 1251 01:14:40,310 --> 01:14:43,410 wie wenn der Benutzer berührt eine Taste drücken, können Sie für diese und Schlüssel bis hören. 1252 01:14:43,410 --> 01:14:45,940 Gmail hat Tastenkombinationen. 1253 01:14:45,940 --> 01:14:49,490 Wie funktioniert Google umzusetzen Tastenkombinationen wie C komponieren? 1254 01:14:49,490 --> 01:14:54,120 Sie hören für Veranstaltungen, wie sie genannt werden, wie onkeypress oder onkeyup und onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Wenn Sie jemals mit der Maus über einem gewissen Menüpunkt schwebte 1256 01:14:56,360 --> 01:15:00,180 und plötzlich, voila, erscheint ein Menü oder die Grafik ändert sich die Farbe, 1257 01:15:00,180 --> 01:15:01,920 Wie tun sie das? 1258 01:15:01,920 --> 01:15:06,940 Anstatt für onready oder onsubmit zuhören, zuhören Sie onmouseover oder onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Also kurz gesagt, mit diesen sehr einfachen Grundlagen, dass wir begonnen haben, um die Oberfläche von heute kratzen 1260 01:15:10,920 --> 01:15:13,940 und wir werden weiter am Mittwoch tauchen, die Sie haben, zunehmend 1261 01:15:13,940 --> 01:15:17,530 Macht, die Art von Dingen, die Sie bereits vertraut sind umzusetzen. 1262 01:15:17,530 --> 01:15:21,620 Lassen Sie uns also zu Ende, und wir werden dies am Mittwoch fortgesetzt. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]