[Musik zu spielen] DAVID J. MALAN: Alles klar. Willkommen zurück. Dies ist CS50. Dies ist das Ende der 8. Woche. Und wie Sie wissen, haben wir ziemlich üblichen Bürozeiten in einigen der Speisesäle, einschließlich Annenberg. Und einige von der Mannschaft freundlicher ein paar Fotos in letzter Zeit. Und zu Ehren Halloween, dachten wir, wir würden eine, die eher erwischt uns teilen Überraschung hier in Annenberg Halle nur die andere Nacht. Ihr Klassenkamerad Jacob posierte für Dieses Foto war aber amüsanter war auf Facebook, die anschließende Gespräch, das danach passiert. Sein erster Beitrag in Reaktion um sein Foto war. Ein paar Minuten später, entschied er einem bis sich mit diesem. So ging es dann zu, dies zu gehen, und dann, noch amüsant ist, wenn seine Mutter stimmte. Und dann schließlich, es scheint dies nur war ein wunderbarer Trick für ein spielen, dass es geht. Also, wenn Sie möchten, Jakob und andere sehen, darunter Cynthia Meng, wer ist hinter die Kulissen des CS50 Zone Personal, Kopf auf diese URL und dieses Spiel hier. So ohne weiteres, heute sind wir weiterhin diesen Blick auf Web-Programmierung, und der tatsächlichen Programmerstellung die nicht auf der Kommandozeile nicht ausführen, sondern innerhalb eines Browsers ausgeführt. Vermutlich jetzt oder sehr Kurz, Sie gehen in der Mitte der Umsetzung werden Ihren eigenen Web-Server, der unterscheidet sich von Web-Programmierung. Der Web-Server in pset6 dreht sich alles um Schreiben von Software, die weiß, wie man nehmen HTTP-Anfragen von einem Browser, oder sogar von euch, ein Mensch, mit einem Programm namens Telnet und dann auf diese Anfragen reagieren entweder durch spuckt eine HTML-Datei oder eine JPEG, GIF, oder sogar eine .php Datei. Aber mit einem Web-Server, ist es nicht soll nur eine PHP-Datei zu öffnen, etwas mit der Endung .php, und dann spuckte den Inhalt. Es soll zu tun was zu dieser Datei zuerst? Sozusagen. Nicht kompilieren, sagten wir am Montag, aber rather-- So interpretieren. PHP ist eine interpretierte Sprache, und so eine der wichtigsten Funktionen in Ihrem Web Server, wenn auch von uns umgesetzt, ist diese Fähigkeit für Ihren Webserver zu bemerken, oh. Dies ist eine Datei mit der Endung .php. Lassen Sie mich nicht nur senden Sie es an die Benutzer, wie es statische Inhalte, sondern lassen Sie mich lesen Zeile Linie von links nach rechts, und zu interpretieren. Und zu tun, dass Sie Jungs werden im wesentlichen Punt, um ein Programm in dem Gerät, und auf eine Menge von Computersystemen, gerade angerufen PHP. Das ist der Name der PHP die Sprache eigenen Dolmetscher. So, das Stück umzusetzen, die wir für Sie, und was für Sie gelassen, Letztlich ist eine Zahl von Stücken, von denen wird die Implementierung der Unterstützung für statische Inhalte. Aber jetzt, und mit Problem stellte sieben, du bist werde, um den Übergang zu starten tatsächlich das Schreiben der PHP-Code dass wird interpretiert in Gespräch mit einem Back-End Datenbank, die Informationen speichert. Lassen Sie uns also besser zuerst verstehen ein paar dieser superglobals und wie viel Leistung Sie raus aus der Box kostenlos mit einer Sprache wie PHP. Dinge, die Sie nicht haben um sich zu implementieren. So sahen wir am Montag, $ _GET, das ist ein superglobal, das ist genau das PHP sprechen für eine globale Variable, die Sie von überall zugreifen können. Und was drin ist von $ _GET? Was ist in der Innenseite dieser Superglobal, dass wir sehen? Sicherlich statistisch mindestens eine Person kennt. Was ist in der Innenseite des $ _GET? Ja? PUBLIKUM: Es ist die Variablen Sie setzen in der Abfragezeichenfolge. DAVID J. MALAN: Perfect. Es sind die Variablen, die Sie legte im Query-String. Also, in unserer älteren Beispiel Neuimplementierung Google als wir eine URL, und dann Fragezeichen, die den Beginn der HTTP abgrenzt Parameter, dann hatten wir q gleich etwas, wie q gleich Katzen, was würden automatisch hineingehen dieser $ _GET Super globale für Sie, wegen der PHP ist eine Taste Q, und der Wert desselben von Katzen. In anderen Worten, $ _GET und alle diese Dinge sind assoziative Arrays, Hash-Tabellen der Art, dass store Schlüssel und Werte. Nun, zurück in pset5, der Hash Tabelle, die Sie vielleicht implementiert haben, oder versuchen Sie vielleicht umgesetzt haben, wirklich war effektiv ein assoziatives Anordnung, eine Datenstruktur, wobei Sie zuordnen können Schlüssel mit Werten. Aber in pset5 waren die Werte trivial. Der Wert war im Wesentlichen wahr oder falsch. Ist das Wort im Wörterbuch? Also, wenn Sie ein Wort wie Apfel gehasht zu sehen, ob Apfel ist im Wörterbuch, Ihr Check-Funktion vermutlich zurück wahr oder falsch. Also, das ist effektiv der Wert bekommen wir zurück. Aber wir am Montag sah kurz, können Sie sicher assoziieren interessanter Werte als nur wahr oder falsch mit Tasten, wie Apfel. Sie könnte tatsächlich zurückkehren ein beliebige Zeichenkette, und in der Tat, das ist, was $ _GET und diese andere Variablen können Sie tun. Also $ _POST ist im Geiste, aber wenn Sie ein Formular absenden per Post, eine andere HTTP-Methode, die es für Dinge wie Kreditkarten verwendet, und private Informationen und sogar binäre Informationen wie Fotos, diese Dinge am Ende innerhalb von $ _POST. Und eigentlich für Dateien wie JPEGs und was nicht alles, es gibt sogar ein anderes, das nicht hier oben genannten $ _FILES auch. Also, Server, den wir nicht zu verweilen viel, aber es gibt Ihnen Zugriff zu der unteren Ebene Einzelheiten zu sortieren der Server selbst, dass Sie verwenden. Cookie und Session, obwohl, wir effektiv zu sehen bekommen. Die letzte ist, was wir verwenden, um zu implementieren die Vorstellung von einem Einkaufswagen. Ein super einfaches, aber Rückruf dass wir dieses Beispiel hier Zählen, wie oft Sie hatte diese zuvor besuchte Seite. Aber heute, und nicht nur zu betrachten Der Effekt davon, lassen Sie uns eröffnen Chrome Inspector, die Sie in der Regel tun mit einem rechten Mausklick oder Strg Klicken irgendwo auf einer Webseite, und wählen Sie dann inspizieren Element. Oder Sie können durch die Menüs gehen dass wir beschreiben in pset6 der spec. Und ich bin auf der Registerkarte Netzwerk gehen hier, und lassen Sie uns sehen für einen Moment der HTTP-Datenverkehr, der ist hin und her. Lassen Sie mich zunächst vorangehen und klar Chrome Cache. Also einige von euch vielleicht bekannt sein mit dieser Technik bereits und wir werden es zu benutzen für Debugging-Zwecke hier. Jetzt sind wir als Computer Wissenschaftler gehen zu starten tun dies für das Debugging Zwecke, wobei wir werden den Cache zu löschen, typischerweise, so dass wir können loszuwerden Dinge genannte Cookies. So sind Sie wahrscheinlich allgemein bekannt mit welchem ​​Plätzchen sind, oder zumindest dass es sie gibt, aber was ist Ihr Verständnis von ihnen, nur als ein Benutzer Computer, was ist ein Cookie? Ja. PUBLIKUM: Es ist ein bisschen von-- na ja, nicht Bit in einem Begriff der Informatik. Es ist ein Stück von Daten, die eine Website sendet, um Sie, um in der Lage sein, Statistiken über die Sie aufnehmen. DAVID J. MALAN: OK, gut. So ist es ein Stück von Daten, die eine Server, legt auf Ihren Computer, und lassen Sie uns zu verallgemeinern es noch mehr, es ist ein Schlüssel value-- gut, dass wird immer präziser. Es ist ein Stück Informationen, ein Stück von Daten, dass ein Server in der Lage ist auf Ihrem Computer abgelegt und sehr oft, führt der Server dies um so mehr, wer du bist. So zum Beispiel, Quoten sind Sie wahrscheinlich in Websites wie Facebook eingeloggt sind, oder Gmail oder andere vor, und loggen Sie sich mit Ihren Benutzernamen und Passwort, und danach für eine Zahl Minuten oder Stunden oder sogar Tage, der Server merkt sich, dass Sie sind in der Tat eingeloggt. Nun, wie ist das eigentlich passiert? Da Sie sicher nicht Abtippen Ihr Benutzername und Kennwort jedes Mal Du navigieren andere Seite auf Facebook. So stellt sich heraus das Cookies sind die Antwort. Ein Cookie Sie als denken können, So ähnlich wie ein digitales Hand Stempel, die Sie vielleicht in einem Freizeit bekommen Park oder ein Verein, der im Wesentlichen bedeutet, dass Sie hier gewesen vor, und schon haben gezeigt wird, Ihre ID an die Türsteher, für Instanz und dass der Verein oder der Park sollte nun annehmen, dass Sie bereits authentifiziert. Sie haben schon von ihr identifiziert. Also in diesem Sinne, wir eröffnen Gegen hier. Lassen Sie mich los, ich gerade tat, und deaktivieren Sie alle meine Cookies. Und nun, was ich tun werde, ist halten Sie die Umschalttaste, nur für eine gute Maßnahme, und gewaltsam die Seite neu laden. Umschalt nur sicherstellen, dass dass nichts im Cache gespeichert. Und hier ist der Wunsch das ging hin und her. Also hier haben wir eine Anfrage, und lassen mich heran hier unten, und eine Menge von dieser ist eine Art uninteressante Details für jetzt, dass der Browser automatisch geschickt, aber lassen Sie uns auf View Quelle, die rohen Header sehen. Und wenn Sie bereits in pset6 betaucht habe, Sie sicherlich Dinge zu erkennen wie diese, und vielleicht noch einige dieser anderen Linien hier, aber was ist interessanter für heute wenn ich nach unten scrollen, nicht auf die Anfrage sondern zu den sogenannten Reaktions, diese Linie wahrscheinlich kommt mir bekannt vor. Das ist eine gute Sache wenn Sie sehen, ein 200 OK. Offensichtlich ist dies der Datum und Zeit auf dem Server und es gibt ein paar Sachen. Oh, das ist interessant. Es stellte sich heraus, wann immer Sie verwenden PHP, zumindest in diesem Server, der Server ausspuckt, was PHP-Version Sie verwenden. Welches eigentlich für die Sicherheit Zwecke ist nicht eine gute Sache. Aber, wir werden darauf zurückkommen ein anderes Mal vielleicht. Aber jetzt ist die saftige Linie heute, und wir kurz sah einige von ihnen, Ich denke, mit Facebook, wenn wir stocherte rund um den Inspektor zu dieser Zeit, Set-Cookie ist, was ist das Einpflanzen das kleine Stück Information auf Ihren Computer. Dies ist ein HTTP-Header das ist effektiv erzählen Sie Ihren Browser, Chrome, IE, was auch immer, hey Browser Speicher auf dem Benutzer- Festplatte oder im RAM des Benutzers, einen Schlüssel namens PHPSESSID, die eine ist Kurznotation für Session-ID, und geben Sie ihm einen Wert von 0vlk8t, Punkt, Punkt, Punkt. Eine wirklich lange Pseudo Zufallsalphanumerische Zeichenfolge. Es ist nur eine wirklich große Zahl, aber es ist mit Buchstaben und Zahlen codiert so dass die Größe der es sein kann, sogar größer als Zahlen allein. Und, nebenbei, Path = /, dass bedeutet nur, dass dieses Cookie sein sollte wobei die zugehörige Teilen der Website, nicht nur eine bestimmte Seite die ganze Sache. Also das ist, dass virtuelle Handstempel. Es ist, als ob der Server, Facebook, oder in unserem Fall das Gerät, hat buchstäblich geschrieben 0vlk8t und so weiter, auf der Hand. Beachten Sie, was der Server ist, nicht tun, ist es nicht Speichern meinen Benutzernamen, natürlich mein Passwort nicht speichern. Stattdessen scheint es zu sein, Speichern Pseudozufallsinformationen so dass niemand erraten kann was meine Handstempel ist. Auf der Serverseite, Inzwischen hat die Server wird sich erinnern, wahrscheinlich in einer Datenbank oder etwas, dass der Benutzer, der in der Zukunft präsentiert eine Handstempel von 0vlk8t, punkt, Punkt, Punkt, sollte damit verbunden werden insbesondere Einkaufswagen, sozusagen. In anderen Worten, wenn ich jetzt gehen wieder hier und laden Sie diese Seite, wie funktioniert der Server wissen dass ich besuchte eine Zeit? Oder wenn ich es wieder tun, wie funktioniert der Server weiß, dass ich es zweimal besucht? Nun, wenn ich nach unten gehen, um dies die letzte Anforderung, die Es ist jetzt die dritte, dass ich geschickt Insgesamt bemerken jetzt meine Anfrage. Es gibt immer noch diese fordern hier oben, gleiche wie zuvor, es gibt noch eine ganze Reihe Sachen, die wir nach wie vor ignoriert habe, aber das allerletzte Header, dies Zeit, denn ich war schon einmal hier, ist eine Darstellung von Diese virtuelle Handstempel. Wobei diese Linie hier, nicht gesetzt Cookie aber Cookie Dick PHPSESSI = 0vlk8t, das ist nur meine Browsers automatische Präsentation dieser Handstempel, so dass nun der Server, sobald es erkennt, ooh, ist dieser Benutzer 0vlk8t Punkt, Punkt, Punkt, Ich kann jetzt daran erinnern, wer er oder sie ist und reassoziieren mit diesem Benutzer unabhängig Informationen Ich möchte, und alle dass Informationen von Ihnen gespeichert, der Programmierer, in $ _SESSION. So klar zu sein, wenn ich eröffnen ganz schnell in gedit, dass eigentliche Datei, counter.php, in meinem lokalen Host öffentliches Verzeichnis wie zuvor, feststellen, dass in der Tat, Ich bin letztlich Speicherung in $ _SESSION Zitat unquote "counter" der Wert des vorherigen Zähler, Ich von dieser Zeilen bekommen hier oben, dass wir sah letztes Mal plus eins. Also unter der Haube, Das ist alles, Plätzchen sind. Es ist genau die Art von digitalen Handstempel hin und her, und ehrlich gesagt, wenn Sie öffnen Chrome Inspector auf jeder Website Sie heute besuchen, mit super hohe Wahrscheinlichkeit, wirst du vielleicht eines sehen, vielleicht ein halbes Dutzend Cookies von Ihnen in Erinnerung. Und schlimmer noch, wenn diejenigen, Webseite Sie gerade besuchen alle Anzeigen, die ist sicherlich durchaus üblich heute, und wenn diese Anzeigen kommen von einigen zentralen Partei, jemand wie Google oder AdWords, da sie rufen eines ihrer Produkte oder andere solche Anbieter, die verkaufen Anzeigen, was ist interessant, und ehrlich gesagt, was ein wenig besorgniserregend, wie HTTP funktioniert, ist, dass, wenn Sie eine Anzeige eingebettet in Facebook.com und Google.com, und Harvard.edu, eine beliebige Anzahl von Websites, so dass es wie dass es einen mittleren Mann, der dient, up-Anzeigen für alle drei dieser Websites, es stellt sich heraus, dass die Cookies sind pro Domain. Also, wenn Sie eine Anzeige aus dem Kommen gleichen Firma auf verschiedenen Websites, dass Unternehmen effektiv zu verfolgen, die Sie sind für alle Websites. Harvard vielleicht nicht wissen Sie besuchen Facebook. Facebook vielleicht nicht wissen, und Sie besuchen Harvard. Aber was auch immer Anzeigenservice sie verwenden, wenn die Domäne ist sowohl Harvard.edu Bahn vorhanden Seiten und Facebook.com Webseiten Dieser Mittelsmann weiß sicherlich, wer du bist Aufgrund dieser Cookies geteilt ganz oder vielmehr, dass so genannte Mittels. Also werden wir wieder auf diese kommen Auswirkungen auf die Sicherheit davon aber es gibt eine Vielzahl von Informationen über Sie zu jeder Zeit gespeichert Sie besuchen die meisten jede Web-Seite auf das Internet und es ist wirklich reduziert sich dieser sehr einfachen Mechanismus. Was passiert, dann, wenn Sie sind super paranoid bist und Sie entscheiden sich in Chrome oder IE gehen oder drehen Sie unabhängig und Sie Ihre Cookies? Was passiert? Ja? Sie really-- haben Sie diesen richtig gemacht? Ok. Nein, nur zu. PUBLIKUM: Bestimmte Websites müssen nicht eine Funktion ohne sie mag Facebook. DAVID J. MALAN: Yeah! So bestimmte Websites wird nur aufhören zu arbeiten. Und in den meisten Websites in diesen Tagen dass grundsätzlich auf Cookies angewiesen, vor allem, wenn sie dich anmelden zu können in, sie sind gerade dabei, zu brechen. Da halten die Alternative, wenn die Website keine Möglichkeit hat, zu erinnern, wer Sie sind, und damit Ihr Browser unterstützt kein repräsentiert mit jeder HTTP Anfrage dieser Handstempel, effektiv eine Webseite wie Facebook los , Sie zu veranlassen, haben log in jedes verdammte Mal Sie Seiten zu ändern, oder klicken Sie auf einen Link, der ist sicherlich kein besonders guter Benutzer Erlebnis. So, dass es auch das ist unter den Kompromisse. So ohne weiteres lassen Sie uns für selbstverständlich, dass mit Web-Programmierung, in Sprachen wie PHP, die Sie sich erinnern können Informationen wie die in Problem eingestellt sieben, wenn Sie Ihre eigenen zu implementieren E * Trade-ähnlichen Website mit denen zu kaufen und Verkauf von Aktien, werden Sie genau erinnern was der Benutzer gekauft und verkauft und wer er oder sie ist über diese Sitzung. Aber wir gehen zu müssen, ein schicker Weg, als E-Mail zu starten halten Informationen rund um. Richtig? Am Montag, ca. Frosh IMs sprachen wir und wie in der Version einer dieser Website, vor Jahren, alles, was wir taten, war Die e-mail Proctor wer verantwortlich für die internen Sport Programms den Namen und das Geschlecht, und ob oder nicht sie sind ein Hauptmann, und das Wohnheim von jemanden, der Anmeldung zu einer intramuralen Sport. Also ist es nicht schlecht, aber er oder sie dann mussten durch ihre E-Mail troll, machen Sie eine Tabelle oder so ähnlich dass, damit alles organisiert. So sicher wir als Programmierer Dies kann für die Proctor zu tun. Und so geben Sie in SQL, Structured Query Language, die gehen auch hübsch aussehen verschiedenen, sowohl C und PHP, und du wirst viel mehr Hände auf tauchen in PHP und Problem set sieben sondern auch SQL, oder SQL, eine Sprache ist das, dass Sie verwenden, um auf eine Datenbank zu sprechen. Aber was ist eine Datenbank? Nun, Sie von einem denken Datenbank, zumindest derzeit, als einfach nur wie eine Excel-Datei, oder Wenn Sie ein Mac-Benutzer ein Zahlen-Datei sind, oder wenn Sie ein Google Apps sind Anwender eine Google-Tabelle, es ist tatsächlich eine Datenbank, oder wirklich insbesondere eine relationale Datenbank. Eine relationale Datenbank ist nur etwas, das Reihen und Spalten hat, und Sie jede Art von speichern kann Informationen in diesen Zeilen oder Spalten. Aber was ist schön zu SQL und über aktuelle Datenbanken, nicht nur Tabellen oder Google Spreadsheets, ist, dass man eine Sprache verwenden um tatsächlich Abfragen auszuführen, um Einfügen von Daten, um Daten zu entfernen, nach Daten zu suchen, auch am wichtigsten ist, und man müssen nicht es ziemlich manuell verwenden Wie Sie vielleicht in der Regel ein Google Tabellenkalkulation wie diese. Also in SQL, es gibt eine Reihe von grundlegende Aussagen oder Stücke Funktionalität eingebaut. Es gibt viel mehr als diese, Sie können jedoch einen riesigen Abstand zu gehen nur durch das Wissen, dass diese Sprache genannt SQL mindestens vier Aussagen, die Sie nutzen können. Löschen, zum Entfernen von Daten, Legen Sie zum Hinzufügen von Zeilen, Update, zum Ändern Zeilen und Auswählen, für immer wieder Zeilen und das ist in der Tat, was SQL tut. Es arbeitet völlig auf Reihen so dass, wenn Sie einfügen oder entfernen, oder aktualisieren, oder wählen Sie, was Sie immer wieder als so genannte Ergebnismenge, wie ein Array von Zeilen. Ein Bündel von Zeilen aus einer Tabelle. Also zurück in den Tag, und bis auf diesen Tag, Sie können mit den interagieren Datenbank mit einer Befehlszeile aber es ist nicht besonders Spaß zu benutzen Diese Schwarzweiss-Fensterstil und tatsächlich Befehle ausführen und herumzustochern Ihrer Datenbank. Eine graphische Benutzerschnittstelle oder GUI, ist viel mehr bevorzugt, wohl, und so das Werkzeug, das wir empfehlen und für Sie vorinstalliert auf dem Gerät heißt phpMyAdmin. Es ist ein Gesamt Zufall, dass die Name dieses Ding hat PHP drin, es bedeutet nur, dass die Menschen, der schrieb dieses Programm selbst schrieb es in PHP. Aber es ist letztlich über die Verwaltung ein Datenbankserver, wie ein MySQL-Server dass Sie vielleicht, wie Sie tun, in der CS50-Appliance. Also gibt es hier näher als wir brauchen, um über die heutige Pflege, aber was ist Schlüssel ist, dass auf der linken Seite Seite finden Sie eine Liste der Datenbanken dass Sie auf Ihrem Computer haben, auf Ihrem CS50 Appliance oder kommen letzten Projekte, die Sie vielleicht haben auf einen Dritten, einer Gesellschaft Website oder Web-Server, dass Sie könnte die Zahlung für Raum. Also auf der linken Seite ist die Datenbanken, von denen eine ist pset7 die ich ab dem nächsten ausgeliehen pset Wochen, und dann auf der oberen es feststellen, es gibt eine Bündel von Registerkarten, von denen ist Datenbanken, SQL, Status, Benutzer, Export und so weiter. So können Sie eine lange gehen Weg nur durch die Realisierung dass die meisten Benutzerschnitt ist in der linken oberen Spalte und über der Spitze bis es. Also, was können wir eigentlich damit zu tun? Nun, lassen Sie uns beginnen die Schaffung eines Bit an Information wie folgt. Angenommen, die folgenden der Fall ist, wie in nur wenigen Tagen, Sie implementieren Gesuch Website, genannt CS50 Finanzen, und diese Website können Sie kaufen zitieren unquote und verkaufen Aktien. Und es wird, um herauszufinden, der Preis für diejenigen Bestände, letztlich wie Sie sehen werden, durch Gespräche mit Yahoo Finance. Welche, wunderbar, hat eine kostenlose Service wobei Sie in einem Börsenticker geben wie GOOG für Google, und es wird geben Sie wieder aktuelle Aktien Google Preis innerhalb der Vergangenheit wenige Minuten mindestens. So werden Sie, dass zu verwenden, letztlich für den Benutzer vorgeben zum Kauf und Verkauf tatsächlichen Aktien mit virtuellem Geld, aber das erste, was der Benutzer geht, um zu sehen ist dieses Anmeldebildschirm, der sie fragt, für ihre Benutzernamen und Passwort. Und so, einer der ersten Herausforderungen für Sie in pset7 sein wird, um das Backend zu implementieren Datenbank, die Tabellenkalkulation, wenn man so will, das wird gespeichert Nutzer Namen und Passwörter und schließlich, welche Aktien sie besitzen, und wie viele, und wie viel Geld sie haben, so ein paar andere Dinge in anderen Tabellen oder Tabellenkalkulationen. Werfen wir also einen Blick auf, wie diese auf den ersten Blick erscheinen. Ich werde zurück zu gehen das Gerät und ich bin gehen auf diese URL hier gehen phpMyAdmin localhost / phpmyadmin und du wirst sehen, dass es bringt mich zu einer Schnittstelle genau so, wie wir an der Säge Screenshot, und hier bin haben eine zusätzliche Datenbank genannt Vortrag für heute und lass mich weitermachen ersten und klicken Sie auf pset7. Ich glaube mich zu ein paar Optionen haben, ein neuer, zum Erstellen einer neuen Tabelle, und einen Link für die Nutzer, die ist eine Tabelle habe ich bereits erstellt. Also, was ist ein Tisch? Also, wenn Sie Excel verwendet zuvor, und wenn Sie noch gebrauchte Nummern oder Google Tabellenkalkulationen, ein Fenster zu öffnen Sie und Sie haben eine ganze Reihe bekommen von Zeilen und Spalten, aber dann müssen Sie normalerweise Arbeitsblätter entlang der unteren oder separaten Registerkarten. Sie können von jedem zu denken Arbeitsblatt als Tabelle so dass die Datenbank letztlich ein Kombination aus einer oder mehreren Tabellen, eine oder mehrere Arbeitsblätter, in die Welt einer normalen Tabelle. Also lassen Sie mich gehen Sie vor und klicken Sie auf dieses Arbeitsblatt dass ich vorgefertigt, die so genannte Benutzer, alias Datenbanktabelle. Und wenn ich hier unten zu blättern, lassen Sie mich heran ein bisschen, das ist, was phpMyAdmin erzählt uns innerhalb dieser Tabelle jetzt. Es ist ein wenig verwirrend auf den ersten Blick, weil das UI ist nicht die schönste Sache der Welt, aber Interessant ist dieser Teil hier. ID, Benutzernamen und Hash. Im Voraus, und du wirst gängig sein dies Problem stellte sieben, wir eine Datei mit einer Super Ihnen kleine Datenbanktabelle, lieh tatsächlich aus der Hacker-Ausgabe Problem Satz zwei, innerhalb von denen es sechs Reihen. Einer für Belinda alle Weg hinunter zum einen für Zamyla, und beachten Sie auf der linken Seite diejenigen, Benutzernamen sind eindeutige IDs wie einer, zwei, drei, vier, fünf, sechs, ganzen Zahlen, und dann auf der rechten Seite sind Hashes. Und wenn, Chancen sind, Sie haben nicht zu tun der Hacker Edition Problem stellte zwei, sondern ein Hash ist wie eine verschlüsselte Passwort mit ein paar Einschränkungen. Und so, was Sie hier sehen, sind die verschlüsselten Versionen aller sechs unserer Passwörter von Problem Satz zwei Hacker-Ausgabe. Jetzt nach links ist nur eine grafische Oberfläche, Bearbeiten Sie diese Zeile, kopieren Sie diese Zeile, Löschen Sie diese Zeile. Aber was ist interessant Jetzt ist die folgende. Ich kann tatsächlich beginnen Experimentieren mit dieser Tabelle. Also, wenn ich hingehe und auf die SQL Registerkarte, bekomme ich diese großen Textfeld ein. Und das ist nicht, wie wir zu gehen es tun, wenn tatsächlich das Schreiben von Code. Um es klar, phpMyAdmin ist nur ein Werkzeug, das ist gehen zu lassen, uns rund um die Datenbank zu stoßen und lassen Sie uns bei Fragen zu experimentieren. So zum Beispiel: Angenommen, Ich ausführen genau diese. Wählen, die eine von denen ist, Stichworte ich bereits erwähnte, Stern, Erforderlich ist eine alle die Spalten in einer Tabelle. Ab welchem ​​Tisch? Nun, Nutzern. Und Ankündigung gibt es diese komisch Konvention in SQL wo Sie tatsächlich nutzen zurück Zecken, typischerweise, nicht einfache Anführungszeichen und nicht doppelte Anführungszeichen wenn Sie über Tabellen Namen zu sprechen, so dass die Rückseite Zitat ist der Sache auf den oben links auf der Tastatur die meisten wahrscheinlich. Also lassen Sie mich voran gehen jetzt und lassen Sie einfach das allein und blättern Sie nach unten und klicken Sie auf Go, und wir sind eigentlich los, um die gleiche Sache zu sehen. Wir haben gerade eine SQL-Abfrage ausgeführt sagen select alles Sterne aus Tabelle namens Benutzer und was Sie zurückbekommen ist dies. Letztlich werden wir in der Lage zu sein, Tun Sie das Gleiche in Code, aber jetzt wollte ich Sie war zu sehen in meinem Browser. Nun lasst uns etwas tun ein wenig anders. Lassen Sie mich zurück in die Registerkarte SQL, und lassen Sie uns einfach sagen, dass das, was? Zamyla hat all ihre verloren Geld und daher ist es Zeit für uns, sie als Benutzer löschen. Sie ist nicht mehr einloggen. Also werde ich sagen löschen from-- gut, pflegen Kapitalisierung Konsistenz, löschen von den Benutzern, wo. Und so können wir diese haben Prädikate, oder diese Qualifikanten, am Ende meiner Aussage wo und wie könnte ich Zamyla löschen? Durch ihren Namen Zamyla, so dass die Spalte einer der Spalten benannt wurde, also wo name = "Zamyla". Und hier verwende ich Doppel Anführungszeichen oder Apostrophe, Sie verwenden nur die Rückseite Zecken, wenn Gespräch über den Namen, zum Beispiel, Tabellen oder Felder. Und lassen Sie mich klicken Sie hier. Und jetzt ist die Web-Seite , ein wenig nervös. Oder glauben Sie wirklich ausführen löschen möchten von den Benutzern, in der Name gleich Zamyla? Ja. So, jetzt, wenn wir zurückgehen zu meinem Tisch durch Klicken auf Benutzer feststellen, dass Hm. Ich vermasselte. Und in der Tat, ich Art von weggeklickt so schnell Sie sah nicht einmal die rote Fehlermeldung, vielleicht. Was habe ich falsch gemacht? PUBLIKUM: Sie brauchte nicht zu ihrem Namen Kapital zu schlagen. DAVID J. MALAN: Yeah I kapitalisiert ihren Namen, aber ihr username-- eigentlich bin machte ein paar Fehler, oder? Eines ist ihr Benutzername zamyla, Kleinbuchstaben Z, und der Spaltenname Benutzername, nicht nennen, so machen wir das wieder. Lassen Sie mich gehen Sie vor und von den Benutzern wo löschen Benutzername gleich Zitat unquote "Zamyla". In Ordnung? So sieht das ein wenig besser, lassen mir gehen nach unten scrollen und klicken Sie auf Go. Es ist immer noch zu schreien mich an, um sicher zu sein. Ich klicken Sie auf Ja, und jetzt sehen wir, ehrlich gesagt das passiert ist, wirklich schnell, weniger als ein zweiten natürlich, diese ist genau die Abfrage, die ausgeführt wurde. Um zu bestätigen, lassen Sie mich auf Benutzer und in der Tat jetzt Zamyla ist weg. Nun wollen wir das Gegenteil tun. Angenommen, Gabe will registrieren Sie sich für die Website. Was ist die SQL-Abfrage, was ist das Befehl konnte ich eingeben, um Gabe hinzufügen? Nun, es ist ziemlich einfach. Legen Sie in Benutzer, und jetzt wird es ein wenig kryptisch. Ich brauche, um festzulegen, auf den Server, welche Felder Ich möchte zuordnen. Ich weiß nicht wirklich, was Gabes ID Nummer ist, so werde ich, dass zu überspringen. Ich bin stattdessen sagen Benutzername, Hash, und dann die Werte möchte ich setzen es geht um Gabe sein. Und dann seine Hash, weiß ich nicht. So jetzt bin ich zu gehen verlassen, dass als eine große zu tun. Wir kommen wieder zu kommen dass das Problem eingestellt spec, wie Sie tatsächlich tun. So bemerken, wieder, die Syntax. Legen Sie in Tabellennamen, dann einen geklammerten Liste der Felder, die Spalten, die Sie hinzufügen möchten Werte auf, und dann einfach exakt das gleiche Bestell links nach rechts von den Werten, die Sie hinzufügen möchten, und es ist nur Verpackung, weil der Text ist ein wenig lang. So, jetzt lassen Sie mich auf Go. Eine Zeile eingefügt. Und jetzt, wenn ich wieder nach Nutzer, was interessant ist, dass nicht nur Gabe nun in der Datenbank, was offenbar seine ID? Nun, es ist sieben. Warum ist es sieben, wenn ich es nicht hinzufügen? So auch dies ist einer der Funktionen erhalten Sie von der Datenbank. Viele in der Funktionalität gebaut. Es stellt sich heraus, daß, wenn erstellt diese Tabelle, Ich vorkonfiguriert ist es automatisch Zuweisung einer ID in der Weise dass es erhöht. Also, wenn Sie jemals in der Umgebung gestoßen habe, und sah, was Ihre Facebook-ID Nummer ist, in diesen Tagen ist es nicht wirklich eine Sache, aber Facebook als eine API zu tun, Application Programming Interface, wodurch können Sie wieder eine ganze Reihe von Daten über sich selbst, über deine Freunde, und Ihre Verbindungen. Und was früher Art sein von cool, wieder in den Tag, war nachschlagen, was Ihr Facebook-ID-Nummer war. Mark Zuckerberg, zum Beispiel ist drei da war er der Autor der Seiten. Und wie geht die Geschichte, schuf er zwei Testkonten, Benutzer eins und zwei, dem er anschließend gelöscht. Und so, Zuck, wie es seinen Benutzernamen auf Facebook, ist ID die Nummer drei, und wir alle haben Nummern viel größer als drei in diesen Tagen. In der Tat an irgendeinem Punkt Facebook wegbewegt von selbst mit einem int, die ist ein 32-Bit-Wert, zur Verwendung der nächste Schritt, Wesentlichen eine lange, lange so dass sie unterbringen konnte noch mehr Nutzer registrieren. So ein Spaß wenig historische Tatsache. Also das ist nur die grundlegende Syntax, mit denen wir könnten ein paar ausführen Anfragen, aber wir können tatsächlich tun ein paar mehr Dinge mit SQL. Und du wirst sehen, letztendlich, in dem Problem stellte sieben dass Sie eine zu machen Anzahl von Design-Entscheidungen, unter ihnen sein wird, Welche Datentypen zu bedienen. Also genau wie in C gibt es Daten Typen in einer Datenbank, wie MySQL, und die Datentypen müssen Sie entscheiden aus sind diese Felder hier. Char, varchar, Int, große int, dezimal und Datum Zeit, und viele andere. Also lassen Sie uns dies tatsächlich zu tun. Nehmen wir an, dass wir nicht Hand, die Sie Tabelle des Nutzers und lassen Sie mich gehen Sie vor und erstellen, für ich selbst, in den Vorlesungen database-- eigentlich möchte ich voran gehen und löschen Die Tabelle habe ich hier schon so dass wir tatsächlich schaffen das. Whoops. Ich werde diese fallen Tisch, und jetzt bin ich werde wieder auf dem Sprung Vortrag Datenbank hier, Ich werde eine Tabelle erstellen genannt Nutzern und lassen Sie uns just do drei Spalten zunächst und klicken Sie auf Go. Nun, zum größten Teil, wieder, das ist nur mit diesen grafischen Tool namens phpMyAdmin, und was wir jetzt tun ist eine Tabelle erstellen. Also das ist wie wenn man auf Datei, Neu, und die Schaffung einer neuen Excel-Datei. Es ist also zu fragen mir ein paar Fragen, von links nach rechts, was ist der Name der ersten Spalte, und dann der Name der zweiten Spalte, und der Name der dritten. Also lassen Sie schaffen sich diese. ID und dann Benutzername war einer, und dann Hash war eine andere. Also, was soll der Datentyp sein jetzt ein Feld wie ID? Hier ist die ganze Liste der Datentypen Ihnen zur Verfügung in einer Datenbank, und jetzt lasst uns einfach mit int gehen. 32-Bit-Wert, ich nicht denke realistisch bin ich gehen, um mehr als 4 Milliarden haben Benutzer in Ihr Konto, in meinem Dienst, so werde ich in Bewegung zu bleiben auf die nächste Frage. Ich werde mich nicht festlegen eine Länge oder Werte, es ist nicht anwendbar hier für ein int, per se. Und jetzt kann ich angeben, offenbar ein Standard Wert, den ich werde nicht angeben. Eine Zusammenstellung, ich weiß nicht, was das ist. Ein Attribut. Jetzt haben wir tatsächlich tun eine Design-Entscheidung. Es gibt also ein paar Felder hier nicht alle von denen erhoben, aber unsignierte bedeutet nur, was? Dass die int sein muss? Nur nicht negativ. So hat es auf 0 bis sein. Nein, ich werde nicht zu überprüfen, weil Ich möchte jeden Benutzer eine ID haben, es kann nicht null sein. Und dann haben wir, etwas mehr zu bekommen interessante Design-Entscheidungen wie diese. Wir werden darauf zurückkommen in einem Augenblick, aber was ein weiteres Merkmal der Datenbank ist, ist, dass man sagen kann, der Datenbankserver weitermachen und optimieren Sie sich selbst, Ihre RAM und Festplattenspeicher, so daß auswählt, und Einsätze, und Löschungen und Aktualisierungen wirklich schnell sind. Vergleichen Sie dies mit pset5. Wenn Sie etwas nachschauen wollte in Ihrer Hash-Tabelle, die Sie denken, der als Datenbank, , die alle zu tun hatte arbeiten für die Herstellung Ihrer Hash-Tabelle schnell. Es ist wie, natürlich, Sie. Richtig? Man musste in all der Zeit feine setzen Tuning Dinge, bekommen eine Hash-Funktion rechts, herauszufinden, wie viele Eimer zu haben. Aber was ist schön, wieder, über eine Datenbank Sie gerade Punt alle dies auf andere Menschen die dies gedacht haben durch für Sie, und welche Ich werde hier unter sagen Index ist, dass meine ID-Feld wird sich der primäre Weg der sein Identifizierung von Benutzern in dieser Datenbank. Ich werde nicht zu denken von Zamyla als Zamyla, Ich werde denken sie als die Nummer 6. Warum ist es vielleicht besser intuitiv von und Modell denken jede Ihrer einzelnen Reihen mit eine Zahl anstatt etwas wie eine Kette, wie die Zamyla oder Gabe oder längeren String noch? Ja? PUBLIKUM: Eine ID ist einzigartig? DAVID J. MALAN: Sagen Sie wieder? PUBLIKUM: Eine ID ist einzigartig? DAVID J. MALAN: Eine ID ist einzigartig, aber suppose-- wie im allgemeinen Fall mit Benutzernamen, nehme Ich sagte auch, es kann nur sein, ein Zamyla in der Welt, und nur eine Gabe. Ich konnte die Einzigartigkeit verhängen Einschränkung für Streicher, auch, wenn ich wollte. Also keine schlechte Gedanken. PUBLIKUM: sicherer. DAVID J. MALAN: Sicherer, warum? PUBLIKUM: Sie können nicht sagen, welche ist die, wie in den Benutzer. DAVID J. MALAN: OK, Sie kann nicht sagen, welcher Benutzer ist, welche so gibt es eine Privatsphäre Aspekt, um es, insbesondere, wenn die IDs vielleicht in den URLs erscheinen. So sicher, das könnte Art von Arbeit, zu. Andere Gedanken? Ja? PUBLIKUM: Es ist einfacher, Operationen auf einem int. DAVID J. MALAN: Das ist die eigentliche Kicker. Es ist einfach effizienter, oder einfacher für den Computer, Operationen auf einem ganzzahligen zuführen. Richtig? Ein int wird garantiert 32-bit, während Zamyla ist ein paar Zeichen, Gabriel ist ein paar mehr Zeichen lang, Davenport ist wirklich lang, und so ist es nicht besonders effizient zu bedienen Saiten zum Vergleichen von Werten und suchen für Felder und Felder aktualisieren, wenn Sie weg erhalten können mit nur einem ganzzahligen. Nur 32 Bit. Also Benutzernamen, auch auf diese Weise, nicht eindeutig sein, obwohl sie wahrscheinlich sollte sein, und selbst in dieser Weise zu einem Benutzer erlaubt werden kann ändern seinen Benutzernamen. Also lassen Sie uns jetzt gehen diese als primäre Mittel zur Identifizierung des Benutzers. Dies ist die Datenbank erzählen gehen Sie vor und optimieren sich selbst so dass Look-Ups auf ID sind super schnell. AI, Schlechtes benannt, nur bedeutet Auto Increment, und dies ist der Kontroll Box Wir müssen prüfen, zu, dass das ID-Feld, um anzugeben automatisch für mich auf dem Laufenden sein, und dann bin ich zu gehen Bildlauf nach rechts hier und ehrlich gesagt, ich bin nicht wirklich interessiert in jedem dieser Bereiche mehr. Sicher nicht heute. Also werde ich hier zurückgehen, in die erste Kolonne, in Ich muss Benutzernamen angeben und Hash, und lassen Sie uns mindestens Fokus auf die zweite für jetzt. Int ist wahrscheinlich nicht die richtige Entscheidung, Also, was macht mehr Sinn vielleicht? PUBLIKUM: Text. DAVID J. MALAN: Sagen Sie wieder? PUBLIKUM: Text. DAVID J. MALAN: Text? OK, ich hörte Text. Was sonst? Wir Art habe eine Reihe von Entscheidungen die textlichen Natur sind. Also wann und warum, tun Sie einige der diese verwenden? Nun char, entgegen dem, was Dir evtl. zu denken, ist nicht ein einzelnes Zeichen. Es ist eine bestimmte Anzahl von Zeichen. Dass alle Benutzernamen Also, wenn wir wissen, muss wie acht Zeichen lang sein, wie früher in älteren gemeinsam sein Computersysteme, konnte ich sagen, char und dann könnte ich 8 sagen. Das ist, wenn die dritte Spalte wird anwendbar, wenn eine Tabelle erstellen. Aber das ist irgendwie nervig weil einige Leute vielleicht wollen eine längere Benutzername haben als acht Zeichen, einige Leute möchten vielleicht haben eine kürzere Benutzername, also warum mich verpflichten auf eine bestimmte Anzahl? Warum eine Variable nicht Anzahl der Zeichen und einfach sagen, dass die maximale Länge eines Namens ist, weiß ich nicht, wie 64 Zeichen. Ich kann mir keine Freunde denken, die haben Namen länger als 64 Zeichen, und selbst wenn es das ist zu kurz konnte man sicherlich stoßen sie bis beliebig. So varchar ist eine Variable Anzahl der Zeichen. Text ist kein schlechter Instinkt und ehrlich gesagt, dass Art tut, was es sagt, aber ein Textfeld kann wie 65.000 Bytes mindestens. Das ist wahrscheinlich für ein Overkill Feld, und in der Tat, yup, 65.535. Das ist wahrscheinlich für ein Overkill nennen, so dass wir halten, in der Regel, mit VARCHARs für textliche Feld und Hash, auch. Hash, stellt sich heraus, wir eine machen könnte varchar so gut oder so ähnlich, aber wir werden heute nicht konzentrieren sich auf die Kryptographie gibt und die Nummern daß wir eigentlich möchte für seine Länge zu verwenden. Aber lassen Sie mich nach unten scrollen nach rechts. Sie können nur eine Primär Index für eine Tabelle, aber ich zu einem von ihnen anwenden möchten, Jetzt, um Benutzernamen, würden Sie sagen? Was soll Benutzernamen auf einer vagen basieren Verständnis dieser vier Optionen? Nur durch ihre Namen? PUBLIKUM: Unique. DAVID J. MALAN: So einzigartig, nicht wahr? So stellt sich heraus, dass nicht nur könnte Ihnen sagen, eine Datenbank, im Voraus, dies ist der primäre Weg identifizieren Felder. Sie können auch sagen, das ist werde ein einzigartiges Gebiet. Es wird nicht zu sein das, was ich verlassen sich auf, aber ich möchte die Datenbank auf Wesentlichen haben, dass, wenn die Bedingung, so dass, wenn ich jemals versucht sich zu registrieren zwei Benutzer mit dem gleichen Namen, die Datenbank mit Vollgas ist nicht zu mir lassen. Ich könnte einige zusätzliche Code haben in PHP, die so viel verhindert, aber die Datenbank auch sicherstellen kann, dass diese noch nie passiert. Jetzt, nebenbei, zumal Sie Abschlussarbeiten zu denken, bedenken sie Index und Voll Text sind eigentlich ganz nützlich. Wenn Sie eine größere Datenbank, nicht haben Dutzende, aber mit Hunderten oder Tausenden oder sogar Millionen von Feldern können Sie erzählen Sie auch die Datenbank im Voraus Dies ist ein Bereich, ich werde auf eine Menge suchen werden. Möglicherweise sein Benutzername, vielleicht ist es Bio, wenn Sie macht eine Facebook-ähnliche Website, hat Absätze, die die Benutzer-erlaubt zu retten, und wenn du willst erzählen die Datenbank im Voraus Ich werde auf diesem Gebiet gesucht werden eine Menge, aber es ist nicht unbedingt einzigartig, Sie können angeben, erstellen Sie mir einen Index. Oder Sie auch sagen kann mir erlauben, zu tun Art von willkürlichen Suche wie Befehls oder Strg F, wie Sie vielleicht in einer Textverarbeitung, so konnte man beliebige Zeichenketten suchen oder Teilstrings in diesem Bereich. Mit anderen Worten, wir bekommen bis zu dem Punkt in dem Semester wo Sie nicht haben, um über Sorgen wie man die Dinge effizient zu implementieren. Sie müssen nur wissen, was Design-Entscheidungen zu, so dass Sie machen mit den richtigen Werkzeugen für die Handel, um Funktionen zu nutzen dass andere Menschen für Sie gebaut. So zu rekapitulieren, sollte nur primäre Konto haben, können Sie nur einen, und es ist das, was Sie zu begehen sind mit der Identifizierung Felder eindeutig. Einzigartig ist nur im Geist ähnlich, aber Sie könnten nur gelegentlich nutzen, aber Sie wollen, dass die Datenbank, um es durchzusetzen. Index bedeutet nur präventiv beschleunigen die Dinge in der Zukunft so dass ich für die Suche Dinge in diesem Bereich. Und dann vollständige Text ist in der Regel für Absätze oder Essays, oder große Körper der Text, in dem Sie Vielleicht wollen Sie auch haben Wildcards wie das Äquivalent von Stern. Richtig. So, dass war irgendwie viel auf einmal. Mal sehen, ob wir nicht destillieren kann ein paar dieser Features und dann etwas zu bauen ziemlich einfach, aber mächtig. So unter anderen Design-Entscheidungen sind Sie letztendlich leisten muss, wird entlang die Linien der Speicher-Engines. Und lassen Sie mich nur erwähnen diese in Erwartung der endgültigen Projekte, und Erwartung ließ uns sagen-- kein lasst uns dies tun. Wir bauen dieses kleine Anwendung zuerst. Ich werde in meinem Terminal gehen Fenster, und hier ist nicht nur counter.php, die wir gehen jetzt zu der als nicht mehr Germane loszuwerden, aber wir haben eine ganze Reihe von Verzeichnissen und das wird im Geist sehr ähnlich zu sein zu dem, was Sie in Problem zu sehen set sieben. So haben wir drei Verzeichnisse umfasst öffentliche und Vorlagen, die ist genau, wo wir auf der linken Seite ab Montag mit unserem ganzen MVC-Paradigma. Und zur Erinnerung, in der Öffentlichkeit gehen wird Jede Datei, die ich möchten, dass Benutzer tatsächlich v in der Lage sein zu besuchen in ihren Browser über die URL. Template. Was haben wir in Templates zu setzen? Was für Zeug? Es war nicht viel, aber ein paar Dateien mindestens am Montag. Ja. PUBLIKUM: Kopf- und Fußzeile? DAVID J. MALAN: Kopf- und Fußzeile. So haben wir etwas Ähnliches auch heute. Wir haben ein paar mehr Dateien bekam aber Footer ich sehe, Kopfball Ich sehe, und dann eine Reihe von anderen Dateien. Das ist also das Äquivalent der V MVC Ansicht, die, wieder, wird ein bisschen mehr klar Problem stellte sieben, aber das ist nur ein Ordner bin ich setzen eine Menge meiner Ästhetik. Viele meiner HTML, viele meiner Formen. Inzwischen umfasst, ist eine weitere Verzeichnis, das diese drei Dateien hat und lassen Sie uns einen kurzen Blick auf diese. Ich werde weitermachen und eröffnen config.php. Wie sich herausstellt, wesentlich wie früher in der Wahlperiode, Sie scharfe enthalten CS50 dot h mit pset7. Im heutigen Beispiel, Sie gehen um das Äquivalent von tun mit einer Erklärung verlangen dass effektiv umfasst diese mehrere Zeilen. So klar zu sein, ist dies eine Datei namens config.php. Und feststellen, was es tut. Es ist offenbar, etwas zu tun kryptisch, Drehen auf Fehlermeldungen so dass Sie sie im Browser zu sehen. Es ist also offenbar erfordern zwei andere Dateien so ist dies wie #include in C, und dann diese, die wir sahen, und wir haben darauf verlassen, schaltet sich dieses auf daß Warenkorb ähnliche Funktionalität. Dies bedeutet ein Cookie hin und her geschickt werden. Also, warum ist das interessant? Nun, wenn wir zurückgehen, dies Verzeichnis und öffnen, zum Beispiel, constance.php. Beachten Sie, dass PHP tut Unterstützung Konstanten es ist nicht ganz wie #define in C. Stattdessen können Sie wörtlich sagen definiert und Bekanntmachung dass ich im Voraus gespeichert vier Konstanten in dieser Datei. Eine für die heutige Datenbank für mein Passwort für meinen Benutzernamen, und für den Namen des Servers. Das sind also tatsächlich sein wird ziemlich ähnlich in Problem stellte sieben. Und schließlich, und das ist, wo ich bin werde einige nette Funktionalität zu erhalten von den Mitarbeitern, in functions.php ist ein Bündel von Code, den wir geschrieben haben, und ich stahlen einige dieser von der Problem set sieben für heute, macht das ein paar Dinge und lassen Sie uns nur an einem von ihnen sehen insbesondere. Diese Funktion hier, Abfrage, wird sein die PHP-Funktion, die wir rufen um SQL auszuführen. Vorhin haben wir mit waren phpMyAdmin, aber das ist nur für Art von Lernzwecken und Diagnosezwecke und Vergessen Sie Ihre Datenbank-Set. Wenn Sie tatsächlich nutzen Ihre Datenbank, die Sie, der Mensch, sind offensichtlich nicht zu werden oben, der eine Web Seite jedes Mal, wenn jemand registriert. Du wirst Code schreiben, dass Einfügungen und Löschungen Benutzer on-Demand, und wir werden, dies zu tun über die Abfragefunktion. Wenn ich jetzt nach unten scrollen, da ist werde ein paar mehr Features sein. Redirect zu gehen eine Funktion schrieben wir für Sie, in dem Sie senden Sie den Benutzer zu einer anderen URL, und rendern ist eine Funktion, ganz wie sahen wir am Montag, dass tatsächlich macht eine Vorlage, aber mehr auf diese in der Form pset7 eigenen Spaziergang durch. Denn jetzt, lasst uns gehen Sie vor und tun dies. Lassen Sie mich in meinen Vorträgen Tisch gehen und sehen, dass es derzeit nichts hier nur noch, und lassen Sie mich auch gehen in mein öffentliches Verzeichnis, in dem es gibt nur eine Datei, index.php. Diese Datei wird super einfach zu sein im Moment sieht es einfach so. Sehr viel wie, wie wir off am Montag verlassen. Ich erfordern diese Datei, config.php, die ist eine enthält Verzeichnis, das ist in Punkt Punkt, meine Eltern, und dann ist es nur Rendering diese Datei. Also, was ist diese Datei? Wir öffnen in meinem Vorlagen form.php, und wir werden das sehen. Super einfach, anscheinend ist diese Form werde durch eine $ _GET oder $ _POST einreichen. Schnellplausibilitätsprüfung. Wörtlich visuell suchen Sie die Datei. Methode Equals Pfosten. So wird es nicht, um die URL zu verwenden, wie Google tut, es geht um Versteck sortieren die Informationen hinter die Szenen, und es ist werde ein einreichen Datei namens register.php, und das ist die Datei haben wir noch nicht geschrieben aber was das wird zu schauen, wie das ist. Wenn ich zu einer anderen Seite Dies ist was localhost / index.php aussieht. Und wieder, der Server ist nur unter der Annahme, index.php. Enter. Also das ist, wo wir sind an, und was ich tun möchte, wird in der Lage sein, Dinge zu geben wie David, und dann meine Telefonnummer, die sagen werden, 617-555-1212 für jetzt, registrieren und jetzt register.php wurde nicht gefunden. Also brauche ich, um diese umzusetzen. Lassen Sie uns also schnell Peitsche so etwas wie dieses auf. Lassen Sie mich in meinen öffentlichen Verzeichnis gehen und tun gedit von register.php, und jetzt werde ich weitermachen und starten PHP-Modus, wie wir am Montag getan hat, und in der Nähe von PHP-Tag und machen wir ein paar Dinge. So ein, ich weiß, von geschrieben haben, dass die Form, dass ich für die folgende überprüfen. Wenn sie leer ist, was auch immer der Benutzer in das Namensfeld eingegeben haben, dann Ich werde etwas sagen wie entschuldigen fehlende Namen. Apologize, mittlerweile ist kein in PHP Ding gebaut, es ist eine Funktion, die wir geschrieben in functions.php für pset7 so dass Sie Zugriff darauf haben. Else, wenn das andere Feld ist leer, Anzahl, dann bin ich werde, um die entschuldigen Benutzer und sagen fehlende Zahl. Speichern Sie diese Datei. Jetzt gehen wir zurück zu meinem Browser zurück zum Forum versuchen Sie es erneut. Registrieren. Ok. Nichts ist passiert, was gut ist. Habe ich nicht bekommen eine Fehlermeldung. Aber wenn statt, lassen Sie uns dies erneut laden Seite her und bietet alles. Verdammt. Tun Sie das. Registrieren. Was habe ich falsch gemacht? Wenn leer, $ _POST Namen. Sprich noch mal? Oh, natürlich. Ich habe das wichtigste Teil, die ist erforderlich ("../ includes / config.php."). Ich brauche den Zugang zu den haben entschuldigen Funktion, die Deshalb wurde nichts passiert. Die Funktion ist nicht wirklich existieren. Also lassen Sie uns noch einmal versuchen. Lassen Sie uns die Seite neu laden, klicken Sie auf Registrieren. Ok. Da ist es. Also, der Ausgang sind wir hier sehen, ist das Ergebnis Aufruf eine entschuldigen Funktion, super einfach, und er druckt nur aus, was Ich gebe es als Argument. Alles klar, also lassen Sie uns zusammenarbeiten. Lassen Sie uns zur Verfügung stellen, mein Name wie David, registrieren, fehlende Zahl OK Lassen Sie uns bereitzustellen, dass auch. 617-555-1212. Registrieren. Ok. Also alles ist gut jetzt, einfach nichts interessante geschieht. So, jetzt machen etwas mehr lassen interessante passieren wie diese. Lassen Sie mich in phpMyAdmin zu gehen, und lassen Sie uns tatsächlich eine Tabelle namens Benutzer erstellen, Ich werde es geben, drei Spalten, und ich werde schnell erstellen ID, und dann nennen, und dann Nummer, und das ID-Feld Ich bin werde als int zu verlassen. Das Namensfeld werde ich als varchar zu verlassen, und wir sagen, 64, etwas willkürlich. Die Zahl werde ich zu machen, weißt du was? Wir gehen in gehen unterstützt US-Nummern hier also werde ich etwas tun wie char und dann 10 Zeichen max für eine Vorwahl und dann sieben Ziffern. Und dann hier, ich bin zu gehen angeben Autoinkrement dieses Feld, machen dies zu einem Primärschlüssel, und Ich werde vor und nicht gehen Check eines dieser anderen Boxen. Also, wenn ich nun endlich auf Speichern, und ich gehe zurück zu meinem Benutzer-Tabelle, das ist, wie es aussieht, wenn ich Jetzt klicken Sie einen neuen Tab-Struktur. Also das, klar zu sein, ist nur phpMyAdmin Weg sagen Sie Ihre Datenbanktabelle hat eine ID, einen Namen und eine Zahl mit diesen besonderen Konfigurationen und wir erledigen den Rest der Felder ignorieren es für jetzt. So, jetzt was will ich machen? Wenn ich also jetzt in mein Quellcode, wenn alles gut Ich möchte die folgende Abfrage auszuführen. Legen Sie in, und ich kann einfach sagen Benutzer ich nicht streng müssen diejenigen zurück Zecken, wenn es kein gefährliches Wort wie Nutzer. Ich werde Namen sagen, Nummer, und dann hier bin ich nicht zu hart Code geht das Stelle der Werte vor. Ich werde zwei Fragezeichen setzen. Und das ist eine Konvention in vielen Sprachen wobei, wenn man haben will ein Platzhalter für eine Zeichenfolge Sie gehen, um die Frage zu verwenden sind Marken, aus Gründen wir werden komm zurück zu plaudern über Sicherheit und hier Ich werde in denen zukommen lassen zwei Felder zu schreiben Name, und dann schreiben Nummer, und nun die Datei abspeichern. Und jetzt bin ich zu gehen gehen hier unten ist ein super einfach sagen rendersuccess.php, die wird wieder eine Vorlage sein. Ich werde sehr schnell erstellen. Geditsuccess.php und ich werde einfach sagen H1 Erfolg in dieser Datei. In Ordnung. So, jetzt gehen wir zurück zu den Browser, wo ich besuchte vor. Lassen Sie uns weitermachen und bestätigen schrieb ich in David, schrieb ich in einer Telefonnummer, registrieren. Verdammt. Was habe ich falsch gemacht? Also ich sehe hier ein Fehler, Sie haben einen Fehler in der SQL-Syntax. Lassen Sie mich zurück zu gedit springen lassen mich zurück zu register.php, und was habe ich weglassen, dass Wichtig war das letzte Mal? Ich brauche das. Sie wollen, dass andere als aus wissen mit aufgefallen, aber ich brauche das. So, jetzt gehen wir zurück, und dies war hilfreich, um im Browser zu sehen und deshalb in der config.php wir ausspucken Fehler. Fahren wir fort und laden, klicken Sie auf Weiter, Erfolg. So, jetzt lassen Sie mich über zu meinem Datenbank ein und klicken Sie auf Benutzer, und durchsuchen, und bemerke ich jetzt haben David in meiner Datenbank hier. Nun technisch diese Website noch nicht auf das öffentliche Internet, so kann ich nicht haben andere Menschen bei der Umsetzung hier, aber wenn ich jetzt wollte, für So senden Sie mir eine Textnachricht. Gehen wir aus dem Fenster lehnen hier und sehen, ob dies tatsächlich funktioniert. Ich werde weitermachen und löschen Sie diese Zeile und wir werden diese Unschärfe in dem Video späteren so haben wir nicht die gesamte Internet texting mich, und wir werden jetzt gehen bis zu der Browser und wir gehen über zu Vorträgen und wir werden in den verschiedenen Typ hier Nummer, registrieren, Erfolg. So, jetzt ist meine eigene Nummer vermutlich in die Datenbank, und jetzt der lustige Teil. Lassen Sie tatsächlich nutzen PHP zu tun etwas programmatisch, von der Befehls Linie oder von woanders, und jetzt bin ich nur gehen, um es einfach zu halten und ich werde in meinem gehen Verzeichnis hier und gehen Sie wie folgt. Gedit Skript sagen wir, wir werden nennen es Text, #! / user / bin / env PHP, wie wir sahen, beim letzten Mal. PHP. Jetzt werde ich zu erfordern umfasst config.php, auch wenn dies induzieren einen leichten Fehler. Und jetzt gehe ich voran gehen und sagen, Zeilen, Abfrage, wählen Sie Sterne von den Benutzern, und jetzt hier werde ich eine Technik zu tun vom letzten Mal für jeweils Zeilen Zeile. Und ich werde etwas einfach zu tun. Printf sagen Name ist dies, und diese Nummer, Backslash n. Und jetzt werde ich weitergeben in Zeile zitieren unquote Name, und Zeilen Zitat unquote Nummer, und jetzt die voran gehen lassen und mein Terminalfenster chmod dies a + x zu machen Dieses Skript namens Textdatei. Und nun laufen Text. OK, also Fortschritte. Also habe ich jetzt geschrieben ein Befehlszeilenskript, in einer Sprache namens PHP, daß, deswegen erforderlich Linie, hat Zugriff auf alle jene Konfiguration Konstanten, die ich angegeben. Der Name der Datenbank, und so weiter. In der Tat, nur klar zu sein dass dies nicht nur ein Glücksfall, lassen Sie mich gehen Sie vor und registrieren, wirklich schnell, jemand anderes wie Rob und wird ihm den 555-1212 Nummer. Und jetzt, wenn ich das Skript wieder, bemerken die Macht von dem, was wir mit der Datenbank zu tun. Jetzt habe ich sofort gesehen, was der anderen beiden Reihen sind in meiner Datenbank. So, jetzt versuchen, etwas zu tun lassen sogar schicker Innenseite, und das ist der Teil, den wir haben vorher nicht getestet, so ich das letzte Mal tat dies es ging schrecklich schief, Wir haben Videos in diesem Sinne. Eigentlich, ja, lustig beiseite. Also das letzte Mal, in eine Vortrag wie vor zwei Jahren, haben wir uns entschlossen, habe ich beschlossen, zu sein all dies wäre eine gute Idee dynamisch E-Mails in generieren Klasse, mit der gesamten Datenbank CS50 Studenten, die uns ihre Zahlen gegeben hatte und ihre Mobiltelefonträger, die Sie vielleicht aus pset0 erinnern, wie die Vernunft, es stellt sich heraus Ich hatte einen kleinen Fehler in meinem Programm und haben ein paar Fehler im Jahr 2012, glaube ich. Wobei, das ich für Schleife hatte, tat genau diese Art der Sache, Iteration über die Datenbank, immer einen Namen aus der Datenbank, Namen von der Datenbank, und auf jedem Iteration dieser Schleife Ich schickte eine E-Mail. Aber anstatt das Senden einer E-Mail, ich schickte eine E-Mail die erste Iteration, und zwei E-Mails pro zweiten Iteration geschickt drei E-Mails eine zweite Iteration, die wie Sie vielleicht aus erinnern an unsere Diskussion der asymptotischen Notation diese große O schlecht, wie n quadriert ist, wie viele Nachrichten, die ich geschickt, aber es war noch nicht einmal E-Mails es SMS-Nachrichten. Und wie Sie wissen, ist die Teilnahme nicht Super-High gegen Ende des Semesters und so dachte ich, es wäre nett an die Zeit zu sagen: "Warum bist du nicht Klasse?" In der Textnachricht I der ganzen Klasse geschickt, und es war lustig zu 50% der gleichartigen Klasse, aber die anderen 50%, von denen einige ausgeflippt, schickte ich unglaublich apologetischen süßen Noten um das Personal entschuldigte sich für Absolvierung der Lehrveranstaltung verpasst nur dieses eine Mal, nicht wahr? Also das wäre furchtbar schief. Also in diesem Sinne, lassen Sie uns versuchen, diese wieder, aber nur mit meiner Nummer. Im Voraus, in functions.php, Ich habe diese Funktion hier geschrieben. Es ist Text genannt, und es nimmt in drei Argumente. Eine Zahl, ein Träger und eine Nachricht. Ich bin mit einem Switch-Anweisung, die wunderbar PHP nehmen Saiten, nicht nur Zahlen, und ich wusste nicht umsetzen all die Unterstützung für diese noch Ich habe gerade getan haben AT & T und Verizon. Denn es stellt sich heraus, daß mit diesen Trägern sie haben per E-Mail, SMS-Gateways, wobei man tatsächlich senden Sie eine E-Mail an eine Adresse wie Telefonnummer vtext.com und wenn der Benutzer nicht blockiert hat die Nachrichten, es wird durchgehen ist eine Textnachricht. Nun, dies zu tun, werde ich muss hinzufügen ein Feld wirklich schnell zu meiner Datenbank. Ich werde in zu gehen meine Struktur, und ich bin werde weitermachen und fügen ein Feld am Ende der Tabelle. Lassen Sie uns auf Go, und ich bin werde diesen Träger nennen und jetzt bin ich zu gehen lassen dies als bar Text, aber wir Züchter in der Zukunft sein. Ich werde schnell gehen in meinem Tisch, und ich bin werde von Rob loszuwerden, denn das ist ein Fake-Nummer, Ich werde in den Bearbeitungs hier gehen, und ich bin werde meine Träger manuell ändern Verizon, die sie zusammen ist, und jetzt hier. Lass uns einen schnellen Plausibilitätsprüfung. Wir öffnen unsere Text-Skript, das sieht so aus, ist% s Träger. Wir tun viel mehr Fehler Überprüfung als ich im Jahr 2012, Träger. Und jetzt, ich werde gehen vor und starten Sie das Skript. Ok. Carrier ist Verizon, was bedeutet, nun hoffentlich ich dies tun können. Richtig in diesem Jahr, hoffentlich, hier gehen wir. So Innere dieser for-Schleife, ich bin werde nicht nur haben diese printf, Ich bin auch zu Text anrufen und die Verwendung dieser Funktion Rückruf war es eine Zahl, ein Träger und eine Nachricht. Also mal sehen, ist Nummer werde sein Zeile Zitat unquote "Zahl" Zeile Zitat unquote "Träger" und die letzte war Nachricht. Schrauben Sie nicht in diesem Jahr, Semikolon. Ok. Daumen drücken. Mal sehen, ob das funktioniert. Alles klar, so. Auf geht's. Lassen Entsperren des Telefons, Daumen drücken, verdammt noch mal. Undefined variable may-- oh warten, warten, warten, wirklich schnell. Ganz schnell, wirklich schnell. Dies ist auf jeden Fall wert. Lassen Sie mich zu packen, lassen Sie mich zu packen, uh-oh. Danke, die Texte haben von jemand anderem begonnen. Lassen Sie mich gehen Sie vor und eröffnen Echt schnell, dropbox.php / mail hier. Standby. Jeden Cent wert. Downloads. OK, Quelle src8m. Ok. Brauchen Sie eine weitere Zeile hier. Oh da ist es, es ist in Frosh IMs, ist es im Register auf drei. Oh hallo, Margo, ich danke Ihnen sehr. OK, und ich war diese Zeile fehlt hier. Also lassen Sie mich schnell greifen Diese Codezeile, dem die Mail oder Bibliothek enthält dass ich tatsächlich verwenden möchten, Ich bin schnell werde gehen Sie zurück in Funktionen, Ich werde an die Spitze diese gehen Datei und benötigen diese Datei als gut, und jetzt werde ich wirklich kreuze meine Finger, wenn ich wieder nach dem Befehl Zeilenskript, das Innere ist heutigen lokalen Host-Verzeichnis. Führen Sie Text. Enter. Mail. Standby. Standby. Mail. Oh, OK. Auf geht's. Mail bekommt neue PHP-Mailer. Habe ich das richtig? Verdammt. Zu-- oh, warten, warten, warten. Stehen zu. Ich verspreche, das ist geht es wert zu sein. Adresse. Das ist, warum ich nicht machen das Beispiele rechts vor der Klasse. Ugh. Die folgenden Empfänger fehlgeschlagen. Versuchen wir eine letzte Sache. SMTP aus, fügen Adresse eingestellt, die Adresse ist in der Tat, dass. Versuchen wir diesen letzten Teil der Adresse. Aw, ich bin jetzt wirklich traurig. Danke. Aber ich schätze alle die Texte die dich senden. Du hast dieses David bekam. Du bläst es. Lassen wir es dort und Wir werden am Montag zu beheben. Wir sehen uns dann. DAVEN FARNHAM: Und jetzt Tief Thoughts Daven Farnham. Wenn ein binärer Baum fällt in einem Wald und niemand da ist, um C es-- [kichert].