R. J. Aquino: Lasst uns einfach loslegen. So ist dieses Quiz ein. Hier sind einige High-Level-Informationen. Auf der Seite für das Quiz ist in diesem URL nicht mehr CS50.net, obwohl das wird immer noch funktionieren. Es ist CS50.harvard.edu/quizzes/2013/1. Es ist die große Über-Seite, sagt Ihnen wo und wann, und zwar am nächsten Mittwoch in eine Reihe von Zimmern. Und am nächsten Mittwoch, ich bedeuten, in zwei Tagen. All diese Information ist da. Aber es ist kumulativ. Also alles, was aus der ersten Hälfte des Jahr ist potenziell auf dem Quiz, da kann man nicht wirklich fortschrittliche tun Dinge in C ohne, wenn die Bedingungen und für Schleifen und dergleichen. Aber es wird ein Schwerpunkt auf die sein Material, da Quiz 0 abgedeckt, beginnend mit Strukturen und Datei I / O. Es ist in der Regel mehr Herausforderung als Quiz 0. Die durchschnittliche Punktzahl ist in der Regel niedriger. Studieren schwer. Während Sie studieren, sollten Sie verwenden, CS50/discuss auf Ihre Fragen stellen und lesen Sie die Fragen der anderen Menschen. Also, wenn Sie irgendwelche Fragen nicht haben, einloggen und lesen Fragen Sie Ihre Freunde '. Sie sind wahrscheinlich gute Fragen. Und nehmen Sie die Praxis Quiz. Wir haben was für Quiz sieben oder acht Jahren. Sie sind alle online. Zukunftsfragen sind ähnlich auf alte Fragen. Das ist, wie wir sie machen. Das Quiz ist noch nicht vorhanden. Keiner von uns haben es gesehen. Aber es aussehen wird vorherige Quiz. Aus diesem Review-Sitzung, das ist nicht eine vollständige Liste der Themen. Man kann nicht einfach diese zu besuchen und dann sein für das Quiz perfekt bereit. Andernfalls wäre es nicht dass viel von einem Quiz. Und dies ist auch nicht unbedingt alles, was Sie wissen müssen über jede bestimmten Thema. Es soll Sie auf die Dinge, aussetzen wir behandelt haben, daran erinnern, was wir bedeckt, und die Art und Weise die wir es bedeckt. Aber Sie müssen noch weiter gehen und tiefer, wenn Sie studieren, um doppelte Kontrolle Sie wissen alles über einem bestimmten Thema ist und dass Sie ausgefüllt haben alle Ecken, die waren in der Vorlesung behandelt. Die Quiz Noten sagen Sie zu gehen, um die Schreiber Notizen, Uhr Vortrag Videos. Das ist ein guter Weg, um sicherzustellen, Sie haben bedeckt alle Grundlagen. Also erst angefangen, als ich diese Dias, habe ich versucht, zu setzen, wo ich Informationen. Also für Datei-I / O, zum Beispiel, Woche 7, Montag Vortrag und der entsandte Abschnitt 6 und Problem-Set haben alle Informationen über Datei-I / O. Ich getan habe dies für jedes Thema. Also diese Titel Folien können Sie hilfreich sein. Hier haben wir also Datei-I / O. Denken Sie daran, in Problem Set 5, haben wir fopen, fclose, fwrite, fread und fseek. Direkt nach Wiederherstellung 30ish JPEGs und mit der Größe verändert und mit der Nase Bitmaps, sollten Sie ziemlich vertraut sein mit diesen Funktionen und wie sie funktionieren. Wenn Sie nicht mehr vertraut, auf jeden Fall überprüfen sie. Und stellen Sie sicher, dass Sie verstehen, was die verschiedenen Argumente sind, wenn sie verwendet wird. Aber die gemeinsame Datei-bezogene Bugs Sie kann etwa gefragt werden - Nun, wenn Sie vergessen haben, zu überprüfen, ob fopen tatsächlich gearbeitet, bevor Sie zu gehen Ändern einer Datei. Das könnte schlecht sein. Wenn Sie vergessen haben, eine Datei fclose dass Sie fopened haben, ist, dass ähnlich ein Speicherverlust. Das ist ziemlich schlecht. Und vergessen zu überprüfen, ob Sie haben erreicht das Ende der Datei, bevor Sie Schreiben beginnen zu. Also, wenn Sie sagen, hey, ich bin bei das Ende der Datei. Gib mir 5 weitere Bytes. Nun, das ist wahrscheinlich nicht zu so funktioniert, wie Sie es erwarten. Das ist es wirklich für Datei-I / O, Weil wir so viel davon mit das Problem eingestellt. Also, wenn Sie verstehen, was los war in Problem-Set 5, erinnern sich an die bitmats und die JPEGs, dann haben Sie wahrscheinlich alle sind Set für Datei-I / O. Wenn das ein bisschen Fuzzy, auf jeden Fall überprüfen, dass Problem eingestellt und die zugehörigen Material. Strukturen waren das Thema, das auf der waren Linie zwischen 0 und Quiz Quiz ein. Hat nicht ganz den Schnitt für 0 Quiz. So werden sie auf jeden Fall auf sein Quiz 1, Woche 7, Montag. Was ist eine Struktur? Hier zeigen wir eine Struktur. Es ist wie ein neuer Typ. Es ist wie ein Behälter für mehrere Felder. In diesem Fall haben wir eine Struktur deklariert Schüler, die zwei Felder hat - eine Zeichenfolge, die wir fordern Namen und ein int, die wir fordern Alter. Also, wenn ich mich um Studenten weitergeben oder ich Studenten ändern, werde ich in der Lage zu sein, Zugriff auf ihre Namen und ihr Alter. Schauen wir uns einige Code dafür. Hier sehen wir, dass ich erklärt habe ein Student s, genau wie Ich erkläre, eine Variable - int x, int y, et cetera. Hier ist Student s. Er beginnt mit nichts auf seinen Feldern. Setzen wir also ihnen. Sie setzen Felder einer Struktur mit Punkt. Also habe ich hier gesagt, dass s.name = RJ. Und s.age = 21. Sie können auch Felder zu aktualisieren auf die gleiche Weise zu aktualisieren, würde der Wert einer Variablen. Also habe ich meinen Namen von RJ mit ändern wollen keine Zeiträume R. J. Dinkel die richtige Weg. Es wäre = RJ, das gleiche s.name werden wie gesagt es ursprünglich. Und dann können Sie darauf zugreifen. Also haben wir sie eingestellt haben. Wir haben sie aktualisiert. Sie können auch auf sie zugreifen in der gleichen Weise. So, hier bin ich Ausdrucken R. J. Ist 21 Jahre alt. Und ich bin Zugriff auf diese Werte mit s.name und s.age. Also das ist, den Zugriff auf Strukturen mit der Punktnotation. Yep, in Frage zu stellen? ZIELGRUPPE: Gibt es einen Grund für die vorherigen Folie, die Sie gar nicht gestellt Schüler in der oberen Zeile, wie typedef struct Student und dann Schüler am Ende? R. J. Aquino: Also war die Frage, auf diese Folie, die wir gesehen haben, in der Regel typedef struct Knoten und dann die Felder der Struktur und dann das Wort Knoten. Und wie hier komme ich nicht sagen, typedef struct Student und dann die Felder der Struktur und dann Student? Der Grund ist, dass ich nicht brauchen, um zugreifen, innerhalb der Struktur. Es ist also OK, um es ohne einen Namen zu verlassen. Ich kann einfach lassen, wie eine anonyme Struktur. Der Grund, warum wir es tun und für verkettete Listen Dinge ist, weil in Ihnen benötigen um eine Struktur-Knoten Sterne verweisen. So ist die Struktur muss einen Namen haben, so dass Sie später darauf zugreifen können. Es ist ein kleines Detail. Aber Sie werden in der Regel sehen typedef struct geschweiften Klammern, wenn Sie nicht brauchen, Name und typedef struct einige Namen gefolgt von geschweiften Klammern, wenn man so will müssen der Name. Also das ist eine gute Frage. Und an diesem Punkt, neigen wir dazu, zu modifizieren Strukturen und übergeben um Strukturen von verweisen, nicht von Wert. Also werden wir nur passieren um Hinweise auf Strukturen statt, das um die Structs sich. Sie sind also sehr häufig sein wird Verwendung, in diesem Fall, Student * oder struct node * oder * statt Knoten Studenten, oder Knoten. So, hier habe ich gesagt, OK, die Variable ptr wird sich die Adresse s sein. Es wird der Zeiger sein dem Schüler R. J. So können wir auf diesen Feldern erhalten das gleiche wie wir etwas zu bekommen. Zunächst ID Referenz den Zeiger , um die Struktur zu erhalten. Das ist * ptr und dann ein Punkt und dann Alter. Also, um das Feld zu gelangen, und ich habe aktualisiert nun auf 22, denn wir sagen wir, es war mein Geburtstag. Es gibt eine Kurzsyntax Mit den Pfeil hier. So ptr Pfeil Alter nur das gleiche wie * ptr.age. Nun, das ist etwas, das Sie haben auswendig zu lernen und zu erinnern. Sie verwendet es eine Menge in pset6, die Speller pset. Aber das ist eigentlich, was los ist auf unter der Haube. Es ist Dereferenzierung des Zeigers und dann zugreift. Fragen? ZIELGRUPPE: [unverständlich]. R. J. Aquino: Also, warum sind wir mit Zeiger als Strukturen anstelle der Structs selbst? Der Grund wäre, wenn Sie vorbei sind eine Struktur an eine Funktion, werden Sie wahrscheinlich geben möchten um nur die 4 oder so Bytes, die den Zeiger darstellen, wie auf die potenziell 30 oder Gegensatz 40 Bytes, die der Struktur sind. So etwas vorbei zu einer Funktion ist einfacher, wenn die Sache kleiner ist kurz. Fragen? ZIELGRUPPE: Sie könnte dies erwähnt haben am Anfang, sind aber anderen Folien auf [unverständlich]? R. J. Aquino: Diese Folien werden nach der Überprüfung Sitzung. Wir werden sie auf der Website zu posten. So bewegen auf und Bewegen auf leicht schneller, werden wir über Daten sprechen Strukturen. Es gibt eine Menge. Wir legten ein paar von ihnen. Hier ist, was Sie verstehen sollten, über Datenstruktur. Sie sollten sich wirklich auf einem hohen verstehen nivellieren, was jeder Struktur ist. Können Sie sich in Englisch zu erklären, Ihre Freund, der CS50 nicht getroffen hat, wie organisieren wir unsere Daten und deshalb möchten wir werden, mit so etwas in dieser Art und Weise? Das ist ein Ding. Thing zwei, verstehen die Umsetzung. So verstehen, wie man diese Dinge verwenden in C. Und wir werden über diese gehen. Und dann, was drei werden wissen, wäre die Laufzeiten und die Grenzen der verschiedenen Strukturen, die Sie verwenden. So verstehen, warum Sie wäre ein Hash-Tabelle statt eines Arrays. Verstehen Sie, wie schnell, im Durchschnitt, Zugriff auf eine Hash-Tabelle ist. Verstehen Sie, was Operationen sind schnell auf verketteten Liste, aber langsam auf Arrays und umgekehrt. Also um das zu verstehen, werden Sie zu haben, verstehen, Big-O-Notation nur wissen, wie man über diese sprechen möglichen Dinge. Und wir werden darüber reden. Also als erstes, verkettete Listen. Hier ist eine High-Level-Bild einer verketteten Liste. Wir zeigen dies in der Klasse. Wir haben in der Regel 10 Personen auf der Bühne stehen. Aber wir haben eine Reihe von Knoten, wo jeder Knoten einen Wert und einen Zeiger hat zu seiner nächsten Wert. So, um von einem Knoten zum nächsten zu kommen, können Sie nur sagen, gib mir den nächsten Knoten. Sie haben diesen Knoten. Gib mir den nächsten Knoten. Sie haben diesen Knoten. Gib mir den nächsten Knoten und so weiter bis es kein Knoten links. Also weiter zu reden es auf einem hohen Niveau. Es ist sehr einfach, die Dinge einfügen in einer verketteten Liste. Wenn Sie nicht über die Reihenfolge egal, Sie können einfach fallen lassen gleich zu Beginn. Das ist konstante Zeit. Aber es ist schwer, einen Wert zu finden. Wenn Sie versuchen, zu fragen sind, sieben in meiner Liste? Sie müssen durch gehen jeden einzelnen Wert. Ist das sieben? Ist das sieben? Ist das sieben? Ist das sieben? Immer und immer wieder. Und das ist O (n). Also, wenn das Studium für das Quiz, vergleichen Sie dies mit Arrays. Ist das OK? Die Lichter gingen dim. OK. Wann ist eine verbundene Liste besser? Wenn ein Array ist besser? Also schauen wir uns an einem bestimmten Code. Hier ist eine Potentialknoten. Es ist eine Struktur. Es verfügt über einen int n, die wird unser Wert sein. Und es hat eine struct node * next, die Unser Zeiger auf den nächsten Knoten. So, hier können wir sehen, dass wir zufällig um einen int in unserer Knoten gesetzt haben. Aber wenn dies eine verbundene Liste von char Sterne oder eine verkettete Liste von Schwimmern, wir völlig könnte das auch tun. Denken Sie daran, in pset6, Sie hatten wohl ein verknüpfte Liste von char Sterne oder nur static char-Arrays. Schauen wir uns hier bei einer Operation. So zu legen Sie eine neue wollen wir n in unsere verketteten Liste. Wir beginnen mit einem Zeiger, der Kopf ist einen Zeiger zu diesem Knoten, weist der Wert von n und der nächsten einen Zeiger, Punkte dieser Knoten ein Wert von n und eine nächste null, denn es ist der letzte Knoten. Also im Interesse der Zeit, werde ich setzen alle den Code auf dem Bildschirm. Und wir werden durch sie hindurchgehen ein paar Zeilen zu einer Zeit. Also hier ist der Code. Ich hoffe, es ist lesbar. Das erste, was wir tun, ist malloc wir einen neuen Knoten. Es macht also einen Zeiger auf einen neuen Knoten, die nicht ganz haben nichts einstellen in es noch nicht. Wir überprüfen, um sicherzustellen, dass der neue Knoten nicht leer ist. Andernfalls müssen wir aufgeben. So vergewissert haben, dass wir jetzt die Werte in den Knoten. Also haben wir die neue n in unsere n-Feld. Und wir stellen Sie die nächste Zeiger auf Punkt der ursprüngliche Kopf, so dass wir Jetzt haben dies einge Knoten in unsere Liste. Schließlich haben wir die globale Kopfpunkt zu unserem neuen Knoten, so dass, wenn wir uns beginnen an Kopf, würden wir das an sein neuen ersten Knoten statt die alte ersten Knoten. Und wenn die Funktion beendet wird, die Variable neuen Knoten nicht mehr existiert, da es lokal zu der Funktion. Das ist also der Zustand der Welt. Unsere globale Kopf weist auf unseren neuen ersten Knoten, die auf die Punkte unserer Original ersten Knoten, die Punkte zum Knoten danach. Das war Insertion. Ich hoffe, dass war relativ einfach zu folgen. Wenn Sie Zweifel haben, zeichnen Sie ein Bild. Also ich finde, dass spricht verkettete Listen und Blick auf Code ist sehr nicht geholfen. Während der Suche auf ein Bild von einem verknüpften Liste ermöglicht es mir zu denken, oh, so Ich habe diesen Knoten hier. Aber wenn ich diesen Zeiger zu aktualisieren, es endet getrennt. Und ich habe vergessen, wo der Knoten geht. Und der Code beendet. Und Sie haben mehrere Knoten , die getrennt sind. Und Sie müssen nicht am Ende mit die Liste, die Sie möchten. Also, wenn Sie das Bild zu zeichnen und es tun Schritt für Schritt, hoffentlich, sehen Sie, die richtige Ordnung der Dinge in Bezug auf die Aktualisierung der Zeiger um sicherzustellen, dass dass die Liste kommt zusammen. Einfügen ist relativ einfach. Ein komplizierter wäre ein Einsetzen in eine sortierte Liste. Eine kompliziertere Funktion löschen und finden, so dass der Blick durch ein Liste sehen, wenn etwas da ist. Vielleicht haben Sie diese in pset6 haben, wenn Sie stieg in Ihrem Hash-Tabelle und Sie haben gesagt, gut, das Wort Apfel in meiner verketteten Liste? So können Sie bereits getan haben. Aber auf jeden Fall, Ihr Gedächtnis aufzufrischen und versuchen Sie erneut implementieren und neu implementieren zu löschen für eine verknüpfte Liste. Fun Seite beachten, da auch doppelt verknüpfte Listen, wo man Hinweise, die sowohl vorwärts als auch Punkt rückwärts, so dass man auf dem Sprung nächsten Knoten und zum vorherigen Knoten. Und es war eine Frage, auf die im letzten Jahr Quiz dieser Art, im Gespräch etwa doppelt verkettete Listen. Nun, das ist eine Struktur, die Sie relativ vertraut mit, denn die meisten von Ihnen wahrscheinlich benutzt sie auf pset6. Hier ist eine, die ein bisschen weniger vertraut ist. Als Randbemerkung, ich denke, dass ist ein Quiz vor allem härter als Quiz 0, da die Dinge, die Sie tun, Sie haben nicht so viel getan. Um dies anders gesagt, für Quiz 0, Sie eine Menge von C geschrieben hatte und wir fragte Sie C. Für ein Quiz, wir werden dich fragen PHP und JavaScript, die Sie nicht so viel geschrieben. Wir werden Sie über C-Code zu fragen, die Sie nicht so viel geschrieben haben, diese fortschrittliche C Sachen. Also auf jeden Fall, üben die Sachen, die wir sprach in der Vorlesung, die Sie nicht unbedingt tun auf das Problem eingestellt. Apropos, Sie nicht geschrieben haben ein Stapel auf ein Problem einstellen. Aber es war in der Vorlesung. Hier ist der High-Level-Bild stapelt, dass wir jedes Jahr zu zeigen. Es ist der Stapel von Ablagen in die Mather Speisesaal. Auf einem hohen Niveau, sind Stapel eine letzte in-first-out-Datenstruktur. Das heißt, Sie gehen die Dinge in gesetzt - 1, 3, 7, 12, 14, 0 negativ. Das einzige, was ich nicht haben der - negativen 3, 0. Sie setzen all diese Dinge in. Und das letzte, legt man in die erste ist ein, die gehen, um herauszukommen. So haben Sie zwei Operationen - Push-und Pop. Alle von der Umsetzung in, dass ich gestikulieren wie diese sind Push. Und als ich dann in den Greifer zu erreichen etwas zu erreichen oder an der Spitze zu greifen etwas, das ist Pop. So werden wir zu Stapeln implementieren. Und wir zeigten ihnen in der Vorlesung Verwendung von Arrays. Aber Sie sie tun konnte, mit verknüpften Listen. Ein Stapel ist eine konzeptionelle Daten Struktur, nicht wie ein spezifische Umsetzung ein. Also, was würde das aussehen? Es wäre eine Art, wie diese aussehen. Sie müssten eine ganze Größe. Und Sie möchten ein Array von Werten haben, die Wir nennen Tabletts, denn das ist was war das Bild für uns - int Schalen - und dann einige maximalen Kapazität. So was würde aussehen schieben? Nun, wenn wir einen Stapel s, dann drücken s etwas auf, wir bekommen die Größe s. Und dass die nächste wäre offene Stelle unserer Array. Also, wenn wir drei Dinge in unserem Stapel, dann Fächer 3 wäre der nächste sein offene Stelle, denn 0, 1, und 2 sind bereits gefüllt. Also haben wir den Wert in s.trays [s.size], den dritten Platz. Und dann erhöhen wir s.size zu sagen, hey, drei Dinge hatten wir vorher. Jetzt haben wir vier. Also das nächste Mal, wenn Sie drücken, sind Sie gehen, um etwas in 4 setzen. Oder das nächste Mal, wenn Sie Pop, Sie gehen auf 3 anstelle von 4 oder so aussehen. Und dann werden wir true zurück sagen wir, hey, ist es uns gelungen. Das funktionierte. Als Faustregel gilt, wenn eine Funktion, die es true zurück, oder falsche immer true zurück, können Sie etwas falsch gemacht haben. So funktioniert das? Nun, es funktioniert gut für 1, und 2, und 3 und 4, und fünf. Aber lassen Sie uns sagen, dass ich meine Fähigkeiten zu erreichen. Ich habe dann zu einem Problem führen, weil wenn Größe ist die gleiche wie Kapazität, ich bin jetzt versuchen, etwas in einen setzen Array, wo ich nicht Platz haben. So ein kurzer Check, dies zu beheben. Wenn s.size == KAPAZITÄT, return false. Ansonsten gehen und tun, was wir taten. Also, was sonst könnten wir fragen, etwa für Stapel? Was sollten Sie studieren? Was sollten Sie aus? Nun, die Umsetzung Pop. Wir haben bereits Push. Ich werde das beheben. Ein Nicht-Array-Implementierung, bei der Sie eine verknüpfte Liste zu verwenden, vielleicht. Ein nicht-int Umsetzung. Wir haben hier ints. Aber es hätte sein können schwimmt. Ich hätte sein können Strings. Es hätte char-Stars haben. Schauen Sie vorbei Quiz für die Arten von Fragen, die wir gefragt haben, zu Stapeln. Ich werde sagen, dass wir rund um Stapel abgedeckt das gleiche wie wir sie in abgedeckt den vergangenen Jahren. So sind die Quizfragen sollten ein guter Hinweis. In Zukunft noch schneller Warteschlangen. Sie sind wie Stacks. Aber sie sind first in, first out. Wenn Sie Briten sind, das Wort Warteschlange wahrscheinlich machte eine Menge Sinn für Sie. Andernfalls müssen Sie möglicherweise es als eine Leitung zu hören. Sie funktionieren wie der Linie im Apple Store. Die erste Person, um 3:00 zeigen, bis Morgen ist der erste Person, seine iPad kaufen. So haben wir zwei Operationen - Enqueue und dequeue. Enqueue bringt jemand in der Leitung. Dequeue zieht den ersten Person von der Linie. Auch wir umsetzen können dies mit einem Array. Also, was ist die Struktur wir zeigte in der Vorlesung? Es war dieses ein. Auch Zahlen. Auch Größe und dieses neue Ding vorne. Warum gibt es so genannte Front? Es ist der Index des nächsten Element aus der Warteschlange entfernt. Es ist nur intern zu verfolgen der erste Mann zu zeigen, so dass wir kann ihn herausziehen, wenn wir müssen. Definitiv an Skripten und versuchen zu Enqueue und dequeue implementieren wenn das Studium für das Quiz. Wichtige Dinge zu denken. Umwickeln, wenn der Front sowie die Größe endet größer als die Kapazität. Auch, wenn Ihre Struktur ist voll, wirst du ein Problem haben. Hash-Tabellen, die Sie bisher gesehen haben. Die meisten von euch wahrscheinlich umgesetzt diese auf pset6. Es ist eine Struktur, die für O Ziel (1) konstante Zeit Einsetzen und O (1) konstante Zeit-Lookup. In CS50, diese umgesetzt, wie wir eine Anordnung von Linked-Lists. Die Schlüsselkomponente, um eine Hash-Tabelle ist die Hash-Funktion. So wandelt es Ihre Eingabe, sagen wir, ein Wörterbuchwort, in einer Reihe, die gehen, um unseren Index. Und wir werden diesen Index verwenden in unser Angebot. Also hier ist ein nettes kleines Bild von study.50.net. Wir werfen alle Wörter in unsere Hash-Funktion. Und die Hash-Funktion sagt uns, wo diese Worte zu fassen. Das ist alles groß in dem Land, wo es gibt nur ein Wort für jeden Steckplatz. Aber wie Sie sich erinnern von pset6 gibt mehr Wörter als Schlitze. Also, was passiert, wenn Sie bekommen eine Kollision? Statt der Speicherung von einem Wert in, sagen wir, Hash-Tabelle 3, Sie Speichern einer verketteten Liste. Und so statt mit Melone hier, würden Sie eine verlinkte Liste haben, wobei der erste Knoten Melone. Und der nächste Knoten ist Katze. Und der dritte Knoten Kollision, lassen sagen, weil alle diese Worte zu starten mit C. So sind die meisten von euch tat dies für pset6. Wenn Sie eine Hash-Tabelle auf pset6 nicht und Sie so etwas wie versucht ein Trie, auf jeden Fall überprüfen Hash-Tabellen. Wenn Sie nicht tun es auf pset6, auf jeden Fall Hash-Tabellen überprüfen. Und wenn Sie tat es auf pset6 und es kam nicht erarbeiten ganz richtig, und Sie hatte eine Menge Ärger mit sich, auf jeden Fall Hash-Tabellen überprüfen. Also die Lektion wirklich ist definitiv Hash-Tabellen überprüfen. Die große Minderheit der Sie versucht, versucht auf pset6. High-Level-Bild. Es ist etwas wie diesen, wo jeder Knoten einen Satz von Kindern, wobei jede Kind entspricht einem Buchstaben. Und auch jeder Knoten sagt, hey, ich bin ein Wort. So dass in diesem Beispiel das Wort Maxwell, wenn Sie die M zu dem A die folgen X-W-E-L-L und dann folgen sie eine weitere. Und Sie dieses Symbol, Delta, erhalten die wir zu bedeuten, die meine, das ist ein Wort. So Maxwell ist ein Wort. Diese Differenzen werden in ganz signifikanten welche Dinge sind Worte und welche sind die Dinge nicht. So in pset6, der die Daten gespeichert wir neben einem unserer Knoten war "Ich bin ein Wort. "Und die kühle Sache über Versuche Einsetzen wird sie demonstrieren und Nachschlag in O (Länge eines Wortes). Also nur durch Maxwell bekommen, ist es M-A-X-W-E-L-L. So sieben oder acht - Ich kann nicht zählen - Schritte, um bis zum Ende erhalten und überprüfen Sie Dinge aus. So schnelle Umsetzung hier. Rob ging durch eine verknüpfte Liste in seinem postmortalen. So überprüfen Sie, dass aus. Entschuldigung. Ging durch einen Trie in seinem postmortalen. So überprüfen Sie, dass aus. Aber haben Sie grundsätzlich jeder Knoten 27 Zeiger auf den nächsten Knoten und einem Boolean ich bin für ein Wort. Schauen Sie sich Robs Obduktion, wie dies tatsächlich umgesetzt wird. Unsere endgültige Struktur, unsere Bäume und binäre Suchbäume. So suchen diese, wurden diese abgedeckt zuletzt Woche 8, Montag. Ein Baum ist ähnlich zu einem Trie, außer man nicht notwendigerweise 27 Knoten an jeder Punkt. Und Sie müssen diese Daten bei jedem nicht Schritt, ob das bedeutet - der Weg ist egal. Während ein Trie, der Weg von oben nach Boden, Maxwell, war uns wichtig. Aber jeder Knoten mehrere Kinder, vielleicht. Wir haben etwas mehr Wortschatz. Die Wurzel des Baumes ist an der Spitze. Und wir sagen, dass das sehr untersten Knoten, die keine haben Kinder sind Blätter. So wie ein Trie, ist ein Baum eine Struktur von Knoten. Eine verbreitete Art von Baum, wir gehen zu reden ist ein binärer Baum, in dem jeder Knoten keine Kinder hat oder ein Kind oder zwei Kinder. Also das Bild ist hier nicht ein binärer Baum, weil Knoten 3 hat drei Kinder. Aber wenn wir zu denen, den Rest zu ignorieren waren es ist ein binärer Baum, weil es zeigt die Eigenschaft, dass jeder Knoten null, ein oder zwei Kinder. Also, wie können wir ausdrücken im Code? Wir könnten ein Knoten, in dem jeder Knoten haben eine ganze Zahl innerhalb der IT sowie als ein Zeiger auf den linken Baum und ein Zeiger auf den Baum auf der rechts, so dass die zwei Kinder. Wie ist das sinnvoll? Nun, wenn wir Regeln darüber, wo wir Knoten setzen, können wir schneller suchen. Also gibt es ein Konzept einer binären Suche Baum, bei dem alle Knoten auf dem linken Teilbaum einen kleineren Wert als der Knoten wir auf der Suche. Und alle Knoten auf dem rechten Teilbaum haben einen größeren Wert als Wurzelknoten. Jetzt sieht das wie eine Menge von Wörtern. Ich werde es in der Doppel setzen Zitate und zeigen Sie ein Bild. So, hier ist ein Beispiel für ein binärer Suchbaum. Seht zu, dass wir mit 10. Alles, was auf der linken Seite 10 ist kleiner als dieser. Und alles, was auf der rechten Seite ist größer als sie. Aber um so mehr, als dass jeder Knoten in der Baum drückt diese Eigenschaft. So wird der Knoten 7 eine 3 zum linke und 9 nach rechts. Also alle, die kleiner sind als 10 ist. Aber ein Blick auf nur diejenigen, hat die 7 3 auf seiner linken und seiner rechten 9. Und in ähnlicher Weise auf der rechten Seite, 15 hat 14 auf der linken und 50 auf ihrer rechten Seite. So sind die drei Knoten dort, 15, 14, und 50, sind auch ein gültiger binären Baum oder eine gültige binären Suchbaum. Und sie sind alle größer als 10 ist. So dürfen sie sein auf der rechten Seite. Gibt es eine Frage? ZIELGRUPPE: Wie gehen Sie bei der Sie haben zwei Siebener? R. J. Aquino: Ja. Wie gehen Sie mit zwei Werten umgehen , die gleich sind? Einige binäre Suchbäume sagen, dass Sie Duplikate zu ignorieren, denn das Ziel ist nur zu sagen, die ich gesehen habe diese Dinge so weit. Einige binäre Suchbäume, man könnte sagen einen Zählwert innerhalb des Knotens. Andere könnten sagen, dass alles zu Links ist weniger als oder gleich. Und alles, was auf der rechten Seite größer. Es kommt nur darauf an, was die Problem ist, Sie zu lösen sind. Also in einem Wörterbuch, zum Beispiel, Sie würde nicht um Duplikate. Sie würden sie hinauswerfen. Aber einige andere Problem, das Sie vielleicht interessieren. ZIELGRUPPE: Ist es möglich, dass a 1 auf der linken Seite 15, die weniger als 10? R. J. Aquino: Nein Wenn die 14 hier waren eine 1, würde dies eine gültige binären Suchbaum nicht sein, weil alles, was auf der rechten Seite 10 größer, als es zu sein. Und wir werden sehen, warum. Wenn im Land der Suche mein Ziel ist bis 14 zu finden, beginne ich an der Wurzel. Also ich aussehe. OK. Wir werden an der Wurzel zu starten. Schauen Sie sich 10. Nun, 14, unser Ziel, ist größer als 10 ist. So muss es auf der rechten Seite. Dies ist sehr ähnlich zu dem gesamten Telefon Buch, was wir taten, die binäre dort zu suchen. Doch statt der binären Suche in einem Array, wir sind binäre Suche in diesem Baum. Daher freuen wir uns immer noch auf der Suche nach 14. Nun, 14 ist kleiner als 15 ist. Also, wenn es in unserem Baum, muss es werden hier in dieser Gegend. Es muss auf der rechten Seite sein 10 und auf der linken Seite von 15. Und so prüfen wir diesen Knoten. Und yay, wir 14 gefunden. Ich werde nicht durch sie hindurchgehen. Aber hier ist der Code. Es ist eigentlich relativ unkompliziert, denn dies ist rekursiv. Was könnten wir bitten Sie, bei einem Quiz zu tun? Wir könnten Sie bitten, diesen Code zu schreiben. Wir können Sie bitten, an dieser Code aussehen und ändern diesen Code und erklären, was es tut. Ja. Fragen? ZIELGRUPPE: Sind diese Folien sein wird zur Verfügung gestellt, wie sie letzte Mal? R. J. Aquino: Ja. Also diese Folien werden auf jeden Fall veröffentlicht werden. ZIELGRUPPE: Sie sind tatsächlich geschrieben jetzt auf der Website. David gerade tat. R. J. Aquino: Die Folien sind jetzt auf der Website. Ich werde wahrscheinlich flicken ein paar Ich bemerkte die Fehler und zu lösen. Aber es ist eine aktuelle Version auf der Site. Andere Dinge könnten wir Sie bitten, zu tun - schreiben Einsatz. Schreiben Sie eine iterative Version der rekursive Funktion, die wir gerade Ihnen gezeigt, oder über diese Dinge zu sprechen, wie in Absätze, in Worten, in den Sätzen. Vergleichen der Laufzeiten und Erläuterung was würden Sie auf eine binäre verwenden möchten Suchbaum für die anstelle einer Hash-Tabelle, zum Beispiel. So verstehen diese Strukturen zu einem ziemlich tiefen Niveau. Verstehen Sie, wie sie zu schreiben, wie man verwenden Sie sie, wie man über sie zu sprechen. Und Sie werden ganz eingestellt werden. Fragen? ZIELGRUPPE: Wenn du schreibst das binären Suchbaum, wie wollen Sie bestimmen, welche Wert auf machen es wie die Wurzel? R. J. Aquino: Also war die Frage, was Wert sehen Sie als die Wurzel zu machen? Abhängig von Ihrem Code können Sie kann eine globale Wurzel. So können Sie wahrscheinlich haben pset6 eine globale Hash-Tabelle. Oder Sie könnten der Wurzel als Argument. Also diese Suchfunktion hier ein Argument ein Knoten *. Und so was Knoten, den Sie gerade sind Blick auf die, die Sie behandeln sind als Stamm, wenn Sie es weitergeben in. Und ich bin ganz eingestellt. Das sind meine Dias. Die nächste Person kann Swap kommen in einem Laptop und Mikrofon. ROB BOWDEN: Ich denke, dass ich vielleicht interpretiert, dass die Frage anders. Aber ich interpretierte sie als, wenn Sie die Zahlen 1, 2 und 3, wie können wir wissen, um die Root-2 machen im Gegensatz zu 1 oder 3? Wenn wir zwei der Wurzel, dann ist es schön 1 und 3 nach links und rechts. Aber wenn 1 ist die Wurzel, dann ist es ein zu der Spitze, 2 die rechte, 3 nach rechts. Also standardmäßig, Sie wissen nicht, was, um die Wurzel zu machen. Und für jeden Algorithmus wir zu erwarten Ihnen, nur das erste, was Sie Einsatz würde die Wurzel sein. Oder wir würden Sie einen binären Baum zu geben, dass ist bereits vorhanden, die eine Wurzel hat. Aber auch andere Algorithmen existiert, so dass die Wurzel zu aktualisieren, so dass, wenn Sie am Ende in der Situation, wo es 1, 2, 3, wird es automatisch zu aktualisieren würde 2 machen die neue Wurzel, so dass es ist immer noch schön ausgeglichen. ANGELA LI: Kühle. Hey, Jungs. Ich bin Angela. Und ich werde zum Schluss unsere C und dann in einigen unserer Web zu gehen Technologien - HTTP, HTML und CSS. So die erste Sache ist Puffer Überlauf-Attacken. Werfen wir also einen Blick auf diesen Code. Es ist ziemlich einfach. Es gibt eine Funktion foo. Und es gibt nichts zurück. Aber es braucht in einem Zeiger in einen String namens bar. Und es geht um diese zu erklären Puffer, die ein Zeichen Array, das 12 Slots hat. Und es nutzt memcpy, das ist nur ein Funktion, dass Kopien von einer Adresse in eine andere. Also das versucht, in zu kopieren unsere Puffer von was auch immer bar, die auf. So eine Idee, was falsch ist mit diesem Code? ZIELGRUPPE: Wenn Bar ist länger als C, werden sie zu überschreiben. ANGELA LI: Ja, genau. Wir haben keine Garantie, dass Bar wird auf weniger als 12 sein. Wir haben gerade eine willkürliche Zahl 12 gemacht. Und wir waren wie, lasst uns hoffen, dass unsere Benutzereingabe ist weniger als 12 Zeichen lang. Also in einer idealen Welt, wenn unser Eingang ist immer wie erwartet, dann werden wir so etwas wie, hallo. Das ist weniger als 12 Zeichen. Es wird in char c zu lesen. Und dann haben wir etwas zu tun mit ihm. Es spielt eigentlich keine Rolle. Aber ein böswilliger Mensch tun könnte etwas wie diese, wo sie geben uns was Leiste zeigt auf, es geht um dieser großen Array zeigen nur von A. Und das ist viel mehr als 12 ist. Also es geht um den ganzen Weg gehen hier unten, wo die Rück Adresse verwendet werden. Also sagen wir mal diese Funktion heißt foo. Vielleicht war foo durch eine andere genannt Funktion, die durch die Haupt genannt. Also, wenn foo ausgeführt wird, muss es zu wissen, wo, um zurückzukehren. Wenn foo wurde von einigen Funktion mit dem Namen genannt BAZ ist zu wissen, dass es muss zurück zu gehen baz. Und das ist, was diese Absender-Adresse hier unten sagt uns. Aber wenn wir überschreiben Sie es mit einem anderen Adresse, in diesem Fall ist dies ein Darstellung der Adresse, an die Anfang dieses Puffers, dann , was tatsächlich passieren wird ist, dass statt zurück zu baz Rückkehr, die unsere Funktion aufgerufen, es ist nur gehen, um an die Front dieses Codes gehen. Und wenn dieses es, da ein böswillige Hacker-Kumpel kam und Diese injiziert, dann vielleicht diese Menge von A ist nicht wirklich von A. Und es ist eigentlich nur Code, der Pausen Ihrem Computer oder so etwas. So defensiv über diese Art der zu sein Sache, müssen Sie nie davon ausgehen, dass Anwendereingabe ein bestimmter Menge von Zeichen. Zum Beispiel, wenn Sie taten Speller, Ihnen sagte, dass Worte waren nur zu 40 Zeichen lang sein lange Maximum. Und das war gut. Aber wenn nicht, dann müssen Sie müssten achten Sie darauf, nur in 45 lesen Zeichen gleichzeitig. Andernfalls könnten Sie überschreiben Ihre Puffer. Sie haben Fragen zu, dass. Ja. ZIELGRUPPE: Können Sie nur reden ein wenig mehr über diese? ANGELA LI: Sorry. Ja. PUBLIKUM: Das Mikrofon ist nur für Video. Ich werde versuchen, Projekt. Hallo, Jungs. Sup? So gehen wir über ein paar Dinge in der CS50-Bibliothek, die Sie schon mit alle Semester, meist auf Benutzereingaben zu bekommen. Wie Sie wissen, sind Sie die CS50 Bibliothek von nur tun CS50.h, die enthält alle Prototypen der Funktionen, die Sie verwenden können, wie GetString und GetInt und GetFloat, et cetera. Und es gibt diese eine Zeile in der CS50 Bibliothek, die einen String definiert, die euch alle jetzt wissen ist nur ein char *. Aber lassen Sie uns einen Blick auf wie GetString funktioniert. Dies ist eine sehr gekürzte Fassung. Sie können bis CS50 die Bibliotheksdateien ziehen aus, denke ich, manuals.CS50.net. Und Sie können durch lesen die eigentliche Funktion. Aber das werden einige der die wichtigen Teile. Also haben wir einige Puffer erstellt haben mit etwas Kapazität. Und was wir tun müssen, ist uns ein Zeichen bekommen zu einer Zeit, von der Standard n. Das ist, wo die Benutzereingaben Text in der Konsole. Und so werden wir in ein Lese Charakter, so lange es nicht eine neue Linie und es ist nicht am Ende der Datei, die ist das Ende der Standardeingabe. Und für jedes Zeichen, das wir lesen in, wenn es ein Zeichen endet Zugabe auf die Anzahl der Charaktere, die wir gelesen haben, in, und das ist mehr als unsere Fähigkeit, dann, was wir tun, ist, dass wir nur die Größe unserer Puffer, so dass es doppelt so lang. Also noch einmal, diese schützen vor Puffer Überlauf-Attacken, da Sie in lesen ein Zeichen zu einem Zeitpunkt. Und wenn Sie zu irgendeinem Zeitpunkt in zu lesen viele, die Sie gerade erweitern Sie Ihre Puffer. Man multipliziert ihn mit zwei. Und dann haben Sie mehr Platz. Andernfalls fügen Sie einfach ein Zeichen zu puffern. Und nachdem Sie in allen gelesen habe Zeichen enthält, wird die Puffer schrumpfen wieder auf die normale Größe, fügen Sie ein Nullabschluss und dann zurückkehren. Nun, schauen wir uns GetInt. Kann euch lesen? Ich kann ein wenig vergrößern. Ich weiß nicht, wie Computer funktionieren. Das macht nichts. Ich kann nicht richtig heranzoomen. Das ist wirklich hart. Es tut mir leid. Sagen wir einfach, dies zu betrachten. Also, was tut, ist es GetInt liest zuerst in einer Reihe von GetString, die wir zuvor implementiert haben. Und der wichtige Teil, hier zu beachten ist, wenn diese gemeinsame Nutzung, die es endet Lesen ist nicht wirklich wie einer Schnur, dann können wir nur zurück, um INT_MAX stellen Versagen. Warum haben wir INT_MAX stattdessen zurückgeben negativer 1 bzw. 1? Irgendwelche Ideen? ZIELGRUPPE: [unverständlich] 1 auf einer negativen. ANGELA LI: Ja, genau. Sie sind also so eher nur wollen Eingang 1 oder negativ ein, wenn Sie dazu aufgefordert für einen n-ten und n-ten, was auch immer maxes. Es ist riesig. Du bist wahrscheinlich nicht gehen, um es zu benutzen. Also das ist wie eine Design-Entscheidung zu stellen Sie sicher, dass Sie nicht versehentlich zu tun einen Fehler zurück, oder Sie nicht zurückgeben 1, die analysiert werden könnte als eine richtige Antwort. So dass, wenn eine Zeile nicht vorhanden ist, wir zurück RC-MAX. Ansonsten verwenden wir sscanf, Das ist wie scanf. Aber es liest aus einem String. Und wir haben diese formatiert String, der% i% c ist. Und wir versuchen, mit, dass mit was der Benutzer hat uns. Wir wollen, dass die Anzahl der gefundenen Dinge 1 sein, was bedeutet, dass wir nur wirklich eine ganze Zahl übereinstimmen soll vielleicht von Weiß umgeben Raum, vielleicht auch nicht. In diesem Fall, wenn Sie in etwas setzen wie Bar, keine Bar überhaupt nicht übereinstimmen, denn es braucht, um sein eine ganze Zahl am Anfang. Also nie gedreht SSCAN 0. So können Sie nicht zurück das nicht. Alternativ, wenn Sie in etwas setzen wie 1, 2, 3, A, B, C, dass Spiele sowohl die Integer-, sondern auch der Charakter danach. So wird sscanf 2 zurück, die ist auch nicht ideal. Sie wollen nicht, 1, 2, 3, A, B, C, um eine gültige int sein. So, dass auch nicht. Aber sagen Sie so etwas wie 50 setzen. Das wird der i% entsprechen, was bedeutet, es wird noch gelesen in n. Und jetzt wird die Anzahl n 50 enthalten. Und dann können Sie es zurück. Ansonsten treffen Sie auf Wiederholen. Und dann es geht einfach immer wieder, bis Sie eine richtige Eingabe bekommen von dem Benutzer. Haben Sie Fragen dazu? ZIELGRUPPE: Also, wenn Sie waren zum Ausdrucken der Wert der GetInt auf [unverständlich] wäre es nur die ganze Zahl und max? ANGELA LI: Ja. Also, wenn Sie GetInt verwenden, sollten Sie davon ausgehen, dass Sie nicht möchten, dass n-te max auf ein gültiges Eingangs, denn du gehst anzunehmen, dass das war schlecht. ZIELGRUPPE: Wenn wir nicht char c und jemand in 1, 2, 3, Sam setzen, wäre es noch für 1, 2, 3 zu arbeiten? ANGELA LI: Ich denke, dass es funktionieren würde. Aber Sie wollen nicht zu 123Sam eine gültige Eingabe durch einen Benutzer. Das ist nicht wirklich ein Int. So ist es nicht fair um es als int analysieren. OK. In diesem Fall lassen Sie Umzug auf das Internet. So HTTP ist keine Sprache. HTTP ist nur der Satz von Standards für wie Sie die Dinge von Kunden zu schicken, das sind Sie, zu Servern. Das ist, anderen Menschen über das Internet. So HTTP steht für Hypertext Übertragungsprotokoll. Es ist das Herz und die Seele des gesamten Web. Die Hypertext-Teil nur bezieht sich auf HTML. Der Transfer ist Kunden wie Sie Anfragen zu senden Server, die Antworten zu geben. Und das Protokoll ist nur, wie kann Sie erwarten, dass ein Server zu verhalten? Und wie soll man sich verhalten so dass Sie diese zu rationalisieren Kommunikationsprozess? So HTTP-Anforderungen sehen aus wie diese. GET ist die Art der Anfrage. Ihr habt gesehen, GET-Anfragen und POST-Anfragen. Das zweite, was es gibt, mir ist / dass nur der URI oder die URL, wo man wollen innerhalb der Wirts gehen. So Anfrage bittet um die Seite, wie www.facebook.com / me. Und es ist eine GET Anfrage. Und dann diese HTTP/1.1, das ist nur die Version von HTTP, die Sie verwenden. Es ist fast immer 1.1. Und dann gibt es ein paar andere Sachen auch. Sie können tatsächlich sehen, wenn Sie diese öffnen Sie die Konsole, wenn Sie Surfen im Web. Antworten suchen etwas eher wie dieses. Der obere Teil ist wieder der Art von HTTP, die Sie verwenden gefolgt von dem Statuscode. Also 200 OK ist alles geklappt. Hier ist Ihre Inhalte. Ihr Inhalt wird folgen. Und dann wird es Ihnen sagen, welche Art von Inhalten und anderen Sachen zu. Die Statuscodes, gibt es ein paar wichtigsten, die Sie kennen sollten. 200 OK ist wie alles golden. Alles funktioniert. 403 Forbidden. Das haben Sie wahrscheinlich gesehen, wenn Sie vergessen etwas richtig chmod. Es bedeutet, dass Sie nicht haben, die richtigen Berechtigungen Zugriff auf die auf dem Server. Es ist wie, nein, Sie können es nicht sehen. 404 bedeutet, dass etwas existiert nicht. Nicht gefunden. Sie haben wahrscheinlich, dass viel gesehen. 500 Internal Server Error ist in der Regel wie etwas falsch an der Seite ging des Servers. Also, wenn Sie wurden pset7 Umsetzung, wenn Sie PHP-Fehler hatte, konnte man tatsächlich auf die Seite gehen und sehen, ein ganze Reihe von PHP-Fehler Zeug. Aber das bedeutet in der Regel nicht passieren, weil Websites nicht wirklich wollen, Ihnen sagen, warum ihre Website ist gebrochen. Sie werden wahrscheinlich nur durch Rücksendung des 500 Internal Server Error. Und dann gibt es 418 Ich bin eine Teekanne. Es gibt eine ganze Geschichte über warum, das ist eine Sache. Aber man kann darüber gelesen auf Ihrer eigenen Zeit. Es gibt eine ganze Reihe von anderen Statuscodes zu. Aber das sind die, die Sie muss es wissen. Lassen Sie uns also über HTML sprechen. HTML, erinnern, ist kein Programmiersprache. Es ist eine Markup-Sprache. Das heißt, es Inhalt beschreibt. Hier erfahren Sie, was ein HTML-Dokument aussieht wie ist oder nicht, wie es aussieht aber wie ist es strukturiert. So ist es definiert eine Struktur und Semantik von Web-Seiten. Es ist wie, das ist ein Absatz. Dies ist eine geordnete Liste. Das ist wie ein Teil meiner Seite. Hier ist der Titel. Es tut Sachen. Es ist nicht Stil von alledem, denn das ist, was Sie in CSS zu tun. Und es sieht aus wie eine Serie von verschachtelten Tags. Also, um ein Beispiel für eine wirklich grundlegende verwenden HTML-Seite, die DOCTYPE haben Sie Erklärung oben. Diese DOCTYPE-Deklaration ist sagen, wir sind mit HTML5. Dann haben Sie die große HTML-Tag. Es enthält einen Kopf und einen Körper. Im Inneren des Kopfes, haben Sie den Titel. Das ist, was in dem Titel geht Leiste Ihres Browsers. Wir haben eine Link-Tag, das verbindet in einem externen Stylesheet. Und dann haben wir ein Skript, das zieht von einer externen JavaScript als auch. Und dann in unserem Körper ist eigentlich was wird auf der Seite angezeigt. Wir haben einen Absatz haben und dann eine Bild in diesem Absatz. Dieses ist ein Bild der Kätzchen. Beachten Sie, dass die Bild Tag schließt sich. Also statt der Öffnung mit einem Bild und dann tut eine andere / Bild, können Sie nur noch dieses kleine Schrägstrich hier, die es sich schließt. Und die Bild-Tag hat diese Taste auch Wert Attribut namens alt. Das ist der alternative Text, passiert, wenn man über sie schweben. Die meisten HTML-Elemente haben einige Schlüsselwert Dinge, die Sie können es, verschiedene Anpassung. Ja. ZIELGRUPPE: [unverständlich]. ANGELA LI: Nun, es ist also ein Attribut des Tags. Also, wenn Sie mit jQuery wurden, könnten Sie Wählen image.getAttribute tun. Und dann können Sie für die Suche Holen Sie sich die alt-Attribut. Und es wird Ihnen Kätzchen. Wenn Sie sich erinnern Formulare in HTML, Eingangs Elemente Name Attribute. Und das ist, was PHP zum Senden Anfragen, wenn ein Formular abgeschickt wird. ZIELGRUPPE: Haben Sie etwas zu erwähnen über, wie wenn Sie Kittens.jpg nutzen oder etwas, das die fehlende hat Datei-Ordner oder andere Dateien? ANGELA LI: Ja. Also das ist, was eine relative genannt Weg, denn ich gebe nicht auf Sie den vollständigen Pfad. Das ist wie wenn in C, wenn Sie fopen tun einige Datei, falls Sie fopen hi.txt, dass hi.txt wird voraussichtlich in der gleichen sein Verzeichnis, sofern Sie es nicht mehr geben, eine komplexen Weg. ZIELGRUPPE: Sie geben könnte die Ordner [unverständlich]? ANGELA LI: Ja. Und Sie können nachschlagen, wie das zu tun. Aber wenn ich wollte Kittens.jpg raus des übergeordneten Verzeichnisses, würde ich tun, .. / Kittens.jpg. Ja. Entschuldigung. Ja. Oh Mann, ich habe vergessen, die Frage. Was war die Frage? Oh, das war die Frage, Kittens.jpg erwartet, dass sie im selben Verzeichnis sein? Und in diesem Fall ist es. Sie können aber auch ihm einen bestimmten Weg so daß es nicht zu sein. Good? CSS. Also CSS, wie HTML, ist nicht eine Programmiersprache. CSS ist nur eine Reihe von Styling-Regeln. Es steht für Cascading Style Sheets. Und Sie können es verwenden, in Verbindung mit HTML-Seiten, um Stil. So gibt es drei Möglichkeiten, Sie können es enthalten. Eine, wie Sie es tun können, ist im Kopf Teil Ihrer HTML, können Sie einfach öffnen Sie ein Style-Tag und dann kleben einige CSS-Regeln drin. Es ist ziemlich OK. Ja. ZIELGRUPPE: Könnten Sie die Stil-Tags in zwischen, lassen sagen wir, Körper und / body. Und dann würden Sie sein Styling nur im Körper. ANGELA LI: Sie konnte. Es wird funktionieren. Aber man sollte nicht, weil Styling ist Art der Metadaten, die in gehen sollte der Kopf des Dokuments. Körper sollte wirklich enthalten nur was ist eigentlich los, um zeigen, bis auf Ihrer Seite. ZIELGRUPPE: Sie Stil anziehen würde in den Kopf, um die Stil gesamte Web-Seite, oder? ANGELA LI: Ja. So setzen Stil hier, diese CSS-Regeln wird die gesamte Seite auf der Basis anwenden ihre Wähler. Also der bessere Weg, es zu tun ist, anstatt der mit einer Style-Tag in deinem Kopf, Sie diesem Link zu einem externen Style haben Blatt, wie ich Ihnen gezeigt, in der vorigen Beispiel. Was das bedeutet ist es versucht, und findet die Datei style.css und dann zieht es in und verwendet diese als die Stile für die Seite. Und Ihre style.css würde nur so aussehen. Es wäre nur ein Haufen von CSS sein. Und schließlich gibt es eine andere Art und Weise Sie CSS gehören, was Sie wirklich sollte nicht immer zu tun. Es ist Call Inline-Styling. Und so kann auch jedes HTML-Element einen Stil-Attribut. Und dann in diesem Stil-Attribut, Sie können es CSS-Regeln. Also in diesem Fall, was auch immer div Ich bin hier definieren, es geht um haben einen schwarzen Hintergrund und eine weiße Textfarbe. Aber man sollte das nicht tun, weil das, was dies wird es setzt Ihr Styling in Ihrem HTML. Und ich weiß, wir haben über HTML gesprochen ist die Struktur-und CSS-Stil ist. Wenn Sie dies tun, mischt es sie zusammen. Und es ist nicht sehr sauber. Also tun Sie das nicht. Anhand eines Beispiels von CSS, da oben, wir wählen Sie einfach den Körper des HTML Dokumentarfilm. Und wir sind wie, alles ist werde Comic Sans sein. Ich auch nicht empfehlen,. Aber man könnte das tun. Die zweite Regel hier, es geht um das Element auf die Auswahl Seite mit der ID main. So was HTML-Element, sagte ich, ID = Hauptsache, ich werde geben, dass ein 20-Pixel-Marge und richten alles, der gesamte Text, an der Mitte. Das letzte, was wählt von CSS-Klasse. Also jedes Element auf der Seite, ich gab ein Teil der Klasse, ich werde es machen eine Hintergrundfarbe hellblau. Yep. Das ist alles was ich habe. Fragen? PUBLIKUM: Was bedeutet der Hashtag vor den Haupt tun? ANGELA LI: Die Frage ist, was macht der Hashtag vor den Haupt do? In diesem Fall wird der Hash CSS bedeutet nach ID wählen. Also, wenn ich einige HTML-Element, wie DIVID = Haupt, diese CSS-Regel wählt die Sache mit ID main. Und ebenso die Zeit vor Abschnitt Auswahl nach CSS-Klasse oder auswählen, indem Sie HTML-Klasse. ZIELGRUPPE: Warum gibt es einen hat, bevor 6 in Hintergrundfarbe? ANGELA LI: Ja. Die Frage ist also, warum gibt es ein Hash vor der 6? Dies ist anders als die Hash. Das bedeutet, dass du gibst eine hexadezimale Farbe. So hex Farben, das nur eine Farbe. Und Sie erinnern sich RGB-Tripel, wenn Sie die Forensik pset getan hat? Dies ist ähnlich. Die ersten beiden Ziffern stehen für wie viel rot in der Farbe. Die zweite repräsentieren zwei wie viel Grün. Und die dritte stellt wie viel Blau. Und der Hash ist, das wird um eine Farbe darzustellen. Also alles von 0, 0, 0, 0, 0, 0 bis F, F, F, F, F, F ist gültig. Es ist einige gültigen Farb Das kann von Ihrem Browser angezeigt werden. Fragen? PUBLIKUM: Was ist der Unterschied zwischen Verwendung von ID und Klasse? ANGELA LI: Die Frage ist, was ist die Differenz zwischen Verwendung von ID und Klasse? Sie können nur ein Element in einem HTML-Dokument, das eine ID gegeben hat. Also nur eine Sache auf meiner Seite darf ID Haupt haben. So können Sie sie für diesen Einsatz ist die Kopfzeile. Das ist die Navigation. Dies ist die Fußzeile. Klassen sind unterschiedlich, da kann man Klassen gelten, so viele HTML-Elemente wie Sie wollen. So zum Beispiel, habe ich Class-Bereich, da gibt es wahrscheinlich mehr als eine Abschnitt auf meiner Seite. Sie sind nur erlaubt, so viele haben Elemente auf der Seite mit der gleichen Klasse, aber nur eine mit einer bestimmten ID. ZIELGRUPPE: Also der Punkt steht für die Klasse? ANGELA LI: Ja. Ein Punkt steht für eine Klasse. Kühl. Das ist alles, was ich habe, Jungs. Danke. [Applaus] ZAMYLA CHAN: Hallo, alle zusammen. Ich bin Zamyla. Ich werde sein für PHP, MVC und SQL heute. Eine Menge von dem Material, das ich sein werde Belag wird sich ziemlich viel sein direkt aus der pset7. Gut. Also, was ist PHP? PHP steht für PHP Hypertext Preprocessor. So ist es in sich selbst eine rekursive nennen, was ziemlich cool ist. PHP ist eine serverseitige Skriptsprache, und es bietet die Backend und die logischen Grundlagen auf unserer Website. Also Angela sprachen viel über die HTML- und CSS, die die Struktur machen der Website. Aber was, wenn Sie das ändern wollen Inhalte dynamisch oder wenn es variiert basierend auf dem Benutzer oder bestimmten Bedingungen? Das ist, wo PHP kommt in. Nun, in der Regel, PHP kann ein paar weniger Linien, die gleiche Umsetzung in C. Das ist, weil PHP Griffe Speicher Management für den Programmierer, im Gegensatz zu uns mit malloc frei, solche Dinge. Aber da PHP ist eine interpretierende Sprache, typischerweise, könnte es auszuführen ein bisschen langsamer als C, die ist eine kompilierte Sprache. Denn wir bewegen Programmierung Sprachen, schauen wir uns an, wie die Syntax unterscheiden. Lassen Sie sehr vorsichtig sein, nicht zu verwirrt mit diesem. Also mit PHP-Syntax, ob Sie Einbettung von PHP-innen eines HTML- Datei oder in einem. php-Datei selbst, Sie müssen den Code in das offene umschließen PHP und die geschlossenen PHP-Tags wie folgt, wie auf dem Bildschirm. Variablen in PHP. Jede einzelne Variable mit zu beginnen die $-Zeichen, gefolgt vom Namen des Ihre Variable. Nun sind Variablen in PHP schwach typisierte, was bedeutet, dass Sie nicht brauchen, zu dem, was den Datentyp angeben ist, wenn Sie es zu erklären. Allerdings bedeutet dies nicht, dass sie haben keine Typen überhaupt. Also, wenn ich eine Variable deklarieren und einfach eingestellt es gleich 1 ist, und dann erkläre ich, eine weitere Variable, stellen Sie es gleich "1" und dann noch ein 1.0, gut, abhängig von der Art der Gleich Betreiber die ich benutze, wenn ich vergleichen über alle Arten, dann sie werden gleich sein. Aber wenn ich wollen sicherstellen, dass die Typen gleich sind, kann PHP immer noch dass, auch wenn wir nicht an, welche Art es ist, wenn wir zuerst, die Datei. Jetzt, in PHP, auch wenn wir Umschalten von der Programmierung Sprachen aus C, haben wir immer noch unsere treuen, wenn die Bedingung, einfach so. Wir haben immer noch unsere while-Schleifen, nur wie diese, wo Sie in setzen Sie Ihr Zustand und dann die Körper der Schleife. Und dann haben wir auch unsere for-Schleife die in der Regel sieht so aus. Also, wenn ich wollte, über alle zu durchlaufen neun psets und senden und rufen Sie ein Funktion submitPset, dann werde ich tun kann, dass hier, was euch alle haben zu diesem Zeitpunkt getan. Herzlichen Glückwunsch, übrigens. Für die Kamera, die Menschen sagte, danke. Nun, wenn Sie nicht wollen, benutzen Sie einfach diese for-Schleife, dann eigentlich auch PHP hat die Dinge genannt foreach-Schleifen. Also wenn ich ein Array von ganzen Zahlen, 0 bis 8, in dem Array gespeichert psets, dann könnte ich eine foreach-Schleife haben, die durchläuft jeder Nummer im psets. Und dann konnte ich die gleiche nennen funktionieren achtmal genau wie ich zuvor. Also das für jede Schleife ist schön, weil Sie müssen nicht, wenn Sie nicht wissen, die genaue Länge des Arrays, die Sie , dann mit dieser foreach-Schleife wird sich darum kümmern für Sie. Also machte ich psets als Array. Schauen wir uns das an. Arrays in PHP sind in der Regel die gleichen wie diejenigen, die wir in C, gehabt haben, wo Sie können ein Array deklarieren. Und hier kann ich ein leeres Array deklarieren und dann bauen dynamisch mit Indizes als Zahlen. So Index 0, ich werde zu speichern eine ganze Zahl nannte ein. Am Index 1 auf meiner Liste, ich werde , um den Wert 2 zu speichern. Und der dritte Index, aber die zweite Zahl, ich bin zu gehen speichern die Anzahl 12. Nun, das ist fein, dass funktioniert es gut funktioniert. Aber sagen Sie es mir ankommt was jeder Index hält. Für mich Index 0 bedeutet, wie viele Katzen ich habe. Und der Index 1 bedeutet, wie Eulen viele ich habe. Und der nächste bedeutet, wie viele Hunde. Nun, dann ist es klarzustellen, daß statt der mit sich zu erinnern 0 bezieht sich auf Katzen und 1 bis Eulen, die ich verwenden kann assoziative Arrays, was bedeutet, dass anstelle von ganzen Zahlen als mein Indizes Ich kann tatsächlich nutzen Saiten. Also das ist sehr nützlich. Und Sie haben im Grunde nur ersetzt die ganzen Zahlen mit Strings. Und dort haben Sie eine haben assoziatives Array. Ja. ZIELGRUPPE: Gibt es einen Grund, warum es ein Unterstrich für das zweite Teil, denn meine Liste hat die Array. ZAMYLA CHAN: Die Frage war, ist Gibt es einen Grund, warum es eine Strich zwischen meinem und Liste? Nein. Das ist nur, wie ich die Benennung meine Variable. ZIELGRUPPE: Auf der ersten Linie, es ist ein Wort. ZAMYLA CHAN: Meine Entschuldigung. Ich werde das beheben. Ja. Sie sollten die gleiche Variablenname sein. Guter Fang. OK. Also machen wir weiter auf String Verkettung. Wenn ich wollte, zwei Strings zu nehmen, dann kann ich sie verketten mit dem Punkt-Operator. Also wenn ich Milo als Vorname Banana und als Nachname, dann Verkettung mit dem Punkt-Operator und dann setzen einen Raum zwischen wird eine Zeichenfolge, die Milo enthält machen Banane, die ich dann echo oder, eher, ausdrucken. Apropos Echo, lass uns reden über ein paar nützliche - oops. Es tut mir leid. Ein paar nützliche PHP-Funktionen. So haben wir die - technische Schwierigkeiten. Eine Sekunde. Ich schickte sie. Powerpoint-Probleme. Und wir sind wieder mit PHP-Funktionen. Und wir sind wieder mit PHP-Funktionen. So haben wir die Funktion erfordern, in dem wenn Sie in einer Datei übergeben, hier wird nur ein Beispiel für eine Datei, die Ich könnte passieren in. Dann, dass die PHP-Code enthalten aus dieser Datei, die ich hinweisen. Und es wird, dass in. bewerten Dann haben wir auch Echo, das ist eine Parallele zu printf. Abfahrt ist eine parallele zu brechen, die den Block der verlässt Code, der Sie in. Und dann leer prüft, ob eine gegebene Variable ist wie null oder null oder was ist mit leer gleichgesetzt. Ja. ZIELGRUPPE: Für die String-Verkettung Punkt-Operator ein, in PHP ist, dass die gleiche wie in JavaScript, wo es mit der Punkt für die Verkettung bedeutet, zzgl.? So nach dem vollen Namen, könnte man Dollar haben unterzeichnen ersten + + und dann dauern? ZAMYLA CHAN: Ja. So war die Frage, ob wir in PHP können die gleiche String-Verkettung verwenden wie in JavaScript mit der Pluspunkte. Und Joseph wird in später. Ich denke, er verfügt über eine Rutsche auf die. Eigentlich ist es anders. So in JavaScript zu benutzen müssen Sie das Plus, um Zeichenfolgen zu verketten. Und in PHP, müssen Sie verwenden Sie den Punkt-Operator. So sind sie anders. OK. So, jetzt haben wir alles abgedeckt Diese PHP, wo tut es wirklich nützlich sein? Nun, praktisch ist es, wenn wir kann es mit unserem HTML kombinieren. Also unsere PHP geben uns die Kraft HTML-Inhalt einer Seite vor dem ändern seine Lade. Also auf verschiedenen Bedingungen, in der Regel die spezifische Benutzer, ist angemeldet, die wir anzeigen können unterschiedliche Informationen. Linda, hast du eine Frage? ZIELGRUPPE: Können Sie verketten eine ganze Zahl auch? ZAMYLA CHAN: Ja, das können Sie. So war die Frage, wenn du kannst verketten ganze Zahlen oder andere variable.s jetzt bewegen wir uns auf MVC, die ist ein Paradigma, das wir verwendet pset7 und eine Menge von Web-Designer verwenden für Organisieren Sie den Code in den Dateien in ihrer Website. M steht für Modell. Und im Grunde, werden Modell-Dateien umgehen mit Interaktionen mit der Datenbank. Dateien anzeigen, die sie betreffen Ästhetik der Website. Und der Controller Benutzeranforderungen, analysiert Daten, macht eine andere Logik. In pset7 kombinierten wir das Modell und der Controller. Und wir nannten sie nur Controller und legte sie in das öffentliche Verzeichnis. Und die View-Dateien, nutzen wir sie als Vorlagen im Vorlagenverzeichnis. So stellt dieses Diagramm auch hier die gleiche Art der Teilung mit der Modell und die Steuerung in lila hier auf der linken und Die Ansicht auf der rechten Seite. Also das ist eine schematische dass einige von euch kann zu Öffnungszeiten oder gesehen haben Diagramme, die wir, wie Sie zeichnen wurden herauszufinden, Ihre pset. So, hier, in einem bestimmten Controller, ein Modell Controller, haben wir Funktionen , die Abfrage des SQL beziehen Datenbank, das Ausführen von PHP-Logik. Vielleicht würden Sie nachschlagen ein Lager in Yahoo! Finance. Oder vielleicht, Sie würde nur zu überprüfen, um sehen, ob ein Benutzer eingereicht hatte ein bilden schon bevor Ihre Seite besucht. Und dann machen würde a bilden hier. Danach Form eingereicht worden durch den Benutzer, die Aktion, war in dem Formular angegebenen HTML-Tag würde die Seite anzuzeigen, dass es gibt diese Daten an. Also alle diese Informationen wäre an Ihre Steuerung zurück gesendet. Dann würden Sie wahrscheinlich ein bisschen mehr Logik auf, dass und vielleicht ein paar ausführen mehr Abfragen in der SQL-Datenbank und dann, endlich, kommen mit einem schön verpackt Reihe von Informationen, die Sie geben in eine andere Vorlage angezeigt, dass diese Informationen. Nun, wie wir eigentlich zu verpacken , dass die Informationen auf? Nun, eine Funktion namens Render haben wir das war in der functions.php Datei in pset7, in dem Sie auf den Namen weitergeben ein Bild, den Namen der Vorlage. Und dann haben Sie auch übergeben ein assoziatives Array. Und damit assoziatives Array stellt die unterschiedlichen Informationen dass Sie weitergeben möchten in. Nun, was ist los in konstant zu sein In diesen Beispielen ist, dass die Tasten oder, Vielmehr sind die Schlüssel des assoziativen Arrays, das sind, was los zu sein erwartet von der Vorlage konstant ist, weil sie weiß, es braucht etwas namens Nachricht genannt oder Namen. Und dann die Dinge, die auf dem Recht, das Ist-Werte, so dass in diesem Fall ist die ein guter Junge und Milo, die gehen um die Werte, die ändern sich sein dass die Steuerung ändert sich jedes Mal oder an einem bestimmten Zustand auf und werden, dass sich übergeben Also hier in Vorlagen, sehen wir, dass wir werden mit HTML-Sonderzeichen, die im Grunde nur bedeutet, dass wir wollen, die Peer-String zu erhalten, dass die Benutzer setzen in. Und wir ersetzen wollen Nachricht in dort. Also wenn wir tatsächlich sehen die Datei, die spezifische Informationen werden die übergeben Beachten Sie, dass der Schlüssel, wie machen Arbeiten ist dass die Schlüssel des assoziativen Arrays, die sich variabel Namen hier. Und so die Werte der entsprechenden Taste in der assoziatives Array wird dann die Wert der Variablen. Nun, lassen Sie uns nun auf SQL. Es steht für Structured Abfragesprache. Und so ist dies nur ein Programmier Sprache entwickelt für die Verwaltung von Datenbanken. Und es kam praktisch für uns unsere pset7 Finanz Website. Im Grunde ist es nur eine einfache Möglichkeit, verfolgen und zu verwalten Objekte und Tabellen und verbinden diese miteinander. Nun, denken Sie an Ihre SQL-Datenbank grundsätzlich als Excel-Datei, vielleicht, mit mehreren Registerkarten Blatt. So können Sie mehrere Tabellen haben könnte, vielleicht, daß miteinander verknüpft. Und ähnlich wie Excel, haben wir eine Menge von die Funktionalität, die wir wollen. Zum Beispiel, wir wählen können bestimmte Zeilen. Wir können Informationen einzufügen. Wir können Zeilen zu aktualisieren. Und wir können auch Dinge zu löschen. Die SQL-Werke wählen, indem Sie Reihen oder eine Reihe von angegebenen Spalten aus einer Datenbank, die eine bestimmte entsprechen Kriterien, die Sie angeben. Also, wenn ich hier wählen Sie sehen aus * Assistenten, wo Haus = Ravenclaw, dann Ich Auswahl *, das heißt ich bin Auswählen jeder einzelnen Spalte, dass Zeile aus der Tabelle Assistenten aber nur, wenn das Haus Ravenclaw Spalte entspricht. Nun, dies ist rein oder SQL. Also, wenn ich in phpMyAdmin, das ist die spezifische Art und Weise, die wir verwenden, um zu verwalten unsere SQL-Datenbanken, dann habe ich einfügen könnte dass in den phpMyAdmin-Website. Und das wäre auszuführen. Aber wir eigentlich tun wollen dass auf der PHP-Seite. Also, wie machen wir das? Nun verwenden wir die Abfragefunktion, die im Grunde führt, dass SQL-Abfrage. Mit? als Platzhalter, können wir in bestimmten geben Werte, unsere String, dass wir ersetzen möchten. Also vielleicht bin ich Speicherung unterschiedlicher Werte in der curr_house, die stellt das aktuelle Haus dass ich durchmache. So kann ich, dass in geben als Platzhalter mit dem Fragezeichen. Und dann werde ich im Grunde führen die elbe wie ich vorher, nur jetzt bin ich in PHP. Und wird eine Abfrage zurück assoziatives Array. Und ich werde es in den Reihen zu speichern. Jetzt können Abfrage immer scheitern. Vielleicht ist die SQL-Abfrage nicht ausführen konnte da die Tabelle nicht existiert. Oder vielleicht hat die Spalte nicht vorhanden. Etwas ist schief gelaufen. Nun, in diesem Fall werden Sie machen wollen sicher, dass Sie überprüfen, ob die Abfrage zurück falsch. Und das ist, mit Hilfe des Dreifach- Betrieb gleich dort. Und dann entschuldige ich mich, das andere ist CS50-Funktion, vorbei in einer Nachricht. Und wenn Sie zu entschuldigen, alle es aussehen wirklich tut, ist apology.php machen. Ja. ZIELGRUPPE: Können Sie erklären, was das Sterne macht zwischen Select und von? ZAMYLA CHAN: Ja, absolut. Also die Sterne zwischen SELECT und FROM bedeutet, dass ich die ganze wählen ganze Zeile von meinem Tisch. Ich konnte wählen angegeben haben zu nennen, das Jahr, Hauses. Und ich würde nur diese drei Spalten in meiner Tabelle. Aber wenn ich sage, select *, dann werde ich alles bekommen, was in dieser Spalte. Dann werde ich Sie gehen in der ersten der Rückseite. ZIELGRUPPE: Also das ist immer noch in SQL, oder? Ist diese Abfrage oder ist das PHP? ZAMYLA CHAN: Wir sind in einer Abfrage. Also das ist in PHP. Also mit der PHP-Funktion Abfrage wir Ausführen einer SQL-Abfrage. ZIELGRUPPE: Ist alles in SQL Groß-und Klein, wie wählen oder Assistenten oder Haus? ZAMYLA CHAN: Ist alles in SQL case-sensitive? Ich glaube schon, ja. Ich glaube, dass SELECT und FROM Und wo sind die Groß-und Kleinschreibung. Nein? ROB BOWDEN: Also, es ist das Gegenteil. Die Spaltennamen und die Tabelleneinrichtung, alle, die die Groß-und Kleinschreibung. Aber jeder der MySQL Schlüsselwörtern, wie SELECT, FROM und WHERE, diejenigen, die nicht sind Groß-und Kleinschreibung. OK. Also das Gegenteil von dem, was ich sagte. Also alles, was der MySQL Schlüsselwörter - Wählen Sie aus, wo - das nicht zwischen Groß-und Kleinschreibung. Aber alles andere ist. OK. Sie in der Front. ZIELGRUPPE: Wenn ich Zeilen in Bezug auf $ mehr als eine Zeile, heißt das, ist gerade wird ein assoziatives Array? ZAMYLA CHAN: So war die Frage, ob Zeilen verfügt über mehr als eine Zeile in ihr, nicht es wird ein assoziatives Array? So ist es ein Array von Assoziativ Arrays bereits. Also selbst wenn es nur eine Zeile zurückkehrte, dann müssten Sie hier um zu gehen Index 0 dieses Ergebnis. Und dann würde man diesen ersten Reihe. Ja, Belinda? ZIELGRUPPE: Wenn Sie === zu verwenden, ist dies der einzige Fall? Oder gibt es andere? ZAMYLA CHAN: Also in diesem Fall, === ist ein Vergleich zwischen den Arten. Entschuldigung. === Eine Vergleichs dass die Typen vergleicht. Und dann == vergleicht über alle Arten. ZIELGRUPPE: Können Sie erklären, was Zeilen in dieser Situation? Ist es von Daten rudern? ZAMYLA CHAN: In der nächsten Folie, ich bin werde erklären, welche Zeilen ist. Also, wenn Sie nichts dagegen haben, halten ab auf die. Und dann in den Rücken? ZIELGRUPPE: Für Funktionen wie Abfrage, machen und sich entschuldigen [unverständlich]? ZAMYLA CHAN: Die Frage war, ob diese Funktionen - Abfrage zu entschuldigen, und rendern - sind in PHP üblich. Das sind diejenigen, die CS50 schrieb für pset7. Und Jay? ZIELGRUPPE: Wenn Sie sagen müssen $ _SESSION, Ist, dass nur für IDs? Oder könnte man das hier gesagt haben? ZAMYLA CHAN: Also war die Frage, wann wir $ _SESSION, das war eine spezifische globale Variable, die wir verwenden. Hier wird diese Variable werde sein, um unsere lokale Funktion. So sind wir nur erklären eine neue Variable. ZIELGRUPPE: Wie wird sich entschuldigen umgesetzt? ZAMYLA CHAN: Die Frage war, wie wird entschuldigen umgesetzt? Und ich denke, das ist eigentlich ein ziemlich gute Praxis für euch zu gehen in die functions.php Abschnitt und sehen Sie sich entschuldigen und sehen, wie könnten Sie haben es selbst getan. So kann ich, dass Sie aber nur sagen, dass, wenn Sie schauen zu entschuldigen, dann die Nachricht, die Sie nimmt es vorgelegt zu entschuldigen, und dann ist es macht diese Nachricht. Haben Sie weitere Fragen? Ich liebe Fragen. So halten sie kommen. ZIELGRUPPE: [unverständlich] echo oder Druck gibt? ZAMYLA CHAN: Die Frage war, konnten wir nicht nur zusammengetragen haben echo oder Druck gibt. So, dass wäre so etwas getan haben etwas anders. Das wäre Abfrage gedruckt haben gescheitert, dass in - gut, jetzt sind wir tatsächlich in unserem Controller. So haben wir eigentlich nicht haben HTML einzurichten hier. Apologize von Rendering apologize.php tatsächlich leitet Sie auf apology.php. OK. So, jetzt gehen wir an die Adresse Frage von früher, was wirklich Zeilen. Nun, Abfrage zurückgeben ein Array von Reihen. Und jede Zeile dargestellt durch ein assoziatives Array. Also, wenn ich einige SQL-Abfrage und ausgeführt Ich habe das Ergebnis in Zeilen gespeichert, dann mit einer foreach-Schleife, dann das Array Name ist der erste dort - Zeilen. Und dann werde ich anrufen jede Zeile in es $ row. So Iteration über das, ich kann dann Zugriff Name-Spalte der gegebenen Reihe ist, Jahr Spalte und Haus Spalte. Beachten Sie, dass ich nicht in der Lage gewesen tun dies mit den Zeilen, da Zeilen-Index Name ist nicht vorhanden. Zeilen ist nur eine Reihe von assoziative Arrays. So können Sie zwei Ebenen gibt. Sobald Sie die Array von Zeilen, Sie müssen in das zu bekommen. Und dann haben Sie die Spalten zugreifen können. Hat das deutlich machen? Ja, vor? ZIELGRUPPE: [unverständlich] zu öffnen Halterungen für [unverständlich]? ZAMYLA CHAN: Verzeihen Sie mir? ZIELGRUPPE: Die offenen Klammern. ZAMYLA CHAN: Dies hier? Das ist mir erlaubt, sind dass variable. Ja. ZIELGRUPPE: Wenn Sie drucken, sind Sie Drucken mit dem HTML-Code? ZAMYLA CHAN: Ja. Wenn ich drucken, das ist hier im Inneren meine Vorlage jetzt, so dass meine Sicht der MVC-Methode. Also werde ich den Druck in den HTML. ZIELGRUPPE: Also, wenn wir gingen in Entwickler Werkzeuge nach dem Ausführen dieser, könnten wir dass tatsächlich im Code? ZAMYLA CHAN: Das ist eine große Frage, ja. Also, wenn Sie in die Entwickler-Tools ging in Firefox mit Firebug oder Chrome, dann ja, könnten Sie finden Sie im entsprechenden HTML. So wäre es nicht $ row ["Name"] zu zeigen. Es wäre Unabhängig davon, welche zeigen, Name ist in dieser Reihe. ZIELGRUPPE: Nur eine allgemeine Frage, was tr und td definiert als? Warum sollten wir [unverständlich]? ZAMYLA CHAN: Tabellenzeile tr, Tabelle dann td Spalte. OK. ZIELGRUPPE: Ja, es ist Tabellendaten. ZAMYLA CHAN: Tabellendaten. Ja. ZIELGRUPPE: Es ist eine Zeile, in der die Zeile wird wie eine Säule behandelt? ZAMYLA CHAN: Sorry. Können Sie das wiederholen? ZIELGRUPPE: Wie würden Sie visualisieren Reihen? ZAMYLA CHAN: Wie würden Sie visualisieren Zeilen in welcher Art und Weise? Sind Sie über diese reden Zeilen hier, oder die Reihen tr? ZIELGRUPPE: Die Zeilen. ZAMYLA CHAN: Diese Zeilen hier? Ich würde dies als Visualisierung Ich meine Abfrage ausführen. Und er sagt, OK, ich habe entweder 0 bis n Menge der Zeilen, die den Kriterien entsprechen dass Sie abgefragt hatte. So habe ich eine bestimmte Anzahl von Zeilen. So Zeilen, die $ rows speichert jeder eine dieser Zeilen in einem Array. Also selbst wenn es nur einer von ihnen, ist es noch ein Array von Zeilen, die es passen. Also beispielsweise ist dies ähnlich, wenn Sie geholt der Cache von Anwendern. Und die Kriterien dort war, wo ID ist gleich der Session-ID. Es ist wirklich nur eine Zeile das könnte passen, dass. Aber immer noch Zeilen nur eine Zeile zurückgegeben. Also müssten Sie, um Zeilen gehen, Index 0, Index-Cache tatsächlich, den Cache zu bekommen. ZIELGRUPPE: Ist der Druckfunktion echo in die gleiche Sache? ZAMYLA CHAN: Ja. Ja. Drucken Sie ein Echo der gleiche. ZIELGRUPPE: Ist der foreach-Schleife die einzige Weg, um Index in Reihen? ZAMYLA CHAN: Ist ein foreach-Schleife Nur so können Sie Zeilen durchlaufen? Nein. Sie können auch für eine Schleife verwenden, vorausgesetzt, dass Sie die Länge wissen von der Zeile Array. ZIELGRUPPE: Könnten Sie darauf zugreifen mit einer Zeile wie [unverständlich]? ZAMYLA CHAN: Sie können nicht darauf zugreifen nur mit Zeile, wenn Sie nicht über ein foreach-Schleife vorgesehen, dass Sie nicht erklärt haben Reihe. Ja. Ja, in den weißen. ZIELGRUPPE: Also, was tun tr und td tun? ZAMYLA CHAN: Also tr und td sind HTML-Tags. tr gibt den Anfang einer Tabellenzeile. Und jedes td zeigt ein neue Tabelle Daten Spalte. ZIELGRUPPE: Für eine visuelle, was eine Reihe ist wie, nur vorstellen, die SQL, wie sie haben eine Reihe. [Unverständlich]. ZAMYLA CHAN: Ja. Das ist ein großer Punkt. Sie können Zeilen wie eben visualisieren wie in einer Excel-Tabelle, nur die Liste der Zeilen. OK. Gut. So, jetzt haben wir über wählen gegangen, wenn es gibt keine mehr Fragen, wir werden gehen über auf Einsatz. Also, wenn ich wollte in einige einfügen Tabelle, und fügen bestimmte Spalte Werte, ich selbst einfügen könnte in Ravenclaw in der 7. Klasse. Aber manchmal gibt es möglicherweise doppelte sein Werte, wie wir in pset7 sah, als wir wurden unser Portfolio aktualisieren. Also in diesem Fall, zu benutzen ON wollen wir DUPLICATE KEY UPDATE, so dass wir nicht Speichern mehrerer Zeilen mit demselben Wert, sondern vielmehr zu aktualisieren. Dann haben wir eigentlich Update die nicht eine Einlage. Es ist nur ein Update, wo Sie aktualisieren in einer bestimmten Tabelle mit einem gegebenen Kriterien und dann, endlich, löschen, was macht eine sehr ähnliche Sache. ZIELGRUPPE: Können Sie kurz gehen Sie über die doppelte Schlüssel? ZAMYLA CHAN: Ja. Im Wesentlichen hier, ich habe INSERT INTO gringotts ist, Galeonen, diese Werte. Aber ID vermutlich ein eindeutiger Schlüssel Wert in MySQL-Tabelle gesetzt. Also, wenn ich schon, dass ID einrichten, dann kann ich eine neue Zeile einfügen. So dass, wenn es nicht bereits vorhanden ist, dann muss ich es aktualisieren. In der Mitte in den weißen. ZIELGRUPPE: Also einfügen, aktualisieren, löschen, und wählen, sind alle diejenigen verfügbar lokal [unverständlich]? ZAMYLA CHAN: Also einzufügen, Update, löschen und sind alle SQL-Abfragen auswählen. Also, wenn Sie mit SQL sind, Sie müssen diejenigen zur Verfügung. ZIELGRUPPE: Zurück zu den letzten Tests - Es war eine Frage, die behandelt wenn Sie hatte einen Tisch und wollte einfügen Testergebnisse in ein und legen Sie Ihren Namen, damit es nicht im Stich lassen [Unverständlich] Ihr Freund-Test-Ergebnis. Wie würden Sie, dass mit Einsatz zu tun? ZAMYLA CHAN: So war die Frage nach eine frühere Halbzeit-Frage. Ich bin mir nicht bewusst, von denen einen ist es jetzt. Also vielleicht später, wenn Sie wollen kommen und zeigen mir, dann kann ich sicherlich geben Ihnen Tipps. Aber sprechen Einfügen Dinge, wie unter jemandes Score, wenn Sie sollte nicht, lassen Sie uns darüber reden SQL-Injection-Angriffe. So eine SQL-Injection-Angriff ist im Wesentlichen wo jemand nimmt Vorteil der geringen Sicherheit der Weise, dass Sie in der Daten einnehmen. Also hier, genau wie in CS50 Finanzen, wenn wir Sie angemeldet sind, können wir in eine geben Benutzername im Login-Formular, das erste Textfeld, und geben Sie ein Passwort ein. Vielleicht ist unsere PHP-Code aussehen könnte etwas wie diesen, wo $ username ist die Post-Daten Benutzername und Passwort ist Post-Daten vergessen. Und dann haben wir einfach unsere Abfrage ausführen, sagen wir, OK, gut, unsere Abfrage wird sich von unseren Nutzern zu wählen, wo Der Benutzername ist die eine, die sie eingereicht. Und das Passwort ist das Passwort, was bedeutet, dass die Passwörter übereinstimmen. Nun, was ist, wenn statt der tatsächlich Einreichung eines tatsächlichen vergessen, wie 12345 und erraten, das sagt Zinke Passwort und versuchen zu hacken ihre Konto, was ist, wenn statt sie übermittelt diese. Sie könnten vielleicht geben eine Vermutung bei einem Passwort. Und dann sind sie fertig wäre die Zitat geben Sie dann in oder 1 = 1 ist. Das würde direkt in die SQL-Tempo abfragen, um so etwas zu suchen. Wählen Sie aus, wo Benutzer Benutzername = Zinken und Passwort Lilie oder gleich 1 = 1. Also entweder das Passwort hat richtig oder 1 = 1 ist, das ist immer wahr. So dass in diesem Fall, im Grunde kann ein Benutzer nutzen dies und nur anmelden sich in und Hack jemand Konto. Also das ist, warum wir vermeiden wollen jemand mit, dies zu tun. Aber zum Glück, die Abfrage-Funktion durch vorbei in die Platzhalter dauert erledigt dies für Sie. Außerdem werden Sie in der Regel nie wollen tatsächlich die Passwörter einreichen sich. Das ist, warum wir gehasht oder verschlüsselt sie in CS50 Finanzen. ZIELGRUPPE: Die Vergangenheit gesprochen Quiz Flucht über MySQL-Strings. Müssen wir uns Sorgen machen? ZAMYLA CHAN: Das ist eine gute Frage. Die MySQL-Escape-Zeichenfolgen ist definitiv ein Funktion, die in unserer Abfrage verwendet wurde. Aber auf jeden Fall in diesem Blick. Ich würde sagen, das ist fair game zu wissen dass man bräuchte, um so nennen funktionieren auf einer Schnur. Ja, Belinda? ZIELGRUPPE: Woher wissen Sie, wenn es einzelne oder doppelte Anführungszeichen? Und auch, fühle ich mich wie in der Vorlesung Sie erwähnte etwas über nicht die [unverständlich] oder etwas oder die zweite Single Zitat am Ende. Ich glaube, er wies darauf hin, dass in der Vorlesung Sie soll ein Apostroph haben und dann nicht Apostrophe oder so etwas. ZIELGRUPPE: [unverständlich]. ZIELGRUPPE: Die Sache ist die letzte Single Zitat in dort in der zweiten Box sollte es nicht sein. [Unverständlich] Denn wenn Sie das letzte Einzel nehmen zitiere aus und passen diese für Inhalte wo das Passwort, wenn Sie haben, dass Abfrage, da ist ein Apostroph bei das Ende schon. Sie wollen, dass einfache Anführungszeichen verwenden wie die, die man gegenübersteht [Unverständlich]. Also, was ist eigentlich in diesem Text Box sollte nicht haben. ZAMYLA CHAN: Ich werde das ändern. OK. Wenn es keine Fragen, dann werde ich geben sie über Joseph zu sprechen über JavaScript, et cetera. [Applaus] JOSEPH ONG: Also wir laufen ein wenig hinter sich. Also, wenn Sie gehen müssen, das ist OK. Aber wir bitten Sie, Ihre Köpfe unten zu halten wenn Sie in der Mitte, so dass Sie die Kamera nicht blockieren, und Sie verwenden die hinteren Ausgang, wenn Sie müssen. Ich bin Joseph von dem Weg. Hallo. Testen, testen. Dan, ist das gut? Kühl. So wird das Video auch gebucht werden Für diejenigen, die Online- muss jetzt gehen. Peinlich. OK. So Quiz Bewertung. Dies ist eine Katze. Jetzt, JavaScript, was vielleicht keine aww, wie für einige von euch Jungs. OK. Also das ist zunächst daran erinnern, von Zamyla. Denken Sie daran, dass PHP laufen auf dem Server. Und viele Male, Jungs schrieb Schleifen in PHP ausdrucken HTML, oder? Also, wenn dieser Code ausgeführt wird, dass HTML-Ausgabe, die Sie ausdrucken wird an den Benutzer gesendet. Und wenn das passiert, kann kein PHP mehr ausgeführt werden, wenn Sie die Seite neu zu laden, der Natürlich, die die PHP reexecutes. Aber wenn du einmal darauf hin, dass HTML drucken, man kann nicht überall hin. Damit wird über HTML an den Benutzer geschickt, die der Browser über hier, wo Milo ist mit dem Computer. Und so gut, es gibt mehrere Dinge, sobald wir HTML für den Benutzer. Manchmal, so etwas zu tun, wollen wir wenn Sie auf etwas klicken, wir wollen Alarm-Boxen, um Pop-up, diese Art von Wechselwirkungen, wie wenn Sie die Taste -Taste, wenn Sie etwas auf das Sie Seite, ich will, dass etwas passiert. Nun, man kann nicht erneut ausführen PHP Code einmal, dass HTML ist eingestellt. So, wie Sie dies tun? Wir führen eine neue Sprache namens JavaScript, das im Browser läuft , das Ihnen erlaubt, Dinge zu tun in HTML, nachdem Sie empfangen vom Server. Und deshalb ist es ein Client-Seite nennen wir Programmiersprache. Es funktioniert auf Ihrem Computer - der Kunde. Haben Sie Fragen zu, dass so weit? Das Paradigma ist sinnvoll für Menschen? OK. Gut. Gut. Also das erste, was zu beachten JavaScript ist nicht PHP. Sie haben etwas andere Syntax, denen wir in zu gehen. Und sie haben sehr unterschiedliche Nutzungen. JavaScript wieder, für Ihre Browser für den Client. Server läuft irgendwo auf jemand anderes Computer, die Informationen sendet zu Ihnen, zu korrigieren? Also, wenn wir Sie bitten, PHP-Code schreiben auf eine Prüfungsfrage, nicht schreiben JavaScript und umgekehrt. Sie werden nur verlieren Punkte, und es wird nicht richtig sein. Also lassen Sie uns in einige bekommen Syntax Unterschiede - JavaScript auf der linken Seite PHP und rechts. Das erste, was Sie bemerken mit JavaScript erklären wir Variablen mit das Schlüsselwort var - V-A-R. PHP verwendet, das Dollar-Zeichen, Zamyla als früher diskutiert. Wenn Sie ein assoziatives erklären wollen Array, sehen wir die bekannte Syntax die rechte Seite mit PHP. Auf der linken Seite, anstatt Sie geschweifte Klammern verwenden. Und dann Ihre Schlüssel sind auf der linken Seite. Dann haben Sie einen Doppelpunkt. Und dann müssen Sie die Werte dass du willst. Also das ist, wie Sie es tun würden, in PHP auf der rechten Seite mit dem zweiten Linie, die bei Milo beginnt. Und das ist, wie Sie es tun würden, auf die links in JavaScript, wenn Sie wollen nennen wir ein Objekt. Und Objekte in JavaScript nur assoziative Arrays. Also, wenn Sie für den Zugriff auf Felder, in wollen PHP Sie diese Klammer-Syntax zu verwenden. Und auf diese Weise, die Sie neu zuweisen kann Dieses Feld Besitzer zu Lauren. Nun, in JavaScript, wenn man will Zugriff auf ein Feld und ändern Sie es, können Sie verwenden Sie den Punkt-Syntax. Sie können auch die Klammer-Syntax. Aber Sie können nicht die Punkt-Syntax in PHP. Das wird nicht funktionieren. Es funktioniert nur in PHP. Und schließlich, um die Dinge, um die Druck Konsole console.log verwenden Sie die Sie verwenden eine Menge Jungs in pset8. Sie können, dass console.log. Wenn Sie ein Array in drucken möchten PHP, müssen Sie Druck r verwenden. Und auf der rechten Seite, sehen Sie, ich hash String-Verkettung drüben. Jemand fragte früher. Ich benutze ein Plus in JavaScript. Wenn ich etwas zu verketten in PHP, benutze ich den Punkt. Diese sind anders. Wenn Sie das Schreiben PHP-Code, nicht mit einem Plus. Wenn Sie das Schreiben JavaScript Code, schreiben Sie nicht einen Punkt. Es wird falsch sein. Und Sie werden traurig sein. So Syntax Unterschiede. Kennen Sie Ihre Syntax, denn wenn Sie zu haben schreiben Sie eine Frage und Sie Syntax verwenden von der falschen Sprache, es wird nicht funktionieren. Und es wird falsch sein. Lassen Sie uns also über einige Steuer sprechen fließen Unterschiede, wie Sie mit Schleifen in jedem von ihnen. Zamyla ging über die rechte Seite. Stuff auf der rechten Seite vertraut sein sollten. Lassen Sie uns auf der linken Seite. Wenn Sie sich für n-Schleife in JavaScript verwenden, Ihre Schleife Variable var i drüben, Schleife über die Tasten des Arrays. Sie sehen also, Name, Haus und Rolle. Wenn ich console.log i, bekomme ich Name, Haus und Rolle. Wer sind die Schlüssel. In JavaScript, geht ein foreach-Schleife über die Werte dieses Feldes. So können Sie feststellen, sie sind beide i. Aber hier auf der PHP-Seite, druckt er aus Milo, CS50 und Maskottchen. Das sind die Werte in PHP. Das sind also, wie diese beiden sind unterschiedlich in den verschiedenen Sprachen. Also, wenn Sie mit einer foreach sind Schleife, nicht davon ausgehen, dass es gibt Ihnen die Schlüssel. Und wenn Sie mit einer for-Schleife n, nicht davon ausgehen, es gibt Ihnen die Werte. Macht das Sinn, so weit? Die nächste Folie wird Ihnen zeigen, wie Sie in die entgegengesetzte zugreifen können jeder von ihnen. Nun, wenn man den Schlüssel in JavaScript haben und Sie wollen den Wert aus, Sie gerade Index in der Array mit dem. So Milo von i erhalten Sie, was Sie wollen - die Werte. Es gibt diese andere Syntax in PHP. Wenn Sie es wirklich wissen wollen, weiß ich nicht denke, dass wir es euch gezeigt habe noch. Aber wenn Sie interessiert sind, können Sie mit diese zusätzliche Syntax auf der rechten Seite, die tatsächlich können Sie erhalten, sind die Schlüssel in PHP, wenn Sie verwenden ein foreach-Schleife. Also nur ein kleines bisschen Trivia wenn Sie interessiert sind. Also das ist nur zu zeigen, die Unterschiede zwischen diesen beiden Schleifen. Mischen Sie sie nicht, wenn Sie Programmierung eine Frage. Haben Sie Fragen darüber. Kühl. Gut. JavaScript-Objekte. Ich sprach über sie. Sie sind wie assoziative Arrays. Das einzige, was ich möchte, dass Sie beachten hier ist, dass ein Wert in einem assoziativen Arrays alles in JavaScript sein. Es kann sogar eine Funktion sein, wie drüben. Ich habe eine Funktion, die ist ein Wert von einem Schlüssel. Und wenn ich will, dass die Funktion aufrufen, Ich habe gerade zugreifen Rinde. Und dann habe ich die Klammern danach. Und das funktioniert. Also noch Fragen? Nein? OK. Gut. JavaScript wie PHP, lose typisiert. Was bedeutet das? Es hat Typen. Aber wenn Sie einen JavaScript erklären Variable, sagen Sie, var i. Sie sagen es nicht. Das ist nicht eine Sache. Sie müssen nur sagen, es ist eine Variable. Und dann wird JavaScript verarbeiten die Typen unter der Haube für Sie. Wir können frei zwischen konvertieren Typen, weil dieser. So beginnt ich heraus als eine Zahl in diesem Fall. Und dann habe ich einen String. Und ich hinzufügen, ich zu ihm. Und ich wieder neu zuweisen in i. Also an diesem ersten Zeile, i die Nummer. In der zweiten Zeile, wird jetzt ein i String nach ich das Umwandlung. Und hier, ich bin nur die Verkettung diese Zahl auf die Saite. Sie sehen also, dass, obwohl ich eine war ganze Zahl im ersten Teil, ist es Art wie der an ein umge String und dann hinzugefügt auf diesem hallo-String. Und damit meine ich von der losen Typisierung. Das ist, dass Sie zwischen konvertieren Arten sehr leicht. Und es spielt keine Warnungen werfen Sie möchten bei C tut. So enthält i jetzt hallo 123 zur Saite. Weiter. Wir können auch frei vergleichen zwischen Typen. Also, wenn Sie gerade verwenden ==, sehr viel wie in PHP, JavaScript macht eine ähnliche Sache. Die Saite 123 die gleiche wie die Zahl 123, wenn Sie Doppel Gleichen zu verwenden. Bei Verwendung triple Gleichen, sondern auch möchte sicherstellen, dass der Typ der gleiche ist. So, weil das ein String ist, und dass eine Zahl, auch wenn sie beide 123, wenn Sie dreifache nutzen entspricht, erhalten Sie falsch. In der Doppel entspricht Fall, erhalten Sie wahr, weil Doppel Gleichen nicht egal Typ. Dreibettzimmer Gleichen nicht kümmern Typ. Fragen? OK. Und noch etwas ist zu JavaScript Rahmen ist eine Art globale, es sei denn du bist in Funktion. Und es funktioniert auf die gleiche Weg in PHP eigentlich. Also lassen Sie uns dieses Beispiel zu gehen. Ich i 999. Und dann gehe ich in diese for-Schleife. Also, wenn ich drucke ich heraus, in dieser für Schleife, erwarte ich, 0, 1, 2, 3, 4. Ich i = 4 zu erhalten. Es erhöht die ich jetzt auf 5 an das Ende der for-Schleife. Und dann bricht es aus der Schleife, weil es nicht erfüllen mehr konditionieren. Was denken Sie, dass im nächsten console.log druckt? Also das ist, was es tun würde, in C In C, weil, wenn Sie außerhalb haben wie i var und Sie haben var i in einer Schleife, wie ein for-Schleife, dann macht es ihn so, dass es scoped dass die beiden i sind unterschiedlich. In JavaScript wird es nur behandeln sie als die gleiche i. Ich bekomme 5, denn das war der Wert nachdem es beendet die Schleife. Also diese i identisch sind i. Heißt das Sinn? Nun, ist es sinnvoll aus eine JavaScript-Standpunkt. Aber das gleiche Paradigma nicht Übertrag auf C. Sie haben verschiedenen Bereichsregeln. Ja. ZIELGRUPPE: [unverständlich] außerhalb der Funktion [unverständlich]? JOSEPH ONG: Also, außerhalb dessen Funktion? Also werde ich das in nur einer Sekunde zu bekommen. So nennen wir foo (i). Dies geht i in foo Schritten , und dann meldet es. So war es fünf. So wird es sechs. Aber was ich meine, ist dass ich in dieser Funktion. Denn es ist ein Parameter, ist es Gültigkeitsbereich dieser Funktion. Also, wenn ich eigentlich aus, dass zu Funktion, es ist jetzt zu gehen zurück zu den alten i. Dass ich nur, weil Gültigkeitsbereich es ist in einer Funktion. Und wir haben Umfang und Funktionen. Aber wir haben außerhalb Umfang nicht von Funktionen in JavaScript. Heißt das Sinn? Ja. Frage. ZIELGRUPPE: Same [unverständlich]? JOSEPH ONG: Also ja. In PHP ist es die gleiche Art der Sache. Es gibt tatsächlich eine leichte Subtilität. Aber Sie können mich fragen, dass nach der Überprüfung. Sie wissen nicht wirklich wissen müssen Subtilität, dass für das Quiz. Für alle Absichten und Zwecke, wie Variablen, globale und PHP, es sei denn, sie sind in einer Funktion, die gleiche Sache, in JavaScript. Ja. ZIELGRUPPE: Warum ist diese in erlaubt JavaScript und kein wo sonst? JOSEPH ONG: Warum ist es erlaubt, in JavaScript und nicht in C? Es ist nur, wer kam mit JavaScript beschlossen, dass dies in Ordnung war in JavaScript. Also, es ist wie eine Programmiersprache Konvention wie wir sagen würden. Ja. ZIELGRUPPE: Also, warum sie gehen von 6 auf 5? JOSEPH ONG: So ging es von 6 auf 5, weil, wenn ich bestanden i in foo, dass i innerhalb von foo ist nun foo Gültigkeitsbereich, Bereich existiert, weil in-Funktionen in JavaScript. Aber sobald ich hier raus, weil es wurde auf die Funktion Gültigkeitsbereich, ich bin nur mit der regelmäßigen i, die im Inneren war der Rest der Steuerfluss. Sinnvoll? Kann ich auf? Gut. Kühl. Die Akzeptanz dafür ist Objekte als Referenz übergeben. Sie wissen, wie, wenn Sie weitergeben ein Array in C konnte man tatsächlich das Array ändern? Es ist die gleiche Sache in JavaScript. Wenn ich ein Objekt übergeben, in diesem Fall, ich geben Milo in diese catify Funktion. Milo beginnt. Sein Name ist Milo Banane. Ich dieses Objekt in eine Funktion übergeben denn es ist eine Aufgabe, ein assoziatives ist Array in JavaScript. Wenn ich eine Operation durchführen in dieser Funktion, wird es tatsächlich das Objekt zu ändern. So wird dies nur für Objekte passieren in JavaScript, genau wie es passiert für Arrays innerhalb von C. Also Milo Namen Katze wird eigentlich jetzt geworden. Heißt das Sinn? So funktioniert das nur für Objekte. Objekte werden per Referenz übergeben. Ja. ZIELGRUPPE: Sie sagen also, dass im Gegensatz zu Variablen i. JOSEPH ONG: Ja. Welche Variable i war einfach eine Zahl, oder? Es ist wie in C, wenn Sie ein geben integer ein, macht es eine Kopie. Und wenn Sie ein Array übergeben, es tatsächlich ändert die tatsächlichen Array in C. Das gleiche passiert mit JavaScript in diesem Fall. Gut. Und das nächste ist traurig, weil Milo er ist jetzt eine Katze. Das war eigentlich Milo nach einige Reise zum Tierarzt. So, wie wir JavaScript verwenden in einer Webseite? Wir können sie schließen. Dies ist HTML-Code mit den Streifen Tags. So habe ich es Streifen-Tags. Und dann habe ich etwas JavaScript Code in den Skript-Tags. Und dann führt er diese. Wenn ich es genau wie diesem, ist es Inline-JavaScript genannt. Es ist irgendwie chaotisch, weil die JavaScript ist eigentlich in der HTML. Eine bessere Möglichkeit, dies zu tun, viel schöner, ist es, Ihre JavaScript in eine schreiben externe Datei und geben Sie dann die Script-Tag mit einer Quelle. Und das wird zu dieser JavaScript-Datei gehen und lesen Sie den JavaScript-Code aus stattdessen, dass einzureichen. Und auf diese Weise, müssen Sie nicht viel JavaScript zu Beginn Ihrer HTML-Datei, die macht es ist wirklich chaotisch. Sie legen es einfach irgendwo anders. Und dann wird es von dort zu lesen. Hat das Sinn macht? Placement Angelegenheiten. In diesem besonderen Fall wird die Skript ist vor dem Körper. Also, wenn ich ausführen, dass es nichts im Körper noch. Vielleicht wird dies ein wenig mehr machen spüren, wenn ich diesen nächsten Teil zeigen. In diesem Fall wird das Skript kommt nach dem div. Also eigentlich das div erscheint auf der Seite zuerst. Gerade hier in diesem kleinen roten Kreis, Sie sehen, der Text erscheint. Und dann die Warnung erscheint. Im ersten Fall, da das Skript war vor dem div, die Alarm zeigt sich zuerst. Und dann die div zeigt sich nach Sie entlassen die Box. Also die Ausführung ankommt. Also werden wir dies im Auge behalten. Dies wird wichtig sein, in ein wenig. OK. So gut, wie wollen Sie warten, bis die gesamte Seite wird dann geladen, bevor Sie einige Code ausführen? Wir werden in diesem ein wenig erhalten wenig später auch. Aber gerade diese Platzierung zu halten Fragen im Hinterkopf, wenn wir kommen zu einer anderen Folie. So DOM erhalten wir jetzt. Und was ist DOM? Also, wenn Sie bei HTML-Code aussehen, es ist nur ein Haufen von Text auf dem Bildschirm. So, wie der JavaScript wissen, dass dies ist ein HTML-Element? Also müssen wir etwas Speicher haben Darstellung dieser Struktur, die wir haben. Und immer, wenn wir diese im Speicher Darstellung in JavaScript, nennen wir dass die DOM. Und es ist nur eine Möglichkeit, dass die Menschen entschieden dass wir dies zu vertreten HTML-Struktur. Und was bedeutet das DOM aus? Nun, in der Speicherdarstellung, wir diesen Text. Und wir machen es zu Speicher Darstellung. Also das ist der HTML-Code. Also zuerst finden wir heraus, dass jeder DOM-Baum hat ein Dokument. Es sieht aus wie ein Baum. Und das Dokument enthält die HTML- Tag, eigentlich alles Innere das jetzt. Der HTML-Tag hat zwei Kinder. Es hat einen Kopf. Das Kopf, wenn man sich Einbuchtung aussehen dort, wie es strukturiert zwischen den Tags in der Nähe, Kopf hat ein Kind. Das Kind ist Titel. Genau. Jetzt haben wir einen Körper Kind. Und dann hat, dass der Körper ein Kind namens Familie. Und dass Familie hat drei Kinder - ältesten, mittleren und jüngsten. Sie sollten also wissen, wie man ein Diagramm zeichnen so, wenn wir uns fragen, wie , um ein Diagramm zu zeichnen, wenn wir geben Sie die HTML-Datei auf der linken Seite. Wissen, wie man den DOM-Baum zu erzeugen. Und innerhalb dieser Dinge, es gibt nur einige Texte, die ich vertreten so wenig Boxen. Bedeutet dies DOM-Baumstruktur machen Sinn und was der DOM ist? Also, was bedeutet das p steht für? Hier drüben, drüben die p in diesem Tag stellt ein Absatz-Tag in HTML. So können Sie es nachschlagen. Aber es bedeutet nur, es ist eine Platz für Text. Und es hat einige Standard-CSS-Styling, weil es ein Absatz-Tag. Aber nicht wirklich Sorgen zu machen dass ein Teil zu viel. Genau wissen, es ist ein Platzhalter für einen Text. Ja. Fragen? Ja. ZIELGRUPPE: Sie erwähnten eben CSS. Der Hash-Familie und der Hash- all das Zeug ist im Grunde vertreten IDs in CSS? JOSEPH ONG: Ja, genau. Ich werde, was diese Hashes zu bekommen bedeuten, in einer Sekunde. Als Angela ging CSS, sie sprach über CSS-Selektoren. Das sind die CSS-Selektoren, die sie sprach. Ja, Rob? ROB BOWDEN: Ich würde auch Kommentar DOM, dass innerhalb der Titel-Tag ist auch ein Text-Knoten. JOSEPH ONG: Richtig. So in der Titel-Tag, Ich habe einen Text DOM. Also wirklich, sollte dieser Titel wie ein haben kleine Box kommen aus der sie als gut. Aber es ist nicht wirklich wichtig zu viel in diesem Fall. Wir wissen nicht wirklich über Textknoten zu kümmern, wie wir sie nennen, zu viel. OK, machen wir. Offenbar, das tun wir. Und ich will, dass, wenn zu beheben Ich es wieder hochladen. Heißt das Sinn? So, wie wir die Arbeit mit dem DOM? Wann immer Sie beschäftigen sich mit dem DOM in JavaScript gibt es zwei Schritte. Sie wählen ein DOM-Element. Und dann haben Sie die Dinge zu tun. Also in diesem Fall, abstrakt, habe ich das mittlere Element ausgewählt. Und dann ein Beispiel für Dinge tun es würde den Text ändern. Das zur Bob sein. Nun, was ich es tat, war ich verändert Bob Milo in diesem Fall. So, wie wir eigentlich tun? Wie machen wir das Auswahl? Und wie wir die Dinge tun, um die Sache, wenn wir sie getroffen haben? Nun, wie Sie Jungs haben es gelernt, in dieser Klasse ist die Verwendung von etwas, was wir jQuery genannt. Also, was ist jQuery? jQuery ist eine Bibliothek, macht JavaScript-leichter zu schreiben. So nahm jemand die Zeit und schrieb jQuery. jQuery ist eigentlich geschrieben in JavaScript. Und dann, weil sie jetzt tat, wir haben eine ganze Reihe von Funktionen, die wir verwenden können, dass unsere lebt wirklich einfach. Also, was sind einige der Dinge, die sie tut? Es macht die Auswahl von Elementen einfacher. Es macht den Wechsel HTML, Hinzufügen Klassen einfacher. Es macht Ajax einfacher. Wir werden wie in einem zweiten zu bekommen. Und es ist analog zum C-Bibliotheken. So sind Sie string.h, Sie strlen zu bekommen. Sie erhalten strcpy, all diese Dinge. Wenn Sie jQuery gehören, erhalten Sie schöne Möglichkeiten, um Elemente zu ändern wählen Dinge, et cetera. Sie erhalten zusätzliche Funktionen, die JavaScript erhalten Sie nicht. So jQuery ist JavaScript nicht aktiviert. jQuery ist eine Bibliothek, in der geschrieben hat JavaScript, das JavaScript macht einfacher zu schreiben. JQuery so ist keine Programmiersprache Sprache. Aber JavaScript. zu machen. Sicher, dass Sie Ihre Terminologie zu Recht. Haben Sie Fragen? Ja. Ist das eine Frage? Gut. So, wie Sie jQuery verwenden? Nun, wenn Sie einige schreibst JavaScript-Code, und Sie sind ein jQuery am Anfang der Datei ein Skript-Datei, das Dollar-Zeichen verwenden, jetzt den Zugang zu jQuery zu bekommen. Und das ist anders das Dollarzeichen in PHP. Es ist das gleiche Symbol, das Sie Geben Sie auf Ihrer Tastatur. Doch sie sind noch sehr verschiedene Dinge. Dollar-Zeichen in PHP bedeutet dies, ist, wie ich eine Variable deklarieren. In JavaScript, wenn Sie eingeschlossen haben jQuery, steht es für jQuery. So sollte man nicht vergessen. Also, wie können wir wählen DOM-Elemente? Nun, wenn Sie es das hässliche JavaScript tun So greifen Sie auf die dokumentieren die globale Variable. Und dann Element erhalten, indem ID Familie. Das ist wirklich lang und wortreich und nicht sehr schön. Oder Sie können alle Elemente erhalten daß ich a p-Tag sind. Das funktioniert auch in JavaScript. Aber wir haben nie wirklich gezeigt, Sie die Syntax zu viel. Was wir Ihnen gezeigt, war jQuery. Also das gesamte Wahl dort oben, dass wurde in JavaScript ausgedrückt wird immer zu diesem sehr schönen Dollar kondensiert unterzeichnen Hashtag Familie. Und $ p, genau dort, wo es so ist. Wenn Sie alle p-Tags auswählen möchten innerhalb einer Familie, einen Raum setzen wir zwischen den beiden. Und nun, alle p erhalten wir Tags innerhalb einer Familie. Und vertraut? Nun, sprach über Angela CSS-Selektoren. Gib mir eine Sekunde. Und so, um ein Element auszuwählen, Sie einfach die gleiche Sache wie Sie würde mit einem CSS-Selektor zu tun. Wenn Sie setzen einen Hash vor es wählt er nach ID. Ein Punkt wählt von Klassen. Wenn Sie nur die Sache ohne Hashes oder Punkte wählt er diese Tags. Fragen. Ja? ZIELGRUPPE: Wenn wir Punkt in unserer HTML, das ist nicht jQuery? JOSEPH ONG: Punkt in unserem HTML JavaScript ist eine Sache. Es ist nicht eine Sache, jQuery. Die Art, wie Sie es gelernt, mit Jungs jQuery ist. html zu verwenden. Und dann können Sie es auch immer weitergegeben HTML sein wird. Also werde ich zu, dass in nur bekommen eine zweite eigentlich. Wie können wir also tun, um Sachen Element einmal haben wir es ausgewählt? Also das ist ein Beispiel für Auswahl eines Elements. So, jetzt wollen wir die Sachen, es zu tun. Also in diesem Fall lassen Sie mich zurück zur vorherigen Folie. Es war Bob vor. Und ich will das ändern in HTML zu Milo. Also habe ich die HTML-Funktion aufrufen von dem Element. Das HTML-Funktion ein Verfahren des Elements. Und dann gebe ich es was Ich möchte die HTML sein. Und es ist nur ersetzt, was drin ist der -Tag mit, dass, was auch immer ich es geben. Ja. Fragen? ZIELGRUPPE: Der Hashtag wird verwendet, nur für die jQuery. [Unverständlich] wir nicht nutzen würde, dass. JOSEPH ONG: Ja, genau. Aber nicht zu viel Sorgen machen über reine JavaScript. Ich will nur, euch darauf zu konzentrieren, wie Sie würde es mit jQuery zu tun, weil das wird das wichtig zu sein Teil auf der Quiz. Richtig. Genau. So sehen Sie, dass hashtag, so dass entspricht das Element mit wählen die ID-Mitte, weil dieser Hashtag. Hashtag bedeutet ID. Und dieses Element hat eine ID von Mitte. Also das ist das Element, wir wählen. ZIELGRUPPE: [unverständlich]. Dollarzeichen Hashtag [unverständlich]? JOSEPH ONG: Also keine. Die Frage ist, können Sie verwenden. Wert. Und. Wert funktioniert nur auf Elemente , die Eingänge sind. In jQuery, wäre es . Val, nicht. Wert. Also werde ich zu einem kleinen Beispiel bekommen, dass zeigt dies alles in Kombination in einer zweiten. Aber ich denke, dies dient ein kleines Snippet macht es Sinn, die Menschen so weit. Möchten Sie den HTML zu ändern, rufen Sie die HTML-Methode. Ja. ZIELGRUPPE: Können Sie erklären, das Verfahren wieder? JOSEPH ONG: So ein Verfahren ist nur ein Funktion, die man gehört, in diese Bei einer dieser DOM-Elemente, weil Sie sehen, ich ersten ausgewählten das Element. Eigentlich möchte ich die Maus verwenden. Ich die erste ausgewählte Element. Und dann rief ich HTML funktionieren, dass es hatte. Und da diese Funktion gehört zu dieses Ding, nennen wir es eine Methode. Das ist nur ein schicker Name für sie. Sag das noch einmal. Also denken Sie daran, die wir ausgewählt das Element jetzt. Und wir innerhalb von gesteckt haben das Element variabel. Korrigieren Sie? Also, wenn wir um die HTML ändern wollen innen, denn es war Bob vor, Sie , um den Text zu Milo ändern möchten. So nennen wir HTML. Und wir sagen, was die HTML-innen dass Element sollte jetzt. Und so ändert er es Milo, weil ich habe es Milo. ZIELGRUPPE: Also sie zusammen arbeiten. [Unverständlich] JOSEPH ONG: Ja, ja. Sie sind zusammen. Also einer von ihnen wählt das erste Element. Und das zweite tut etwas, um es. Ja. ZIELGRUPPE: [unverständlich]. Wenn dieses Verfahren unterscheidet sich von in HTML Sie haben die Methode gleich aktuell. JOSEPH ONG: Ja. Das ist eine andere Methode. Das ist eine andere Methode. Und wir können, dass in nur einer Sekunde zu decken wenn wir an einem Beispiel. Ich möchte sicherstellen, dass wir beschleunigen weil wir aus der Zeit laufen. Aber wir haben so über die Zeit jetzt auszuführen. OK. Kühl. Also, wenn Sie eine Klasse hinzufügen möchten, gibt es auch ein Add-Klassenmethode. Dies ist nur ein Beispiel dafür, was Sie mit jQuery tun können. Das fügt nur eine Klasse. Wenn Sie es entfernen wollen, Sie entfernen anrufen. Das ist nur eine andere Sache, die Sie tun können. Also mehr Beispiele für Dinge, die Sie tun können. Also kann ich es nur bei die obere wie diese? Jüngster entfernen. Wenn ich nur ausführen, dass JavaScript in die Spitze meiner Datei, wird diese Arbeit? Richtig. Weil Mitte existiert noch nicht. Also das wird nicht funktionieren. Ausführungsreihenfolge. Es geht an der Spitze zuerst. Was? ZIELGRUPPE: Jüngster ist noch nicht vorhanden? JOSEPH ONG: Ja. Jüngster ist noch nicht vorhanden. Genau. ZIELGRUPPE: Sie sagten Mitte. JOSEPH ONG: Sorry. Jüngster ist noch nicht vorhanden. Und die andere Sache ist, ich habe nicht enthalten die jQuery Datei fragen Skript src. Also das wird nicht funktionieren. Eigentlich habe ich nicht das tun, in die nächste Folie, die ist soll, dass entweder zu beheben. Aber die Art, wie wir dies tun, ist JavaScript ist ereignisgesteuert. Also, was wir tun ist, verwenden wir ein Ereignis Handler, damit dies geschieht. Und so wähle ich das Dokument eingestellt zuerst. Ich sagen, OK, wenn das Dokument bereit, lassen Sie mich eine Funktion auszuführen. Also das ist alles, Syntax Mittel. Ich empfehle das Dokument. Nun, wenn das Dokument bereit, führen Sie die Funktion. Und so immer hier, wenn das Dokument bereit, was bedeutet, alle HTML hat geladen, dann die Funktion ausführen ich dass dieses Element entfernt. Und nun, wenn ich diese Funktion ausführen dass ich in den Ready bestanden, ich bin gewährleistet, dass alle HTML-Datei auf der Seite wird sich zunächst gibt. Ja. Fragen? PUBLIKUM: Was ist die Ereignisschlüssel innerhalb der Funktion? JOSEPH ONG: Also das event-Schlüsselwort in der Funktion ist nur ein Parameter, wird an die Funktion übergeben für jede Veranstaltung. Es ist nur etwas, das Sie kostenlos. Wenn Sie mit Taste Handler in pset8, dieses Ereignis könnte Ihnen sagen, für beispielsweise die Taste, die Sie auf gepresst. In diesem Fall, für eine Veranstaltung bereit, es ist eigentlich nicht super nützlich. Aber für einen Schlüssel-Down-Ereignis, es ist mehr nützlich, weil Sie wissen, erhalten die Taste, die Sie durch den Zugriff auf Tastendruck Code aus diesem Ereignisobjekts. Korrigieren Sie? Heißt das Sinn? OK. Ja. Fragen? ZIELGRUPPE: So können Sie legte die Script-Tag tiefer? JOSEPH ONG: Also ja. Sie können das Skript setzen Unter Tag nach unten. Aber dann wird es nur wirklich chaotisch. Und wir allen zentralisieren von unseren Code an einem Ort. Und das wird uns erlauben, es zu tun. Denken Sie daran, zuvor hatte ich gesagt, es ist ein schöner Weg, um sicherzustellen, dass Elemente auf der Seite, bevor Sie Code ausführen? Und das ist nur ein schöner Weg, Sie möchten erreichen, dass. ZIELGRUPPE: [unverständlich]. JOSEPH ONG: Ja. Sie würden immer noch zu, oder? Denn denken Sie daran, Sie enthalten die Datei an der Spitze der Seite. Also, es wird zuerst, bevor ausführen Sie an der Unterseite der Seite zu erhalten. OK. So können Sie auch einen anderen hinzufügen Art der Event-Handler. Dieser gerade verarbeitet Klicks. Wenn ich auf jüngste, dann es wird Pop-up mit einer Warnung. Dies ist nur eine andere Art der Veranstaltung. Was das Ereignis ready Gegensatz, jetzt Verwenden Sie das Click-Ereignis, wenn Sie empfangen, Klicks auf ein Element. Und so in diesem Fall daran, den Klick Handler wird in jüngster angebracht. So ist es nur passiert, wenn Ich klicken jüngste. Und in der anderen, der bereit Veranstaltung wurde auf das Dokument angehängt. So ist es für das Dokument wartet bereit zu sein. Sinnvoll? Ich denke, ich kann weitermachen. Ja. Fragen? ZIELGRUPPE: [unverständlich]. in diesem Fall können Sie mit [unverständlich]. JOSEPH ONG: Oh, ja, da in diesem Fall, muss ich für die Jüngsten warten Element auf dem Bildschirm zunächst erscheinen bevor ich eine Click-Handler zu befestigen es, weshalb ich legte es in der ein Dokument bereit. OK. Und das nächste, das ist so ein großes Beispiel der wie würden Sie alles zu kombinieren. Dies ist nur ein Beispiel Formularvalidierung Sie in der Vorlesung gesehen haben. Also nehmen Sie es Schritt für Schritt, wie Sie durch diese gehen. Und es wird völlig in Ordnung sein. Lesen Sie es von oben nach unten. Ich habe ein Formular an der Unterseite. Wenn das Dokument fertig ist, lege ich ein einreichen Handler der Form, so dass wenn ich finden, erhalte ich die Werte in jedem von diesen Eingängen. Und ich überprüfen, ob es leer. Wenn es leer ist, ich wieder falsch, weil Ich will nicht, um das Formular abschicken, weil die Form ist falsch. Wenn das Passwort leer ist oder es ist weniger als acht Zeichen, weiß ich nicht einreichen die Form, denn das ist auch falsch. Und die Rückkehr falsche nur verhindert die Form von der Abgabe und gehen, um eine neue Seite. Und hoffentlich, macht dies Sinn. Ich glaube, Sie Jungs sollten durch zu gehen dieser Code Schritt für Schritt auf eigene Faust. Und wenn Sie das, was die Auswahl verstehen Elemente und tun Dinge, um es tatsächlich bringt, das macht viel Sinn für Sie. Ja? PUBLIKUM: Was bedeutet die name = Benutzername das? JOSEPH ONG: Also der name = Benutzername und name = Passwort bedeutet nur, Blick auf die Attribut, was auch immer Sie die Auswahl. Und dann das muss passen. So gehen wir in Registrierung. Und dann schauen wir auf alle Eingänge und Registrierung. Und dann holen wir die, wo der Name Attribut ist gleich Benutzernamen ein. So, dass erste Wahl nur wählt der Benutzername Eingang. Und das zweite Auswahl nur wählt das Passwort ein, denn die haben ihren Namen als Attribute festzulegen, was sie sein sollte. Fragen? ZIELGRUPPE: Bei Vorlage, wie funktioniert die Unterteil lösen das Oberteil? JOSEPH ONG: Also das ist, weil der Event-Handler. So werden wir für eine vorzulegen Ereignis warten dass wird von der Form gebrannt. Und das ist alles, vorzulegen ist. Warum nenne ich einreichen da oben? Er sagt, wenn das Formular abgeschickt wird, Ich bekomme einen submit-Ereignis. Also lassen Sie mich nur, dass abfangen und dann diesen Code ausführen, statt. Ja? ZIELGRUPPE: Warum haben Sie Funktions Veranstaltung? Warum kann man nicht einfach [unverständlich]? JOSEPH ONG: Weil in JavaScript, die Sie haben, um die Funktionen zu erklären. Das ist nur, wie es funktioniert in JavaScript. Man muss dazu sagen, es wird um eine Funktion auszuführen. So sagen Sie es, dass Sie erwartet hier eine Funktion statt nur geschweiften Klammern. Gemeinde: Und die Funktion ist, was folgt? JOSEPH ONG: Ja. Die Funktion ist das, was im Inneren die geschweiften Klammern nach diese Funktion Schlüsselwort. Ja? ZIELGRUPPE: [unverständlich]. JOSEPH ONG: Für verfassen? ZIELGRUPPE: Nein, für die Funktion ohne das Ereignis. JOSEPH ONG: Ja. Also ohne die Veranstaltung, können Sie das haben. Wenn Sie das Ereignis nicht benötigen, dann können Sie einfach weglassen. Aber wenn Sie das tun, dann nur hat es dort. Ja. Kurze Frage? ZIELGRUPPE: [unverständlich]. JOSEPH ONG: Ja. Denn das, was Sie tun müssen, ist die document.ready sagt nur warten, für alle die HTML-Datei auf der Seite zum ersten laden. Und in der Regel, Ihre Elemente wollen Sie an Ort und Stelle, bevor Sie eine Code ausführen. Gut. Wir müssen mit Ajax zu bekommen. Wir haben nicht viel Zeit. Also Vor-und Nachteile. JavaScript ist einfacher Versuch schreiben mit jQuery. Aber jQuery ist etwas langsam. Es ist wie PHP ist langsamer als C, weil es interpretiert. Und jQuery ist ein wenig langsamer als JavaScript, denn es macht eine Menge Dinge unter der Haube. Und so, wenn Sie mit jQuery sind, ist es nur ein wenig langsamer als JavaScript, obwohl gibt Ihnen schöne Eleganz. Und schließlich, Ajax. Bisher mit Ajax, Ajax Sie nicht gesehen haben in Bezug auf pset7 noch, weil wenn Sie das tun, geben Sie eine Form zu zitieren. Es lädt eine neue Seite. Also diese großen weißen Blitz erhalten Sie auf der Seite, während die zweite Seite geladen wird, richtig? Es wäre wirklich schön, wenn Sie nicht über diese Blitz. Wie Facebook, wenn Sie nur, um zu blättern der Boden, neue Inhalte hinzugefügt ohne Aktualisierung der gesamten Seite. So etwas wie dieses wäre schön. Dies ist JavaScript-Code auf der linken Seite. Sie erhalten, was in dieser Eingabe. Sie erhalten die Aktie von Yahoo! info Und dann haben Sie eine große Reihe zu machen, dass sagt, OK, das ist die Botschaft, die ich will auf dem Bildschirm zu zeigen. Und dann haben Sie diese Botschaft nach innen setzen einiger HTML-Element, bekommt auf dem Bildschirm angezeigt. Also das ist alles, was hier geschieht. Also im Grunde, denn das ist alles, JavaScript und Sie brauchen nicht zu laufen mehr PHP, so wird sichergestellt, dass die Seite nicht aktualisieren. So ist das nur eine abstrakte Idee dass ich hier sage für jetzt. Die abstrakte Idee ist, dass, wenn Sie es tun alle in JavaScript, müssen Sie nicht ein Aktualisierung der Seite. Aber wie wollen Sie eigentlich tun? Na ja, eigentlich, lassen Sie uns darüber reden Ein Problem mit diesem ersten. Ein Problem ist in JavaScript Ausführung ist synchron. Also, für einen müssen Sie warten Linie, bevor Sie fertig führen Sie die nächste Zeile. Und was ist, wenn ich gehe, um über Yahoo!, und ihre Server sind wirklich langsam, und er nimmt sie drei Sekunden gib mir, dass die Aktien Informationen? Wenn ich auf diesen Preis Linie, wenn die Ausführung ist synchron, wie es durch Standardmäßig ist das, was es gerade zu tun ist, Ihr Browser wird für Stall drei Sekunden. Und du bist nicht in der Lage sein zu tun etwas, während es, dass die Daten bekommt. Es wird eingefroren werden. Und das ist schlecht. Sie wollen nicht einen Benutzer zu haben eine gefrorene Web-Seite. Korrigieren Sie? Das ist einfach nur schlecht. Alle sind sich einig? Wenn Sie gerade Facebook und es friert, und Sie können nichts tun, können Sie wirklich frustriert. So ist die Lösung wir etwas machen asynchron statt. Also all das, was sagt asynchrone ist, werde ich diese Fragen URL für einige Daten. Und dann werde ich weitermachen. Ich werde einfach zu halten Ausführung Code, was auch immer danach war. Und dann, wenn die Daten bereit, dann werde ich es verarbeiten. Das ist alles, es sagt. ZIELGRUPPE: Ajax macht einfach Code asynchron? JOSEPH ONG: Es ist ein asynchroner Weg zum Abrufen von Daten. Also das erste, was über Ajax ist es erlaubt mir, Daten zu erhalten von einer externen Website. Und die zweite Sache ist es sicher, dass dass meine Seite nicht blockiert, während ich Abrufen dieser Daten. Das ist der asynchrone Teil davon. Denn es geht irgendwo anders, weil ich sagen, dass ich weitermachen, während es ist, dass die Daten zu holen, dass macht es asynchron. Ich halte die Ausführung. So halten, dass asynchrone Idee im Kopf. Und ich werde Ihnen zeigen, was der Unterschied ist. Die Synchronversion ist auf der linken Seite. Die asynchrone Version ist auf der rechten Seite. Schauen Sie sich die Zahlen, um zu sehen, welche Schritte entsprechen dem, was führt in jeder Zeile. Dort zeigt der erste Alarm auf. Da bekommen Börseninformationen von Yahoo! dauert drei Sekunden stirbt er für drei Sekunden. Und dann der Preis alarmiert es Nach diesen drei Sekunden. So, jetzt, dass die Benachrichtigung Shows bis zu diesem Zeitpunkt - 3 Sekunden in. Und dann alarmiert es durch danach. Also es geht nur Schritt für Schritt. Es ist wie, was euch akzeptieren würde, richtig? Bei der asynchronen Ausführung Sie zunächst aufmerksam zu machen. Dann gehen Sie wieder auf diese URL. Und Sie sagen, ich werde fragen Sie einfach für die Daten. Und dann bin ich los verarbeiten Sie es später. So führt sie sofort die nächsten Zeile, nachdem ich machen, dass asynchrone Anfrage. So ein 0,001 Sekunden sehen Sie Alarm hallo. Führen Sie diese Funktion, Alarm-bye. Und weil ich ein Versprechen gegeben, dass ich würden die Daten später verarbeiten, was passiert ist, wenn diese Daten kommt zurück 3 Sekunden später, dann laufe ich, dass Funktion, die ich drüben. Ja? ZIELGRUPPE: Können Sie angeben, oder klären, was Ajax bedeutet? JOSEPH ONG: Also Ajax ist ein Weg, dass, wenn ich Daten müssen, wenn ich auf eine Website und ich nicht wollen, um die Seite zu aktualisieren, dann Ich benutze diese Technologie namens Ajax. Das bedeutet im Grunde nur, gehen Sie holen Daten von einer anderen Website. Und tun es in einer Weise, die nur nicht kippt meiner Web-Seite. ZIELGRUPPE: Also das ist eine inhärente Teil der JavaScript oder jQuery? JOSEPH ONG: So schrieb jemand einen Weg das zu tun dies in JavaScript vor langer Zeit. An einer Stelle gab es sie nicht. Und so jemand diese Technik erfunden , damit die Menschen, um diese Daten zu verlangen auf diese Weise. Und sie schrieb ein paar Sachen um es für Sie tun. Und jQuery gibt dir nur diese sehr schöner Weg, es zu tun mit diesem $. get-Funktion. Fragen? Ich kann Fragen zu beantworten Ajax danach auch. Ich werde hier sein. Also lasst uns uns abholen ohne Daten die Seite aktualisiert. Und lassen Sie uns tun dies in eine asynchrone Weise, dass friert nicht die Seite. Zu lang, nicht gelesen, wenn das Erklärung war zu lang für Sie. So endlich, Cross-Site- Scripting-Angriffe. Wir haben dies mit Zamyla. Wenn in meiner Datenbank hat jemand diesen Namen, die diese Script-Tag, und ich bin habe einige Code auf meiner Seite, dass Drucke aus Namen von Personen in einer Reihe, oder ich habe einige JavaScript-Code, fügt dieser Name in die Seite, welche HTML wird produziert? Nun, zu drucken ich das HTML-Tag. Drucke ich alle diese Tags. Ich zu dem Teil, wo ich bin Druck erhalten mit meinen Freunden. Ich drucke Lauren aus. Es Milo aus zu drucken. Und dann mein Name in der Datenbank ist Post-Script wenig schmeichelhafte Facebook-Status. Weil ich diese eingefügt in die Seite weil es aussieht wie JavaScript, wenn Diese Seite wird an den Benutzer gesendet, es wird als JavaScript ausgeführt. Und so ist das, was wir eine Cross-Site-Scripting-Angriff. Jemand legt bösartigen Informationen in Ihre Datenbank, die zu entsprechen könnte einige zusätzliche String oder einige JavaScript-String. Und wenn es steigt aus, um das gedruckte Seite in dieser Weise, was dann passiert ist, dass schlechter Code wird ausgeführt dass ich nicht die Absicht für sie ausgeführt werden sollen. Und das ist alles eine Cross-Site- Scripting-Angriff ist. Und die Art und Weise bekommen Sie rund um das ist wie Zamyla sagte. Sie haben Dinge, wickeln Sie sie in HTML-Sonderzeichen. Und diese HTML-Sonderzeichen ist ein PHP Funktion, die diese Art verhindern der Sache passiert, Sie wenn Sie eine bösartige haben String in der Datenbank. Es entweicht es einfach, so dass es nicht als HTML interpretiert zu werden. Es ersetzt die kleinen Klammern mit dem, was wir als Unternehmen. Und wir gingen in diesem Vortrag auch. Ich denke also, euch sollte ein gutes Verständnis darüber. Fragen? Ja. ZIELGRUPPE: Also wie würde die [unverständlich]? JOSEPH ONG: Sag das noch einmal. ZIELGRUPPE: Wie würde der Monitor - JOSEPH ONG: Richtig. So haben Sie etwas, das sagt, haben, wenn Ich melde mich, Typ in meinem Namen. Ich habe gerade in diesem Bereich geben, mein Name ist stript wenig schmeichelhaften Beitrag Facebook Status der Nähe Script-Tag. Und dass, nur wird in der Put- Datenbank, denn ich kann nicht sagen, dass jemand in der Welt nicht einen Namen haben mit einem Pfeil nach links in ihm oder Wort-Skript in sie. Das macht nicht wirklich Sinn machen. So habe ich nur sicherstellen, dass ich desinfizieren das Zeug, bevor ich es zu drucken aus auf die Seite. ZIELGRUPPE: Also die HTML-Sonderkarten verhindert, dass die Script-Tags? JOSEPH ONG: Ja. So ist es nicht verhindern, dass die Script-Tags. Es macht einfach sicher, dass die Script-Tags nicht bekommen als HTML-oder interpretiert - ja. Es kommt nur als das, was es tatsächlich ist. Gut. Das war also das Quiz Bewertung. Kühl. [Applaus]