[Powered by Google Translate] [Woche 8, Fortsetzung]
[David J. Malan] [Harvard University]
[Dies ist CS50.] [CS50.TV]
>> Dies ist CS50, so ist dies das Ende der Woche 8 hier.
Wir hatten natürlich ein bisschen von einem Hurrikan zu Beginn dieser Woche,
so jetzt ist es wirklich nur du und ich in diesem Hörsaal,
aber heute sind wir weiterhin unser Gespräch über PHP
und über Web-Programmierung allgemein, und stellen wir auch die Idee
von Datenbanken, genannt allem ein MySQL, die sehr beliebt ist in diesen Tagen,
zum großen Teil aufgrund seiner Skalierbarkeit sowie wegen ihrer frei und Open Source.
>> Doch zunächst ein Blick auf, wo wir aufgehört letzten Zeit.
Daran erinnern, dass wir an den verschiedenen Frosh IMs Beispielen suchen,
und dies war die abscheuliche Form, dass ich kam mit ein paar 15 + Jahren
um die Studierenden auf dem Campus Register für Erstsemester intramuralen Sport
ohne tatsächlich zu wandern mehr über den Hof zu Wigglesworth
eine physische Stück Papier unter irgendeines proctor Tür schieben.
Stattdessen zogen wir alles online, sondern zu tun, dass wir Gebrauch machen brauchte
von wenigen Technologien, so ein, brauchten wir HTML, Hypertext Markup Language,
die wiederum ist diese Markup-Sprache, mit der Sie Web-Seiten strukturell.
>> Mit ein wenig CSS in diesen Tagen, Cascading Style Sheets
wobei wir verwenden, Stilisierungen der Web-Seite mit einem etwas andere Syntax,
während die HTML war alles über die Struktur davon.
Wir brauchen auch eine Web-Programmiersprache einzuführen.
In diesem Fall verwenden wir PHP und PHP wird es uns ermöglichen
dynamisch Ausgabe von Inhalten so gut wie programmatische Dinge wie
E-Mails, wie es der Fall auf dem Zettel verließen wir letzte Woche.
>> Daran erinnern, dass der Code für diese in 2 Teile war.
Eines hatten wir froshims3.php,
und dies war weitgehend Markup mit einem HTML-Formular innerhalb der IT,
ein winziges bisschen CSS hier oben in den Stilattribute
so dass die Form selbst würde auf der Seite, sondern darüber hinaus zentriert werden
hatten wir einige repräsentative Form Eingänge, ein Textfeld, ein Kontrollkästchen,
einige Radio-Buttons, ein Select-Menü und ein Submit-Button.
Und über dieses Formular eingereicht haben wir in einer Datei, die anscheinend hieß register3.php,
die selbst sah ein wenig so etwas wie dieses.
Nun war der Großteil des Codes in register3.php, Rückruf, alles über E-Mail.
Es dauerte ein wenig Validierung der Form, eingereicht, um sicherzustellen, wurde
dass die Felder tatsächlich bereitgestellt, erwartet wurden.
Dann riefen wir einige PHP-Funktionen mit leicht neue Syntax,
obwohl es von C. ausgeliehen
>> Dieser Pfeil-Operator ermöglicht uns den Einsatz von so genannten objektorientierten Programmierung zu machen.
Wir werden nicht darauf eingehen in jedem Detail hier, aber ich weiß jetzt
es ist ein Weg, mit Funktionen mit Objekten zugeordnet,
die sind eine spezielle Art von Struktur, wie wir in C. sah
Aber jetzt, nur auf den Glauben zu nehmen, dass dies die richtige Syntax zu verwenden ist
bei Verwendung einer Bibliothek wie dieser PHPMailer Bibliothek.
Und dann am Ende dieser Datei hatten wir dynamisch eine E-Mail generiert
Das hat meine jharvard@cs50.net Konto gesendet
von meinem jharvard@cs50.net Konto
und wir informieren den Benutzer entsprechend, dass sie für diesen Sport registriert worden sei.
Das ist ziemlich viel, was die Frosh IMs Website all den Jahren getan
wenn ich es umgesetzt werden, gewährt, in einer anderen Sprache,
aber es zeigt Ihnen vielleicht die Macht, die Sie haben
Jetzt, dass man sich nicht nur programmatisch zum Ausdruck
auf einem niedrigen Niveau in einer Sprache wie C, aber auf einem viel höheren Niveau
mit diesen sehr realen Anwendungen wie E-Mail, um tatsächlich zu lösen
einige Probleme der realen Welt.
>> Nun, natürlich, auch wenn ich dieses Skript einige erzeugen
E-Mails dynamisch aus jharvard@cs50.net, die in der Tat ist ein Konto
dass ich Zugang zu haben, können Sie ganz vorsichtig zu senden
Mail nur von Konten, die eigentlich eine eigene,
damit Dinge bekommt man ein bisschen heißes Wasser im Leben.
Mit dieser sagte, lasst uns jetzt Übergang zur Lösung eines anderen Problems überhaupt,
dass die Beibehaltung Staaten.
Nun, was bedeutet das eigentlich?
HTTP, das Hypertext Transfer Protocol,
ist eigentlich ein stateless Protokoll, und was dies bedeutet, dass
wenn Sie ziehen so etwas wie Google.com und dann drücken Sie die Eingabetaste
Regel muss Ihr Browser eine Art von drehendes Symbol, dass dann
Ergebnisse in einigen Web-Seite heruntergeladen,
und dann das kleine Symbol nicht mehr Spinnen, und das ist in der Tat schlägt
dass HTTP hat irgendeine Art von Verbindung zu dem Server abgeschlossen und das ist es.
HTTP ist in dem Sinne, dass sie nicht aufrechtzuerhalten zustandslose
eine persistente Verbindung zum Server in der gleichen Weise Skype funktioniert
oder Gchat tut, weil mit HTTP
Die Annahme ist, dass wenn man einmal holte eine Web-Seite, die ist es.
>> Nun, in Wirklichkeit in diesen Tagen auf Websites wie Facebook und Google Maps
und Twitter und dergleichen gibt es eine Menge mehr Dynamik, wobei
auch nach, dass das Symbol nicht mehr dreht man kann in der Tat zu mehr Updates
vom Server, mehr Tweets, mehr Status-Updates auf Facebook und dergleichen.
Aber auch das ist mit einer Technik, dass wir reden in ein oder zwei Wochen
bekannt als Ajax mit einer Sprache namens JavaScript,
aber am Ende des Tages, ist HTTP noch staatenlos.
Und doch, wenn Sie wollen, um irgendwie an Dinge erinnern, über einen Benutzer
auch nachdem sie von Ihrem Server getrennt
PHP macht leisten Sie ein Mittel, dies zu tun
weil, wie wir das letzte Mal sah, hat PHP eine Reihe von superglobals
und ein superglobal ist wieder eine besondere globale Variable
Das ist Ihnen durch den Web-Server und PHP selbst übergeben.
>> Sie müssen nicht alles tun, um Werte in sie setzen,
und unter den superglobals wir bisher gesehen haben, sind zu erhalten und zu veröffentlichen,
das ist, wo Formulare automatisch für Sie zusammengestellt werden,
sowie ein paar andere, die wir noch nicht gesehen haben.
Innerhalb von $ _SERVER gibt einige spezielle Variablen in Bezug auf den Server selbst.
Was ist die IP-Adresse, welches Protokoll, HTTP oder HTTPS verwenden Sie wollte,
was Request-Methode hast du benutzt und dergleichen, so gibt es einige interessante,
pikanten Details über den Server, und in der Tat, die der Benutzer in dort.
Es gibt $ _COOKIE, die, wo diese Dinge genannt Cookies gespeichert ist.
Wir werden keine Zeit auf Cookies sich heute,
aber jetzt wissen, dass ein Cookie ist nur ein kleines Stück von Informationen
dass ein Web-Server kann auf einem Web-Browser pflanzen
und im Gegenzug ihre RAM oder ihre Computer-Festplatte
zum Speichern von Informationen über einen Benutzer zum Beispiel seinen Benutzernamen
so daß sie nicht über ihn geben, jedesmal wenn sie sich oder einige
eindeutige Nummer oder Kennung für diesen Benutzer
so dass Sie nicht haben, um sie mit den gleichen Arten von Fragen über nerve
Einstellungen in der Zukunft, aber die meisten von Interesse
jetzt ist $ _SESSION.
>> Diese superglobal, die wie die anderen, Ihnen übergeben wird automatisch von PHP
wenn du schreibst PHP-basierte Websites
können, was Sie wollen, Strings, Integer zu speichern,
Floating-Point, Werte, Arrays, Objekte,
wirklich alles, was Sie wollen, und es erlaubt Ihnen, es in einer solchen Weise zu speichern
dass, selbst wenn der Benutzer besucht Sie jetzt und dann
kommt wieder eine Minute ab sofort oder 5 Minuten ab jetzt, weil
sie nehmen sich Zeit, bevor Sie auf einen anderen Link
PHP wird dafür sorgen, dass das, was Sie in dieser Sitzung superglobal gestellt
Eine Minute oder 5 Minuten wird noch da sein, wenn der Benutzer zurück.
Und unter der Haube diese superglobale wird anhand der implementierten
diese Dinge Cookies genannt, aber jetzt ist es nur eine Abstraktion
wobei es ist eine Art der programmatischen Äquivalent eines Warenkorb.
Was auch immer Sie, der Programmierer, setzen, dass
superglobal assoziatives Array wird es eine gewisse Anzahl von Minuten später
bis Sie sie löschen oder bis der Benutzer das Programm seinem Browser überhaupt.
>> Werfen wir einen Blick auf ein Beispiel dafür, wie dieses Ding tatsächlich verwendet wird.
In counter.php unter den heutigen Teile des Codes
haben wir die folgende Zeile.
Zu Beginn dieser Datei haben wir einen Haufen von blauen Kommentare, die jetzt uninteressant sind.
Aber in Zeile 13 haben wir eine neue Linie,
session_start, und das tatsächlich tut genau das, was es sagt.
Es beginnt Sitzungen.
Es ermöglicht Ihnen, dass große superglobal $ _SESSION verwenden, und es ist so einfach.
Nun, wenn wir in Zeile 16 zu sehen gehen, wollen wir versuchen, herauszufinden, was diese Web-Seite tun.
If (isset ($ _SESSION ["counter"]), dann gehen Sie vor
und speichern Sie in der Zählvariable, Kleinbuchstaben Zähler,
$ _SESSION ["Counter"].
Dies scheint zu sein, erklärte eine lokale Variable namens counter
innerhalb dessen es Putting eine Kopie, was sich innerhalb des superglobale
genannte Session am Standort "counter."
Else, offenbar, diese kleine lokale Variable Zähler wird auf 0 initialisiert.
>> Aber dann ein paar Zeilen später in 26 feststellen, dass die Sitzung Kopie Zähler,
seine wichtigsten, hat ein neuer Wert zugewiesen, die den aktuellen Wert plus 1 ist.
Kurz gesagt, scheint diese Datei zu aktualisieren
ein Zähler, der im Inneren ist der Session superglobal gespeichert
durch Inkrementieren um 1, sondern es zuerst behält eine Kopie des vorherigen Wertes
indem sie in eine lokale Variable namens $ Zähler,
und dann hier unten mal sehen, was bleibt.
Es stellt sich heraus, es ist ziemlich einfach HTML.
Am unteren Ende dieser Seite sehen wir in Zeile 37, dass ich diese Seite besucht
Zähler Anzahl von Zeiten, so gibt es ein paar interessante Features hier.
One, ist dies eindeutig eine Variable, aber es genügt nicht, nur setzen
$ Counter in den Körper Ihres HTML denn natürlich
wenn es nur gibt es unter Ihren HTML PHP gehe davon aus, dass das nur HTML.
Sie buchstäblich wollen € Zähler auf dem Bildschirm ausgegeben werden.
>> Aber anstatt durch Fallenlassen in PHP-Modus
mit diesem Stück Syntax können wir dynamisch einzufügen hier einen Wert
sehr ähnlich im Geiste, was wir taten letzten Mal mit
Einfügen von Werten in Strings.
In der Tat, dies ist nur eine Kurzschreibweise für etwas sagen wie dies wörtlich,
print ($ counter) oder sogar so etwas wie printf (% s, Zähler),
oder sogar, wie Sie vielleicht gesehen, online oder in den Lehrbüchern haben,
es gibt eine Funktion in PHP als Echo
was macht das Gleiche, und alle von ihnen sind nur mehr umständlich Möglichkeiten
zu sagen <? =.
In diesem einen Fall brauchen Sie nicht zu setzen
das Wort PHP nach dem Fragezeichen.
Dies ist Kurzschreibweise für, noch einmal, was wir gerade gesehen haben vorhin
welches Echo gewissen Wert.
>> Mal sehen, was das Ergebnis dieser tatsächlich ist.
Lassen Sie mich gehen in unser counter.php Datei,
und wir werden sehen, dass David nur einen Fehler gemacht, indem er mit dem Code gibt.
Lasst uns fix was er vermasselt gehen,
und der Fehler scheint da zu sein, weg, on line 37.
Nach dem Anfang der Seite Ich habe diese Seite besucht 0 mal.
Nun, lassen Sie uns jetzt gehen, und an der Spitze des Browsers auf die Schaltfläche
laden Symbol, und ich auf zu laden,
und jetzt habe ich die Website besucht 1 Mal, 2, 3, 4, 5, 6, 7, 8.
Und in der Tat, wenn wir an der Quelle dieser Seite finden Sie die aktuelle Quellcode verändert sich,
und beachten Sie die komplette Abwesenheit jeglicher PHP, und das ist, weil
PHP-Code ausgewertet bzw. interpretiert Server-Seite,
und so, dass bedeutet, dass der Ausgang des PHP-Skript ist, was letztlich an den Browser gesendet,
die in diesem Fall eine gewisse rohe HTML und einige rohe Text.
Was ist denn hier los?
>> Nun, mit relativ wenigen Zeilen Code Ich bin in der Lage zu speichern
anhaltend im Laufe von mehreren Sekunden, oder wenn wir lange genug gewartet,
Minuten, sogar Stunden, irgendein Wert in einer Weise, die HTTP macht
scheint stateful als ob wir erhalten haben
diese Verbindung an den Server, und es ist nur zu erinnern, was ich gesagt, beim letzten Mal,
aber in Wirklichkeit gibt es eine ganze Reihe von Komplexität geht unter der Haube
mit Cookies, so dass PHP, um mir diese Illusion ist
dieser Warenkorb-like-Funktion.
Denn jetzt, ein triviales Beispiel, wo wir nur die Speicherung sind eine ganze Zahl,
aber das Feature kommen zurück, um von großem Wert sein
wenn wir reden über komplexere Projekte,
unter ihnen Problems gesetzt 7.
Dies ist Ihre letzte Problem in CS50 eingestellt.
Ich weiß, es ist so traurig, aber was Sie finden, dass wir gehen zu dem Schluss,
dieser Teil des Semesters durch die tatsächliche Übergang
aus dem Kontext C sicher auf den Kontext der PHP
aber während mit einigen der gleichen Grundlagen
Wir haben über längere Zeit gesprochen.
>> Das Ziel mit pset 7 ist CS50 Finanzen umzusetzen,
das ist Ihre eigene Version von Yahoo Finance oder Google Finance
oder sogar Etrade.com wobei Sie die Möglichkeit haben,
schauen Aktienkurse für bestimmte Symbole, sondern sogar mehr als das.
Sie haben die Fähigkeit zu "kaufen" und "verkaufen"-Aktien
, die an verschiedenen Börsen denn dieser Homepage gehandelt
hier schlägt, das ist wirklich das Ausmaß, in dem wir begonnen haben,
das Problem Set für Sie, haben Sie ein Login-Formular, das zur Eingabe eines Benutzernamens und eines Passworts gefragt ist.
Es hat einen Submit-Button, danach aber, wie wir später sehen werden,
es gibt nichts wirklich passiert unter der Haube noch, weil es
bleibt Ihnen die Möglichkeit, neue Benutzer zu registrieren zu implementieren,
die Fähigkeit, Aktien zu kaufen, um Aktien zu verkaufen,
tatsächlich schauen aktuellen Aktienkurse.
>> Und in der Tat, wird dies als realen Welt wie möglich zu sein, denn wir haben
sind ein Stück Code, das Sie mit einer einzigen Funktion ermöglicht
Yahoo Finance, die wunderbar macht frei Daten abfragen
zum Nachschlagen Aktienkurse an der Börse Symbol oder Ticker-Symbol basiert,
und Sie erhalten wieder die aktuellen Börsenkurs des Tages.
Die Daten, die Sie tatsächlich sehen sind in diesem speziellen pset werden
etwa so realen Welt kann es erhalten, so dass Sie tatsächlich Anbindung
mit der realen Welt Aktien, realen Welt Preise,
und wir werden sehen, wie viel Geld können Sie vielleicht machen
im Laufe der nächsten Tage zu spielen mit Ihrem eigenen Problem-Set.
>> Aber lassen Sie uns zunächst auf die Bühne, wie etwas, das sicherlich komplizierter das Design
als counter.php, das ist komplizierter als eine der Frosh IMs Beispiele bislang
und lassen Sie uns versuchen, ein paar Paradigmen einzuführen hier, dass es uns
sowohl für pset 7 und vielleicht auch für das endgültige Projekt, wenn Sie etwas tun, Web-basiert
zu halten Ihren Code gut organisiert, um sich selbst gesund,
und einen Schritt in Richtung Zusammenarbeit, sei es in CS50 endgültigen Projekts
oder darüber hinaus, wenn Sie weiterhin in der Zukunft etwas zu programmieren.
Es ist das allgemeine Design-Paradigma
in der Informatik und in der Software-Entwicklung im Allgemeinen
bekannt als MVC, Model-View-Controller,
und das ist eine dumme Abkürzung, die eine sehr nette Idee beschreibt,
das ist die Trennung verschiedener Aspekte eines Programms,
insbesondere die getrennte die Logik oder die Geschäftslogik einer Website
so dass alles, was Dinge wie geht
Aufruf von Funktionen und Abfragen von Datenbanken und dergleichen
geschieht nicht unter Ihren HTML
sondern in separaten Dateien, und zwar gibt es diese eine Datei
Regel, dass Sie die Controller
das ist wirklich der Kopf hinter der Operation, und wir werden ein Beispiel zu sehen
dies in einem Moment.
>> Es ist ein Modell, das Programmcode wird
Das bedeutet das Gespräch mit Ihrem Datenbanken, Gespräche, bei Yahoo Finance und dergleichen,
und dann gibt es das V in MVC, die Aussicht,
all das Zeug, die Ästhetik, die Dateien, die tatsächlich enthalten verwandt ist
Ihr HTML, vielleicht Ihre CSS und dergleichen.
Die Idee dabei, wie dieses Bild vorschlägt, ist, dass der Controller
ist die Datei, wie wir bald sehen werden und wie Sie insbesondere in pset 7 zu sehen,
dass die Welt redet über ihren Web-Browser.
Das ist die Datei, die auf das öffentliche Internet besucht wird,
aber die Steuerung spricht potenziell ein Modell,
welches einen oder mehrere andere Dateien, die Code verwandten Daten enthalten,
Code-Datenbanken und dergleichen verbunden, und dann redet mit
der Controller einen oder mehrere andere Dateien als Standpunkt unter
welches sind die Ästhetik einer Web-Seite, Vorlagen der Art,
das könnte einige Daten als Input nehmen, aber am Ende des Tages
die einzige Logik innerhalb einer Ansicht sollte das Rendering der Daten sein,
Iteration über einer Schleife und tatsächlich spuckt einige
HTML-basierte Interpretation davon oder sogar so etwas wie ein PDF.
>> Was ist schön zu MVC ist, dass man verschiedene Ansichten haben
basierend auf der Art des Geräts, von der Art der Datei-Format, dass Sie tatsächlich der Basis
möchten, um dem Benutzer zu zeigen.
Werfen wir einen Blick auf ein paar immer komplexer und gut gestaltet Beispielen
indem man zuerst mit Version 0 hier.
Lassen Sie mich gehen Sie vor und eröffnen in unserem MVC Verzeichnis heute
eine Datei namens index.php im Verzeichnis 0.
Achtung: Dies ist ein super einfach und sehr underwhelming Website
das ist eine Art der Version 0 von einer Homepage für CS50,
und bemerken, wie wir einen Link zu Vorlesungen haben, haben wir einen Link zu Syllabus,
und wenn ich auf den Link, um Vorträge beachten Sie, dass die URL
up top wird, um lectures.php ändern.
Wenn ich dann folgen Sie dem Link, um Woche 1 Ankündigung, dass die URL Änderungen week1.php.
Es scheint eine ziemlich einfache hierarchische Struktur hier sein.
>> Werfen wir einen kurzen Blick unter der Haube, wie dies angelegt,
und in der Tat, wenn ich index.php aussehen, es ist ziemlich einfach.
In der Tat, auch wenn ich das ein PHP-Datei namens gibt es keinen eigentlichen Programmcode.
Es ist ein Kommentar, den ich hier geschrieben in PHP nur damit der Benutzer nicht am Ende sehen es.
Natürlich nach wie vor alles, was zwischen PHP-Tags ist
wird interpretiert, auch wenn es ein Kommentar ist, um und interpretieren einen Kommentar
bedeutet, nur um es wegzuwerfen am Ende des Tages und nicht wirklich
senden Sie es an den Browser, so dass alles hier ist nur Ästhetik.
Wenn ich ähnlich lectures.php öffnen auch dies ist nur eine hart codierte Datei.
Es passiert rief etwas werden. Php,
aber es ist wirklich nur. html und week1.php, week2.php
ähnlich sind nur Markup, so gibt es eine Reihe von Unzulänglichkeiten dieses Design.
One, ist es eine riesige Menge von copy / paste.
Auch wenn das einzige, was sich unter diesen Dateien ändern ist die ungeordnete Liste,
die li-Tags, ich dennoch haben doc-Typ, HTML, Kopf,
Titel, engen Körperkontakt, in der Nähe HTML und mehr
in jede einzelne Datei, was bedeutet, dass, wenn ich jemals zu restrukturieren
Diese Web-Seite oder restylize ihm habe ich zu gehen und zu ändern
Alle diese Dateien manuell oder mit einem massiven finden und zu ersetzen.
>> Lassen Sie uns einen Schritt in Richtung einer intelligenteren, mehr denken Design in Version 1 hier
wobei nach der Lese mir, dass wir so aufgenommen, dass man mitspielen
Diese gemächlicher zu Hause feststellen, dass wir hier
eine Zusammenfassung der Dateien in der Version 1 dieser Website,
und es scheint, dass ich es gemacht auf mich Faktor, um aus
einige gemeinsame Code, header.php und footer.php.
Nun, lassen Sie uns einen Blick an, was drin ist der erste von ihnen.
Header.php wirkt vertraut,
aber bemerken wo kommt es abgeschnitten werden?
Gleich nach Zeile 19, das ist also alles, was üblich war
aus den Dateien index.php, lectures.php,
week1 und week2.php aus dem vorherigen Beispiel.
Was ich tat, war Kopier-und Schnitt alles, was allen gemeinsam diesen Dateien war,
steckte es in einen separaten Header-Datei, und ähnlich in footer.php
habe ich den gleichen Grundsatz, wobei die einzigen interessanten Linien
in footer.php sind diese beiden, in der Nähe Körper und enge HTML.
>> Aber was bedeutet dies nun, dass in der neuen Version
index.php merken, wie viel einfacher es bekommen kann.
Zugegeben, sah ein wenig kryptisch, ein bisschen weniger intuitive
zu folgen oben nach unten, aber mein Gott, all dieser Redundanz ist jetzt weg.
Wir verlangen mit einer PHP-Funktion wörtlich heißt benötigen bis oben,
das ist sehr erinnert, erinnern, der C den # include-Mechanismus.
Wir benötigen header.php an der Spitze.
Wir benötigen footer.php am Boden, und das Einzige, was anders ist
oder besondere an dieser Datei ist der Inhalt, der bedeutete, einzigartig zu sein, es ist.
Wenn ich in, sagen wir, lectures.php dann gehen, gilt das gleiche Prinzip.
Auch verlangen einige Bemerkungen up top, aber dann habe ich verlangen, Header, Footer,
und dazwischen, es ist nur der Inhalt, die tatsächlich geändert hat.
Und wenn wir in Woche 1 und Woche sah 2 würden wir sehen,
dass das gleiche Prinzip war dort aufgebracht.
Nun, wir sind nicht ganz fertig da.
>> Werfen wir einen Blick auf Version 2, die eine ähnliche Struktur hat,
aber jetzt merke ich habe etwas anderes vorgestellt.
In Zeile 10 Ich habe helpers.php eingeführt,
die anscheinend enthält Hilfsfunktionen.
Eine Hilfsfunktion ist in der Regel eine relativ kurze Funktion
Sie schreiben, um Ihnen zu helfen in verschiedenen Orten,
und lasst uns sehen, was drin ist der helpers.php.
In diesem Fall sieht es wie es 2 Funktionen hat.
Erinnern Sie sich an den anderen Tag mit unseren cube beispielsweise
Sie können Ihre eigenen Funktionen in PHP zu definieren, und was ich jetzt getan ist, ich habe
definierten Funktionen aufgerufen rendern footer und machen Header,
von denen der erste einen Parameter annimmt genannt Daten,
dessen Standardwert ist ein leeres Array, wie dort vorgeschlagen,
und wir können eigentlich schreiben dies sogar noch kurz in der neuesten Version von PHP
mit den Worten offene eckige Klammer, geschlossen eckige Klammer.
Das bedeutet, dass ein leeres Array der Größe 0, aber dennoch ein Array.
>> Dieser Extrakt Funktion ist etwas Besonderes, dass
was es tut, ist es als Argument ein assoziatives Array
das hat 0 oder mehr Schlüssel-Wert-Paaren, und wenn Sie einen Schlüssel foo
und ein Wert von bar der Extrakt-Funktion
schafft eine Situation, in der jetzt, da der Linie 11,
Sie haben eine lokale Variable namens $ foo, dessen Wert bar.
Und wenn Sie mehr Schlüssel und Werte hatten in der Daten-Array,
ähnlich würden sie in den lokalen Bereich extrahiert werden
oder den Namen Platz, so dass footer.php und
die gleiche Idee hier unten, so dass header.php
Zugang zu diesen Variablen.
In der Tat, lass mich wieder öffnen header.php
und lenken die Aufmerksamkeit jetzt, wie es aussieht in dieser Version.
>> Anstatt hart zu kodieren CS50 als Titel für jede einzelne Seite
feststellen, die Dynamik, die möglich ist, jetzt.
In Zeile 5 Ich bin Echo einen Titel variable,
aber zuerst muss ich mich vorbei diesen Titel Variable einer Funktion namens htmlspecialchars.
Eine dumme Bezeichnung für eine Funktion, solange es ist, aber es ist wirklich das tut, was es sagt.
Es sorgt dafür, dass alle Sonderzeichen
in der Zeichenfolge, die in gewesen ist vergangen richtig HTML entkommen.
Dies ist tatsächlich eine Möglichkeit zur Vermeidung von etwas namens eine Cross-Site-Scripting-Angriff
wobei jemand kann böswillig oder unabsichtlich
injizieren ihre eigenen HTML-Code in Ihre Website
durch Einfügen in eine Form, zum Beispiel,
etwas, dass Sie waren nicht ganz erwartet, insbesondere JavaScript-Code,
Als wir reden in ein oder zwei Wochen Zeit.
>> Dies nun header.php, es ist ein Blick
in dem Sinne, dass es Ihnen ästhetisch den Inhalt einiger Datensatz ermöglicht.
Aber genauer gesagt, ist es eine Vorlage.
Dies ist eine Art Blaupause jetzt, was wir wollen, dass die Kopfzeile jeder Seite aussehen,
aber es gibt einige Dynamik dadurch, dass wir wollen, dass die Titel dynamisch eingefügt werden
basierend auf dem Titel variable
das wurde extrahiert, wenn wir aufgerufen, wieder
Der Render-Header-Funktion.
Nun, wenn wir bei render footer sah, gibt es eigentlich nicht viel von diesem Recht nun
denn in footer.php gibt es keine Dynamik auch immer.
Es könnte sein, aber im Moment ist es eine hart codierte Liste der 2-Tags,
aber das gleiche Prinzip gilt, so dass eigentlich nahe, warum
haben wir Zeit verschwenden mit einem render Header und ein render footer-Funktion?
Lassen Sie mich gehen, statt jetzt in Version 3
und in Version 3 in Helfern habe ich beschlossen, es noch mehr zu vereinfachen.
>> Lassen Sie mich ein render-Funktion.
Lassen Sie mich es, ein weiteres Argument, nannte diese Zeit-Schablone,
womit gemeint ist der Name einer Vorlage sein,
und dann werde ich anmaßend zu verketten. php auf diese Variable den Wert,
und dann, wenn es existiert foo.php, bar.php oder header.php und footer.php,
dann werde ich weitermachen und extrahieren Sie die variablen Daten
und dann verlangen, dass Weg.
In anderen Worten, dies jetzt zu verwenden, wenn ich index.php öffnen
bemerken, dass ich nicht nennen render Header mehr.
Ich nenne machen, aber ich gehe in einem Kurswert von Header
deutlich zu machen, welche Vorlage ich eigentlich laden möchten.
>> Dann hier bemerken, was ich tue.
Ich bin in dynamisch einem Schlüssel Titel vorbei,
ein Wert von CS50, und auch, wie wir bereits gesehen haben,
könnte gemacht prägnanten in der neuesten Version von PHP werden
wo kann ich ersetzen die Array-Funktion mit eckigen Klammern,
was ich vorschlage, ist noch lesbar und sicher
ein wenig leichter zu geben.
Und natürlich mit der Render-footer Anruf an der Unterseite,
wir nicht die Mühe die Übergabe eines zweiten Argument überhaupt keine assoziatives Array,
denn es gibt nichts dynamischen Innenseite dieser Fußzeile.
Es ist nur einige enge Tags für HTML.
Gut, wir Schritte in Richtung wirklich Reinigen Dinge hier,
aber lassen Sie mich eröffnen 2 endgültig Beispiele.
Dieser, Nummer 4, Ankündigung, dass ich eine bewusste Entscheidung getroffen jetzt
um auf das vorherige Beispiel, indem sie endlich mit etwas Hierarchie, um meine Dateien zu verbessern.
>> Beachten Sie, dass in dieser Zusammenfassung, in diese zu lesen mir, ich habe eingeführt
Ein umfasst Verzeichnis und einen Vorlagen-Verzeichnis
deren Inhalte gehen, um die Dinge, die ich aufnehmen möchten sein
und die Vorlagen, die ich möchte zu machen sind.
Das ist wirklich mich als anal und zu versuchen, die Dinge ordentlich,
halten zugehörigen Dateien zusammen, aber das Endresultat
ist, dass wir jetzt ein wenig aufgeräumter Setup, aber wir müssen jetzt daran erinnern,
in, zum Beispiel, index.php
wenn wir benötigen die Datei helpers.php
müssen wir jetzt benötigen sie über includes / helpers.php
anstatt zu sagen helpers.php weil es jetzt eigentlich in einem Unterverzeichnis.
Jetzt, als abgesehen, werden Sie in diesen Beispielen und einige andere sehen
Funktionen wie erforderlich, einmal erfordern.
Es gibt tatsächlich eine Funktion selbst aufgerufen sind, und sie alle haben etwas anderes Verhalten.
Hier sage ich verlangen, einmal um super klar, dass ich nur die
Helfer enthalten in meinem Projekt einmal.
Aber wenn ich vorsichtig und wenn ich tatsächlich denke ich durch meine Logik richtig
es sollte auch nur genügen zu sagen, benötigen bis top
so lange ich mich nicht versehentlich verlangen, dass dieselbe Datei anderswo.
In der Tat ist dies ein etwas effizienter Weg, Dinge zu tun, dann mit
erfordern einmal, so werde ich es schneiden sich nur erfordern.
>> Lassen Sie uns einen Schritt weiter gehen.
Dieses letzte Beispiel jetzt, Version 5, hat eine noch sauberere Ordner-Hierarchie.
Beachten Sie, was ich hier je die Lese mich in dieser finalen Version fertig
ist nun habe ich meine HTML-Verzeichnis, was ich habe die ganze Zeit,
aber innerhalb der dort jetzt nur index.php, lectures.php,
week1.php und week2.php.
Die includes Verzeichnis lebt jetzt zusammen mit der HTML-Verzeichnis,
so auf dem gleichen Niveau wie ein Geschwister, sozusagen.
So funktioniert das Vorlagen-Ordner.
Der Schlüssel zum Mitnehmen ist hier habe ich ein bisschen mehr Struktur eingeführt,
aber das entscheidende Merkmal ist nun, dass nur die Dateien
das müssen Internet zugänglichen, öffentlich adressierbare
von einer URL auf das öffentliche Internet sind in meinem HTML-Verzeichnis.
>> Inzwischen, andere Dateien helpers.php, footer.php,
header.php, die wohl vielleicht mehr empfindlich sind,
vielleicht Helfer tatsächlich einige Benutzernamen und Passwörter oder gewisse intellektuelle
Eigentum von mir, funktioniert weiß ich wirklich nicht wollen, dass die Welt zu sehen, auch wenn sie versehentlich.
Es ist gute Praxis, um aus dem öffentlichen HTML-Verzeichnis
alle Dateien, die nicht brauchen, sich öffentlich.
Alles, was Sie in diesem Fall tun, wenn man, zum Beispiel,
das HTML-Verzeichnis des Datei index.php,
bemerken wir nur noch ein wenig mehr Vorsicht beim erfordern
oder einmal benötigen diese Datei.
Ich muss zuerst tun .. , um zum übergeordneten Verzeichnis zu gelangen,
dann tun / includes / helpers.php
wieder nach unten in tauchen, um die Datei, die ich kümmern uns um Sie.
>> Fragen Sie dann auf MVC
oder diese relativ einfache Inkarnation davon?
Und lassen Sie mich klarstellen, dass wir ziemlich viel auf die fokussierte
V hier die Aussicht und die Ausklammerung dieser Vorlagen.
Wir haben nicht wirklich M aus C unterschieden nur noch.
In der Tat, es ist wirklich kein M hier, und sogar unsere C,
Controller ist nicht wirklich alles tun, dass viel, aber Sie werden viel mehr zu bekommen
vertraut mit diesen beiden 2 Briefe von MVC,
oder besser gesagt, wirst du viel vertrauter mit dem C erhalten
in MVC für Problem Satz 7, so gibt es mehr davon am Horizont.
Haben Sie Fragen?
Es ist eigentlich niemand hier.
>> Okay, lassen Sie uns nun auf die zweite und letzte Thema für heute bewegen.
Das ist die Einführung einer Datenbank.
Bis zu diesem Zeitpunkt hatten wir ein paar Möglichkeiten der Speicherung von Daten.
Wir haben Variablen verwendet.
Zurück in unserem C-Datei, I / O Diskussionen begannen wir mit Textdateien
und mit Dateien wie fprintf, und dann haben wir auch begonnen
reden CSV-Dateien ein wenig, comma separated values,
so dass alle von ihnen konnten wir haben gespeicherten Daten
entweder nicht nachhaltig oder dauerhaft.
Aber auch CSVs sind nicht wirklich förderlich für die Suche
und das Einfügen und Löschen.
Es ist wirklich nur ein dummer Text-Datei durch Komma getrennt
Zeile für Zeile für Zeile für Zeile, also, wenn du willst
Suche die Datei das Beste was Sie tun können, ist wirklich lineare Suche.
Sie müssen am Anfang der Datei beginnen, lesen Sie die ganze Sache in,
und für einen Wert von Interesse zu suchen.
Wenn Sie in sie einfügen möchten, müssen Sie das gleiche tun,
Iteration über sie und Einfügen in einem bestimmten Ort,
und in der Tat, müssen Sie alle suchen Logik selbst zu tun.
>> Man kann nicht klug Pattern Matching auf einer CSV-Datei, wenn Sie sich den Code schreiben.
Sie können nicht Filtration einer CSV-Datei
es sei denn, Sie selbst schreiben den Code.
Wäre es nicht schön, wenn jemand anderes legte in all der Anstrengung
tatsächlich die Suche einfach und das Einführen
und Löschen und Aktualisieren und so weiter?
Das ist genau das, was eine Datenbank ist.
SQL, Structured Query Language, ist noch eine andere Sprache
dass wir hier die Einführung heute, aber auch dies ist ziemlich zugänglich,
und was wir wirklich tun müssen, ist einfach herausreißen es einige der markantesten
Eigenschaften, so dass für pset 7, und wenn Sie etwas tun, Web-basierte,
Ihr fertiges Projekt, haben Sie die Möglichkeit, sich selbst auszudrücken
in Form von Daten Abfragen.
Sie haben die Möglichkeit, ein wenig zu speichern oder eine Menge von Daten
in einer viel stärker strukturiert, dass am Ende des Tages
Ihr Leben leichter machen, denn mit SQL können Sie selbst auszudrücken
viel genauer, viel mehr methodisch, um
wieder eine Teilmenge von Daten aus einem größeren Korpus von Daten.
>> Sie können sich eine Datenbank vorstellen, in diesem Fall eine SQL-Datenbank, wirklich wie Excel
oder Zahlen, wo es eine Tabellenkalkulation,
oder vielleicht mehreren Kalkulationstabellen und eine Tabellenkalkulation natürlich
besteht aus Reihen und Spalten, und das ist, weil
SQL-Datenbanken sind relationale, relationale im Sinne
daß sie speichern Daten in Bezug auf diesen Tabellen
Zeilen und Spalten.
Sie sind leistungsfähiger als so etwas wie eine Tabellenkalkulation,
und eine Tabellenkalkulation soll durch einen Menschen verwendet werden.
Eine Datenbank soll durch einen Programmierer verwendet werden
Schreiben von Code gegen sie, so die Inkarnation einer Datenbank
wird entweder Befehlszeile sein.
>> Eines der gängigsten relationalen Datenbanken da draußen ist, wieder, MySQL,
das ist wunderbar frei, sehr leistungsstark, und dies ist es, was
Facebook verwendet sehr früh und in gewissem Maße auch heute noch
eine Menge seiner Daten zu speichern, und wir werden gleich sehen
, dass mit relativ einfachen Befehlen
Wir können wählen, Daten, Daten einfügen, Daten aktualisieren,
Löschen von Daten und dergleichen, aber zum Glück gibt es eine weitere benutzerfreundliche Schnittstelle
als nur die Eingabe in einem Schwarz-Weiß-Eingabeaufforderung hier.
Wir werden für pset 7 und darüber hinaus ein kostenloses Tool namens phpMyAdmin verwenden.
Der Name ist zufällig.
Das Tool geschieht in PHP implementiert werden,
aber das ist grundsätzlich irrelevant.
Was ist nützlich zu phpMyAdmin ist, dass es sich um ein web-basiertes Dienstprogramm ist.
Wir haben sie in das Gerät für Sie vorinstalliert
und mit ihm können Sie Tabellen in einer Datenbank zu erstellen,
Sie können Daten einfügen, löschen Daten, und in der Regel finden
Ihre Daten in einer ziemlich benutzerfreundlichen Umgebung.
Ihre Benutzer sind nicht zu phpMyAdmin verwenden.
>> Das ist wirklich nur ein Verwaltungs-oder Entwickler-Tool
mit denen zu sehen und zu stochern Ihre Daten und herauszufinden, wie es zu strukturieren,
ähnlich wie du dich vielleicht mit Excel oder Numbers,
aber es wird eine gute Möglichkeit der Visualisierung, was los ist unter der Haube sein
so dass man auf die interessante Problemlösung zu konzentrieren und nicht so sehr
auf den geheimnisvollen Befehlen.
Werfen wir einen Blick auf ein Beispiel von Daten, die tabellarisch gespeichert werden könnte
in einer relationalen Datenbank.
Hier ist ein solches Beispiel.
Nun, leider geirrt phpMyAdmin auf der Seite werfen viel zu viele Worte
und Grafik an Sie, aber wenn Sie trainieren in nur auf der
ID-Spalte, den Benutzernamen Spalte und der Hash-Säule,
Dies ist tatsächlich eine Tabellenkalkulation, aber es passiert ein Schnipsel sein
einer Tabelle Innere des Gerätes
mit einer Datei, die wir Ihnen mit in problematischen Satz 7.
>> Insbesondere geben wir Ihnen eine Datei, stellt
eines Benutzers Tisch, so dass eine Tabelle mit Benutzern mit 3 Spalten,
eine davon ist eine eindeutige Kennung bei 1 beginnt und wobei danach inkrementiert.
Die zweite Säule ist ein Benutzername und diejenigen von Ihnen, Hacker taten,
Die Hacker Edition für pset 2, vielleicht erkennen einige dieser Benutzernamen zumindest.
Auf der rechten Seite sind Kennwörter, aber sie sind nicht wörtlich Passwörter.
Sie sind Hashes davon, so stellt sich heraus,
, dass die Speicherung von Passwörtern in einer Datenbank ist eine wirklich schlechte Idee.
Sie haben wahrscheinlich alle an einem gewissen Punkt von einigen Website gelesen
Oder einige Unternehmens-Datenbank, die kompromittiert, und dann muss man
Ihr Passwort ändern, müssen Sie Erstattungen für Dinge
weil einige schlechte Kerl tatsächlich brach in Ihrem Konto als Ergebnis.
>> Speicherung von Passwörtern im Klartext, unverschlüsselt in einer Datenbank
ist völlig idiotisch, und doch ist es sehr amüsant
dann über einige sehr bekannte Unternehmen gelesen
manchmal in der Presse, deren Datenbanken kompromittiert,
und dass ein Teil ist nicht lustig, aber die Tatsache, dass die Datenbanken enthalten unverschlüsselte
Passwörter ist lächerlich, weil buchstäblich mit einer Zeile Code
Sie können gegen diesen bestimmten Bedrohung zu schützen, und das ist, was wir hier gemacht haben.
Auch für unsere gefälschte wenig CS50 Finance-Version
Wir verschlüsseln Passwörter nur für eine gute Maßnahme, und die Tatsache, dass
all diese Passwörter beginnen mit $ 1 $ ist nur eine Konvention.
Das bedeutet nur, sie sind verschlüsselt oder wirklich Hash,
das ist wie ein One-Way Verschlüsselungsfunktion
wobei man nicht rückgängig machen können seine Auswirkungen mit einem so genannten MD5.
>> Die Tatsache, dass 50 nach, dass es bedeutet, dass ein Salz-Wert
von 50 wurde für Hashing all diese Passwörter mit einer Ausnahme verwendet.
Mine, natürlich, wie kann man es sehen, HA,
war mit einem anderen Salz, so diejenigen von euch, die etwas ausgelöst wurde bis
vielleicht in Hacker 2, das könnte das Ergebnis unserer genutzt haben haben
eine andere Hash als die anderen, weil mein Passwort ist eigentlich das gleiche
wie einige andere Benutzer dort oben.
In der Tat, wenn Sie gewartet haben all diese Woche, um herauszufinden,
was diese Passwörter wurden hier waren die Kennwörter, die Sie wurden herausgefordert
in der Hacker Ausgabe des Problems Satz 2, so nicht allzu schwierig zu knacken.
In der Tat war malan ist das gleiche wie jharvard,
aber wenn wir wieder gehen sie sah anders aus.
>> Konzentrieren Sie sich auf jharvard in crimson weil sie anders gesalzen wurden.
Der Algorithmus wurde in einer Weise, daß die gestörten
Hashwert, sieht die verschlüsselten Wert ein wenig anders
da die Eingänge waren etwas anders, aber das Passwort unter der Haube
war noch letztendlich crimson.
Nun, wen kümmert das?
Nun, stellen wir Ihnen mit den Sample-Nutzer, die Probe Benutzernamen
und Hashes der Kennwörter, so dass Sie tatsächlich haben einige
Kunden für CS50 Finance, wenn Sie zuerst aus dem Boden mit Ihrem Code.
Sie müssen mehrere Tabellen innerhalb von MySQL implementieren, innerhalb der Datenbank.
Du musst mehr Tabellen zu erstellen, effektiv, aber wir beschlossen, Ihnen diese ein
um Ihnen den Einstieg, und du wirst sehen, dass das Problem set-Spezifikation
führt Sie durch den Prozess der Import dieser Tabelle
und auch zu erklären, was einige der Eigenschaften,
und Sie werden auch sehen, dass wir Ihnen mit dem Code
die Hashing oder die Verschlüsselung der Passwörter umgehen,
so brauchen Sie nicht zu viel Sorgen über das, was MD5 oder dergleichen ist eigentlich alles über.
>> So, SQL, Structured Query Language.
Dies ist ganz einfach, die Sprache, wir sind kurz vor dem Start mit in pset 7
und vielleicht darüber hinaus, um Daten aus einer Datenbank anfordern.
Die Daten werden wiederum tabellarisch in diesen relationalen Tabellen, Spalten und Zeilen gespeichert,
aber mit einigen relativ einfachen Syntax wie löschen,
einfügen, aktualisieren und wählen können wir genau das tun.
Wir können aus der Datenbank zu löschen, einfügen,
Daten, sowie ausgewählte, dh abzurufen Daten aus der Datenbank.
Wie gehen wir dabei vorgehen?
Lassen Sie mich gehen Sie in das Gerät.
Lassen Sie mich hochzuziehen http://localhost,
was wiederum die lokale Gerät selbst.
Das ist die Standardeinstellung Spitznamen.
Und lassen Sie mich / phpmyadmin gehen.
Dies geschieht, um eine spezielle URL sein, dass das Gerät vorkonfiguriert zu verstehen ist,
das sofort veranlasst mich, einen Benutzernamen und ein Passwort.
>> Wie üblich werde ich jharvard und Purpur geben,
aber erkennen, das ist das Administrator-Konto auf dem Computer.
Es ist nur ein Zufall, dass es auch ein jharvard für CS50 Finance registriert.
Jharvard, crimson, gibt enter mir die Benutzeroberfläche, die wir sahen,
einen Einblick in einen Moment vor, und es ist ein wenig überwältigend auf den ersten,
aber seien Sie versichert, du bist nie zu haben, um die meisten der Links in diesem Tool klicken.
Sie werden am Ende mit einem kleinen Teilmenge super hilfsbereit sind,
von denen die erste ist Datenbanken hier.
Wenn ich auf Datenbanken zu gehen, bemerken, dass ich aufgefordert werde, eine Datenbank zu erstellen.
Das ist wie eine neue Excel-Datei, effektiv.
Ich werde weitermachen und rufen Sie diesen Vortrag, und ich werde einfach das Feld dort collation ignorieren.
Es hat mit der Darstellung von Daten darin zu tun,
und ich werde Sie erstellen, und jetzt feststellen, wie ich los erstellen lassen
auf der linken Seite, wo es heißt keine Datenbanken
Ich sollte bald den Vortrag Datenbank.
>> Wenn ich jetzt auf der linken Seite, der Vortrag Datenbank klicken,
bemerken, meine Registerkarten ändern ein wenig.
Ich habe Struktur, SQL, Export, Import und einige andere Dinge haben.
Die Struktur ist ziemlich leer.
Keine Tabellen gefunden in der Datenbank, wie es hier heißt,
also lasst uns eine Tabelle erstellen, und lassen Sie uns gehen Sie vor und erstellen Sie eine Tabelle
wie Studenten, und wie viele Spalten wollen wir?
Lasst uns diese einfache und let Rekord für jeden Schüler
eine ID-Nummer, einen Namen und eine E-Mail-Adresse.
>> Wir halten es einfach so, so 3 Spalten, gehen.
Das Formular, das Sie hier sehen, ist jetzt ein wenig chaotisch und überwältigend,
aber wir müssen es Zeile für Zeile zu gehen, so sehr schnell geben wir
die erste Spalte in dieser Datenbank ein Dateiname der ID zur eindeutigen Kennung.
Es wird eine ganze Zahl sein. Ich kann tatsächlich ignorieren Länge und Werte.
Ein int wird auf 32 Bit, egal was Sie dort geben sein, so lassen Sie das Feld leer lassen.
Default-Wert, konnte ich es null, wie definiert.
Ich werde das in Ruhe zu lassen. Lassen Sie uns nicht über Standardwerte kümmern.
Lasst scrollen Sie hier, um die richtigen, Attribute.
Das ist interessant.
Lasst uns weitermachen und etwas willkürlich sagen, dass IDs müssen unsigniert.
Lassen Sie uns nicht verschwenden keine negativen Zahlen.
>> Wir gehen von 0 bis 4000000000, geben oder nehmen,
und dann lasst uns nicht berühren eines dieser Felder nur noch dort,
aber dann lass mich in Namen hier unten geben,
und dann die andere E-Mail war, so dass der Haken ist, E-Mail-
und Namen, offensichtlich nicht Zahlen, so ändern wir diese auf einem anderen Feld.
Es stellt sich heraus varchar, variable Länge char,
ist wie ein String in einer SQL-Datenbank
sondern ein variabler Länge, und Sie haben tatsächlich zu erzählen im Voraus die
maximale Länge des Strings, so dass ich mich auf etwas willkürlich gehen
durch Konvention Typ 255 Zeichen.
Ich konnte absolut sagen 32. Ich könnte sagen, 1.000.
Sie Art von Notwendigkeit für sich selbst entscheiden auf Ihrer Demographie was ist Basis
Die längste Schüler den Namen und gehen mit dieser Nummer oder ein wenig größer,
aber was ist schön zu einem varchar ist es nicht zu verschwenden
255 Bytes auf jeder Schüler seinen Namen.
Wenn es DAVID ist es nicht, ein ganzes 255 Bytes zu verwenden,
aber das ist eine obere Schranke, so dass ich mit 255 nur durch Konvention gehen,
aber wir konnten debattieren, dass einige niedrigeren Wert sein, und für E-Mail-Adresse
nur konsequent zu sein 255, aber auch hier konnten wir die gleiche Debatte.
Aber ich werde eine andere Sache hier zu tun auf der rechten Seite.
>> Was ist mächtig über eine Datenbank ist, dass es eine Menge schweres Heben zu tun
oder komplexe Arbeit für Sie.
Insbesondere, ich weiß wirklich nicht, was meine Studenten-ID-Nummern sind.
Es ist nur soll eine eindeutige Kennung in einer Datenbank
so habe ich eine 32-Bit-prägnante Darstellung dieser Studenten
so dass ich einen Weg eindeutig identifiziert sie
damit es nicht 2 Davids, zum Beispiel, werden in einer Klasse.
In der Tat, ich werde dieses AI Feld Auto Increment zu überprüfen,
so dass die Datenbank, MySQL, herausfindet,
Was jeder neu eingefügte Studenten ID sein wird.
Ich weiß nicht einmal, darüber in meinem Code kümmern,
und ich werde auch etwas unter dem Index-Menü wählen.
Der Index Drop-Down hat hier primären, unique,
Index-und Volltextsuche.
Sie können vielleicht erraten, was ein paar dieser Dinge sind,
aber es stellt sich heraus, die in relationalen Datenbanken
Sie der Programmierer oder der Datenbank-Administrator bekommen präventiv
geben Hinweise auf die Datenbank zu, welche Felder
in einer Tabelle sind ein wenig speziell.
>> Zum Beispiel, in diesem Fall werde ich diese ID sagen,
wird ein Primär-Index, sonst als Primärschlüssel bekannt sein.
Was dies bedeutet per Definition, dass ID fortan
wird eindeutig identifizieren Schüler in dieser Tabelle.
Kein Schüler haben die gleiche ID, weil ich imposanten diese Einschränkung oder diesen Index werde.
Darüber, was das wird für mich zu tun ist, es wird zu sagen,
MySQL, dass ID ist etwas Besonderes.
Ich kümmere mich besonders über ID, so gehen Sie vor und tun Sie Ihre Phantasie Datenstruktur Magie,
Aufbau eine Art Baum.
Typischerweise ist es etwas namens B-Baum, die wir nicht in den Wochen hat vor aussehen,
aber es ist eine weitere solche Datenstruktur im Geiste der binären Bäume
und versucht, die wir untersucht haben, aber es wird zu sagen,
in der Datenbank das Feld ist so wichtig, dass ich wahrscheinlich
wollen in der Lage sein, auf sie zu suchen, gehen Sie vor und bauen etwas Phantasie
Datenstruktur im Speicher zu beschleunigen sucht, so dass idealerweise
sie sind konstante Zeit oder zumindest als dieser möglichst nahe
so daß es nicht in lineare Suche devolve wird die nicht zu sein
die leistungsstarken Ansatz.
Im Gegensatz dazu konnte E-Mail Adresse ein Primärschlüssel haben.
>> In der Theorie ist jeder E-Mail-Adresse eindeutig, es sei denn, Sie teilen eine Rechnung,
aber es ist in der Regel nicht gut, so etwas wie eine Zeichenfolge verwenden
als Primärschlüssel, denn wenn ihr Zweck im Leben ist, eindeutig zu identifizieren
Zeilen in Ihrer Tabelle gibt es keinen Grund zu 255 Byte maximal nutzen
eindeutig zu identifizieren jemand, wenn Sie lässt sich mit nur 4 Bytes
oder ein 32-Bit-int.
Im Allgemeinen sollte ein Primärschlüssel sein kurz und prägnant
und im Idealfall so etwas wie eine ganze oder eine große int, die auf 64 Bit werden passiert.
Aber eine Emailadresse sollte eindeutig sein, und eines der Merkmale einer Datenbank zu
ist, um die Eindeutigkeit für mich durchzusetzen.
Durch die Auswahl einzigartiger hier neben E-Mail, auch wenn E-Mail selbst
gescrollt wird aus dem Bildschirm, ich bin in der Datenbank zu sagen
trau mich nicht.
Lassen Sie mich nicht in die Datenbank einfügen
die gleiche E-Mail-Adresse zweimal, auch wenn ich ein Idiot bin, und bin nicht
sehr gut mit meinem Wenn und anderes ifs und tatsächlichen PHP-Code
und ich versehentlich damit der Benutzer mit einer vorhandenen E-Mail-Adresse registrieren
Die Datenbank ist noch eine weitere Ebene der Verteidigung für die Richtigkeit
um sicherzustellen, dass doppelte E-Mail-Adresse nicht am Ende in der Tabelle.
>> Jetzt hingegen, für den Sie wahrscheinlich nicht wollen, dass so einzigartig machen
denn dann könnte es nie 2 Davids oder 2 Mike Smiths zum Beispiel sein,
in Ihrer Datenbank, so dass man wir einfach in Ruhe lassen.
Ich werde weitermachen und klicken Sie auf Speichern unten rechts,
und alles sieht gut aus, aber bemerken hier
Dies ist ein Teil, das jetzt werden wir nicht zu viel Zeit auf
weil die Syntax ist ein wenig komplex, und wir haben nicht zum Erstellen von Tabellen
allzu oft, aber SQL selbst ist eine Sprache,
Die Syntax für die ist hier richtig, dass ich hervorgehoben.
Was phpMyAdmin wirklich tut, ist es schafft eine Web-basierte GUI für Sie
, mit denen Sie Zeit sparen und nicht manuell abtippen
eine ziemlich lange SQL-Abfrage so.
>> In anderen Worten, wenn man wollte manuell erstellen diese Tabelle,
entweder auf dem schwarzen und weißen Eingabeaufforderung oder sogar in phpMyAdmin
mit diesem anderen Reiter, diese Registerkarte SQL, wo Sie können in beliebigen SQL-Abfragen eingeben
Sie wollen, ehrlich gesagt, das wäre mir genommen habe eine Minute
tatsächlich erinnern die gesamte Syntax, und selbst dann würde ich wahrscheinlich haben
machte einige Tippfehler, so ist dieses Tool für Dinge wie, dass nützliche, und es ist auch lehrreich.
Sie können beginnen, zu folgern, was die Syntax ist
nur durch die schöne Farbcodierung, dass phpMyAdmin ist das Hinzufügen
für unsere visuellen Komfort.
Aber jetzt lasst uns dies tun statt.
Lassen Sie mich auf die Registerkarte Einfügen oben gehen, und lassen Sie mich gehen Sie vor und legen Sie zum Beispiel
eine ID von sagen wir mal, eigentlich ist mir egal.
Es ist auf Autoinkrement gehen. Ich werde die Datenbank sich mit diesem zu lassen.
Aber ich werde David sein, und meine E-Mail sollte malan@harvard.edu sein.
>> Fahren wir fort hier und in Mike Smith als einer anderen.
Ich gebe mir einen Nachnamen sowie,
und wir haben ihn smith@example.com sein,
und dann, wo ich weiter gehen?
Nun, es sieht aus wie gehen die Schaltfläche zu klicken und voila ist.
Beachten Sie in den oberen 2 Zeilen eingefügt.
Dies ist die eigentliche SQL-Abfrage.
Das ist das phpMyAdmin-Tool für mich ausgeführt,
aber das Endergebnis, Kündigung, wenn ich jetzt auf die Registerkarte Durchsuchen gehen,
zu 2 Zeilen in dieser Tabelle sehen, erinnert sehr ästhetisch
der Tabelle sahen wir früher für unsere Nutzer vor pset 7,
Einer von ihnen ist David Malan, von denen jetzt Mike Smith.
Aber nur klar zu sein, brauche ich nicht zu phpMyAdmin verwenden,
und in der Tat, du wirst bald Schreiben von Code für pset 7
das automatisiert den Prozess der das Hinzufügen von Zeilen, Löschen von Zeilen, das Aktualisieren von Zeilen und dergleichen,
so lassen Sie mich stattdessen auf die Registerkarte SQL gehen hier
und geben Sie select * from Studenten, wo
email = "malan@harvard.edu."
>> In anderen Worten nehme jetzt haben Sie
Einige HTML-Formular, und die Benutzer in ihrer E-Mail-Adresse, unter anderen Bereichen,
und das Ziel ist jetzt in PHP auf dem Back-End-Code
tatsächlich schauen dieses Benutzers andere Details.
Was ist Ihr voller Name? Was ist Ihre ID-Nummer?
Sie könnten eine SQL-Abfrage wie dies schreibe, select * from Studenten
wo email = "malan@harvard.edu."
Und wenn ich dann auf zu gehen, feststellen, dass ich, ja ich weiß, wieder nur eine Zeile.
Mike wird aus diesem Ergebnis Satz weggelassen, da die Sammlung von Zeilen
wird in der Regel genannt, weil er nicht über die gleiche E-Mail-Adresse als mich.
>> Jetzt wieder hier für pset 7 Sie phpMyAdmin als administratives Tool verwenden
und ein pädagogisches Instrument zu lernen Ihren Weg
weltweit von SQL, aber am Ende des Tages
du gehst zu werden schreibe diese Abfragen innerhalb der tatsächlichen PHP-Code,
und so in Zamyla die Komplettlösung insbesondere dran bleiben
wo Sie einen Rundgang durch die Verteilung Code für dieses Problem Set zu bekommen
wo wir Ihnen nicht nur die Ästhetik gegeben für die Login-Seite
und das schöne sexy Logo, das CS50 Finance sagt, aber wir haben auch euch gegeben
eine Reihe von Funktionen, die Ihnen das Leben ein bisschen leichter wird.
Wir haben auch ein Teil der pset für Sie geschrieben,
die Anmeldung Teil davon insbesondere, um Ihnen ein Gefühl von einer repräsentativen Design
das tatsächlich verwendet einen Controller, beispielsweise index.php,
login.php und dergleichen, und dann wirst du sehen das pset hat auch eine Vorlagen-Verzeichnis
das hat alle Ihre Ansichten, die alle die Ästhetik.
Und so ist die gesamte Workflow in pset 7 wird das sein
Ihre Nutzer besuchen eine Steuerung über eine URL in einem Browser.
Das Controller enthält PHP-Code, den Sie geschrieben haben, und innerhalb Ihrer PHP-Code
könnten einige Zeilen von SQL verschachtelt zwischen doppelte Anführungszeichen
und an eine Funktion übergeben schrieben wir als query
das wird Ihnen helfen, die Datenbank zu sprechen, ohne mit so etwas wie
ein Administrations-Tool wie phpMyAdmin.
>> Du wirst in der Lage sein, SQL-Anweisungen in PHP-Code schreiben
und wieder ein PHP-Array der Ergebnismenge,
Zeilen, die auch wirklich zueinander passen diese Abfrage.
Und ähnlich werden Sie in der Lage sein, um Einsätze oder löscht tun
oder Updates oder dergleichen, die Syntax für die ziemlich ähnlich ist,
und du wirst von einigen Online-Referenzen zu sehen, aus dem Code der Verteilung
und aus dem pset Pack selbst genau, wie man über das Tun, dass zu gehen.
Erkenne letztendlich wir wirklich nur an der Oberfläche kratzen von SQL
und MySQL, aber die Macht der es wirklich ist, dass Sie frei
auf die Probleme, die Sie lösen wollen konzentrieren, die Anwendungsfälle Sie implementieren möchten
ohne ganz so viel Sorgen, zumindest früh,
darüber, wo und wie zu speichern und durchsuchen Sie Ihre Datenbank,
und das ist ganz wörtlich, wo Facebook selbst hat seinen Anfang
MySQL und dann mit mehr MySQL-Servern und dann mehr MySQL-Server
es dauerte nicht lange, bis sie dann musste wirklich anfangen zu denken intensiv darüber, wie man
Daten speichern, wie man die Dinge noch effizienter zu speichern,
so, obwohl wir für selbstverständlich halten, dass Indizes und Unique-Einschränkungen
und so weiter nur Arbeit gibt es ein sehr interessantes Gespräch
dass dies alles schließlich zu führen, so klar, dass wir nur an der Oberfläche kratzen
was könnte schließlich für Sie oder Ihre Projekte werden ganz ein bisschen von großen Daten.
>> Mit dieser sagte, lasst uns hier zu Ende, und wir sehen uns nächste Woche.
[CS50.TV]