ДЭВИД Малан: Хорошо. Это CS50, и это конец недели девяти. Это был вихрь над за последние несколько дней. И проблема установить семь, если вы колено глубоко в нее, понять, есть довольно немного нового, что там внутри. Но давайте посмотрим, если мы не можем собрать все вместе здесь кратко до этого сворачивающих в еще другое направление и видение где еще мы можем пойти. Так до сих пор, мы говорили о HTML. Мы говорили о CSS. Мы говорили о PHP. Вы начали испытывать SQL. Сегодня мы поговорим немного о JavaScript. Но как все эти разрозненные языки сочетаются друг с другом? Поэтому мы говорили на прошлой неделе о Понятие имеющий сервер. Так что давайте просто нарисовать этот прямоугольник качестве веб-сервера здесь. И веб-сервер служит, безусловно, файлы. И некоторые из этих файлов может быть HTML файлы. Таким образом, одна из вещей, которые веб-сервер может выплюнуть может быть файл, который мы просто рисовать, как это содержащий некоторое HTML. Так с точки зрения непрофессионала, что делает HTML позволит вам сделать? Зала: хорошо выглядеть. ДЭВИД Малан: Хорошо, сделать страницу выглядеть красиво, хотя я думаю, я доказал что в противном случае. Так HTML браузер позволяют выложить страниц структурно, и это позволяет рода эстетически сверстать страницу, размечать статического контента, так что вы Затем можно просмотреть с помощью веб-браузера. Но это ключ. Это статический контент. Вы пишете, вы сохраните его, а затем вы грузите его. И веб-сервер затем служит это до ваших посетителей. Но мы стилизовать вещи, используя разные язык в целом. Мы начали использовать атрибут стиля на определенных тегов. И атрибут стиля положим вещи, как размер и цвет шрифта. И вы, вероятно, открыли для себя, или вы скоро для окончательного проекты потенциально, все же другие свойства, которые можно использовать в CSS. И так с точки зрения непрофессионала, что действительно же тогда CSS делать? Это всего лишь примеры их. Что это позволить вам сделать это HTML кажется, не от того, что мы видели до сих пор? АУДИТОРИЯ: Определить стили самостоятельно. ДЭВИД Малан: Определить стили самостоятельно. Так определяют вещи, как классы, как вы наверняка встречали, или однозначно идентифицировать узлы в документе так что вы можете стилизовать их. Но более конкретно, я бы сказал, что CSS действительно позволяет делать вещи последней мили и позволяет задать много точнее эстетика, в то время как HTML по большей части позволяет структурировать свои страницы. И хотя есть некоторые умолчанию, как мы увидели метку для заголовок тег, который, грубо говоря, сделал вещи большой и жирный. Это довольно общее определение тега - большой и жирный. Какой размер шрифта является то, что? Что это цвет? Как смелый это? И CSS позволяет вам более точно настраивать такие вещи. Так же как расположение, так как некоторые из вас видели. И, честно говоря, CSS немного беспорядочна языке. Это очень мощный в том, что вы можете сделать буквально любой веб-сайт, что вы видел в Интернете сегодня с ним, но это вид боли в шее. И некоторые из вас ударил головой против стен уже просто сделать глупость как центра по меню Проблема установить семь, если вы дошли до что точка уже. Но поймите, те вещи, становится легче со временем. Вы начинаете замечать закономерности. И опять же, Google будет вашим другом для различных способов, которыми вы можете решить подобные проблемы. И я осмелюсь сказать, с CSS, и HTML более обычно, вы можете решить проблемы в много других способов, каждый из которых мог бы очень хорошо быть правильным, чем вы могли бы в чем-то вроде C, даже Теперь PHP или JavaScript. Есть только много разных способы лежали вещи. Но это начал получать грязный, мы сказали. Просто вид смешение ваш HTML и ваш CSS с атрибутом стиля было немного небрежен. И таким образом мы вместо сказал, своего рода абстрактно говоря, что вы должны по крайней мере, начать фактора из вашего CSS, вероятно. Атрибуты не ваш стиль, но по крайней мере использовать тег стиль внутри того, что часть веб-страницы? АУДИТОРИЯ: зав. ДЭВИД Малан: В голове. До сих пор у нас был только титул до там, но вы также можете добавить стиль тег, и вы можете положить ваш CSS примерно говоря к верхней части страницы. Но тогда мы взяли вещи на один шаг дальше и мы учли, что больше в отдельный файл. И вот эти два файла были как-то теперь связаны. И в самом деле это было тег, который сделал это. И то, что был одним из всеобъемлющих Мотивы факторинга наш CSS тем более? АУДИТОРИЯ: Повторное использование. ДЭВИД Малан: Повторное использование. Не так ли? Возможно, вы видели в р-установить семь уже что много страниц, покупка страница, страница продажа, Портфель страницы, вероятно структурирована несколько аналогично. Там в CS50 финансов логотип в верхней если вы не решили изменить это. Там в подвал на Дно страниц. И CSS позволяет затем к фактору его это в отдельный файл, так что если Вы хотите что-то изменить в глобальном масштабе через весь сайт, вы можете действительно просто изменить его в одном месте. Но есть цена, которую вы платите потенциально Имея факторизовали CSS от моего HTML файла в отдельный файла, относящийся его с тег, который мы видели в понедельник. Что может быть недостаток этого? Вспоминая неделю назад, чтобы, когда мы говорить о HTTP и TCP / IP и как Интернет работает. Что-то здесь? Зала: занимает больше времени. DAVID МАЛАН: Это занимает больше времени. Почему? АУДИТОРИЯ: [неразборчиво]. DAVID МАЛАН: Да. Так что, возможно, занимает немного больше времени. Потому что один, CSS, очевидно, Не в том же файле. Так что теперь у вас есть, чтобы не один, а два запросы. И каждый из этих запросов как мы видели в Chrome в так называемый инспектор, и мы смотрели на вкладке Сеть, каждый этих файлов требуется одна HTTP запрос, который мы видели, занимает некоторый промежуток времени. Теперь, может быть, это не так много. Может быть, это всего 20 миллисекунд. Может быть, это 200 миллисекунд. Но думать о странице, как Facebook, или CNN, или Google, которые намного больше, чем примерах, которые мы посмотрел на до сих пор. Эти страницы могут иметь десятки файлов, каждый из которых может потребовать загрузка файла. Так что вещи могут потенциально начинают замедляться. И особенно в эти дни, когда все мы есть мобильные телефоны в наших карманах и низкоскоростном подключении к Интернету, имея необходимость подождать еще несколько миллисекунд, несколько более миллисекунд для дополнительного Файлы действительно может быть медленным. Задержка это слово, которое описывает вид ожидания, что вы есть, что вы испытывают при ожидании некоторые части информации. Но есть и положительная сторона. Так что это не все рода - он на самом деле является чем-то вроде качелей здесь. Даунсайд сейчас, но то, что браузеры могут сделать если они умны, чтобы избежать обратиться с запросом о том же styles.css файл снова может быть, чтобы делать то, что? Кэшировать его. Так кэширования - C-C-H-E - как правило, означает здесь только, чтобы сохранить файла, который вы просили в первый раз, и затем проверьте свой кэш для него. Проверьте ты рода контейнер для хранения, и если у вас уже есть Копия styles.css, даже если некоторые другие страницы в р-набор, или любой веб-сайт, запросы его снова, только чтобы дать Пользователь же, что сохраненная копия. Не беспокойтесь просил об этом. Даунсайд там, хотя, как некоторые из вас было споткнуться в р-множество. Если вы вносите изменения на сервере и Вы идете обратно в браузер, и вы перезагрузить, иногда браузер делает вам одолжение и не беспокоит повторной загрузки файл styles.css потому что, давай, каковы шансы что эти стили, которые используют Facebook собираются изменить часа к часу или повседневно? Это довольно низкая. Они могут меняться с течением времени, но не С каждой минутой или по часам. Так трюк, просто FYI, когда делать веб- развития, часто удерживайте Клавиша Shift, например, и затем нажмите кнопку перезагрузить в вашем браузере, и это будет Обычно говорят перезагрузки браузера все, даже если у вас уже есть его в кэше. Итак, еще раз, плюсы и минусы, но все они в конечном счете, дизайнерских решений. Так что теперь, мы не просто конец этой истории. Если бы я сейчас вернуться назад и назад и назад и назад, мы начали внедрять не только HTML, но PHP. Так что с точки зрения непрофессионала, что делает PHP давайте делать? АУДИТОРИЯ: [неразборчиво]. DAVID МАЛАН: Что это? АУДИТОРИЯ: Представьтесь логики в код. DAVID МАЛАН: Да, ввести логики в код. Так что это истинный язык программирования с петлями, и переменные, и функций, и условия, и все вещи, которые мы использовали обратный путь , когда с нуля. И PHP, мы видели, могут быть использованы либо в командной строке - это не должна иметь ничего общего с сетью, даже если это действительно свое происхождение и то, что она имеет тенденцию быть хорошим и способствует - но вы можете использовать PHP просто по своей природе на то, что он имеет печати () функции и Е () функции или эхо () функцию. Там в пучки способов можете печатать текст с PHP. Таким образом, вы можете использовать эту программирования язык для вывода точно о чем мы говорили прежде. Вы можете динамически генерировать ваши HTML. Может быть, не все из них. Может быть, вы жесткие вещи кода, как и заголовок и нижний колонтитулы и логотип, и таблицы стилей, и все это. Но за то, как P-набор семи, где вы манипулируете акции и показывающие портфеля пользователя, который собирается динамически изменяться, вы можете , конечно, использовать PHP и логикой он дает Вы, как язык программирования Выход динамически подмножества части страницы. Поэтому, когда вы говорите о динамических веб-сайтов, или веб-программирование, вот что вы действительно говорите. Используя язык, как PHP, или вещи, называемых Python или Ruby, или Java, или Пока другие языки, запрос к базе данных Часто или другой сервер, а затем динамически выплюнуть HTML. Теперь конечный результат, как в сторону, является HTML, что большинство веб-сайтов, включая ваш р-набор семь, вероятно, будет огромный беспорядок, если Вы посмотрите на исходный кода в браузере. Это не имеет большого значения. На данный момент, когда мы заботимся о стиль, мы заботимся о Вещи, которые вы пишете. Мы не будем заботиться о вещи что то, что ваши выходы кода. Так что не беспокойтесь о отступы здесь, если это PHP это фактически выводя материал. В конце концов, браузер не будет заботиться, и человек не будет искать у источника в любом случае. Мы персоналом, например, будет быть, глядя на ваши PHP. Итак, позвольте мне дать быстрый пример сейчас о том, почему еще это может быть полезно. Так откровенно, я не могу вспомнить последний раз я использовал C, чтобы решить проблему в реальный мир. Это было, вероятно, в аспирантуре, когда Я должен был использовать язык, который был довольно низкий уровень и дал мне возможность сделать что-то очень высокую выполнения, чтобы действительно сохранить как много CPU циклы, как мог, в значительной степени потому что я использовал огромные массивы данных, и каждый цикл процессора учитываются. И, честно говоря, даже в таких вещах, как телефонов в эти дни и другие устройства где вы не достаточно иметь столько памяти, и вы не достаточно иметь в качестве много ресурсов процессора, используя более быстрые языки по-прежнему привлекательным. Но в реальном мире, когда вы просто хотите бросить какую-то программу вместе, чтобы проанализировать некоторые данные, или вы собрали целая куча регистраций для некоторые студент группы, и вы хотите, чтобы очень быстро автоматизировать отправки электронной почты по одному, чтобы каждый из тех, регистраций, вы собираетесь достичь за язык более высокого уровня чем С, так сказать. Что-то вроде PHP или Python, или Ruby, , которые существуют или полдюжины других в эти дни. Но те три, вероятно, самый модный сейчас. А что это означает, что вы можете открыть до текстовым редактором, например Gedit или Наиболее что-нибудь еще, а затем просто начать написания кода, не беспокоясь о компиляции, без того, чтобы действительно беспокоиться об управлении памятью, имея в виду, что немного неряшливость, в конечном счете вернуться чтобы укусить вас, если набор данных получает больше или проблема становится большой. Но что это означает для нам заключается в следующем. Позвольте мне идти вперед и работать правописания от проблемы установить шесть. Так что это мой синтаксического дерева на основе реализации что я использовал на большой доска, на которой я выступал не очень хорошо. Мы вернемся через неделю и вернуться те, кто в конечном итоге на вершине большая доска на нашей последней лекции. Но сейчас, позвольте мне идти вперед и просто запустить мое решение в тексте, и мы сделаем все Библия короля Джеймса, и здесь мы идем. Итак, это все, мол, слова с ошибками из Библия короля Джеймса. И моя реализация взял полсекунды в общей сложности. Так что не так уж плохо на этом конкретный компьютер. Но подумайте, сколько Код я должен был написать. Подумайте, сколько кода нужно было писать. Подумайте, сколько часов вы провели в Д-зал или ваша общежития или там, где на самом деле кодирования до это решение. Ну, если я на самом деле имеют более высокий уровень язык, как PHP, принять к сведению что я могу сделать здесь. Предположим сначала, что это вместо ваш код распределение. Этот файл называется орфографии. Она доступна как часть сегодня Код распределения. И я собираюсь машу рукой не более о деталях, но это на самом деле интересный пример того, как Вы могли бы порт язык как С в течение до PHP. Я буквально открыл два текстовых окна, один с моей C версии speller.c, и я просто начал переводить его в моем направиться в PHP и набрав его с помощью Ближайшим эквивалентом функции. Таким образом, некоторые из этих вещей различны. Мы видели в последний раз, что PHP не использует включить в совершенно так же,. Он использует требуют обычно, хотя включают существует. Определить это мало чем отличается от # Определить в C, но это как мы делаем константу. $ Агдс оказывается существует в PHP, таким образом, мы видели, что раньше. Это всего лишь переменные, все которые начинаются со знака доллара. Напомним, это просто куча плавающей точки. Так Короче говоря, вы всегда можете пролистывать это, если любопытно, это почти линейный для онлайн-преобразование С версия speller.c в PHP. А вы могли бы сделать это снова для полдюжины других языках. Но что интересно, это. Или то, что откровенно уныние это. Позвольте мне идти вперед и ввести около dictionary.php, и утверждают, что я собираюсь идти вперед и повторно реализовать Проблема установить шесть здесь. Так что давайте предлагать сначала, что в этом файл, который будет реализован в PHP, поэтому позвольте мне открыть мои теги, как, что. Позвольте мне дать себе глобальный переменная, $ Размер получает ноль. И я собираюсь дать сам хэш-таблицу. Я буду использовать хэш-таблицу для этой вещи. Как объявить хэш-таблицу в PHP? Готово. ОК. Так открывающая скобка закрывающая скобка представляет что в PHP, как мы видели? Массив, но массив, который мог быть ассоциативным массивом. Ассоциативный массив является структура данных, которая связывает ключи со значениями. Сейчас в простейших численно индексированный Массив эти клавиши, это то, что? Ноль, один, два, три, не так ли? Старая школа вещи обратно из С. Но она может также быть строками, как Фу, и бар, или Максвелл, или чего-либо подобного строка. Так что я могу использовать, что через минуту. Позвольте мне идти вперед и объявить функция, как - давайте сделаем нагрузку () в первую очередь. Так функция нагрузка (). И PHP немного отличается тем, что вы буквально функцию типа, но вы не вводите тип возвращаемого значения. Я собираюсь идти вперед и сказать, что Функция загрузки () следует принимать в Аргумент $ словарь, просто как C версии сделал. Я делаю, что из памяти. И я предлагаю, чтобы я собираюсь сделать это. Я просто собираюсь сделать Еогеасп. Я собираюсь вызвать функцию названную файл (), передав во имя, что файл, который является переменной $ Словарь как $ слова. А потом внутри мой цикл здесь, я собираюсь идти вперед и хранить в моем $ Таблица, $ слово получает правда. Готово. Ой, подождите. Готово. ОК. То есть нагрузка функция () говорят в PHP. Теперь, почему это работает? И я отчасти обмана здесь. Так, один, Еогеасп мы видели кратко последний раз. Это просто означает, что вы можете перебрать массив, не беспокоя с г и п и плюс плюс, и все, что. Словарь является, конечно же, имя файла, что-то вроде большой или маленький, два словари, которые мы использовали в прошлый раз. Файл является функцией, которая открывает текст файл, читает его в одну строку, и руки You Back огромный массив, каждый из элементов которого линия из этого файла. Так вот сочетание FOPEN, и FREAD, и время цикла, и FClose, и все это. Наконец, как слово просто означает, что это переменная Я собираюсь иметь доступ к на каждой итерации в этом цикле. Короче говоря, этот лайнер в данном случае означает открыть файл, имя которого в словарь, переменная, перебрать это строка за строкой, и каждый раз, когда вы получаете линия, хранить в переменной называется словом, а затем сделать что-то со словом. Что я хочу сделать? Я хочу поставить слово в мою хэш-таблицы. Ну, я могу положить что-то в моем хэш-таблицу, как и в С используя квадратные скобки. Это имя для моего хэш-таблицы. Я собираюсь индекса в этот хэш таблица в этом месте. Так что не скобки нулю, не скобки один. Кронштейн цитатой конец цитаты что-то, что бы это ни слова. И так же, как вы, возможно, в вашем хэш рабочий стол синтаксического дерева, вы просто магазин эффективно логическое, неявно или явно. Готово. Я хранения значение верно. Теперь есть несколько вещей, Я срезать углы на здесь. Технически, это будет раздражает новая линия, / п, в конце каждое из этих слов. Так что я, вероятно, следует вызвать функцию PHP называют отбивная (), который будет буквально рубить, что выключен. И я на самом деле нужно сделать еще одну вещь. Я, вероятно, следует увеличить размер по каждому итерации, так что я отслеживание в глобальном масштабе, что это такое. И, честно говоря, и это является одним из глупее аспекты PHP, если вы с помощью глобальной переменной, необходимо явно сказать, что вы. Так что я собираюсь на самом деле ввести глобальный $ Размер, глобальная $ таблице, и теперь моя функция будет завершена. Так что не так просто, как раньше, но , вероятно, взял меньше времени, чем C версия, может быть? ОК. Так что теперь давайте сделаем проверку () функцию. Давайте посмотрим, если это по крайней мере взял часов подряд, что он взял нас в C. При этом позвольте мне идти вперед и объявить проверить, как функция. Принимает в аргумент словом, которое является будет исходить от правописания. И я просто хочу, чтобы проверить, Следующая переменная Исеть, настольный Кронштейн strtolower слова - давайте сбалансировать все мои скобках - затем вернуться верно. Остальное - это было действительно трудно частью этой программы. В противном случае, возвращение ложным. Готово. Это проверка (). Теперь, почему это работает? Ну, тот, который я прошел в слове, который является строкой. Два, я проверяю внутри хэша стол, который называется $ таблице. Я заставляя его в нижний регистр по телефону функция очень похожа ToLower () в С, но это делает целое слово, не один символ. И если это установлено, другими словами существует представляет собой набор значений, другими словами, если это правда, то да, это слово. Потому что я положил его туда с грузом (). А если нет, я собираюсь вернуться ложным. Теперь остальные легко. Размер Функция (), как я могу это сделать? Я по существу сделать вернуть $ размер. Но я технически нужно сделать это раздражает вещь. А на самом деле до слышат, я резал один угол слишком много. Я действительно нужно сделать глобальную $ стол. Но это, как говорится, выгрузить). Выгрузка () является удивительным. Функция выгрузки (). Как я хочу реализовать выгрузку ()? Готово. ОК. Так выгрузить (), управление памятью полностью заботиться для вас в что-то вроде PHP и много из языков высокого уровня. Так что это удивительно. Например, почему, черт возьми, мы провели прошлое восемь плюс недели на C письменной форме по-видимому, очень медленно, на самом деле время потребляющие проблемы с десятков часов от того, работают под нашими поясами? Ну, с одной стороны, это может работать нормально для небольших программ. Это, конечно, ускорило мой время разработки. Но давайте посмотрим, что произойдет в реальном мире. Отпусти меня в этот каталог в окне терминала. Там в орфографии. И обратите внимание, как в сторону, и вы, возможно, столкнулись это в проблемы установите шесть или проблема установить семь. Вы не строго должны конец PHP файлы с расширением. PHP. Если поставить такую ​​строку этой первой в на самый верх, это специальная линия синтаксиса, что по существу означает найти программа под названием PHP и использовать его для интерпретировать этот файл. Так что теперь никто не знает, что Я бегу программу PHP. Я могу запустить его как будто это были что-то составлен в С. Но вот в чем дело. На самом деле, давайте сделаем это снова. Dropbox/pset6 /. Там в орфографии. Хорошо, 0.44 секунды. Он получил быстрее на этот раз. Теперь давайте идти в PHP версии. Приятная неожиданность. Но подумайте, как много времени Я спас в рабочее время. ОК. Так 3,59 секунды, что на самом деле звучит не точны либо. Но это потому, короче говоря, когда вы печатаете из огромного количества материала на экран, что Сам замедляет работу. Что это действительно взял процессор в Прибор был 3,59 секунды, в В отличие от C, который состоялся 0,44 секунд в последнее время. Это действительно на порядок Величина разные. Так где же, что цена приходят? Почему это так гораздо медленнее? Почему PHP выполнять так плохо? Даниэль? АУДИТОРИЯ: Вы действительно не использовать хэш-таблицу. ДЭВИД Малан: я действительно не использовать хэш-таблицу. Так я вроде сделал. Так что это ассоциативный массив. Скорее всего, если люди на PHP являются очень умные, они использовали под капот фактический хэш-таблица реализованы в чем-то вроде C или C + +. Но. Да. АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Да. Таким образом, каждый из функций я написал сейчас - на самом деле, вы можете сказать, что еще раз немного громче? АУДИТОРИЯ: Каждая из функций, которые Вы включили имеет намного больше полный Емкость, чем - ДЭВИД Малан: Так вот очень верно. Там очень много больше накладные расходы, что мы на самом деле не видя, сосредоточив внимание только на dictionary.php, которые я только что написал. С другой стороны, есть целый переводчик собирается в фоновом режиме. В самом деле, когда я запустил эту программу, она не был запущен, составленные из нулей и единиц предназначен для моего Intel CPU. Скорее, это был бегущая строка за строкой PHP код, который выглядит так же, как мы ввели его. И поэтому, когда вы используете интерпретируемый язык, вы на самом деле заплатить эту цену. Это займет некоторое время, чтобы прочитать Ваш файл сверху вниз, слева Хорошо, а затем выполнить каждый линия снова и снова. Сейчас на самом деле, особенно в Интернете, Вы можете фактически ускорить этот процесс за счет кэширования результатов PHP код интерпретируется. И это имеет смысл в Интернете, потому что если у вас есть не один пользователь, как меня здесь, но 1000 или 10000 пользователей, то может быть, в первый раз файл Доступ это медленно, но после этого это намного быстрее. Но это тоже, опять же, компромисс. И за то, как научных данных установить, или даже что-то большое, как это, ваши пользователи в конечном итоге начинаете чувствовать, что замедление. Короче говоря, интерпретировать языки очень в моде, очень популярны, и откровенно, вероятно, языки, которые должен достичь для при решении задач после CS50. Но понимаете, сколько вы на самом деле принимая как должное под капотом действительно эти последние несколько недель в хэш столы, и деревья, и пытается, которые используются в конечном счете, на самом деле реализовать такие вещи, как открывающей скобки, квадратная скобка, которую мы можем сейчас с благодарностью воспринимаем как должное. Итак, давайте посмотрим теперь на этом веб-контексте. И я уже говорил в прошлый раз, что есть куча суперглобальных в PHP, что на самом деле не актуальны в командной строке. Они более актуальным в контексте использования PHP в веб-контексте. Так работает PHP на веб-сервере для того, для создания вещи, как HTML. И мы взглянул на $ _GET и $ _POST, вот где автоматически пользователи ' вход заканчивается просто, если вы представить сформировать в файл с расширением. PHP на веб Сервер, как машины. Но давайте кратко рассмотрим $ _COOKIE И $ _SESSION. С точки зрения непрофессионала, что такое печенье, как Вы понимаете это в контексте с помощью веб? АУДИТОРИЯ: Файл на компьютере. ДЭВИД Малан: Да. Это файл на компьютере пользователя посажены все веб-сайт вам посчастливилось посетить. Так что, когда вы идете в Facebook, когда вы идете чтобы bankofamerica.com, когда вы идете на google.com, когда вы идете в почти любой сайт в мире в эти дни, в том числе cs50.net, печенье посадил на вашем компьютере, который является либо значение, которое хранится в оперативной памяти в вашем Компьютер в памяти браузера, или иногда действительно файл, хранящийся на жестком диске. И что, как правило, хранится в этом файле не имя пользователя, не ваш пароль, как правило, не то, чувствительны, если сайт не не так хорошо с их безопасности, а скорее это большой уникальный идентификатор среди другое. Это большая случайное число посадили на вашем компьютер, но вы можете думать о качестве рода виртуальный ручной штамп, как от клуб или некоторые парк аттракционов, что позволяет персоналу, владельцы, что обслуживание, чтобы помнить, кто ты. Таким образом, если большая случайное число, как 12345678, хотя это, очевидно, не слишком случайным, думают о том, что, как ручной штамп, что при посещении facebook.com впервые, они печать этот номер на вашей руке. А потом, потому что вы говорите HTTP, вы будучи браузеру, и потому Facebook очевидно, говорит то же самое, веб сервер, протокол HTTP говорит, что в любое время вы впоследствии посетить facebook.com, будь то вторая позже, через час, даже на следующий день, до тех пор, пока у вас есть явно не вышли из, которые эффективно , как мытье рук. HTTP говорит, что вы должны представить свой ручной штамп каждый раз, когда вы вернуться на этот сайт. Что Facebook же тогда, они посмотрите на эту ручной печатью и они говорят, о, 123456789. Я не знаю, на первый взгляд, что это Дэвид Малан в Кембридже, Массачусетс, но они могут проверить их базы данных и говорят, о, человек на чьей компьютерной мы посадили 123456789 Дэвид Малан из Кембриджа, Массачусетс. Давайте покажем, что пользователь затем его профиль страницы или его Экспорт новостей. Но есть проблема здесь, если это то, как веб-действительно работает. Давайте взглянем на простой пример. Давайте на самом деле пойти сказать facebook.com. Но прежде чем мы могли пойти туда, пусть меня идти вперед и открыть в Chrome Инспектор сюда. Дай мне посмотреть на вкладке Сеть. А теперь давайте идти вперед и ввести в https://facebook.com. И я делаю это так, что мы не видим все эти редиректы и отходов раз, глядя через тех. Позвольте мне нажмите ввод. Хорошо. Мы видим целую кучу запросов. Там приходит Facebook. Там целая куча файлов. И здесь, на мой упоминании задержки в последний раз, это много HTTP-запросов. Но первый из них, вероятно, самое интересное. Так что давайте прокрутите вниз здесь, и Я увеличения в секунду. Это будет своего рода беспорядок, но давайте посмотрим. Facebook посылает нам целая куча вещей. Но эй, интересно. Они посадки не один, а четыре ручные штампы на мою руку здесь. Set-Cookie, Set-Cookie, Set-Cookie, Set-Cookie. И есть несколько особенностей здесь. Все они упомянуть некоторые вид истечения. И, похоже, Facebook надеется не помнить меня до 2015 года. Так вот, предположительно время, по которому Я должен выйти или они просто автоматически предполагать, что я не вернется. Так что на самом деле неплохой количество времени. И есть некоторые другие вещи здесь происходит. Это печенье, кажется, насильно удален говоря он истек в 1970 году до появления печенье. Таким образом, браузер просто собираюсь предположить Хорошо, это как промывания печать руки. Но теперь, когда мой браузер делает последующий запрос - позвольте мне идти вперед и делать это снова и перезагрузки. Теперь позвольте мне вернитесь к лучших запрос и спуститься здесь, просить заголовки. Заметим, что это. Так что теперь я под заголовками не реагирования, но обратите внимание, это говорит заголовки запросов. И заметьте, что мой браузер в рамках свою просьбу после удара перезагрузки имеет отправлено по крайней мере следующие информация. Не Set-Cookie, но печенье. Так что это линия, заголовок HTTP так сказать, где мой браузер является своего рода из без моего ведома представления моя рука для осмотра Facebook. Таким образом, эти печенья может быть используется, то для чего? Чтобы помнить, кто ты есть, или вспомнить, как много раз вы были там, или действительно что-нибудь. Так вот counter.php. И позвольте мне увеличить на шрифте. И каждый раз, когда я перезагрузить эту страницу, уведомление это вспоминая, сколько раз Я был там. Ну, это еще не все, что впечатляет. Давайте просто закрыть эту вкладку, а теперь давайте вернемся к http://localhost/counter.php. О, это интересно. Это до сих пор помнят, даже хотя я закрыл вкладку. И, честно говоря, если бы я закрыть браузер, в случае их осуществления в правильном направлении, я еще может помнить, что этот пользователь которые он или она был первый раз, и только один раз я иду в меню Chrome, который здесь здесь, и перейти к История, и нажмите Очистить данные просмотров, как некоторые из вас, возможно, в прошлое, только тогда ваша печенье на самом деле быть удалены во время веб- развитие. Так что, если мы идем - давайте закрыть Gedit здесь. И если мы идем сейчас к этому файлу. Позвольте мне идти в наш виртуальных доменов / локальный / общественности, и сделаем counter.php. Обратите внимание, что это довольно простая программа. Это довольно простой веб-сайт. Таким образом, верхняя часть файла находится всего в комментарии. Но вот новая линия, что вы можете уже видели в р-установить семь, session_start (). Это линия PHP кода, который существенно сообщает веб-сервер, убедитесь, Обязательно печать руки и сделать почитать ручные штампы. Вот и все, что линия делает, и это делает все этого процесса для нас. Тогда обратите внимание, я только что получил две ветви здесь. Если ключ Счетчик внутри этого специальная глобальная переменная называется $ _SESSION Установлен, - иными словами, если есть какая-то ценность там - давайте его и хранить его в местный переменная с именем $ счетчика. В противном случае, давайте назначим $ счетчик значение по умолчанию 0. Теперь вот один из аспектов PHP это и благословение и проклятие. PHP немного неряшливо. Так в то время как в С, что бы Объем счетчика были либо здесь, либо здесь? Было бы были ограничены тем фигурные скобки. Знаете, что? В PHP, он существует даже за пределами тех, фигурные скобки, здесь, и здесь, и здесь, и здесь, и даже внизу. Поэтому я говорю, что это благословение в том смысле, что вы не должны думать, как сложно, как мы сделали несколько недель назад. Но это также немного о проклятии в том, что независимо от того, где вы используете переменную в PHP, по крайней мере, в программе, как это, это глобально доступной для Хорошо это или плохо. Таким образом, вы должны иметь в виду, теперь, ваши переменные не могут быть неопределенными. Вы, возможно, определяется их в другом месте. Но то, что я буду делать в конечном счете? Я собираюсь хранить внутри, что глобальное переменная в качестве значения Счетчик ключевым результатом делает счетчик плюс 1. Так что это просто арифметика что делает приращение этого счетчика. И то, что я храню, что значение еще в здесь средством для существенно обновить базу данных, чтобы помнить, что пользователь 123456789 был здесь в два раза. И когда я сделать это снова в следующий раз я перезагрузите страницу, он собирается проверить мой штамп руку и сказать, о, Пользователь 123456789 имеет сейчас был здесь три раза. И так, что PHP и подобные языки делают для нас они выясняя , как и где и как долго для хранения значений в этой коллекции суперглобальная. И это суперглобальные в следующий раз я посетите страницу является своего рода магическим предварительно заполненные, наполненный значения, которые были там в последний раз вы посещали, было ли это секунду назад, в неделю назад, или в 2013 году, и мы сейчас говорим о 2015. PHP и веб-сервер уход взятие всего этого для вас. АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Переменные в PHP являются практически всегда глобальная если вы объявить их внутри функции, и тогда они являются локальными для только функция. Но потому, что я не написал любой функции, то теперь они эффективно глобальная протяжении всей моей файла здесь. АУДИТОРИЯ: Есть ли способ чтобы сделать их местный? ДЭВИД Малан: Есть ли способ сделать их местный? Только, обернув их в функции. Что в последней версии PHP, вы можете сделать это с анонимная функция. Но об этом в контекст JavaScript. Но Краткий ответ: нет. Больше да. Хороший. Хорошо вопрос викторины. Хорошо. Таким образом, наконец, сама страница на самом деле довольно просто. Обратите внимание, что, как только я выйти из режима PHP, напомним что все эти вещи вниз ниже только собирается получить плевать из сырья в браузер. Который прекрасен, потому что я хочу, чтобы отправить пользователь некоторые HTML, но я хочу для динамического обновления, что HTML. И один из способов я могу сделать это, чтобы разобраться очень быстро упасть обратно в PHP Режим, использование открывающая скобка знак вопроса Знак равенства, а затем вывести значение счетчика. Или, если это выглядит немного загадочно, это Знак равенства на самом деле лишь некоторые синтаксический сахар для этого Е ($ счетчик). Но, откровенно говоря, это немного некрасиво и немного раздражает, чтобы напечатать. Итак, PHP очень красиво предлагает эту функцию где можно просто сказать, что это более кратко таким же образом. Так что же происходит под капот? Давайте быстро посмотрим на сети Вкладка здесь counter.php. И позвольте мне идти вперед и первым давайте очистить куки. Очистить данные просмотров Давайте так начало времени. Теперь давайте вернемся сюда. Теперь давайте перезагрузите страницу. И я вернулся в нуле. Потому что моя рука штамп был помыт, Сейчас я получить новый печенье. Действительно, если бы я посмотреть на вкладке сети и посмотреть на заголовки ответа, уведомления что прибор посылает меня печенье, чье имя несколько произвольно, но вид разумно, PHPSESSID. И это мне это отправка действительно большой случайное число. Это не совсем ряд. Это не совсем шестнадцатеричное. Это своего рода алфавитно-цифровая строка но по-видимому это случайным образом. И это ручной штамп так говорить, что я имею в виду. Между тем, если я нажму перезагрузку, а затем посмотреть на этой второй линии для моего второго просьба, уведомление сейчас, что мой запрос заголовки включают PHPSESSID равно это, не Set-Cookie, а просто печенье. И вот презентация моего браузера моей ручной штамп. Так что теперь в качестве тизера, и мы поговорим более об этом в течение недели или около того, но каким образом это делает вас уязвимы, ваш аккаунт Facebook уязвимыми, и другой такой приходится уязвимы? АУДИТОРИЯ: Если кто-то имеет свой печенье. ДЭВИД Малан: Да, если кто-то имеет свой печенье. Я имею в виду действительно, так же, как некоторые из вас возможно, попытались в подобном клубе или парк развлечений, если вы попытаетесь что-то как это скопировать штамп, хотя назад на руку другого человека, и тогда он или она представляет его как самостоятельно, если он на самом деле выглядит идентичны, 123456789, то веб сервер, по-видимому просто собираюсь надеюсь, что этот пользователь вы. И это действительно фундаментальная угроза в любое время использовать куки потому что, если кто-то просто подделывает так, чтобы говорим на Вашем печенье, выясняет, что это есть, либо действительно копируя его глядя на компьютере и быть как, в порядке. Печенье Дэвида JJ3JIK и так далее, а затем они достаточно умны, чтобы знать как сортировать вручную отправить, что печенье из браузера или из Программа они пишут, они могли полностью войти в веб-сайт, как вы. Это не так сложно притворяться кто-то еще, если мы не пересмотреть р-набор два, который ввел что? АУДИТОРИЯ: криптография. ДЭВИД Малан: Немного Немного криптографии. Простой криптография, по крайней мере стандартная версия, но крипто тем не менее. меньше. Вот и получается, если вы зашифровать все эти заголовки, используя то, что вы может теперь знают больше знакомо как SSL, Secure Socket Layer, или https:// URL-адреса, то все эти вещи мы были взглянув на самом деле в зашифрованном виде, Это означает, что это, как вы не может прочитать ручную марку. Только facebook.com может или google.com, или в данном случае, прибор может читал, что ручную марку. Трагически, хотя, и опять же, это слишком уместно с материалом NSA в последнее время, даже SSL является хрупким. И это на самом деле не так сложно даже взломать этот шифрование. Не столько взлома шифрования, но, обманывая браузеру в расшифровке данные преждевременно. Но опять же, мы будем дразнить вас с, что в скором времени. А сейчас просто бояться. Это трагически рода правда. Хорошо. Итак, где же теперь это нам дает? Ну, давайте сделаем это. Давайте идти вперед и принимать быстрые тизер, прежде чем мы сделать перерыв. И я думаю, мы будем задерживаться немного дольше сегодня, но мы собираемся, чтобы погрузиться в что-то новенькое и сексуальность, которая будет возбудить ваш аппетит еще больше. Так вот тизер. Так SQL, мы начали говорить о очень кратко последний раз. Вы действительно получить ваши руки грязные с некоторыми из его в р-набор семь. И с точки зрения непрофессионала, что делает SQL - S-Q-L - для вас сделать? Что это такое? Да. АУДИТОРИЯ: Давайте получить доступ к данным. DAVID МАЛАН: Да. Он препятствовал нам получить доступ к данным в базе данных. Язык структурированных запросов. И это, по существу языка программирования. Существуют особенности, что мы даже не будем использовать в классе. Но вы можете эффективно определении функций. Они называются хранится процедур в SQL. Но мы будем держать его довольно просто и просто использовать его для некоторых основных операций как выбор данных, вставки данных, обновления данных и удаления данных. И вы можете действительно думаете, базы данных, как база данных SQL, как только что бытия Microsoft Excel. Поскольку SQL относится к реляционной базы данных, где отношения просто означает, таблиц. Строк и столбцов. Так что все, что вы можете поместить в таблицу как это или Google Docs, вы могли бы поставить в базу данных SQL , объявив таблице. Теперь, как вы на самом деле доступ эту информацию? Ну, с команды или запросов, как это. SELECT, INSERT, UPDATE и DELETE. И, по большей части, те четыре только ингредиенты, которые вы должны будете сделать что-то довольно мощно В задачу, поставленную семь. Теперь назад в день, вы на самом деле взаимодействует с базой данных в черно-белый в окне терминала мигает приглашение вроде этого. И базы данных мы бежим на Устройство называется MySQL, который свободный и открытый двигатель исходной базы данных. Если вы читали Google и Википедии статью, вы будете знать, что имя немного перехода для некоторых версий Linux. Maria данных на самом деле раскошелиться поэтому говорить о MySQL. Короче говоря, Oracle купила MySQL. Oracle в большой компании. Люди были обеспокоены тем, что это было бы больше не остаются достаточно с открытым исходным кодом, так что это просто копия MySQL это еще на свободе, все еще открытым исходным кодом, и установлены в Fedora Linux по умолчанию. Но это вид боли в шею, чтобы познакомиться с базу данных таким образом. Так мы включаем в CS50 прибора Бесплатный инструмент с открытым исходным кодом под названием PHPMyAdmin. Просто совпадение, что она написана на PHP. Там нет фундаментальных нужно для PHP здесь. Но это всего лишь веб-инструмент, который мы загрузили бесплатно, установленных в прибора, что позволяет нам иметь Графический интерфейс пользователя, с которым изучить р-набор семи базу данных с для создания новых баз данных, говорят для вашего собственного конечного проекта, если бы нравится, и в конечном счете создать динамических веб-сайтов, как CS50 финансов , которые позволяют запрашивать данные и обновлять данные динамически. Вы не будете иметь, чтобы использовать только простой текстовый файл или CSV. Вы действительно можете использовать смарт-базу данных Программа так что вы можете выполнять более сложные запросы, чем просто чтение через все линейно. Так, например, это то, что мы даем Вы из коробки для р-набор семь. Это таблица с по-видимому, по меньшей мере три колонны, одна из которых имя пользователя, одним из которых является хэш и другой из которых является идентификатором. Но самое интересное, да и просто дразнить одна мысль здесь, имя пользователя Предположительно уже уникально, не так ли? Я имею в виду, большинство любого сайта, если у вас есть имя пользователя, есть Не может быть двух Цезарей. Там не может быть двух Malans. Там не может быть двух jharvards. Его уникальная. В противном случае, они не знают, которые jharvard на самом деле. Так что может быть мотивацией для также имеющей третий столбец слева там называется ID, который выглядит как число, которое аналогично уникальным? Он чувствует себя немного избыточной мне на первый взгляд. Почему это может быть убедительным, чтобы иметь не только уникальные имена пользователей, но и уникальные номера? АУДИТОРИЯ: Они могли бы и тот же пароль. DAVID МАЛАН: люди, возможно, тот же пароль, конечно. Это может случиться абсолютно. Но если у них есть это уникальное имя пользователя, я утверждают, что это действительно не вопрос, потому что, если они введут в имя пользователя, нужно только, чтобы проверить их пароль, их хэш их. Почему еще? АУДИТОРИЯ: быстрый поиск. DAVID МАЛАН: быстрый поиск. Почему? АУДИТОРИЯ: ID является лишь одним. DAVID МАЛАН: ID является только один символ, а если быть более точным, это число, поэтому, вероятно, 32 бит или что-то вроде этого. В то время как имя пользователя, по-видимому Джейсон Hirschhorn случилось там вроде неимоверно длинный, и он собирается возьмите меня намного больше времени в строку сравнить H-I-R-S-C-H-H-O-R-N, и возможно / 0 или что-то вроде этого, для того, для поиска Jason, а не только говорю, дайте мне пользователем номер два. Это 32 бит. Это одно, что INT у вас есть для сравнения. И действительно, именно поэтому базы данных стремятся возложить уникальных идентификаторов строк в них. Теперь то, что другие типы данных есть Кроме того, INT и, видимо, строк, как это? Ну, если быть более правильным, SQL базах данных, как MySQL, есть текстовые поля. И CHAR немного обманчиво ни одного СИМВОЛ. Поле CHAR в базе данных MySQL является один или несколько символов, но это фиксированное число символов. Так, например, если я иду к PHPMyAdmin, как вы, возможно, уже, или скоро проблема установить семь, и я иду в моей базе данных, и просто для удовольствия, давайте создадим новую таблицу с именем проверить с помощью всего двух колонок. Я затем нажмите кнопку Go. И это станет довольно знакомо, тем более, что вы возиться вокруг по своему усмотрению. Здесь я мог бы ввести ID для создания новая таблица типа INT. Но здесь я мог бы ввести имя пользователя для воссоздать, что ранее таблицу. И обратите внимание, у меня есть целый букет типов на выбор. И это тоже, почему PHPMyAdmin отчасти хорош. Это своего рода самообучения в этом вам может только отчасти точка и нажмите, и посмотреть на выпадающих меню, и вывести из что то, что полномочия SQL, дает тебе. И в самом деле, если я выбираю CHAR, я тогда должны указать длину, или, как многие ценности, сколько символов. Итак, очень общие ценности такие вещи, как 255, но это немного долго. Обычно это восемь имя пользователя. Но это немного небольшой эти дни. Так что это дизайнерское решение. Это макс. 8 символов, 32, 255, 1000? Это действительно зависит от вас. Но поле CHAR фиксированное число. Так что выбирайте слишком мало, и ты вроде резьбовое, если вы хотите более длительный логин. Выберите слишком много, и то, что недостаток? АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Это расточительно. Так же, как в C, если у вас есть больше, кусок памяти, чем нужно, вы просто тратить время и занимают пространство. Так в качестве альтернативы, существует VARCHAR, который решает эту проблему, лечении длину не в виде фиксированной длины, а в качестве максимальной длины, и с помощью переменное количество символов, которые затем стремится использовать только столько символов, как вы на самом деле нужно. Это звучит идеально. Почему бы нам не избавиться от Введите данные CHAR тогда? Какая может быть недостаток используя VARCHARS, что звучит как это хороший выигрыш? Да? АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Хорошо, хорошо. Так что, если все ваши данные и то же Длина, в чем же проблема? АУДИТОРИЯ: Потому что вы тратите Данные по рассказывая им все. ДЭВИД Малан: Так что, если все ваши данные есть такой же длины, хотя, я бы сказал, что задание максимальную длину на VARCHAR ничем не отличается от указав фиксированную длину на CHAR если Вы знаете, что число заранее. Но есть на самом деле, и я буду своего рода извлечь из этого ответа реальность что есть еще более, которые могли бы раздражать, особенно если вы столкнуться имя человека, что это необычно долго, что вы этого не сделали предвидеть. И это также немного менее эффективным на самом деле поиск по типа VARCHAR как отличие от ищущих символы, особенно для длинных столов, которые имеют много и много данных. Так и здесь, тематическая снова нет очевидным выбором. Так что просто дать вам ощущение друга типы данных, которые могли бы представлять интерес либо для р-задать семь или в будущее, есть INT. Там в BIGINT, который , как долго долго. Это, как правило, 64 бита. Там в десятичную, которые вы увидите в Поставленная задача, которая является гораздо очиститель ответом на проблемы, мы столкнулся с поплавком и плавающей указать неточность. А тут еще DATETIME. Там в буквальном смысле тип данных, который имеет чтобы быть похожим на год, месяц, день, и час, минуту и ​​секунду. Но базы данных SQL также вещи, которые мы будем называть индексов. И индекс является то, что вы указать при создании таблицы в сделать обыски и другие операции более эффективным. В частности, есть то, что называется первичный индекс, что вы могли бы заявляем следующее. Мы сделали это для вас с Таблица пользователей мы даем вам. Но обратите внимание, если бы я вручную воссоздавать Таблица пользователей здесь давать это имя пользователей. Я уже указано ID. Я указал INT. Я указал имя пользователя с максимум 32 символов. Но если мы будем продолжать прокрутки в этом довольно широкое окно, уведомление есть куча других вещей, я могу указать. Один из них, я могу указать атрибуты как, вы знаете, что это INT должен быть подписан. Я не хочу отрицательные числа, так давайте сделаем это без подписи. Null не имеет отношения здесь, потому что Я хочу, чтобы каждый пользователь иметь уникальный номер. Я не хочу, чтобы это было нулевым. Но это интересно. Я могу указать, что ID является либо первичный ключ этой базы данных, или это уникальный, или это индексируются, или полный текст. Так что для сегодняшних целей, длинная история Короче говоря, основным средством, что это должен быть как концептуально и технически поле, которое мы используем, чтобы однозначно идентификации пользователей. Поэтому, когда мы смотрим пользователей, это своего рода обещания, чтобы смотреть их в основном что уникальный идентификатор. И эта база данных будет гарантировать, что если вам иметь пользовательский номер 3, вы не можете физически вставить другого пользователя с этим же номером 3. База данных будет просто отказываются , чтобы сохранить изменения. Какая хорошая вещь, потому что вы можете защитить себя от себя. само Кроме того, для пользователя. Таким образом, второй ряд, напомним, это поле имя пользователя. Таким образом, второй ряд здесь имя пользователя, как мы это делали в дальнем левом углу есть. Так что еще я мог бы хотеть указать? Я не имею права, в соответствии с SQL, указать два первичных ключей. Вы можете задать совместное ключ, где вы посмотреть на обоих полях, но они не могут индивидуально быть первичные ключи. Так вот может быть и речи. Так что может я хочу выбрать? Ну, УНИКАЛЬНЫЙ похож по духу первичный ключ, где вы указать это поле должно быть уникальным, но это не собирается быть тем, Я использую все время. И мы не собираемся использовать этот все время по какой причине снова? Это медленнее потенциально, если это долгая имя пользователя. Это просто пустая трата времени. ИНДЕКС, тем временем, указывает, что это не собирается быть уникальным, но я хотел бы работать свою магию под капот, чтобы сделать это быстрее для меня поиск по этой области. Так что это, вероятно, не имеет отношения здесь. Для имени пользователя, я бы утверждать, что УНИКАЛЬНАЯ хороший ответ. Но предположим, что мы сделали пользователям более Интересно, чем просто имена пользователей, хэши, и идентификационные номера. Что делать, если мы дали людям полные имена? Что делать, если мы дали им адреса и другие данные о них? Ну, если вы указать, что столбец в база данных индексируется, это означает, что MySQL или Oracle, или как база данных вы используете, должны работать свое волшебство и использовать какой-то причудливой данных Структура как дерево или синтаксического дерева, или хеш-таблицы, или что-то, чтобы гарантировать что при поиске данных с использованием выбрать на этой конкретной области - как показать мне все, что живет на Оксфорд-стрит. Запрос в этом роде. Если вы указали заранее, что Вы хотите индекс для этой области, результаты будут гораздо, гораздо быстрее. Если вы не укажете индекс, лучший Вы можете сделать это линейный поиск, если это не сортируются. Но если вы укажете INDEX, смарт- люди, которые сделали базу данных - люди, как вы, которые теперь знают, деревья и пытается и хэш-таблицы - автоматически построить такую ​​данных структура в памяти, чтобы убедиться, что эти результаты гораздо быстрее. FULLTEXT пока что близки по духу, но позволяет сделать шаблон результаты, как показать мне все, что живет в улицах, которые начинаются с буква О по любой причине. Вы можете сделать поиск подстановочные так. Или, что более убедительные вещи, как шоу меня все, кто имеет слово - покажите мне всех, чье имя начинается с определенной буквы. Вы можете искать по ключевым словам таким образом. Хорошо. Итак, возможности дизайна есть потенциально. Есть другие, которые я буду махать руками в. Получается, что вы можете иметь различные механизмы хранения. И это еще тайной, чем нам нужно конечно для задачи установить семь. По умолчанию, вы, ребята, с помощью то, что называется InnoDB. Вы увидите упоминания об этом где-то в Интерфейс PhpMyAdmin наиболее вероятно. Но знаю, что есть другой дизайн решения, которые имеют потенциал Интерес приходят окончательные проекты, если вы делаете что-то веб-. Но давайте сделаем это. Давайте пойдем дальше и поставить это на экран как тизер истории с участием вас, сосед по комнате, и стакан молока. Давайте две минуты или так сломать здесь. И если вы можете остаться, давайте приходят назад, выглядят немного больше на SQL, и затем немного JavaScript с р-установить восемь в виду. Хорошо. Итак, давайте заставить вас задуматься о угол так, что можно очень легко возникают в контексте с использованием базы данных, или честно говоря, даже при использовании реального мира вещей как банкоматы, чтобы получить деньги. Итак, вот холодильник. Предположим, у вас есть один тоже в Ваш общежития или ваш дом. И у вас есть один сосед по комнате, и оба вы действительно любите молоко, например. Таким образом, вы приходите домой с классом в один прекрасный день. Он или она не вернуться. Вы открываете холодильник. Вы действительно хотите большой стакан молока. Там нет молока. Так что же делать? Вы закрыть холодильник. Вы хватаете ключи. Вы выходите на площадь. И вы получите в очереди в CVS на тех, самостоятельно кассовые вещи, которые всегда занять больше времени, чем на самом деле имея кассиров. Во всяком случае. Итак, между тем, точка точка точка, ваш сосед приходит домой и он или она Аналогично есть страстное желание за молоком. Таким образом, он или она открывает холодильник, выглядит внутри, и черт побери. Никакое молоко. Таким образом, он или она головы,, происходит пойти на другую CVS, который был только квартал по некоторым причинам, и он или она получает в очереди, чтобы купить молока. Между тем, вы приходите домой, он или она приходит домой, и что делать Вы в конечном счете есть? Вдвое больше молока. Но вы действительно не нравится молоко, что много. Так что теперь у вас есть столько молока, что теперь один из них просто будет идти кислый в конце концов. Так что это действительно плохая проблема. Не так ли? Так что же произошло? Так принципиально, это своего рода из смешной пример. Но под капотом, что мы имели произойдет здесь вы оба проверили состояние некоторой части памяти, холодильник. Вы оба проверили состояние некоторой переменной. Вы оба сделали вывод что вы тогда действовали на. Но, к сожалению, в то время как ваш сосед по комнате был в магазине, состояние, что переменная изменилась, он или она вернулась и теперь хочет, чтобы изменить состояние, но это уже было изменено на него или нее. И, конечно, он или она не будет иметь пошел в магазин, если они знали, что вы уже были в пути. Таким образом, в реальном мире, как ты мог избежать этой проблемы, если у вас есть холодильник, у вас есть сосед по комнате, и вы на самом деле любите молоко? АУДИТОРИЯ: Общение. ДЭВИД Малан: Общение. ОК. Но как вы могли бы общаться? АУДИТОРИЯ: Оставьте записку. ДЭВИД Малан: Оставьте записку, не так ли? Всегда оставьте записку, для поклонники шоу. Ладно, всегда оставляют записку, или положить действительно, как на висячий замок или что-то на холодильник, который держит ваши сосед по комнате от осмотра на состояние эта переменная. Теперь, почему это могло бы быть уместны в Проблема установить семь, или в банкоматах. Ну, представьте себе мир, в банкомате, где Вы могли бы быть в состоянии подняться в банкомат Машина здесь, а другой банкомат здесь. И это происходит довольно часто. И предположим, что у вас есть два банковских карточек, который можно получить. И вы входите в обеих машинах эффективно одновременно, мы надеемся, в то время как никто не смотрит. И тогда вы вводите в PIN почти одновременно. И тогда вы сделать баланс запрос чтобы увидеть, сколько денег у вас есть. И скажем, у вас есть $ 100 оставили в вашей учетной записи. Так по существу одновременно, вы говорят одно, ноль, ноль, введите. И вы, надеемся вернуться немного денег. Но сколько денег вы можете получить обратно? Сейчас компьютеры в конце рабочего дня, особенно если они говорят с серверы, не обязательно делать то, в том порядке, это ожидается. Итак, пусть то, что происходит, потому что из независимо сеть проблемы со скоростью там являются, или вопросы CPU есть, или ничего подобного, предположим, что первый банкомат проверяет свой баланс и видит, о, у этого человека есть $ 100. Но тогда отвлекается, потому что, может быть, резервное копирование происходит, и поэтому замедляется. Или, может быть, проверяя, сети подключение стало немного медленнее, потому что это просто происходит. Они физических устройств. Таким образом, в то время, второй банкомат задавать тот же вопрос. Сколько денег Дэвид иметь? $ 100 является ответом. Но поскольку первый банкомат еще не посылается сообщение вычесть $ 100, как Банкоматы осмотрели хранилище банка, видя там $ 100 есть, а теперь обе машины потенциально являются собирается выплюнуть ответ. Теперь, это здорово для вас в некотором смысле если то, что банк делает в конечном счете, это изменить количество до минус 100 по установка переменной равно ваш банковский счет равен 0, в отличие делать минус 100. Теперь в худшем случае для банка - или в лучшем для банка, тем временем, они дают вам $ 200, и ваш банковский счет теперь показывает отрицательный $ 100, что на самом деле не на пользу вам вообще. Но дело в том, что эта гонка состояние в течение двух соседей по комнате, получающих молоко, или в течение двух банкоматов, пытающихся получить наличные деньги и изменить состояние хранилище в то же время существует какой-либо раз у вас есть база данных. Сейчас в проблеме установить семь, этот вопрос возникает в том смысле, что если вы покупаете Доля Facebook складе, а затем в течение Например, вы покупаете второй долю Facebook акции, вы должны убедиться, Решение о том, программиста. Для того, чтобы решить, как обновить В базе, шансы вы собираетесь есть по одной строке для этой акции, а это является одним из способов ее реализации. И вы будете иметь одну акцию FB, который является их символом тикер для этого имя пользователя, или этого пользователя ID, уникальный идентификатор. Но та же история может произойти здесь. Если вы делаете Выбрать в SQL, как вы увидите в задаче установить семь, когда вы видите, ой, Дэвид имеет одну акцию из Facebook складе. А теперь позвольте мне изменить, чтобы это было две акции, потому что он хочет купить Вторая акция. Но предположим, что Дэвид на самом деле было два окна браузера открыть, или предположить, что это общий счет с двумя супругами, и оба они пытаются выполнить та же операция, там тоже существует потенциал для принятия решения, чтобы быть сделан на основе предыдущего состояние мира - учетная запись имеет одну акцию - и оба человек, или оба сервера, теперь попробуйте сказать увеличивать его до двух акций. Но в этом случае, вы, возможно, взимается мне деньги для обеих акций, но увеличивается только, что один раз. Короче говоря, основная проблема здесь, как и с шуткой об уходе Отметим, или положить замок на нем, является если два человека, или два потока - вспомните нуля - может проверить состояние некоторой переменной , а затем попытаться изменить эту переменную, но эти две вещи не происходят в В то же время, но может получить прерван другими, что происходит, данные могут попасть в очень странном состоянии. И вы можете воспользоваться или вы можете страдать в смысле на примере денег. Таким образом, в проблеме установить семь, мы даем вам это одна строка кода, которая долгое Короче говоря, решает эту проблему проблема в MySQL. Это очень долго инструкция, которая не даже размещения на одной линии на Экран здесь гарантирует, что ваш операция то, что называется атомарным. Все это происходит сразу, или так не бывает вообще. Это очень долго фраза не может получить прерван частично. И то, что она делает, это в буквальном смысле что он говорит. Вставьте в некоторой таблице следующее три поля эти конкретные ценности, но на дубликат ключа, не делать вставки. У обновления. Так что это, как делать ВЫБОР и INSERT так сказать в то же время. И то, что это ключ, который, вероятно, речь тут идет? Оказывается, и вы увидите это в Проблема задать семь в спецификации, потому что мы объявили там, чтобы быть уникальным ключом На этой конкретной таблице такая, что Вы не можете иметь несколько строк для одного пользователя с же символ акции копейки - В этом примере, является DVN.V глупые мелкие акции, что мы см. в спецификации. Потому что мы объявили, что он будет уникальным, Что это означает, что если вы попытаться вставить дубликат строки, вы Вместо собирается обновлять его без кто-либо еще, имеющий возможность изменить состояние мира тоже. Короче говоря, это гарантирует вещи атомные. В более общем плане, хотя, базы данных как MySQL - и вам не нужна эта функция для P-набор семи, но имейте в виду, для будущее - поддержка так называемых сделок, где вы можете сказать Начальную транзакцию буквально. Потом вы можете два SQL заявлений. И заявление SQL, как вы увидите в р-набор семи, выглядит немного что-то вроде этого. Обновить таблицу с именем учетной записи. Установите баланс колонки все равно столбец баланса в настоящее время минус 1000, где число, тем номер счета, как и идентификатор пользователя, равна 2, а затем обновить счету точка точка точка. Так что с точки зрения непрофессионала, что делают эти два Запросы, кажется, делают в реальный смысл банковском мире? АУДИТОРИЯ: Переадресация на сбережения. DAVID МАЛАН: Совершенно верно. Перевод средств от одного составлять до другого. И это еще один пример, где вы действительно хотим, чтобы эти две вещи, чтобы случиться или не произошло. Вы не хотите, чтобы что-то получить в посреди них и, возможно, испортите математику, или испортить, сколько у вас денег, или сколько деньги у банка. Так в чем же действительно хорошо о сделках В MySQL, что и баз данных в целом, является то, что они и умные люди, которые уже реализованы эти возможности выяснить, как сделать Убедитесь, что обе эти вещи случаются или не на всех. И если вы действительно стремится сделать Веб-сайт, который используется людьми на кампуса, люди в реальном мире, делают что-то в смысле запуска, эти виды проектные решения, которые становится все так важно. В противном случае, вы начинаете терять данные, теряют пользователей, или, в худшем случае, как мы видели здесь, потенциально потерять деньги. Итак, еще раз, более подробно об этом в задачу, поставленную семь, а также, возможно, для некоторых Вы в окончательном проектов. Так давайте изменим эту картину у нас были несколько раньше, просто в еще один способ. Итак, позвольте мне на самом деле, если я могу - Нет, это ушло. Там она есть. Так что это, где мы оставили последний раз. И получается, что мы собираемся, чтобы бросить еще одна вещь в микс здесь - язык, называемый JavaScript. Так что на самом деле подходит JavaScript в этой части - и я не совсем оставить достаточно места, так что это не сейчас, не в масштабе. Хорошо, это действительно жалко. ОК, так что это JavaScript. Хорошо. Я действительно делаю это медвежью услугу. Хорошо. Так JavaScript другая программирования языке, а наша последняя, ​​если это помогает заверить, что не намного больше, из пожарных гидрантов здесь. Так JavaScript также интерпретируются язык, который означает, что вы не скомпилировать его в нули и единицы. Вы просто запустите его. Но то, что принципиально разные с JavaScript обычно является то, что вы не запустить его на своем веб-сервере. Это не становится работать в прибор как таковой. Скорее, он получает загруженный пользователем через HTTP в свой браузер - Chrome, Safari, Internet Explorer, Firefox, что угодно, - и это браузер, который выполняет эту конкретного языка программирования. Таким образом, чтобы быть ясной, PHP до сих пор было выполнить либо в командной строке в наш черно-белые окна, на сервере как прибор, компьютер как прибор, или это было выполняются на веб-сервере работает на компьютере. Но тема в том, что до сих пор PHP была выполнена на стороне сервера так пользователя и браузером пользователя никогда не видит строки кода PHP. В самом деле, если вы когда-нибудь открыть браузер для Ваш сайт или другого, и вы фактически видеть PHP код в окно, кто-то облажался. Потому что это не должно быть отправлен в браузер непосредственно. Он должен быть выполнен и повернулся в нечто вроде HTML. Но в JavaScript по существу противоположное. Он предназначен для выполнения обычно внутри окна браузера пользователя. И какие веб-сайты используют JavaScript Затем в эти дни? Нравится буквально каждый популярный веб-сайт. Каждый веб-сайт, что вы, ребята, наверное, использовать ежедневно использовать JavaScript для Простейший и даже самых сексуальных особенностей. Так что-то вроде Facebook Чат, если вы используете это. Как это на самом деле работает? Ну до сих пор, все материал, который мы сделано с HTML и PHP предполагает, что Вы тянете URL, и вы нажмете Enter, и вы увидите некоторые HTML содержания. И вы нажмете на ссылку, которая изменяет URL, изменяет страницу и перезагружает некоторое новое содержание. Нажмите другого URL или отправить форму, Вы получить смахнул на другую страницу и вы увидите некоторые новые содержания. Но используя что-то вроде Facebook Chat, или Gchat или Google Maps, редко делает целый обновления страницы таким образом, что Вы видите белый экран на непродолжительное время и Затем новое содержание. Скорее, веб-страницы сегодня динамично получение обновляются снова и снова и снова все вроде из за кулисами. И получается, что, когда вы действительно идете в что-то вроде Facebook или Gchat, или Gmail, а обновления страницы автоматически без перезагрузки весь экран, что случилось в том, что Ваш браузер сделал вид тайно дополнительные HTTP запросы - не для целых веб-страниц, но только для маленькие порции данных, как мгновенное сообщение, что ваш друг только послал тебя, или обновление статуса, что кто-то просто послал тебя, или твит что кто-то только что отправил. Это просто сделать небольшие запросы на Данные, а затем с помощью Javascript, Этот язык программирования, чтобы изменить то, что веб-страница выглядит без сервер помогает без сервера генерации, что HTML. Короче говоря, JavaScript может быть использован тогда чтобы не только принести новые данные от сервер без перезагрузки целое страницы или отправке формы. Он также может быть использован для изменения так называемый DOM - объектная модель документа - , который является просто причудливый способ для говоря дерево HTML что мы видели в последний раз. Таким образом, чтобы успокоить, JavaScript является синтаксически так похож на C, а также. Там нет основной функцией. Вы просто начать писать код и он будет получить выполнен, или интерпретировать более правильно. Условия будет выглядеть следующим образом. Ничем не отличается от C или PHP по этому вопросу. Логические выражения или-е изд вместе будет выглядеть следующим образом. ANDed вместе выглядеть следующим образом. Переключатели будет выглядеть следующим образом. Для петель будет выглядеть следующим образом. В то время как петли будут выглядеть следующим образом. У а петли будет выглядеть следующим образом. Это новая. Так JavaScript не имеет Еогеасп построить как таковой, но эта конструкция для переменной я в массиве, и я в этом дело становится значение индекса. Так что это немного отличается от той, Еогеасп, хотя новые версии JavaScript выходят все время, так что даже эти возможности языка развиваются. И как в сторону, JavaScript в эти дни также могут быть использованы на сервере так же, как PHP с использованием базы под названием Node.js. Один из CS50 в ТФ, Кевин, привело семинар по Node.js, что доступно в cs50.net/seminars. Так что если вам интересно, знают, что вам можете использовать это на стороне сервера, как хорошо, но это довольно недавняя тенденция, но мощный в этом. Это немного отличается. Это массив в JavaScript. И то, что кажется вам разные по сравнению с C или PHP? Есть несколько простых историй мы можем сказать здесь. Чего не хватает по сравнению с PHP? АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Да? К сожалению, еще раз сказать? АУДИТОРИЯ: Не объявляя тип переменной. ДЭВИД Малан: Мы не объявив тип переменной. Поэтому на самом деле совсем как PHP, мы не Указывая тип этой переменной. Скорее, мы в более общем говоря вар для переменной. У нас нет неприятность в PHP из знак доллара, который в то время утомительно Тип, делает более ясным, что что-то переменная. В то время как здесь, мы своего рода обратно Подход C путем просто звоню переменная по имени мы хотим дать ее, например, номер. А также, как PHP, мы имеем квадратные скобки для значения внутри этого массива. Так переменные в JavaScript также может выглядеть следующим образом. Обратите внимание, здесь это строка называется с, но так же у нас не указан что это строка. Здесь, хотя это функция, которая не существуют в точности так же, в PHP, но немного аналогично. Это объект в JavaScript. И объекты являются своего рода швейцарской армии Нож структуры данных в этом вам их можно использовать для любого количества вещей. Вот, например, мы объявив переменная с именем цитата. Тип этой переменной является объектом. Вы можете думать об этом как о C структуры что имеет ключи и значения. Символ является одним из ключевых. FB это значение, по-видимому, Символ акции. Запятая. Цена является еще одним ключевым, и его значение по-видимому, с плавающей точкой, или число в целом в JavaScript, из $ 49.26. Итак, PHP не имеет - мы не видели в объектах PHP довольно как это, но мы действительно видели аналог, который был и что? АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Ассоциативные массивы. Так в то время как PHP имеет ассоциативные массивы чьи синтаксис когда-либо слегка так разные - мы видели квадратные скобки. Мы видели странные стрелки символов. JavaScript имеет объекты, но это в основном семантическое различие и отличается синонимом сейчас. Тем не менее, как в сторону, PHP также имеет объекты таким образом, что Java и другие языки имеют объекты в объектно-ориентированное программирование. Но мы будем использовать их только для типов данных для теперь. Объекты и ассоциативные массивы. Это можно было бы сделать его немного более ясным. Вот почему объект полезно. Когда вы хотите объявить студента, как Zamyla, мы можем на самом деле инкапсуляции так сказать внутри, что объект с помощью фигурных скобок, как до целой кучей ключей и значения в здесь. У нас есть ID, дом, и имя Zamyla, следует точка с запятой в качестве обычно в конце. Здесь, внизу тоже это немного разные, но и очень мощный в эти дни. Вот массив, и я знаю, что, поскольку есть квадратная скобка до верх и квадратная скобка в нижней части. И это массив, какие данные из введите видимо, в JavaScript? Это массив это выглядит как три объекта. И я знаю, что это только объектом из-за фигурные скобки. И обратите внимание, есть открытая фигурная скобка, некоторые вещи, недалеко фигурная скобка, запятая, затем еще немного, запятая, а затем еще немного. Так вот три аргумента разделенные двумя запятыми. Так что это массив из трех объектов. И каждый из этих объектов по-видимому, студент или сотрудник некоторых рода, каждый с ID, дом, и имя. Но я назвал это что-то называется JSON - JavaScript Object Notation. И это формат данных, который на самом деле настолько очень популярны и в моде в эти дни, что, если вы пишете приложение, которое использует Facebook API, API Twitter, действительно почти любой API там в эти дни, в том числе некоторые из CS50 собственную, Данные вы вернетесь не в старая школа формат CSV. Потому напомним, что CSV супер просто. Он находится всего в колонны, разделенные запятыми. Данные JSON дает вам больше метаданных. Он связывает ключ с каждого значения так они не должны просто предположить, что столбец нулевая одно значение, колонка один другой, колонка два это другое. Все в объекте JSON здесь является своего рода из самоописываемыми, потому что каждый одно из имен в этом файле есть буквально назвать перед ним, как кавычках. Итак, давайте взглянем на Несколько примеров здесь. Отпусти меня в прибор. И позвольте мне перейти в наш виртуальный хост Каталог, в общественности. И позвольте мне перейти в JavaScript каталог. И давайте идти вперед и открыть дом-0.html, где DOM просто означает, объектная модель документа. Это дерево материал, к которому Я говорил раньше. И позвольте мне предложить следующее. Вот веб-страница которого Тело довольно прост. Так здесь внизу, заметить меня есть форма. Мы видели тех, перед. Он имеет два входа, один из которых имеет Идентификатор имени, один из которых имеет тип представить, и первый свое тип текста. Так что это на самом деле звучит довольно просто. Пойдем отсюда. Давайте вернемся на эту страницу здесь. Пойдем в локальный, и иди в наш каталог JavaScript, и перейти к дом-0, и здесь мы имеем эту форму. Так вот, по-видимому все это страница не содержит. Он имеет поле имени с кнопку Отправить. Но я не собираюсь использовать PHP здесь. Я собираюсь сделать все, на стороне клиента так сказать в JavaScript следующим образом. Обратите внимание, что я действительно получил имя Поле этого входа уникальный Идентификатор, который будет на самом деле спасти меня какое-то время в один момент. И заметьте, я представил другой тег в голове моей веб-странице,  тег. Так что это в этом смысле, что JavaScript является язык программирования на стороне клиента. В этом случае, так же, как CSS, я положил это прямо внутри моего HTML. Но обратите внимание, я объявил функцию что выглядит немного как PHP синтаксически, но это на самом деле JavaScript, потому что опять же, это на стороне клиента в браузере. И сделать предположение, что это будет сделать, хотя некоторые из синтаксиса здесь является новым. АУДИТОРИЯ: привет, кто бы ни. ДЭВИД Малан: Это будет поздороваться тому, кто посещает эту страницу. Так как? Так заметить, получается, в JavaScript есть функция оповещения (). Это очень рода грустно функция, на самом деле просто, как правило, раздражать пользователей. Это не тот, который вы должны действительно использовать обычно, но это быстрый и грязный способ рода печать что-то к графическим интерфейсом интерфейс, как браузере. Заметьте, что здесь у меня есть Строка в одинарные кавычки. Оказывается, что в отличие от C, JavaScript может на самом деле имеют использовании одного цитирует, и, честно говоря, это просто вид стилистического конвенции между JavaScript программисты использовать одиночные кавычки. PHP, они на самом деле имеют несколько другой смысл. Но сейчас, просто знаю, что что это единственная причина. Конвенция в JavaScript, что часто использовать одинарные кавычки, но мы могли бы использовать двойные кавычки в обоих местах, а также. Так что это интересно. Напомним, в последний раз, что мы имели, что изображение на экране, который привлек дерево где вы имели HTML узел, и Головной узел, а узел тела, а затем некоторый текст. Но был один специальный узел в самый верх, что я назвал этот документ. Ну, оказывается, в JavaScript, любой раз, когда вы написать программу в JavaScript в браузере, у вас есть доступ к специальная глобальная переменная. Похожие по духу суперглобальных РНР, этот называется в в нижнем регистре документ. Это как структуры, но эта структура также имеет функции внутри него. Так C структура просто есть данные обычно. Но объект JavaScript, так как это технически также имеет функции, иначе известный как методы, внутри него. И вы можете вызвать функцию внутри этот объект в буквальном смысле делает свою Имя, точка, а затем название функция, или снова метод. Это просто синонимом, действительно. И что эта функция делать? Вы можете рода догадаться из названия. Получить элемент по ID. Так это будет поиск по веб-страницу, поиск это дерево, ищу что узел, AKA элемент, имеет Уникальный идентификатор цитатой конец цитаты именем. И что тогда я буду делать? Я собираюсь получить значение внутри что узел в дереве, и я собираюсь как-то поздороваться с таким именем. Так сделать предположение, даже если мы не имею видел это все же, то, что делают плюс символы означают здесь и здесь, вероятно,? АУДИТОРИЯ: Объединение. ДЭВИД Малан: Объединение. Да, и это лишь рода проектным решениям люди сделали лет назад. В PHP, вы объединить вещи с точками. В C, вы прыгаете через несколько обручей и вызов такой функции как StrCopy () или Strcat () или другие подобные функции. Но в JavaScript, вы используете плюсы. Так что это просто объединения три струны - привет, имя, а затем Восклицательный знак. Так что, когда и почему эта функция называется, хотя? Ну, взять догадаться из HTML в нижней части. Почему приветствовать () называется, или когда? По-видимому, как лучшее, что я могу сказать, на представить, когда эта форма представляется, Я собираюсь сделать все внутри этих кавычек. И в частности, я собираюсь позвонить приветствовать (), а затем вернуться ложным. Ну, давайте посмотрим, что чистая Эффект здесь в первую очередь. Итак, позвольте мне идти вперед и ввести в, скажем, Лорен, Отправить. Здравствуйте Лорен. Давайте посмотрим, если возможно это было просто повезло реализация. Не-а. Так что это набрав из все имя я на самом деле положил там. Но обратите внимание, что не меняется. URL-адрес по-прежнему дом-0.html. Там нет register.php. Там нет второй файл. Там нет атрибут действия. Так что же это возвращение ложным предположительно делаешь? Почему я вызова приветствовать (), а затем возвращение ложным наверное? Что обычно происходит, когда вы нажимаете Отправить на форме, что даже у нас есть видел на прошлой неделе? АУДИТОРИЯ: [неразборчиво]. ДЭВИД Малан: Само где-то, не так ли? Это выходит на какой-то URL назначения. Но я не хочу, чтобы это произошло здесь. Я хочу, чтобы мой веб-страницы, чтобы быть полностью динамичный, как Gmail, где, как только вы там, вы будете останавливаться там. URL-адрес не меняется таким образом, что указывает вся страница перезарядки. Скорее, я просто хочу, чтобы что-то изменить как печать что-то здесь на экране. Ну позвольте мне очистить это до немного. Позвольте мне открыть не Dom-0, но позвольте мне открыть Дом-2. Точно так же вы видели некоторые синтаксис здесь. Оказывается, что мы только что сделал использует сырье JavaScript. Так что это действительно язык JavaScript. Некоторые из вас могут знать, из библиотека называется JQuery. Так JQuery не то же самое понятия, как JavaScript. Это просто библиотека, которая очень умные парень написал и популяризировал такие , что почти каждый человек в мире в настоящее время использует JQuery при использовании JavaScript. И на первый взгляд, честно говоря, это выглядит немного более загадочным. Но вы найдете, особенно если вы идете там для вашего окончательного проекта с веб развитие, вы увидите, что это очищает вещи и экономит вам довольно несколько строк кода. Так что давайте просто взгляд на то, как эта форма работает. Обратите внимание, что я удалить видимому от моего HTML? Там нет на представить обработчик так сказать. Там нет атрибута. Потому что вы знаете, что Я действительно не нравится? Я чувствовал, что мы падали к старым привычкам там. Так же, как это начинало чувствовать себя неаккуратно смешиваться как CSS с HTML, потому что вы вроде бросали разные языки по всему место, так же это началось чувствовать как плохой дороге спуститься, где Я ставлю код JavaScript внутри моего HTML, а не факторинговых его. Так вот, урок здесь. В Дом-2.html, я факторинга его. И я немного делать вещи разному. На данный момент, я собираюсь махнуть руками на то, что это действительно под капотом. Но только сейчас предположить, что, что первый строка кода в этой библиотеке называется JQuery просто означает, когда Документ готов, выполните следующие действия. Поскольку веб-страницы может занять некоторое время для загрузки. Вы можете быть на медленном интернете соединение, и это могло бы быть спиннинг и спиннинг, и, наконец, он заряжен. Это строка кода просто говорит дождитесь вся страница будет готова, документ готов, перед выполнением этого кода. А теперь обратите внимание, это, вероятно, самый полезный первый отнять у JQuery. Эта линия здесь очень близки по духу к этому гораздо дольше линии здесь. В то время как в сыром кода JavaScript, есть существует глобальный объект документа, есть функция GetElementById (), люди, которые написали JQuery упрощена, что просто сказать знак доллара, а затем внутри скобки поставить две цитаты, а затем положить символ решетка с последующим уникальный идентификатор вы хотите захватить. Так это эквивалентно document.getElementById. Между тем,. Представить просто означает на представление какой бы форме вы ссылаясь на слева, перейдите вперед и выполнить это. Но теперь это любопытство тоже. Что странно о том, что Я выделил здесь? Мало того, что это отчасти синтаксически новая, есть также чего-то не хватает. АУДИТОРИЯ: Это просто называется функция? Это не называется оповещения? ДЭВИД Малан: Да. Ну, так оповещения () не работает здесь, чтобы быть справедливым. Но нет никакого упоминания о имя, как вы знаете, Foo или что-то здесь. И в самом деле, это одна из особенностей из JavaScript, что это довольно мощный, но и совсем новые. И PHP на самом деле имеет это также. Позвольте мне идти вперед и делать что-то действительно быстро. Позвольте мне идти вперед и поставить это здесь. Позвольте мне сделать это. Функция. Давайте назовем этот обработчик (). Функция обработчика, так сказать. То, что выполняет некоторые операции. Позвольте мне очистить свой отступа. И поставить это здесь. И что это здесь. Да. ОК. Так что теперь у меня есть функция называется обработчик (), что я действительно не знаю, что он делает еще. Это просто еще есть такое. К сожалению. Принял слишком много. Давайте сделаем это. Хорошо. Извините. Хорошо. Позвольте мне сделать это. ОК. Это выглядит красиво и прямо Теперь вперед. Позвольте мне сделать это. Сделайте это. И хорошо. Так что теперь, давайте поставим это здесь. Нет больше программирования на лету. ОК. Так что теперь, давайте вернемся к где история началась. Ранее я говорил, что эта линия здесь значит, когда документ будет готов, перейдите вперед и делать это. Что я хочу сделать? Ну конкретно, я хочу пойти вперед и сделайте следующее. Выполнить эту строку кода, а затем то, что я хочу, чтобы вы сделать, это позвонить этому работать при отправке формы. Вот что интересно. Это само по себе не является функцией. Обратите внимание, я не поставив скобки здесь, в обычном режиме. Я буквально передачи функции называется обработчик () другую функцию называется Submit () в качестве аргумента как хотя это как переменную. И это одна из особенностей JavaScript, является самим функциям на самом деле просто объектами. В самом деле, в действительности они переменных какой-то. И если название функции обработчик (), нет никаких причин, я не могу передать его в качестве аргумента здесь. А это значит, когда форма с идентификатором демо представлены, вызвать эту функцию. Но теперь, если я отменю все это, почему тогда я, возможно, сделать это минуту назад? Ну, это анонимная функция. Потому что, честно говоря, я поняла, почему я беспокоит тратить время объявления Функция называется обработчиком () только позвонить это в одном и только одном месте? Если мне не нужно имя, и я не нужно позвонить его более чем в одном месте, давайте просто реализовать функцию там, где мне это нужно. И так JavaScript и PHP, что поддержка называются анонимными функциями, что Позвольте мне сделать именно это здесь. Но мы просто поцарапать поверхность. Давайте дразнить только с парой Окончательный примеров. Если я иду в quote.php. Обратите внимание, что это на самом деле PHP функции, программа PHP, который я написал что ожидает HTTP параметр, называемый символ, и я могу передать в значение, как FB. И если мы на самом деле посмотреть на исходный коде, это запрос бесплатный сайт называется Yahoo Finance, как и P-набор семь, и он возвращает мне видимо что-то в Формат JSON является известный - Нотации объектов JavaScript. Это просто объект. Обратите внимание на фигурные скобки, кавычки толстой кишки, и запятые. Теперь между тем, это довольно прохладно. Потому что я, вероятно, может использовать программирование язык для создания URL-адресов который выглядит следующим образом динамически, не так ли? Я могу изменить это на Google и вернуться от Google цена акций $ 1,017.55. Итак, давайте посмотрим, если мы не можем использовать это сейчас. Пустите меня к Ajax-0 здесь, которые выглядит следующим образом. Это просто сайт, который имеет форма с кнопкой. Позвольте мне пойти дальше и ввести YHOO для символа акций Yahoo, нажмите кнопку Получить Цитата, и теперь замечаю я получил предупреждение 32.86. Позвольте мне на самом деле пойти любитель версия на этой странице, версия два, а введите скажем, Microsoft, MSFT. Получить специальное предложение. И теперь не замечаете, отсутствует оповещение. Обратите внимание, где он говорит цену , которые будут определены? Существует простой из примеров, которые намекает на то Gchat и Facebook Чат и Gmail, и другие подобные веб-сайты делают на самом деле изменение веб-страницы. Заметим, что это. Позвольте мне перезагрузите страницу. Позвольте мне открыть Инспектор Chrome. Пустите меня к элементам Вкладка здесь. А теперь обратите внимание, если я увеличу сюда и открыть это, обратите внимание, что это мой HTML DOM - моя объектной модели документа. Это мой HTML. Но теперь замечаю, хотя это будет быть немного трудно увидеть его в обоих местах одновременно, если я печатаю в FB здесь, следите за нижней на экране только. Это на самом деле изменения мой HTML на лету. И он делает это довольно просто , делая что-то вроде этого. Если я открываю Ajax-2, обратите внимание реализации что-то так сексуально, как , что, хотя это довольно уродливо, но так сложны, как, что функционально, она имеет некоторые HTML в нижней части. Но обратите внимание, я использовал для тега. Мы не использовал это раньше, но это как, но это не заставит все на новую строку. Он просто имеет прямоугольную область на той же линии по существу. Обратите внимание, что я дал ему идентификатор цене. И оказывается, с помощью тех же JavaScript библиотека, у меня есть функция называется цитата (), которая вызывается каждый раз формы. И то, что я делаю это. Я объявляю переменную в JavaScript называется URL, сохранения значения quote.php? символа =. Другими словами, я сам начинаю подготовить запрос HTTP, а затем Я на эту объединения с плюсом любой элемент с ID из символа, который заметить, что текстовое поле вплоть здесь. Так же, как у нас было формах в прошлом. А потом выясняется, в JQuery, если вы звонить. Val (), которая вызывает из Val функция, значение функции, которая получает то, что пользователь ввели дюйма А затем все сетевые трафика что происходит это. $. GetJSON. И как в сторону, знак доллара является просто сокращенная запись. Это действительно jQuery.getJSON. Получить меня JSON с данного адреса, и когда запрос возвращается, называем это Функция и передать в качестве аргумента что вернулся с сервера. Итак, другими словами, если я возвращаюсь в браузеру, и я возвращаюсь к quote.php, что мой браузер делает это становится это фрагмент данных. И когда я иду к веб-страница здесь, заметить, если мы вместо этого пойти к сети Вкладка и очистить его, а затем введите в что-то вроде GOOG для Google и получить Цитата, обратите внимание на страницу не изменилась. Но запрос HTTP был сделан, и то, что вернулся сюда, если мы посмотрим на ответ целая куча JSON что мы обращались, наконец, с эта простая линия здесь. Данных является то, что получили с сервера. Цена это имя Ключ я забочусь о. Так data.price дает мне, что. Теперь тем временем, и этот последний пример. Вы можете сделать еще больше со страницей. Один на самом деле, ну два. Мы можем вернуть пометить, если вы помните, что это. Вот JavaScript. Мы можем сделать это. Очень интересно. Мы оставим это как захватывающим. Но более возбуждающе, вы можете делать вещи, как это. Если я иду в геолокации-1, то получается, что Chrome знает, что мы находимся на широту и долготу 42.37. -71,10. Так что есть еще более есть в вашем распоряжении. Но об этом на следующей неделе. Увидимся в понедельник.