[Powered by Google Translate] [Неделя 9]
[David J. Малан - Гарвардский университет]
[Это CS50. - CS50.TV]
Хорошо. Добро пожаловать обратно. Это CS50, и это начало недели 9.
Сегодня мы сосредоточены, в частности, на дизайн, больше не в контексте C
но в контексте PHP и немного SQL и немного JavaScript,
особенно к концу и PSET 7, а также окончательный проект.
В самом деле, если вы находитесь в данный момент ваш окончательный проект
, где предположительно на час или около того назад вы по крайней мере, начали давать некоторые мысли
на ваш окончательный проект, и вы думаете вы хотели бы сотрудничать с 1 или 2 одноклассниками,
если у вас возникли проблемы с подключением с указанной одноклассников,
не стесняйтесь заполнить форму на cs50.net/partners/form.
Он просто спрашивает, кто ты, какой проект вы думаете о том,
где вы живете только по техническим причинам.
И потом, если вы хотите, чтобы держать глаза на течение следующей недели или около того таблицу URL там,
Вы можете увидеть, только для чтения версию Google Doc
, в которой мы собираем эту информацию.
Так что если вы хотите работать с кем-то, всеми средствами, не стесняйтесь обратиться к людям
с помощью этого механизма.
Но большинство людей работают соло. Это совершенно нормально.
Поэтому не считаю, что это в любом случае обязательно.
В пятницу он был только я и еще несколько команде здесь,
пустом театре, по большей части.
Там было 3 туристы сидят там, наверху, так, чтобы было немного неловко.
То, что мы говорили только о том, баз данных и мы говорили о PSET 7 немного.
И если вы случайно не поймать, что на видео прямо сейчас, это нормально.
Я постараюсь, чтобы определить любые условия, которые мы иначе воспринимаем как должное
на основе лекции в пятницу.
>> Но сегодня мы будем стараться, чтобы вы в точку
не просто возможность сделать что-то вроде PSET 7
но на самом деле понимая, что происходит под капотом,
Особенно некоторые абстракции, которые мы ставим на место в файле functions.php
, чтобы сделать вашу жизнь немного легче, но так, что вы в конечном счете понять
так что, когда обучение колеса оторвались через несколько недель вы все еще можете выжить
В реальном мире и сделать этот материал без CS50 рамки под вами.
Это $ _SESSION, для тех из вас, кто знаком
или кто уже поймали видео в пятницу, что же СЕССИИ давайте сделаем
В PHP на основе веб-приложений?
Это суперглобальная переменной, которая означает, что он похож по духу GET и POST
и некоторые другие, но что это за дело полезно?
>> Что такое СЕССИИ используется? Да. [Студент] входа в учетную запись
Простите? [Студент] входа в учетную запись входа в учетную запись самом деле.
В PSET 7 мы используем эту сессию суперглобальная для облегчения входа в учетную запись
И что приятно об этом суперглобальная том, что это ассоциативный массив.
Ассоциативный массив, напомним, является только массив, но чьи показатели не должны быть номера
как 012. Они могут быть числами или они могут быть даже строк.
И поэтому, если вы нырнули в PSET 7 еще, вы можете вспомнить, что мы храним ключ, который называется ID
Внутри это ассоциативный массив, значение которого является что-то вроде 123 -
что в настоящее время вошли в ID пользователя является.
Мотивацией для этого является то, что даже после того, как пользователь посетил локальный
или мой сайт в целом, а затем они вошли в систему,
даже если они не кликают по ссылке или вернуться на свой сайт за 5 минут
или даже час или даже день, но они оставляют их открытыми окна браузера,
через этот суперглобальная я могу помнить, что они зашли
>> Другими словами, это позволяет мне хранить несколько долгосрочных что я хочу о пользователе.
И вы можете думать, это действительно как воплощение корзине.
Такие места, как Amazon, очевидно, позволит вам положить вещи в корзину,
но HTTP, протокол, что полномочия в Интернете, является лицом без гражданства
В том смысле, что, когда вы посещаете веб-сайт,
по большей части у вас нет некоторой постоянной подключение к сети
между браузером и сервером.
Как только вы скачали HTML и изображения в формате JPEG и GIF-файлы и все такое,
соединение уходит, и вы просто иметь копию HTML и еще много чего с сервера.
Но если сервер хочет вспомнить что-то о вас,
нагрузка на сервер на самом деле записать эту информацию.
И поэтому вы программист, которые имеют контроль над сервером
можно поставить самый, что вы хотите внутри этого суперглобальная ассоциативный массив
и она будет там в следующий раз, когда пользователь возвращается,
будь то минут или даже дней, если они не закрывают окна браузера,
в какой момент СЕССИИ исчезает.
Таким образом, это эфемерное хранения, это непостоянное, и это означало, чтобы уйти
Как только пользователь закрывает свой браузер - не только этой вкладке, часто весь браузер,
тем самым эффективно регистрации пользователей из.
Так как эта вещь на самом деле реализованы?
Давайте бросим быстрый взгляд на простом примере мы рассмотрели в пятницу.
Для тех, кто незнаком, это было так просто, как это.
Это веб-страницы, единственная цель в жизни, чтобы сказать мне,
Сколько раз я посетил эту страницу.
Это первый раз в понедельник, что я посетил его, так он говорит 0 раз.
>> Но если я начну перезагрузки страницы, она говорит 1 раз, 2, 3, 4, 5,
и это в конечном итоге просто держать на счета вверх, вверх, вверх, вверх, вверх
каждый раз я на самом деле кнопки Обновить на нем.
Так как же это работает? Позвольте мне зайти внутрь этого файла под названием counter.php.
В верхней части оно все синим комментариев, но самое интересное здесь.
В строке 13 мы называем эту функцию session_start,
и что буквально все, что вам нужно сделать, если вы хотите иметь доступ
этого специального суперглобальная называется $ _SESSION.
Это делает все это возможным, и мы увидим через мгновение, как такое вообще возможно.
В строке 16 уведомление, что я делаю.
Если ключ, называемый счетчиком - другими словами, значение индекса - "счетчик"
существует внутри этого массива называют сессии, то, что я делаю с ней в строке ниже?
Что такое строка 18 делаешь?
>> [Неразборчиво ответ студента] Что это? [Студент] Сохранение значения. Хорошо.
Это хранения значения, которое находится в СЕССИИ сейчас в новых локальных временных переменных,
$ Счетчика в нижнем регистре.
Обратите внимание, что PHP уже немного ленивый здесь.
Обратите внимание, мы не имеем никакого упоминания о Int или с плавающей точкой или строка или что-то в этом роде
потому что PHP типизирован слабо, в котором вы не должны указывать тип переменной,
и в этом случае здесь я даже не объявлены еще.
Я объявив его внутри этих фигурные скобки, и в отличие от C, это на самом деле хорошо.
Независимо от того, насколько глубоко вложенных декларации переменной в PHP -
Внутри фигурных скобок, внутри фигурной скобкой и т.п. -
она будет на тот момент времени существуют на оставшуюся часть программы,
к лучшему или к худшему.
Так что сразу становится глобальным, как только вы определили его, как мы делаем здесь.
>> В противном случае, если я не нахожу в этом нет ничего в СЕССИИ суперглобальная,
Я видимо инициализации этой переменной счетчика в 0,
таким образом только при условии, что пользователь никогда не был здесь раньше.
И тогда это, конечно, увеличивая счетчик как?
Я обновляю значения, что находится внутри этого ассоциативный массив
, установив его равным независимо от счетчика в настоящее время + 1.
Если я прокрутите вниз здесь, чтобы HTML-страницы, это на самом деле довольно проста.
Все, что я в теле этой страницы: "Вы посетили этот сайт, чтобы и то-то времена".
И это конструкции PHP.
Если вы делаете <? =, Это эквивалентно эффективной, какие функции?
Это действительно эквивалентно что-то вроде Printf, которые мы видели много раз в C,
хотя, как вы знаете, уже из спецификации в PSET 7,
печать также является функцией, которая просто печатает что-то, это на самом деле не использовать формат кодов,
и вы можете сказать эха, а также.
Они все очень немного разный, хотя суммарный эффект в конечном счете то же самое.
Таким образом, это использование знака равенства является только вид элегантный способ сделать это
более кратко, чем вы могли бы быть в состоянии.
Так вот все это делает сайт. Она выводит значение счетчика.
Как это все происходит на самом деле?
Вы можете вспомнить, неделю назад мы начали искать под капотом
на то, как работает веб-страницы с помощью этой вкладки инспектора.
>> Chrome имеет это как в версии для Mac, версия Windows, и даже Linux версии,
и Firefox и IE имеют сходные механизмы, посредством которых у вас есть это встроенный отладчик
внутри браузера.
Давайте взглянем на следующий.
У нас есть целая куча вкладок здесь, и напомнить, что левые один Elements,
и, как ни godawful HTML и JavaScript в страницу,
Напомним, что с вкладки Элементы вы можете перемещаться по HTML иерархически
и красиво и аккуратно.
Так что, если вы пытаетесь узнать из сайта, как Google или Facebook
или действительно любой сайт, понимаю, что вы, вероятно, лучше
глядя на исходный код таким образом, в отличие от просмотра исходного источника,
, который может быть беспорядок, как мы видели, особенно на сайт Google.
Так что, если я вместо этого щелкните на вкладке Сеть здесь,
Давайте посмотрим, что происходит, когда я посещаю эту страницу.
Прежде всего позвольте мне очистить кэш.
Я собираюсь идти в настройки в Chrome, а затем перейти к истории
и снимите все данные о просмотренных страницах.
Вы могли бы быть использованы для делаю это для других целей, [смех]
Но когда дело доходит до разработки веб-сайтов, на самом деле полезно -
если вы смеетесь вы знаете. [Смех]
Это на самом деле очень полезна при разработке веб-сайтов, потому что реальность такова,
такие вещи, как печенье и тому подобные вещи кэшированных HTML файлы, кэшированные файлы JavaScript
действительно может стать большой головной болью, потому что если по каким-либо причинам
браузер решает для кэширования файлов и все же вы внесли изменения в этот файл на сервер
но браузер действительно не понял, что файл был изменен
и, следовательно, на самом деле не повторно загрузить его, даже если вы нажмете кнопку Обновить,
одна из самых верный способ просто убедитесь, что неисправность не с кодом,
это с поведением браузере, чтобы войти в здесь, в вашем браузере
и просто очистить всю историю, так что нет никакой путаницы.
>> И потом, если вы действительно хотите быть параноиком, закройте браузер, перезапустить его,
, а затем убедиться, что все работает так, как ожидалось.
Короче говоря, очистка кэша хорошо, когда делаешь развития.
Таким образом, здесь мы имеем вкладке Сеть.
Я ранее посещали сайт в 9 раз, но позвольте мне теперь идти вперед и нажмите кнопку Reload.
И я снова до 0.
Давайте посмотрим, как на самом деле это то, что эта сессия суперглобальная претворяется в жизнь.
Я собираюсь нажать на 1-HTTP-запрос, который был сделан,
и это окно отладки позволяет мне заглянуть внутрь этого.
Здесь я вижу только ответ от сервера, который не интересны.
Я видел это в любом количестве способами.
Но то, что технически интересны заголовки.
Если я здесь, прокрутите вниз и сосредоточить внимание на заголовки запроса и нажмите просмотреть исходный код,
что я буду видеть буквально запросу HTTP
что просто пошел из моего браузера к серверу,
GET является оперативное слово и / counter.php быть имя файла,
HTTP/1.1 просто быть версии HTTP, что мой браузер использует.
Эта линия здесь небольшое напоминание от браузера к серверу, что имя сервера
что он хочет поговорить.
И тогда остальные иногда это интересно, но не соответствующие прямо сейчас.
>> Это просто какая-то любопытство.
Cryptic хотя это строка, в любое время вашего браузера посещает веб-сайт
это информирование сервера, какой браузер вы используете
и какую операционную систему вы используете и какие варианте.
Так что если вы когда-нибудь задумывались, как сайты, как CNN и еще много чего
знаю, что проценты пользователей Mac в сети, пользователи ПК,
IE пользователей, пользователи Chrome и тому подобное, это потому, что все наши браузеры
говорят каждый сайт, там какие мы есть.
Это не обязательно содержат личную информацию,
но это не сказать серверу, что ваши IP адреса и то, что браузер и ОС вы используете.
Так вот где эту информацию.
Но что более интересно сейчас, когда дело доходит до этих сессий заголовка ответа.
Позвольте мне кнопку просмотра исходного кода рядом с ответом.
Что интересно, вот несколько вещей.
1, мы вернулись кодом состояния 200.
Мы никогда не видим этот статус код, потому что это означает, что все хорошо.
Это означает буквально все в порядке, в отличие от чего-то другого.
Что такое число, которое мы иногда видим, что это плохо? [Студент] 404.
404, файл не найден, 403 Вы могли бы наткнуться на уже
что запрещено, а значит, вы забыли что-то CHMOD, скорее всего.
И есть куча других.
>> Здесь, внизу, это немного сумасшедший.
Я просто написал этот файл несколько минут назад, вставив его в Gedit.
Почему этой страницы истекает в 1981 году, прежде чем там действительно было Интернете?
Что там происходит?
>> [Неразборчиво ответ студента] штамп времени. Но почему?
Это несколько произвольно, но это на самом деле полезно.
Что это говорил мой браузер это PHP файл, который вы только что просили уже истек.
На самом деле, он истек 30 лет назад.
Но что это означает?
Это просто означает, что в следующий раз, когда пользователь посещает эту страницу,
ли путем перезагрузки или набрав URL в адресной строке,
убедитесь, что вы сходить за новой копией.
Это своего рода примером кэш перебора,
глупые слова, которое означает лишь пытается отбить браузеров
от фактически кэширование HTML, которое было отправлено с сервера
так что вы не случайно попали перезагрузку, а затем увидеть ту же версию файла.
Вы на самом деле хотите, чтобы сервер отправить новую копию.
Поэтому тот факт, что это 1981 просто означает, что это то, что прибор выбирает
как произвольную дату в прошлом.
Но настоящая сочная линия теперь это одно.
Даже до 50 вы, вероятно, смутно знакомые с печеньем.
По состоянию на сейчас, особенно среди тех, кто менее комфортно или между ними,
Что такое куки в вашем понимании прямо сейчас
хотя мы и собираемся сделать ваше понимание более технический?
Что такое печенье? Да.
[Студент] Информация о пользователе, как если бы они написали свое имя или что-то еще.
>> Хорошо. Это информация о пользователе, будь они ввели в свои имя пользователя уже.
Cookies являются одним из способов которым серверы могут вспомнить что-то о пользователе.
И то, что печенье на самом деле представляет собой текстовый файл или некоторые последовательности байтов
который посадил на сервер в Вашем браузере,
а внутри него файл или среди тех, байт является своего рода идентификатором.
Может быть, это буквально вашего имени пользователя, но чаще всего это что-то более загадочное вид
как эта вещь здесь - bo8dal3ct и так далее - это действительно большой буквенно-цифровую строку
это действительно просто хотел быть уникальным идентификатором для вас.
Или вы можете думать о нем как своего рода виртуальный штамп руку.
Если вы идете в каком-то клубе или в парке развлечений, помнить, что вы фактически уплаченной
и ушли в, они положили маленькую красную наклейку на вашей руке какой-то,
и что напоминает людям на счетчик, который вы уже заплатили
и вы можете приходить и уходить когда угодно.
Cookies немного похожи по духу на это.
В первый раз я посетил этот сайт, так как я только что сделал после освобождения моего кэша,
веб-сервер, прибор в этом случае поставить штамп на моей руке
чье имя PHPSESSID, идентификатор сессии,
, значение которого это действительно длинный буквенно-цифровой строкой.
>> Так что теперь вроде красуется на руке, так что в следующий раз я ударил перезагрузки
или вручную посетите этот URL в браузер,
мой браузер по определению HTTP собирается представить ручной штамп
снова и снова, и снова.
Поэтому, даже если сервер не обязательно знать, кто я,
они по крайней мере знают, что я такой же пользователь или, по крайней мере, более конкретно, того же браузера.
И это, в конечном счете, как СЕССИЯ суперглобальная реализован.
Сервер понятия не имеет, кто вы есть, когда вы вновь сайте во второй или в третий раз
если вы представляете эту руку штамп.
И как только вы представить, что рука штамп,
Веб-сервер по существу идет в маленькую базу данных своего
и проверяет, хорошо, я только что видел руку печать пользователь bo8dal3ct и так далее.
Давайте посмотрим, какая информация хранится программист
Внутри суперглобальная об этом пользователю,
, а затем позвольте мне убедиться, что эти данные снова внутри сессии суперглобальная
так что программист может повторно доступа к данным
даже если оно было установлено несколько минут или часов назад.
Итак, другими словами, печенье, которая получила плохую репутацию в течение некоторого времени
из-за неуверенности в браузерах и они действительно могут нарушать нашу частную жизнь, и все это,
они на самом деле имеют большую полезность, потому что без них
Вы постоянно входе в каждую страницу Facebook вы посещаете
или каждый Gmail электронной почты вы читали, если браузер не есть способ запоминания
что вы уже подлинности.
>> Таким образом, в этом случае печенье отправляются туда и обратно через провод.
Другой любопытство печенье, особенно здесь, в том, что это вполне в открытом виде.
Там нет шифрования происходит здесь бы то ни было,
да и вообще я использую HTTP на данный момент.
Один из наших любимых моментов в CS50, который сейчас 2 года назад,
было примерно в то время инструмент под названием Firesheep вышел.
Это был свободный кусок программного обеспечения, которое было сделано исследователь безопасности
как тревожный сигнал для общества, чтобы сказать, насколько ужасно реализован
определенные механизмы аутентификации на Web были.
Таким образом, в течение некоторого времени, Facebook была почти полностью по HTTP, HTTPS нет.
И даже если вы не представляете, как крипто работает, S является безопасным
таким образом, это означает, что по крайней мере некоторые шифрованием.
Facebook же используется для шифрования имен пользователей и паролей,
Но как только вы посмотрели на вашем тычет или сообщений или новостей,
Все, что было в незашифрованном виде.
Так было до тех пор пока Gmail еще год или 2 назад.
Каждый раз, когда вы вошли в систему, да, они использовали шифрование,
но после этого они не сделали. И почему это может быть?
Почему бы не использовать криптографию все время использования в подобных случаях?
Что это? Я думаю, что я что-то слышал. [Студенту] Speed.
Скорость, правда? Есть способы обойти это.
Но если вы просто вид думать об этом логически, если вы что-то шифрования,
Вы должны сделать по крайней мере, немного больше работы.
В PSET 2, когда вы реализовали Цезаря или Vigenere или даже трещины,
только печать строки относительно легко.
Шифрование и печати строки минимально требует немного больше работы.
>> Для супер популярных сайтах, как Google и Facebook,
если у вас есть, чтобы сделать больше работы для каждого пользователя, для каждой веб-страницы они посещают,
что просто занимает больше процессорного времени.
А если вам нужно больше процессорного времени, вам может потребоваться несколько серверов,
которая означает, что вы, возможно, потребуется больше денег.
И так на протяжении многих лет это просто действительно не было лучшей практики.
Люди будут использовать SSL шифрование только тогда, когда нужно.
Но оказалось, и как этот парень с Firesheep сделал супер ясно,
когда вы, ребята, которые в настоящее время на Facebook прямо сейчас -
Из любопытства, давайте посмотрим, если вы будете признаться.
Если вы находитесь на Facebook сейчас в некоторых вкладки, даже если он не на переднем плане,
Ваш URL HTTP или HTTPS?
[Несколько студентов] S. S? [Смех]
Хорошо. Любое HTTP? Всего в 1? Хорошо.
Так что все из нас могут взломать Facebook внимание, что парню прямо сейчас.
По большей части это стало включен по умолчанию, по крайней мере в некоторых веб-сайтах.
И Короче говоря, если ваш веб-трафик не шифруется,
не только HTML идти вперед и назад через WiFis незашифрованном виде,
так что такие вещи, как печенье идти вперед и назад по всему воздуха
без какого-либо шифрования.
Так что если у вас есть немного здравого смысла программирования или немного погуглить навыки
найти свободное программное обеспечение, что делает это все, что вам нужно сделать, это сидеть в Starbucks
или сидеть в аэропорту, где там вообще незашифрованном WiFi
и просто смотреть на ключевые слова, как Set-Cookie: PHPSESSID или
потому что, если у вас есть технические здравый смысл, чтобы просто наблюдать за WiFi
для всех битов, которые текут по всему воздух для этой модели,
Вы можете сказать, что PHPSESSID парень, случается, bo8dal и так далее.
И опять же, если вы достаточно технически подкованным и иметь правильный инструмент,
Вы можете просто перенастроить свой браузер, чтобы начать представление, что ручной штамп
на Facebook.com и Facebook просто будет считать, что вы, что парень
потому что все они знают не то, кто вы, но что у вас есть это уникальный идентификатор.
Так что, если вы крадете, что уникальный идентификатор, и представить его на веб-сервер, как свои собственные,
они просто собираюсь показать вам, лента новостей, что человек
или что это лицо сообщения или тычет.
>> И я бы Google Теперь, как активировать HTTPS для Facebook, возможно.
Но это действительно так просто.
И поэтому Facebook и Google, и, как получил действительно хорошее в этом,
но следить, тем более для любых посещаемых веб-сайтов, которые не используют HTTP
и есть какой-то секретной информации на них,
будь то финансовые или личные или тому подобное.
Если они не используют это, вполне возможно, может печенье, как это очень легко украсть
, а затем подделаны, и это именно то, что Firesheep сделал.
Вам не нужно быть программистом.
Все, что вам нужно было иметь подключение к интернету, скачать бесплатный инструмент,
и что он будет делать это вы войти в систему и тогда было бы показать вам Facebook имена
всех в Сандерса, в данной демонстрации, вокруг вас
и все, что вам нужно было только нажать на свое имя и программное обеспечение автоматизированных процессов
из нюхает, что печенье, представив его в Facebook как свои собственные,
и, вуаля, вы зашли
Так что это еще один из тех "не делать этого" официально.
Если у вас есть своя домашняя сеть и вы хотите возиться, все средства,
но понимают это делает пересечь линию на университетской среде.
>> Но цель здесь действительно подчеркнуть не, как это сделать
Но как защититься от такого рода вещей.
И здесь тривиальное решение, даже если оно само является ущербной,
это реально уменьшить использование любых сайтов, которые не используют HTTPS постоянно.
Таким образом, сайты, такие как Facebook и Google все чаще приходится флажков
где вы можете выбрать, чтобы такого рода вещи,
и банков было это в течение многих лет по аналогичным причинам.
Так что просто немного фактор страха, если мы можем. Но это все в двух словах.
То есть, как сервер помнит, кто вы есть.
И как только они могут вспомнить, кто вы есть, они могут помнить ничего о вас
что программист хранятся внутри этого специального суперглобальная называется $ _SESSION.
А для PSET 7 мы используем это тривиально просто чтобы вспомнить, INT,
а именно уникальный идентификатор пользователя, который вошел в систему,
так что мы знаем, что они были там раньше.
Любые вопросы, то на сессиях или печенье или как?
Firesheep не работает, а больше,
и вы должны перевести компьютер в специальном смешанном режиме
так что вы на самом деле прослушивать трафик, кроме себя.
Так что, если вы в настоящее время загрузка Firesheep, понимаю, что это не так просто,
как это было раньше, чтобы продемонстрировать.
Хорошо. И не делайте этого в Сандерса. У его дома.
Базы данных.
Одна из вещей, которые мы сделали в PSET 7 очень сознательно
были мы даем вам пример таблицы базы данных для пользователей, которые имеет некоторые идентификаторы пользователей,
некоторые имена пользователей, и некоторые зашифрованные пароли в нем.
И, как вы увидите, если вы этого еще не сделали, вы будете иметь, чтобы изменить таблицу немного.
Вы будете иметь, чтобы добавить кэш для каждого из пользователей в этой таблице,
и вы будете иметь, чтобы добавить еще одну историю стол, портфели стол,
или, возможно, называть это что-то другое.
Но с точки зрения думать о том, как это сделать, давайте откроем этот инструмент
, который мы использовали в пятницу, но если незнакомый, прибор поставляется с инструментом
называется PHPMyAdmin который случайно написана на PHP,
но его цель в жизни, после того как я войти сюда, как jharvard с малиновым,
, чтобы дать мне удобный способ просмотра и изменения моей базе данных.
>> Базы данных, что я бегу на прибор называется MySQL.
Это очень популярна, и это бесплатно СУБД с открытым кодом, что это чудесно прост в использовании,
особенно передние концы, как это.
Что этот инструмент позволяет мне сделать, например, является мешке вокруг столов.
Позвольте мне идти вперед и делать это.
В пятницу мы создали таблицу с именем студентов, что было супер просто.
Это было 3 колонки - номер, имя и электронную почту, - и я вручную вставляется пару строк
как Дэвид и Майк в этом конкретном примере.
Давайте это немного дальше, и давайте предположим, что мы хотим помнить больше
чем просто имя и адрес электронной о пользователе.
Позвольте мне Структура нажмите здесь на самом верху.
И снова, PSET проведет вас через необходимые шаги здесь,
так что не волнуйтесь, если некоторые это немного быстрее.
Тогда я собираюсь нажмите здесь.
Я собираюсь добавить некоторое количество столбцов после электронную почту
потому что я хочу добавить что-то вроде дома.
Я забыл записать доме студента.
Позвольте мне команду Перейти, и теперь у нас есть эта форма, которая, к сожалению, немного широкий слева направо,
но я буду называть имя этого поля доме,
а потом типа у меня теперь есть выбор.
Итак, давайте кратко поговорить о различных типов в MySQL
потому что в то время как PHP слабо типизированными и он вроде играет быстро и свободно с типами,
в базе данных особенно это супер важно, чтобы реально использовать набрав в свою пользу
потому что одна из вещей, MySQL и других СУБД может сделать для вас
это убедиться, что вы не ставите фиктивные данные в базу данных.
Это своего рода бесплатная проверка ошибок доступны для вас.
>> Для дома, мы, очевидно, не хочу, чтобы это INT, который представляет собой 32-битное значение в MySQL.
Мы сделали коротко рассказать в пятницу о VARCHAR, которая выступает за переменной длины символа.
Что это? Это позволяет вам указать, что вы хотите, чтобы это строка из какой-то.
Вы действительно не знаете заранее, как долго она есть,
поэтому мы сколь угодно говорить дом имени может быть до 255 символов,
но вы можете идти с 32, 64 - любое число на самом деле.
Но преимущество использования VARCHAR над полем называется символ какой?
Просто интуитивно, если я прокрутите вниз здесь, обратите внимание, есть символ и есть VARCHAR.
Varchar переменной длины символов, символов является фиксированной длиной символов.
Таким образом, основываясь только на этом определении, в чем преимущество или недостаток каждого из этих?
Иными словами, кто заботится о различии, или почему вы должны заботиться?
>> Да. [Студент] Varchar обладает большей гибкостью, но занимает больше памяти.
Хорошо. Varchar занимает больше - Давайте посмотрим. Я не уверен, если бы я услышал это право.
Можете ли вы сказать, что еще раз?
[Студент] Я сказал, VARCHAR, вероятно, имеет большую гибкость, но это занимает больше памяти.
Интересно. Хорошо. Varchar, вероятно, дает вам больше гибкости, но занимает больше памяти.
Последнее не обязательно верно.
Это зависит от контекста, но давайте вернемся к этому.
>> [Неразборчиво ответ студента] Именно так.
Это на самом деле так, что символ, как правило, используют больше памяти
потому что символ, как и в С, как струна, это массив символов.
Так что, если вы говорите символ поле длиной 255,
база данных буквально собираюсь дать вам 255 знаков.
И если в доме заканчивает тем, что MATHER и 6 символов всего,
вы тратите более 200 символов.
>> Так VARCHAR эффективно использует только столько символов, сколько необходимо
до максимальной суммы.
Но цена, которую вы платите на самом деле производительность, потенциально.
Если вы заранее знаете, что все ваши строки будет 8 символов -
Например, предположим, что вам требуется пароли длиной 8 -
Положительным аспектом использования символов поля на случай, хотя и не часто,
это указать фиксированную длину что-то вроде пароля
потому что теперь база данных может быть даже умнее.
Если он знает, что каждый символ поля, каждая строка в столбце той же длины,
Вы возвращаетесь функцию случайного доступа.
Вы можете прыгать между различными текстовые поля в таблице базы данных
потому что думаешь базы данных в виде строк и столбцов.
Таким образом, если каждый из струн одинаковой длины,
Вы знаете, что первый находится в байте 0, следующая находится в байте 8
а потом 16, а затем 24 и так далее.
Так что, если все строки одинаковой длины, вы можете прыгать гораздо более эффективно.
Так что может быть польза в плане производительности,
но обычно у вас нет такой роскоши, заранее зная,
так VARCHAR является путь.
Вот еще одна подробность, что даже побежал в Facebook в конце концов.
Ints велики, и мы вроде как их использовать по умолчанию в любое время мы хотим номер,
но это только 32 бита.
>> И хотя Facebook не совсем есть 4 миллиарда пользователей сейчас,
есть определенно некоторые люди там с несколькими учетными записями
или счетов, которые были открыты и закрыты,
Facebook и так сама я считаю, несколько лет назад был переход от Int
в, как метко назвал, BIGINT, который находится всего в 64 бит вместо этого.
Так что это тоже дизайнерское решение.
Вы бы удивительно повезло, если ваш окончательный проект оказывается запуска,
имеет 4 млрд и 1 пользователей, давать или принимать,
В этом случае использование целых чисел может быть немного близорук.
Но на самом деле, пользователи стол, вероятно, хорошо с целыми.
Но за то, как PSET 7, как ваша история столом,
Вы могли бы иметь тысячи, миллионы пользователей, если вы развиваться в etrade.com.
Таким образом, в то время как вы не могли бы более 4 млрд пользователей,
тех пользователей, у вас есть, возможно, более 4 миллиардов операций с течением времени -
покупает и продает и вещи в их истории.
Так что если вы предвидеть - опять же, это хорошие проблемы иметь, если у вас есть столько данных -
если вы предвидеть данных превышает размер INT,
собирается что-то вроде BIGINT это направление не достаточно часто, принятые дизайнеров
потому что люди фигуру, которая не будет проблемой,
но это легко выбрать нечто большее, чем это.
Десятичная мы используем в PSET 7, которая определяет фиксированную точность
так вы сможете избежать вопросов, связанных с поплавками и парном разряде, и вещественные числа и тому подобное.
>> А тут еще некоторые другие поля здесь. Мы машем руками у них в некоторой степени.
Но даты, времени у всех предписанных в формате MySQL,
и преимущество хранения даты как даты, а не типа VARCHAR
означает, что база данных может фактически переформатировать их в различных форматах,
ли формат американского или европейского формата и т.п. - однако вы хотите его -
гораздо более эффективно, чем если бы это были лишь некоторые общие VARCHAR.
А тут еще некоторые другие BINARY, VARBINARY капли.
Эти большие двоичные объекты, и вы также можете хранить данные
а также геометрические данные в базу данных.
Но для нас, мы обычно заботимся о целых и типа VARCHAR и тому подобное.
Давайте закончим этот пример с домом.
Дома я собираюсь сколь угодно говорить будет 255 символов.
Тогда значение по умолчанию мы могли бы это сделать.
Мы могли бы по умолчанию расставит все по Mather дома, например.
Вот как мы могли бы указать, что база данных
должны обеспечить, чтобы кто-то всегда имеет значение. Но я оставлю это будет.
В самом деле, для людей, которые живут за пределами кампуса, а не в доме,
Может быть, я на самом деле хочу указать, что значение по умолчанию для дома NULL,
, а затем мне нужно проверить эту коробку и сказать базе данных это хорошо, если дома пользователя является NULL.
>> Опять же, это еще один защитный механизм, вы можете поставить на место
так что вам даже не придется положить его в PHP кода обязательно.
Эта база данных будет гарантировать, что вещи являются или не являются NULL.
И тогда, наконец, атрибутов.
Ни один из них действительно актуальна.
Binary, без знака - ни один из тех, которые относятся к VARCHAR.
Индекс.
Кто-нибудь знает или помнит или есть предположение о том, что индекс
что-то вроде дома?
Это тоже на самом деле является важным и относительно легко дизайнерское решение.
Для тех, кто еще не видел, в пятницу мы вкратце рассказал о первичных ключей.
В базе данных таблицы, первичный ключ поле или столбце
, который однозначно идентифицирует строки в таблице.
Таким образом, в текущей таблице у нас есть идентификаторы, у нас есть имена и адреса.
Какой из них является лучшим кандидатом, чтобы быть первичным ключом,
роль которого заключается в уникальной идентификации строк?
Наверное ID.
Возможно, мы могли бы использовать то, что хоть?
Может быть, вы могли бы использовать электронную почту, потому что в теории это уникальный
если люди делятся учетных записей электронной почты.
Но реальность такова, что если вы используете цифровой идентификатор типа 1234,
вот только 32 бита, в то время как адрес электронной почты, может быть это количество байт, или это много байт.
Таким образом, с точки зрения эффективности для уникальных идентификаторов,
он имеет тенденцию быть хорошая практика просто использовать Int
даже если у вас есть строка кандидата, что вы могли возможно использовать.
>> За то, как дом, это не должно быть первичным ключом
потому что тогда только 1 человек мог жить в Мазер и 1 человек в Currier и тому подобное.
Кроме того, это не должно быть уникальным.
Разница между первичным и уникальна тем, что в случае нашей текущей таблицы,
ID будет первичным, но письмо не является первичным по той причине, мы только что упомянули -
производительность - но он все равно должны быть уникальными.
Итак, вы все еще можете обеспечить уникальность без претензий
что это супер важно первичное поле.
Но эта является весьма полезным: Индекс.
Если вы заранее знаете, для окончательного проекта, для PSET 7, или в целом,
что это поле доме будет то, что вы поиск по много
помощью выбора ключевого слова или еще что-то,
, то вы можете сказать превентивно базы данных для работы своей магии
и убедитесь, что оно создает в памяти любые фантазии структур данных, необходимых
для ускорения поиска на основе доме.
Может быть, он будет использовать хэш-таблицы, может быть, он будет использовать связанный список.
На самом деле, он стремится использовать дерево, часто называют структурой B-дерева -
Не бинарное дерево, но B-дерева - который является очень широким деревом
что вы могли видеть в класс, как CS124, класс структур данных.
Но в общем, вам не придется беспокоиться о том, что при использовании интеллектуальное программное обеспечение базы данных.
Вы можете просто сказать, что это, "Индекс этой области, поэтому я могу найти на него более эффективно".
>> Если вы оставите эту выключен и вы попробуйте поискать в любой базе данных, которая живет в Mather,
он превратится в линейный поиск.
И если у вас есть 6000 старшекурсники все живое в некотором доме,
Вы собираетесь выполнить поиск по всей таблице, чтобы найти Matherites,
а если вы говорите Index, надеемся, это будет что-то близкое к логарифмическому поиск
чтобы найти те виды студентов.
Это просто бесплатная функция включается,
даже если она придет по цене некоторое количество пространства.
Наконец, автоматическое приращение этой области А.И.,
который просто означает, что если это Int и вы не хотите, чтобы заботиться, чтобы увеличить это сами
каждый раз, когда есть новый пользователь, проверить, что
и каждый пользователь, который получает вставлен автоматически получить новый ID.
Давайте нажмите кнопку Сохранить, а теперь давайте придираться к этому дизайну.
Если я иду на Browse, обратите внимание, что оба Майк и мой дом NULL.
Я могу использовать PHPMyAdmin редактировать вручную.
Я могу пойти сюда и введите Mather, а затем нажмите Enter,
и теперь замечаю таблицы разные.
Но заметьте, что я мог бы сделать что-то еще.
ID Дэвида 1, так PHPMyAdmin снова просто средство администрирования;
это не то, что ваши пользователи никогда не увидят.
Так что, если я вместо этого нажмите на вкладку SQL наверху -
и снова, PSET 7 познакомим вас с более из этих запросов -
Я могу вручную запустить SQL структурированного языка запросов команд
UPDATE пользователей SET доме = 'Pfoho' WHERE ID = 1.
Эти SQL запросов, приятно достаточно, довольно читается слева направо.
Обновление таблицы пользователей, установите в поле называют дом Pfoho
где идентификатор пользователя равен 1.
Или я мог бы еще заняться в электронную = 'malan@harvard.edu.
Пока что однозначно идентифицирует меня, что будет работать также.
Но ID, как правило, более высокую производительность, так что давайте делать это.
Давайте нажмите кнопку Перейти. Хорошо, lecture.users не существует. Что моя ошибка?
Что таблице на самом деле называется здесь?
Это называется студентов только потому, что это то, что мы сделали здесь в верхнем левом углу.
Это называется студентов, а не пользователей. Таким образом, нажмите кнопку Перейти сейчас.
1 строка пострадавших. Запрос затрачено 0.01 сек.
Если я нажмите кнопку Обзор, сейчас, сейчас Малан живет в Pfoho.
Так вот другой вкус SQL, но PSET, вы пройдете через немного больше об этом.
>> Там очень глупое решение я уже сделал здесь.
Я бы сказал, что это проектирование баз данных является неэффективной
потому что чем больше людей, которых я добавить в таблицу студентов,
Чем больше нас я начинаю добавив, тем больше я начинаю ТФ добавив,
Мы собираемся начать видеть то, что увольнений в этой таблице?
>> Да. [Студент] видя, что она находится в студенты, мы используем тот же [неразборчиво]
То же самое - Да, точно.
Так что если 400 человек живут в Mather, плюс-минус,
в конце концов эта таблица будет иметь 400 строк, которые говорят "Мазер", "Мазер,"
"Мазер", "Мазер", "Mather».
Мы теряем все эти байты, и есть пара вынос там.
1, есть сумасшедшая случае угол, где, если кто-то платит большие деньги
и переименовывает Mather, теперь мы должны изменить всю нашу таблицу базы данных.
Это не будет происходить часто, хотя Pfoho когда-то называли Северной дом 15 лет назад,
так бывает. Но это еще не все, что убедительно.
Более убедительными, чем угла случае, как у нуждающихся в обновлении данных в объемных
для базы данных, почему вы храните MATHER снова и снова и снова и снова?
Это много символов, 6 символов.
Разве мы не можем сделать еще лучше, чем, особенно для Pforzheimer?
Конечно, мы можем сделать лучше, чем много символов.
Почему бы не связать уникальный идентификатор с каждым домом
и магазин, что для каждого пользователя? Так давайте попробуем это.
Вместо того, чтобы просто использовать студенты стола, отпустил меня до моей лекции базу данных здесь, в верхнем левом углу.
Обратите внимание, здесь он говорит Создать таблицу.
Позвольте мне создать новую таблицу с именем домов.
Количество столбцов будет 2. Enter.
Теперь у меня есть 2 поля.
Я буду называть это имя, и это будет VARCHAR длиной 255,
>> но это довольно произвольно. Позвольте мне сказать это здесь по соглашению.
Так что ставьте ID здесь. Давайте каждый дом уникальным идентификатором.
Давайте каждый дом имени.
Уточним, что идентификатор будет без знака только по соглашению использовать только положительные числа.
Давайте идти вперед и дать этому автоинкрементного поле на данный момент.
И нужно ли нам что-нибудь еще?
Давайте идти вперед и нажмите кнопку Сохранить.
Теперь у меня есть второй таблицы.
Обратите внимание, как в сторону это немного загадочное SQL команды
что вы должны были бы ввести вручную, если не используется административный инструмент, как PHPMyAdmin.
Таким образом, еще одна причина, мы ее используем.
Это удивительно полезны рода педагогически, потому что вы можете щелкнуть по
и выяснить, как работают вещи простым копированием и вставкой, что PhpMyAdmin сделал.
Но команду Создать таблицу что только что было выполнено, и вот мой стол.
Позвольте мне теперь идти вперед и использовать сырые SQL, а не упрощать, нажав на вкладку Вставка.
Позвольте мне сделать INSERT INTO домов,
и я собираюсь сказать, что название дома будет иметь значение 'Mather.
Вот и все. Этот синтаксис является немного более загадочными.
Это имя поля мы хотим вставить.
Это те ценности, которые надо вставить в этих областях. Позвольте мне кнопку Go.
1 строка вставляется взял 0,02 секунды. Позвольте мне теперь нажмите кнопку Обзор.
>> Обратите внимание, если я нажмите кнопку Обзор, есть Mather, идентификатор которого по автоматизации № 1.
Позвольте мне сделать еще один. Позвольте мне перейти в закладку SQL.
INSERT INTO домов. Название дома будет иметь значение Pfoho и так далее.
Go. И я могу продолжать делать это снова и снова, и снова.
Или, если вам скучно использованием PHPMyAdmin, вы можете просто использовать вкладку Вставка
и не придется вводить сырые SQL.
Вы можете просто ударить его быстрее, набрав, например, курьер, Enter
и теперь, если мы нажмите кнопку Обзор, есть курьер с ID 3.
Так это то, что мы подразумеваем под автоинкрементного.
Но теперь мы должны исправить что-то в студенты.
В студентами, что должно тип данных поля доме теперь быть?
Это должно быть целое число, не так ли?
Таким образом, цель здесь, чтобы вынести за скобки, иначе известный как нормализация, таблицы
так что мы не храним информацию избыточно ни в одном из моих таблиц.
И снова путь, которым мы были здесь собирается сказать Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, что очень избыточных
с точки зрения расточительности символов.
Итак, позвольте мне идти вперед и изменить это, нажав структура,
и позвольте мне пойти дальше и проверить у дома поля, нажмите кнопку Изменить
и теперь я собираюсь изменить это, чтобы быть Int.
255 уже не актуально.
Позвольте мне пойти дальше и сказать, что это хорошо, если она по-прежнему NULL. Сохранить.
Теперь таблица студентов был изменен успешно,
и обратите внимание, опять дома Int.
Как в стороне, игнорировать число в скобках, когда дело доходит до целых чисел.
>> Это для старых причинами.
Еще в тот день, когда у вас не было графического интерфейса, вы вместо этого был среду командной строки,
10 и 11 соответственно указано, сколько символов вы должны показать
в окне терминала на самом деле отображения полей.
Это не имеет ничего общего с битовой длины фактического поля, поэтому мы будем просто игнорировать, что в настоящее время.
Теперь я должен идти в эту таблицу.
И если Дэвид живет в Mather, дом не должен быть 0,
, которая является значением по умолчанию Int ближе к NULL.
Он должен жить в доме 1.
Давайте сколь угодно говорить, что Майк живет в Pfoho, поэтому дома номер 2.
Теперь моя таблица выглядит немного более загадочными.
Но рассмотрим эффективность.
Я теперь использует только 32 бита для идентификации дом,
что означает, что только 1 канонического определения моего дома Mather и Pfoho
и это в таблице домов.
Так что, если я хочу сейчас вернуться этих таблиц, подумайте вот о чем.
Вот у меня есть мои ученики стол, а на правой стороне есть эти цифры, 1 и 2.
1, Mather, 2, Pfoho.
У нас есть те же числа в этой другой таблице, которая называется домов,
1 и 2 и 3 для тех, 3 дома.
То, что мы сейчас хотим сделать, это иметь возможность в коде PHP и SQL,
к виду воссоединиться с этими таблицами, где, если они являются студентами и эти дома,
Мы хотим, чтобы как-то объединить их таким образом, что 1 линии с 1,
2 линии с 2, так что мы можем выяснить, где Давид
и где Майк и где все еще живет.
Для этого мы можем выполнить SQL запрос вроде следующего.
SELECT * FROM студентов присоединиться домов ON -
А теперь, какие поля мы хотим вступить на?
Так students.house = houses.id.
>> Немного загадочно, но эта часть буквально означает создать новую временную таблицу
вот и результат присоединения студентов и домов.
А как вы хотите совместить кончиками пальцев здесь?
Набор студентов доме поля равна домов поля ID.
И если я сейчас нажмите кнопку Перейти, я вернусь именно то, что я надеялся.
Давид в Mather, Майк находится в Pfoho, и я также увидеть уникальные идентификаторы.
Но дело в том, теперь у меня есть полная таблица.
И так вынос здесь PSET 7 или действительно для окончательного проекта:
Если вы обнаружите, что вы хранения любой информации избыточно,
будь то дом, может быть, это город, штат и почтовый
ZIP, где, как правило, но не всегда может быть использован в качестве уникального идентификатора,
придется ехать через упражнения мысленно, а затем что-то вроде PHPMyAdmin
факторинга, что общие данные, так как особенно ваш сайт становится более хорошо использовать
и более популярными, это, как вы убедитесь, что все супер быстрый,
путем предоставления базы данных, как многие намеки на уникальность насколько это возможно.
Это было много.
Есть вопросы? Хорошо. Давайте 5-минутный перерыв там и перегруппироваться.
Хорошо.
Ниже приведен пример, который был использован несколько лет назад, когда я взял CS161,
которая является операционных систем класса в колледже
которая известна тем, что удивительно, но сумасшедший объем работы,
и он сосредоточен на самом деле на некоторых из низкого уровня проблем, возникающих в операционные системы
и даже в мире баз данных.
>> История, которую рассказал мой профессор, Марго Зельцер, что год был следующим.
Предположим, что у вас есть маленький холодильник общежития для вас и ваших соседей
и оба вы действительно любите молоко.
Итак, вы приходите домой из класса в один прекрасный день, ваш сосед по комнате еще не было,
Вы открываете холодильник, и вы понимаете: "О, черт, мы из молока".
Таким образом, вы закрываете холодильник, вы идете по улице, чтобы CVS
и получить в более длинных очередях, чтобы купить молока в CVS.
Между тем, ваш сосед приходит домой из своего класса,
входит в комнату, открывает холодильник действительно желающих молока,
открывает холодильник и "Черт, нет молока".
Таким образом, он или она закрывает холодильник, выходит за дверь, и идет в ABP
или где-то кроме CVS, где вы не собираетесь сталкиваются друг с другом
пойти получить немного молока.
Конечно, спустя несколько минут, вы оба вернетесь домой
и теперь у вас есть в два раза больше молока, как вы на самом деле хотели.
И, молоко, теперь он собирается идти плохо, потому что вы любите молоко
но вы действительно не нравится молоко, так что теперь у вас слишком много молока, поэтому это будет портиться.
Это ужасно, ужасно ситуации.
Что могло бы решить эту затруднительном положении, если вы были первым домом соседа по комнате? Да.
[Студент] Вы должны были оставить записку. [Смех]
Хорошо. Вы должны были оставить записку.
Вы должны были положить Пост-это к сведению или, как говорят, "Унесенные для молока",
и тогда ваш сосед по комнате концептуально была бы заблокирована на самом деле делать это.
Или вы могли бы пойти на 1 шаг дальше.
Вы могли буквально запереть холодильник с какой-то замок,
и теперь ваш сосед по комнате в буквальном смысле будет заблокирована из холодильника.
Если обобщить вернуться к программированию,
Вы можете подумать, из холодильника как некая переменная или структура,
своего рода контейнер для информации.
Проблема принципиально здесь то, что вы оба были разрешены для проверки
или читать состояние этой структуры данных,
но вы рассматривали его в разные времена и еще вы оба приняли решение
в зависимости от состояния мира в эти различные моменты времени.
Так, если бы вы заперты в холодильнике, вы бы по крайней мере, избежать ваш сосед по комнате
от того, были в состоянии проверить состояние мира,
чтобы он или она не мог бы сделать то же решение.
Так баз данных, как выясняется, есть эта проблема постоянно.
>> Давайте посмотрим, если мы можем построить сценарий.
Предположим, что вы вроде плохого парня, и вы идете в банк Америки
или одной из других мест на площади, которые имеют сторону пару банкоматов с другом,
и каким-то образом вы поняли, как дублировать банкомат карту - не все так сложно.
Это всего лишь магнитной полосой.
И поэтому то, что вы хотите, чтобы попытаться сделать, это играть в эту игру
которому вы положили 1 карта на 1 машину, еще одну карту на другую машину,
и вы, по сути хотите, чтобы попытаться снять деньги одновременно,
потому что представьте себе, что история идет следующим образом.
Машина слева берет вашу карту и PIN-код,
и тогда вы говорите: «Дайте мне 100 долларов».
Банкомат запрограммирован сначала сделать выбор в его базе данных или эквивалент -
все, что база данных он использует - видеть ничего этого пользователя есть по меньшей мере $ 100 в свой аккаунт?
Если так, то выплюнуть $ 100 и $ 100 вычесть из своего баланса.
Но, конечно, если есть несколько машин здесь или несколько способов проверки
состояние этого мира, банковское хранилище, чтобы посмотреть, сколько у вас денег,
Предположим, что просто случайно машину на левой и правой
как задать этот вопрос примерно в то же момент времени.
>> И это, безусловно, может случиться. Банкоматы компьютеров в эти дни.
Таким образом, если машина слева говорит: "Да, у вас есть по крайней мере $ 100",
Тем временем машина на правом говорит: "Да, у вас есть по крайней мере $ 100",
Затем оба действовать до конца своих программах и на самом деле выплюнуть $ 100
и говорят: "Раньше у вас была $ 200."
"Позвольте мне обновить переменную теперь будет $ 100 оставшихся в счет".
Но если оба из них проверили свои счета и обнаружил, что это $ 200
и оба из них, то делать математику и говорят 200 - 100,
Машины потенциально плевать два 100-долларовых купюр в каждой машине,
но они обновляются только ваша сумма баланса составит $ 100.
Другими словами, вы взяли на $ 200, но потому, что они осмотрели состояние мира
одновременно, а затем было принято решение на основе этого значения,
они не могли бы сделать математику в конечном итоге правильно.
Таким образом, в банке ситуацию слишком вы действительно хотите иметь какие-то блокировки
так что, как только вы проверили состояние некоторых переменных
что действительно важно, как ваш баланс счета,
Не позволяйте никому принимать решения, основываясь на этом, пока вы не сделали делают свое дело,
где в этом случае вы банкомат слева.
Блокировка всех остальных из.
Вы действительно можете достичь этого эффекта в несколько различных способов.
>> Самый простой способ в MySQL является линия SQL, что мы дали вам
в спецификации проблема набора, который выглядит так же, как это.
Вставьте в таблицу - там это называется - идентификатор, символ, и акции, количество акций,
следующих значений, например.
Если вы еще не читали спецификацию не менее, это пример, связанный, как вы идете о
покупку 10 акций этой запас пенни на пост президента Skroob,
которых идентификатор пользователя, случается, число 7?
Это говорит INSERT INTO таблица следующий идентификатор, символ, и количеством акций
7, "DVN.V, и 10.
Но - но, но, но - вторая линия является важным.
ON DUPLICATE KEY UPDATE = акции акции + VALUES (акций).
Таким образом, совершенно загадочным перспективных на первый взгляд.
Но дело в том, что этот запрос SQL, даже если она переносится на 2 линии,
составляет 1 длинный запрос, это означает, что это атомное
В том смысле, что этот запрос будет либо выполнены все вместе или нет вообще.
И по определению MySQL, то, как они реализуются этого запроса.
Это, по определению, в руководстве гарантированно выполнять все сразу или не на всех.
Мотивацией для этого состоит в следующем.
Если в этом случае вы пытаетесь купить 10 акций,
это вроде та же история, молока, это вроде та же история, банкомат.
>> Если вы сделали ошибку, не используя следующий синтаксис
но вместо выбора из базы данных, чтобы увидеть, сколько акций этой запас пенни
Президент же Skroob есть, и думаю, что он имеет 10 акций,
, а затем некоторые долю секунды позже вы выполните UPDATE заявление,
что является еще одним заявлением в SQL, который говорит пойти дальше и добавить еще 10 акций
в его нынешней 10, так что в идеале общая 20,
Проблема в том, что в базе данных современных систем и потому, что в современных компьютерах
у вас есть несколько процессоров, нескольких ядер -
Другими словами, компьютер может в буквальном смысле делать несколько вещей одновременно -
нет никакой гарантии, что ваш SELECT, UPDATE и ваша в этом случае
будут происходить спиной к спине.
Так плохой сценарий был бы вы ВЫБОР
чтобы узнать, сколько акций этого запаса пенни же Skroob есть,
а потом просто случайно другую базу данных запрос будет выполнен -
может быть, его Skroob в другом окне браузера пытается купить 10 акций
в другом окне в целом, так же, как ATM -
и предположим, что другой запрос попадает между SELECT, и UPDATE.
Это может быть так, что Skroob сейчас теряет некоторое количество акций
потому что другой процесс проверки состояния его мир,
или он получает больше акций, чем должен был бы.
Мы не будем вдаваться в особенности то, что эти конкретные сюжетные линии будет,
но дело в том, если вы должны проверить переменные значения, а затем принять решение,
если есть риск, что кто-то другой делает что-то среднее между этими 2 заявления,
как может случиться в многопроцессорных системах, в многоядерных системах,
компьютеры с возможностью сделать несколько вещей одновременно, плохие вещи могут случиться
счетах банков, как их списания неправильно, покупая вдвое больше молока,
или в данном случае неправильное количество акций.
Но есть и более простой способ думать об этом.
>> Оказывается, что SQL также поддерживает, если вы настроить таблицу правильно,
то, что называется сделок, которые я бы сказал, на самом деле даже проще для понимания
чем это, но это не 1-лайнера, так что это на самом деле немного сложнее.
Существует буквально с заявлением, в SQL называется START TRANSACTION.
Так же, как есть SELECT, UPDATE, INSERT, DELETE, и присоединиться и куча других,
Есть ключевые слова, как начать транзакцию.
И что вы тогда делаете в контексте PSET 7 -
Вы не должны делать это для PSET 7; он явно отрицал, как не надо,
но для окончательных проектов это может быть полезно -
если вы звоните запрос START TRANSACTION, а затем другой запрос
, а затем еще один запрос, а затем еще, еще, и еще,
эти запросы фактически не будет выполняться до вызова SQL заявление COMMIT,
в этот момент, будь то 2 заявления или 20 заявлений, все они будут выполнены сразу,
это означает, никто не может случайно купить слишком много молока или дебетовой слишком много денег
или купить слишком много акций, потому что все ваши запросы будет выполнять
спиной к спине, чтобы спина к спине.
И это очень важно, особенно когда вы делаете что-то вроде этого.
Это произвольный пример, который говорит давайте обновим банковского счета
путем установления баланса равна баланса - $ 1000, где номер счета 2.
И тогда второй оператор теперь давайте депозит, $ 1000
в чужой банковский счет, счет которого номер 1.
>> Другими словами, это идеальный пример того, где вы хотите, чтобы убедиться,
что оба эти заявления произойти или не на всех
поскольку в противном случае клиент собирается ввернут
и вы собираетесь забрать свои деньги, а не внести его в другом месте,
или банк будет ввернут, где вы собираетесь внести деньги
но на самом деле не вычесть его из учетной записи пользователя.
Итак, вы хотите, чтобы они оба выполнять вместе.
Таким образом входит в мир операций.
Так что это что-то иметь в задней части вашего ума,
не столько для целей только окончательный проект,
Но если вы хотите принять ваш окончательный проект где-то,
если вы хотите, чтобы запустить некоторые компании вокруг него,
если вы хотите решить проблему некоторые студенческие группы на территории кампуса
и на самом деле есть живой, активный сайт, это своего рода тонкие ошибки, которые могут возникнуть
если вы не совсем продумать, что может случиться, если 2 человека
пытаются получить доступ к вашему сайту в буквальном и тот же момент времени,
которой их запросы могли бы получить переплетаются между собой.
>> Готовы к некоторым JavaScript, тизер его?
Это наш последний языка в течение семестра. Хорошо.
К счастью, JavaScript выглядит очень, очень, очень похожие на 2-х языках, C и PHP,
мы сделали до сих пор.
Там нет JavaScript в PSET 7, но это невероятно полезный инструмент
когда дело доходит до веб-проектов или окончательных действительно только веб-программирования в целом.
Таким образом, краткий обзор того, что называется DOM.
Вот это супер простую веб-страницу, которая действительно просто говорит Здравствуй, мир!
как в названии и в теле.
Как отступ было предположить некоторое время,
действительно существует иерархия веб-страниц.
Я мог нарисовать этот же фрагмент HTML в виде дерева,
вспоминая наши обсуждения структур данных в C, следующим образом.
У меня есть некоторые специальные корневой узел называется узлом документа,
и мы увидим, аналог этого в наличие в одну минуту.
Первым ребенком и единственным сыном, что в данном случае является HTML тегов.
Там нет прямого отображения типа документа.
Это особая вещь, поэтому мы должны просто игнорировать его, когда дело доходит до этого DOM,
эта объектная модель документов дерево.
Обратите внимание, что тег HTML, который я произвольно изображены в виде прямоугольника,
имеет 2 детей: голова и тело.
>> Те, которые так же рисуется как прямоугольники.
Это имеет смысл наглядно, что голова слева от тела.
Подразумевается, что голова идет первым в дерево.
Так что там на самом деле заказ на дерево, когда вы рисуете это так,
хотя формы и еще много чего являются произвольными.
Между тем руководитель имеет одного ребенка, называют названия,
и название на самом деле имеет свой собственный ребенок, который является "привет, мир",
которые я намеренно обратил как овал здесь, чтобы сделать это немного отличается от прямоугольника.
Эти прямоугольники элементов, в то время как привет, мир действительно текстового узла.
Так что это узел в дереве, но это другой тип узла
так что я обратил его произвольно по-разному.
Точно так же ничего теле есть ребенок называется Hello, World, а также,
так другой узел даже если они случайно и тот же текст,
но я нарисовал его, используя ту же форму. Так кого это волнует?
Ну, что хорошее о HTML является то, что у него есть эта иерархическая природа.
И что приятно о JavaScript и, в частности библиотек, которые находятся в свободном доступе
и популярной, как jQuery, вы можете перемещаться по структуре дерева так удивительно легко.
Любой из материала, который мы сделали в C с указателями и перемещения деревьев и рекурсии на узлах
левая ребенка права ребенка, вдруг мы можем сортировать считать само собой разумеющимся
как удивительно просветительской если совсем не расстраивает
но далеко не эффективный способ идти о программировании.
И так с этим высокий уровень языки, как JavaScript
мы сможем перемещаться по дереву гораздо более интуитивно.
>> И действительно, синтаксис будет хорошо знакомы.
Если вы никогда не видели прежде JavaScript, это действительно хорошая ссылка
от Mozilla люди, люди, которые делают Firefox,
так что не стесняйтесь просматривать, что в вашем удобстве.
Что вы найдете - и эти слайды идентичны тем, что мы использовали другой день -
Аналогично, основные ушел.
Поэтому, когда вы пишете программу в JavaScript, нет главной функции.
Вы просто начать писать код.
Но ключевое различие между JavaScript и C и PHP
является то, что в то время как C и PHP до сих пор были выполнены на стороне сервера
на устройство в этом случае или в более общем-сервером,
Наличие по конструкции обычно выполняется с помощью браузера.
Другими словами, вы можете написать код JavaScript, когда мы собираемся,
на сервере в прибор, но включить ее в число ваших HTML, среди ваших CSS,
Среди ваших GIF-и PNG-ваши и вашего изображения в формате JPEG
так что, когда пользователь посещает веб-страницу, если вы используете JavaScript,
, что код JavaScript приходит от сервера к браузеру,
и это браузер, который фактически выполняет его.
Так что это имеет значимые последствия даже для интеллектуальной собственности.
Это глупо даже думать о защите вашего IP когда дело доходит до кода JavaScript
потому что по своей природе языка он запускается на выполнение обычно стороне браузера.
>> Вы можете скрыть его, что означает, что вы можете сделать его с ума, и уродливое
, без пробелов, ужасные имена переменных, чтобы сделать это тяжелее для людей, чтобы украсть ваш IP,
но главное в том, что он выполнен стороне браузера.
Даже если, как в сторону JavaScript может быть использован на стороне сервера,
Наиболее распространенный случай использования прямо сейчас все еще находится на браузер.
А вот как он выглядит. Вот если-иначе, если-иначе строится так же, как C, так же, как PHP.
Вот это логическое выражение, когда вы "или" 2 вещи вместе.
Вот когда вы "и" 2 вещи вместе.
Вот переключатель заявление, которое похоже на PHP
в том, что вы можете переключаться на разные типы ценностей.
Петли Аналогично, для петель здесь, которые структурированы одинаково к тому, что мы видели раньше.
В то время как петли, у нас есть делать во время циклов.
Переменные, очень немного другая.
Вы объявлять переменные как вы делаете в PHP и C,
но так же является наличие слабо типизированными.
Вы не указали Int или с плавающей точкой или строка или что-нибудь подобное, что обычно.
Вы можете задать обл.
Вам не нужно указывать переменную, но это имеет значение, если вы не делаете.
Обычно, если вы опустите Вар, вы случайно создать глобальную переменную, а не местные.
Итак, позвольте мне предложить, что вы почти всегда только сказать, вар, а затем имя переменной.
Это не тип, это просто VAR для переменной.
Это было бы, например, будь то 123 или "привет, мир".
Массивы присутствуют и синтаксически похожи на PHP.
Я скажу VAR номера и затем использовать квадратные скобки снова объявить переменную
, тип которого является массив, который имеет именно эти номера в нем через запятую.
И тогда, наконец, это единственное, что действительно выглядит иначе.
Напомним, что в PHP, мы бы реализован ассоциативный массив для студентов
как Zamyla, что может выглядеть следующим образом, где переменная называется студента.
Квадратные скобки означают здесь идет массива.
>> Тот факт, что я не использую числовые индексы, но строки - ID, дома, и название -
означает, что это ассоциативный массив,
и эти стрелки с знак равенства и угловой кронштейн
означает, что ключ "ID", значение равно 1;
ключ "дом", значение Winthrop дома;
ключ "имя", значение Zamyla Чан.
Таким образом, есть 3 ключа внутри этого ассоциативный массив, каждый из которых имеет свое значение.
Мы видели, что в PSET 7, или вы скоро, в наличие же идею,
но это будет выглядеть следующим образом.
Так VAR студента - не знак доллара и никакого упоминания типа до сих пор, но вар -
равных, а затем открыть фигурные скобки, потому что в JavaScript, когда у вас пар ключ-значение,
вы на самом деле используют так называемый объект.
И те из вас, кто займет АСУ ТП и т.п. могли бы вспомнить объектов Java
или похожие языки.
JavaScript не является Java, в первую очередь.
Это было преднамеренное лет назад дизайнерское решение, чтобы сбить что-то другое, что было популярно,
его имя, даже если оно не имеет принципиального отношения к себе Яву.
JavaScript есть объекты, а их создании путем обозначения фигурной скобкой.
Объекты в JavaScript являются в значительной степени эквивалентно ассоциативные массивы в PHP
когда дело доходит до хранения данных внутри них.
>> Но еще более мощно в JavaScript вы можете связать очень легко функциями
Внутри объекта, и, хотя вы можете сделать это на других языках,
это довольно распространенная парадигма, как мы увидим.
Короче говоря, этот объект представляет студента, который особенно Zamyla,
и это похоже концептуально, просто синтаксически отличается от этого.
Давайте реально использовать JavaScript в файл.
Оказывается, есть тег.
Мы видели стиле теги и мы видели другие HTML теги.
Тег на самом деле будет содержать некоторый код JavaScript.
Отпустите меня в прибор, где у нас есть некоторые исходные коды готовых.
Я не отправил его еще на сайте, но я сделаю это после занятий.
Давайте откроем до этого, blink.html.
Еще в 1990-х годах, не было буквально HTML теги называют мгновение тегов,
и это была одна из самых чудесно злоупотреблять тегами в интернете
, в котором вы хотите посетить некоторые стиле 1990-х годах веб-страницу и начать видеть текст мигающим вам, как это,
Результаты маркиза тег, который собирается текста, как это.
Один из немногих случаев, когда мир фактически согласился на веб-стандарт,
все через борт убил мгновение теги несколько лет назад.
Но мы можем воскресить его наличие в качестве демонстрации силы у вас есть
когда вы можете написать программу, внутри веб-страницы.
Прежде всего, давайте пропустить новый материал и сосредоточиться только на старых.
>> Вот старые вещи в этом примере.
У меня есть теги HTML, глава теги и заголовок.
Тогда у меня есть тело тега здесь дел, которые Напомним, это просто прямоугольная разделение страницы
что я дал уникальный идентификатор произвольно "приветствие", чтобы,
именно так, у меня есть способ однозначно ссылаясь на него, что есть очень простой текст:
Здравствуй, мир.
Теперь позвольте мне прокрутку вверх к вершине этот файл и посмотреть, что нового.
Первое, что нового пополнения является тег,
и внутри уведомление теги сценария я объявил функцию.
Чтобы объявить функцию в JavaScript, очень похож на PHP,
Вы буквально написать функцию, то имя функции, скобки,
и, возможно, некоторые аргументы, если он принимает любые.
Тогда у меня есть фигурные скобки, как обычно, и теперь у нас есть немного нового кода
но давайте посмотрим, что это означает.
Так VAR DIV, это просто означает, дайте мне переменные называемых дел.
Я мог бы назвать ее Foo, но я хотел, чтобы она вызывалась дел
по причинам, которые будут ясны в секунду.
Тогда получается в JavaScript - и это JavaScript код, внедренный в веб-страницы -
есть специальная глобальная переменная рода называется документ.
Наличие в действительности является объектно-ориентированным языком.
Мы не будем вдаваться в подробности в 50 о том, что это означает, что,
но теперь знаю, что объект является в значительной степени как структуры.
Как мы видели, путь назад, когда в одной из первых проблемой устанавливает
где мы положили много информации в структуре,
Аналогичным является документом специальной структуры, которая поставляется с браузером,
поставляется с любой веб-страницы. Это не то, что я создал.
Внутри этой структуры документа, хотя, вы должны не только данные
но вы также должны функций.
>> И в любое время у вас есть функция внутри структуры, внутри объекта,
это называется методом. Но это то же самое.
Метод является функцией, которая просто так случается, внутри что-то другое.
Таким образом, это означает, что специальная глобальная переменная документов
есть функция, называемая GetElementById, которая буквально делает это.
Это поможет вам элемент из DOM, Document Object Model дерева,
идентификатор которого в этом случае приветствие.
Другими словами, все это время мы потратили на структуры данных, в игру вступает здесь.
Эта картина DOM, что у нас было минуту назад,
даже если страница выглядит немного иначе, если бы я имел дел в этой картине,
document.getElementById, что вернется ко мне будет фактически указатель
в прямоугольник в дереве, ссылка на прямоугольник в дереве.
Так вот что это означает на самом деле позвонить по одному из этих функций.
В этом случае опять же это див. Это не тело или заголовок.
Итак, давайте посмотрим, что я потом делать с этим дел теперь, что у меня внутри этой переменной дел.
Оказывается, с JavaScript у вас есть возможность настроить CSS вашей страницы динамически.
До сих пор все CSS мы сделали, хотя и ограниченную, в атрибуты стиля,
или где еще были положить CSS?
Я отчасти испортил тот. В стиле тегов в верхней части файла.
Или третье место было в?
>> Внешний файл, что-то. CSS.
Так что те 3 места мы сделали CSS до сих пор,
но загвоздка в том, что мы жестко все это.
Вы решили, как вы нырнули в PSET 7, мы решили, прежде чем читать лекции, что наш CSS будет.
Но если вы хотите изменить свой CSS, вы можете сделать это
когда у вас есть фактические языка программирования.
CSS, HTML - не языки программирования. Наличие есть.
Вот и получается, что как только у вас есть один из тех прямоугольники из дерева
называется DOM, она сама некоторым данным внутри него.
Так дел, что я просто схватила из дерева имеет то, что мы называем собственности внутри него
называется стиль, и стиль собственности само свойство видимости.
Я знаю, что это только глядя руководство пользователя по CSS.
Оказывается, есть свойство видимости CSS, что делает то, что он говорит.
Это делает что-то видимое или нет, видимым или нет.
А как вы это сделаете это.
Я прошу программно, если видимость этого DIV скрыто,
то, что я могу изменить его? Visible.
Иначе, если видимость этой страницы не скрывается, по логике вещей я сделать его скрытым.
Я понятия не имею, почему это видимые и скрытые, а не видимого и невидимого.
Это было плохое решение дизайна по пути.
Но это действительно противоположностей в CSS: видимые и скрытые.
Все это есть, это означает изменение CSS моего файла и выключается, и выключается
для этого конкретного дел.
Но опять же, это функция называется мигать. Когда мгновение функция называется?
Оказывается, что есть другой специальной глобальной переменной называется окном,
близки по духу документа, но в то время как документ относится к вашей веб-странице,
как дерево DOM, HTML вы послали с сервера,
окна относится к хром вокруг него, в адресной строке, в строке заголовка,
и все, что вещи вокруг вашей веб-странице.
>> И получается, что объект окна имеет специальное внутри функции, называемой setInterval
, что делает то, что он говорит.
Он будет устанавливать интервал - в этом случае каждые 500 миллисекунд -
и сделать предположение, что он собирается делать каждые 500 миллисекунд?
Это будет выполнять эту функцию мигания.
И что приятно здесь является то, что мы могли бы сделать это в C, хотя мы никогда не делали.
C действительно есть то, что называется указателей на функции, где вы можете передать функции по
в качестве аргументов.
Точно так же в наличие Вы можете передать имя функции в другую функцию.
И обратите внимание, что я делаю. Я не делаю этого.
Если я ставлю скобки после мигать, это означает, звоните мгновение функции.
Если бы я их опустить, это означает, что здесь мгновение функции
так что setInterval можно назвать каждые 500 миллисекунд.
Таким образом, конечный результат, зверским, хотя это, что если я иду в локальный и перейти к blink.html,
Теперь у меня это происходит снова и снова.
А если я на самом деле осмотр элементов, давайте посмотрим, если мы можем это увидеть.
Позвольте мне Осмотрите элемент, позвольте мне просто прокрутите вниз немного,
Позвольте мне выбрать элементы здесь, и обратите внимание на DOM внутри инспектор Chrome.
Это буквально меняется и обратно каждые 500 миллисекунд.
Если мы вернемся к нашему другу Нейта,
Если вы когда-нибудь задумывались, как это работает, подобная идея с интервалом,
Nate но на самом деле делает очень эффективно использование цвета в данном конкретном случае.
Так что еще мы можем реально сделать с этим?
Давайте откроем еще один пример и попробовать что-то
это программно даже более полезна, чем делать вещи мигать.
Отпустите меня в нашем каталоге формы сегодня и идем в form0.
Это был самый уродливый возможной форме, что я мог придумать,
и позвольте мне показать вам, как это выглядит в браузере.
>> Позвольте мне перейти в локальный / формы, и это form0.
Это супер уродливые формы HTML, который имеет несколько полей для электронной почты, паролей,
пароль, а затем немного флажок, чтобы согласиться на некоторые условия.
Загвоздка в том, если я посещаю эту форму, и я не хочу, чтобы дать вам мой адрес электронной почты,
Я не хочу, чтобы согласиться с условиями, может быть, я могу нажать Регистрация
и это позволяет мне через так или иначе.
Это происходит представить глупые файле PHP называется dump.php.
Все это делает печать содержимого $ _GET только для диагностических целей.
Это то, что было представлено пользователю только сейчас.
Но предположим, что мы на самом деле хотим проверить форму представления пользователей.
Отпустите меня в версии 1.
Это form1.html. Это выглядит эстетично так же плохо, но обратите внимание, как это фантазии.
Если я нажимаю Регистрация без сотрудничества, я получаю крикнул.
"Вы должны указать свой адрес электронной почты".
Хорошо. Итак, позвольте мне попробовать. Так malan@harvard.edu. Мне не нужен пароль.
Зарегистрируйтесь. "Вы должны ввести пароль". Хорошо.
Так что я буду предоставлять пароль малиновый. Зарегистрируйтесь.
"Пароли не совпадают". Я должен теперь ввести в малиновых здесь.
Я случайно проверил это. Зарегистрируйтесь.
"Вы должны согласиться с условиями". Хорошо. Согласитесь там. Зарегистрируйтесь.
И теперь он показывает мне диагностические там.
>> Так что же случилось?
У нас была эта возможность проверки формы представления.
В самом деле, если вы сделали погружение в PSET 7, есть функция извинения
, что делает его довольно легко кричать на пользователей с сообщением на экране.
Я использую несколько иной механизм, функция предупреждения,
который не является функция, которая улыбнулась, поскольку она делает очень некрасиво сообщения пользователя.
Но давайте посмотрим, что я здесь делаю.
Это form1.html, и заметил, что у меня есть некоторые довольно знакомый синтаксис:
тело тега, тег формы, действие атрибута, метода атрибут.
Но заметьте, я дал моей форме уникальный идентификатор для удобства.
Затем я получил письмо поле, тип которого является текст,
Пароль поле, тип которого является пароль, подтверждение поле, тип которого является паролем,
, а затем флажок, имя которого соглашение сюда, типа флажок.
А то у меня есть кнопка отправки.
Но обратите внимание на верхнюю, что еще у меня есть.
Прежде всего, есть другой использованием тега сценария.
Если у вас есть код JavaScript в другой файл, так же, как с CSS вы можете включить его.
И вы делаете это с помощью скрипта источника, а затем заметить, что я уверен, подключение по-видимому
в googleapis.com на очень долгий путь, но чьи названия заканчиваются в jquery.min
для минимума. JS.
JQuery это супер популярная библиотека для JavaScript, что просто делает JavaScript
Тем более удобной в использовании.
Он фактически стал стандартом де-факто.
Поэтому, несмотря на то, что вы собираетесь смотреть, не является чистым наличие такового,
это библиотека на вершине JavaScript так же, как CS50 библиотека слоя
на вершине низкоуровневого кода C; реальность такова, почти все в интернете использует его.
Так что это не обучение колеса. Это просто лучшая практика в эти дни.
Теперь обратите внимание ниже, чем мой собственный тег сценария, и заметил, что я сделал здесь.
Оказывается, что JQuery делает что-то немного фантазии.
JavaScript имеет знак доллара, но они не имеют смысла.
>> Они похожи на буквы А или B или C.
JQuery просто приняла Конвенцию или рода претендовали на то,
, что $ будет их специальным символом.
Поэтому, как только вы загрузите этот файл глобальных наличие здесь с тег,
Вы имеете доступ к специальной глобальной переменной, которая называется $.
Это более правильно называть JQuery, но это не выглядит почти так же сексуально, как $.
Но $ не имеет особого смысла. В PHP это имело особый смысл.
Вы должны были иметь его перед переменной.
Это просто сексуальная вещь, которую они взяли на себя.
Что здесь происходит?
Обратите внимание, что я передаю в JQuery функции моя глобальная переменная документов
а потом я звоню. готов.
Что JQuery по существу делает это позволяет делать некоторые вещи ванили JavaScript
как объект документа, окно объекта,
и если вы передать его в JQuery функции -
и снова, чтобы было ясно, что это функция под названием jQuery -
что она делает, это вернется к вам специальную версию документа
, который имеет больше функциональных возможностей, связанных с ним.
Таким образом, в сырых JavaScript нет готовых функций,
но если вы передаете документ в JQuery функции первого,
он возвращается к вам специальную версию документа объект
, которая имеет более модные функции.
И вот почему людям нравится. Он просто делает вещи проще делать, так как мы собираемся, чтобы видеть.
Итак, что же эта строка кода в виду?
Эта строка кода в данном случае означает, когда документ готов -
Другими словами, как только браузер закончите читать этот файл сверху вниз -
идти вперед и выполнить следующие функции.
Что действительно интересно в JavaScript - PHP и имеет это, а также -
является анонимной функции.
В JavaScript можно объявить функции, которые не имеют имени, но у них есть тело.
Обратите внимание, что здесь происходит.
>> Эта функция называется готовы, и это просто означает, выполните следующие
когда вся веб-страница будет готова, когда все это было прочитано в с сервера.
Что вы хотите сделать? Я хочу, чтобы выполнить кусок кода.
Обратите внимание, что мы не хотим, чтобы выполнить этот код сразу.
Если я пропустил это, это будет означать, немедленно начать выполнение этих строк кода.
Но то, что я говорю, нет, нет, нет, обернуть это в анонимной функции, как это
средства не выполнить его еще, называют его в конце концов.
Мы видели эту минуту назад в нашем предыдущем примере формы.
Что же функцию мы называем в конце концов, 500 миллисекунд позже? Blink.
Так же идею.
Опять же, даже если это выглядит немного странно, просто взять сейчас на вере
объявить, что анонимная функция, которая вызывается в конце концов,
Вы просто написать функцию () {
Так что код мы будем выполнять в конце концов? Следующее.
Это тоже выглядит немного нового, но это означает вот JQuery функции,
и это теперь является сокращенным.
Этот фрагмент HTML в нижней части экрана, конечно, имеет некоторое представление дерева.
Это не в этом. Эта страница является более интересным, чем это привет, мир пример.
Но есть некоторые дерева, который соответствует этому HTML.
Было бы боль в шее, чтобы реализовать какую-то рекурсивную функцию
начать с корневого узла, а затем найти узел с идентификатором регистрации.
Так что JQuery делает супер просто для нас является в прямом смысле этого.
Иди и принеси мне все, что дел или любой форме, независимо HTML элемент
имеет идентификатор регистрации.
Это эквивалентно document.getElementById ('регистрация').
>> Почему такие люди, как JQuery?
Потому что это короче, чтобы напечатать. Но это все, что есть. Это та же идея.
Дайте мне тег с идентификатором регистрации.
И когда это тег, который бывает форме, представляется,
идти вперед и выполнить этот код.
Итак, давайте один взгляд на то, как сейчас мы делаем форму проверки.
Синтаксис правда загадочные на первый, но то, что происходит?
Если эта строка кода, правда, я собираюсь кричать на пользователя предоставить свой адрес электронной почты.
Так что же это строки кода?
$ Означает, JQuery. Теперь заметить это.
Это вроде как CSS.
Если вы нырнули в CSS все же, вы будете знать, что это означает, что элемент с идентификатором регистрации.
Пространства означает найти ребенка или потомок регистрации, чье имя входа.
И тогда эта вещь в квадратных скобках немного фильтр.
И даже если это выглядит загадочно, это просто означает, перейдите в форму с идентификатором регистрации,
перейти к внутренней входной элемент, что, чье имя электронной почты,
, а затем получить его значение, независимо от его значения, случается, -
ASDF, если это все, что я набрал malan@harvard.edu или, если это то, что я набрал.
Таким образом, если значение электронную почту формы поля == ничего, кричать на пользователя.
Иначе, если значение в поле пароля == ничего, кричать на пользователя.
>> Иначе, если значение в поле пароля не равно значению подтверждения поле,
который был другом элементе формы, кричать на пользователя.
И тогда, наконец, - и этот тоже имеет некоторые новые синтаксис своих,
но как только вы видели его, это хоть немного более разумным -
еще, если форма с идентификатором регистрации имеет входной элемент, имя которого соглашение
и проверяем, идти вперед и кричать на пользователя.
Так что я полностью признаю, что это полностью подавляющим на первый взгляд.
Это много нового синтаксиса. Но все эти JQuery следующие виды узоров.
И если честно, я даже не знаю, что это существовало лишь несколько минут назад.
Я Googled, "Как вам проверить, если установлен флажок в JQuery?"
и это синтаксис, потому что есть различные способы сделать это
с фактическим сырой код JavaScript.
Так как самые первые страницы Проблема Set 7 подчеркивается,
PSET 7 очень много упражнений в себя загрузку
где мы ввели, мы надеемся, концептуальная основа, с которой по решению PSET.
>> Но, как это часто бывает с веб-дизайном, это до вас действительно копаться,
включать фрагменты кода и примеры из Интернета, пока вы привести их
в соответствии с условиями в тот первый лист,
и понимают, что изучение HTML, CSS, JavaScript и даже SQL
на самом деле предназначены для этого в домашних упражнений, как мы приступим к принятию этих учебных колеса прочь.
И понимаю, тоже есть так много других вещей, которые вы можете сделать с браузером.
Внутри большинства из этих элементов есть и другие вещи называются обработчиками событий.
И хотя мы просто смотрели на них называются OnSubmit и onready,
Вы можете делать вещи, как OnKeyDown, OnKeyUp,
нравится, когда пользователь прикасается к ключевым, вы можете слушать, за что и вверх.
Gmail имеет клавиатуру.
Как Google осуществления сочетания клавиш, как C для сочиняете?
Они слушают для событий, как они называются, как OnKeyPress или OnKeyUp и OnKeyDown.
Если вы когда-либо парил курсор мыши на некоторых меню
и вдруг, вуаля, появится меню или графический изменения цвета,
как они это делают?
Вместо того, чтобы прослушивать onready или OnSubmit, вы слушаете для OnMouseOver или onmouseout.
>> Короче говоря, с этим очень простые основы, которые мы начали царапать поверхность сегодня
и мы будем нырять в дальнейшем в среду, у вас есть, в большей степени,
власти для реализации вещи, которые вы уже знакомы.
Так что давайте заканчивается, и мы будем продолжать эту среду.
>> [CS50.TV]