1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Неделя 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Малан - Гарвардский университет] 3 00:00:04,740 --> 00:00:07,170 [Это CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Хорошо. Добро пожаловать обратно. Это CS50, и это начало недели 9. 5 00:00:12,350 --> 00:00:16,600 Сегодня мы сосредоточены, в частности, на дизайн, больше не в контексте C 6 00:00:16,600 --> 00:00:20,010 но в контексте PHP и немного SQL и немного JavaScript, 7 00:00:20,010 --> 00:00:23,730 особенно к концу и PSET 7, а также окончательный проект. 8 00:00:23,730 --> 00:00:26,310 В самом деле, если вы находитесь в данный момент ваш окончательный проект 9 00:00:26,310 --> 00:00:30,100 , где предположительно на час или около того назад вы по крайней мере, начали давать некоторые мысли 10 00:00:30,100 --> 00:00:33,730 на ваш окончательный проект, и вы думаете вы хотели бы сотрудничать с 1 или 2 одноклассниками, 11 00:00:33,730 --> 00:00:36,150 если у вас возникли проблемы с подключением с указанной одноклассников, 12 00:00:36,150 --> 00:00:40,570 не стесняйтесь заполнить форму на cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Он просто спрашивает, кто ты, какой проект вы думаете о том, 14 00:00:42,880 --> 00:00:44,870 где вы живете только по техническим причинам. 15 00:00:44,870 --> 00:00:49,510 И потом, если вы хотите, чтобы держать глаза на течение следующей недели или около того таблицу URL там, 16 00:00:49,510 --> 00:00:53,520 Вы можете увидеть, только для чтения версию Google Doc 17 00:00:53,520 --> 00:00:56,010 , в которой мы собираем эту информацию. 18 00:00:56,010 --> 00:00:58,930 Так что если вы хотите работать с кем-то, всеми средствами, не стесняйтесь обратиться к людям 19 00:00:58,930 --> 00:01:00,480 с помощью этого механизма. 20 00:01:00,480 --> 00:01:02,690 Но большинство людей работают соло. Это совершенно нормально. 21 00:01:02,690 --> 00:01:06,120 Поэтому не считаю, что это в любом случае обязательно. 22 00:01:06,120 --> 00:01:09,680 В пятницу он был только я и еще несколько команде здесь, 23 00:01:09,680 --> 00:01:11,100 пустом театре, по большей части. 24 00:01:11,100 --> 00:01:14,600 Там было 3 туристы сидят там, наверху, так, чтобы было немного неловко. 25 00:01:14,600 --> 00:01:18,970 То, что мы говорили только о том, баз данных и мы говорили о PSET 7 немного. 26 00:01:18,970 --> 00:01:22,200 И если вы случайно не поймать, что на видео прямо сейчас, это нормально. 27 00:01:22,200 --> 00:01:26,770 Я постараюсь, чтобы определить любые условия, которые мы иначе воспринимаем как должное 28 00:01:26,770 --> 00:01:28,840 на основе лекции в пятницу. 29 00:01:28,840 --> 00:01:32,550 >> Но сегодня мы будем стараться, чтобы вы в точку 30 00:01:32,550 --> 00:01:34,990 не просто возможность сделать что-то вроде PSET 7 31 00:01:34,990 --> 00:01:37,360 но на самом деле понимая, что происходит под капотом, 32 00:01:37,360 --> 00:01:41,910 Особенно некоторые абстракции, которые мы ставим на место в файле functions.php 33 00:01:41,910 --> 00:01:45,780 , чтобы сделать вашу жизнь немного легче, но так, что вы в конечном счете понять 34 00:01:45,780 --> 00:01:48,760 так что, когда обучение колеса оторвались через несколько недель вы все еще можете выжить 35 00:01:48,760 --> 00:01:53,750 В реальном мире и сделать этот материал без CS50 рамки под вами. 36 00:01:53,750 --> 00:01:57,500 Это $ _SESSION, для тех из вас, кто знаком 37 00:01:57,500 --> 00:02:01,960 или кто уже поймали видео в пятницу, что же СЕССИИ давайте сделаем 38 00:02:01,960 --> 00:02:04,330 В PHP на основе веб-приложений? 39 00:02:04,330 --> 00:02:09,650 Это суперглобальная переменной, которая означает, что он похож по духу GET и POST 40 00:02:09,650 --> 00:02:13,970 и некоторые другие, но что это за дело полезно? 41 00:02:13,970 --> 00:02:18,320 >> Что такое СЕССИИ используется? Да. [Студент] входа в учетную запись 42 00:02:18,320 --> 00:02:21,040 Простите? [Студент] входа в учетную запись входа в учетную запись самом деле. 43 00:02:21,040 --> 00:02:25,100 В PSET 7 мы используем эту сессию суперглобальная для облегчения входа в учетную запись 44 00:02:25,100 --> 00:02:28,600 И что приятно об этом суперглобальная том, что это ассоциативный массив. 45 00:02:28,600 --> 00:02:33,190 Ассоциативный массив, напомним, является только массив, но чьи показатели не должны быть номера 46 00:02:33,190 --> 00:02:37,670 как 012. Они могут быть числами или они могут быть даже строк. 47 00:02:37,670 --> 00:02:44,890 И поэтому, если вы нырнули в PSET 7 еще, вы можете вспомнить, что мы храним ключ, который называется ID 48 00:02:44,890 --> 00:02:50,330 Внутри это ассоциативный массив, значение которого является что-то вроде 123 - 49 00:02:50,330 --> 00:02:53,780 что в настоящее время вошли в ID пользователя является. 50 00:02:53,780 --> 00:02:59,470 Мотивацией для этого является то, что даже после того, как пользователь посетил локальный 51 00:02:59,470 --> 00:03:02,720 или мой сайт в целом, а затем они вошли в систему, 52 00:03:02,720 --> 00:03:07,320 даже если они не кликают по ссылке или вернуться на свой сайт за 5 минут 53 00:03:07,320 --> 00:03:10,730 или даже час или даже день, но они оставляют их открытыми окна браузера, 54 00:03:10,730 --> 00:03:14,370 через этот суперглобальная я могу помнить, что они зашли 55 00:03:14,370 --> 00:03:21,140 >> Другими словами, это позволяет мне хранить несколько долгосрочных что я хочу о пользователе. 56 00:03:21,140 --> 00:03:24,390 И вы можете думать, это действительно как воплощение корзине. 57 00:03:24,390 --> 00:03:27,740 Такие места, как Amazon, очевидно, позволит вам положить вещи в корзину, 58 00:03:27,740 --> 00:03:32,230 но HTTP, протокол, что полномочия в Интернете, является лицом без гражданства 59 00:03:32,230 --> 00:03:34,230 В том смысле, что, когда вы посещаете веб-сайт, 60 00:03:34,230 --> 00:03:37,290 по большей части у вас нет некоторой постоянной подключение к сети 61 00:03:37,290 --> 00:03:39,270 между браузером и сервером. 62 00:03:39,270 --> 00:03:42,190 Как только вы скачали HTML и изображения в формате JPEG и GIF-файлы и все такое, 63 00:03:42,190 --> 00:03:48,200 соединение уходит, и вы просто иметь копию HTML и еще много чего с сервера. 64 00:03:48,200 --> 00:03:53,000 Но если сервер хочет вспомнить что-то о вас, 65 00:03:53,000 --> 00:03:57,580 нагрузка на сервер на самом деле записать эту информацию. 66 00:03:57,580 --> 00:04:00,130 И поэтому вы программист, которые имеют контроль над сервером 67 00:04:00,130 --> 00:04:04,400 можно поставить самый, что вы хотите внутри этого суперглобальная ассоциативный массив 68 00:04:04,400 --> 00:04:06,850 и она будет там в следующий раз, когда пользователь возвращается, 69 00:04:06,850 --> 00:04:12,070 будь то минут или даже дней, если они не закрывают окна браузера, 70 00:04:12,070 --> 00:04:14,360 в какой момент СЕССИИ исчезает. 71 00:04:14,360 --> 00:04:17,779 Таким образом, это эфемерное хранения, это непостоянное, и это означало, чтобы уйти 72 00:04:17,779 --> 00:04:22,360 Как только пользователь закрывает свой браузер - не только этой вкладке, часто весь браузер, 73 00:04:22,360 --> 00:04:24,930 тем самым эффективно регистрации пользователей из. 74 00:04:24,930 --> 00:04:28,000 Так как эта вещь на самом деле реализованы? 75 00:04:28,000 --> 00:04:31,360 Давайте бросим быстрый взгляд на простом примере мы рассмотрели в пятницу. 76 00:04:31,360 --> 00:04:33,340 Для тех, кто незнаком, это было так просто, как это. 77 00:04:33,340 --> 00:04:35,910 Это веб-страницы, единственная цель в жизни, чтобы сказать мне, 78 00:04:35,910 --> 00:04:38,000 Сколько раз я посетил эту страницу. 79 00:04:38,000 --> 00:04:41,670 Это первый раз в понедельник, что я посетил его, так он говорит 0 раз. 80 00:04:41,670 --> 00:04:46,940 >> Но если я начну перезагрузки страницы, она говорит 1 раз, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 и это в конечном итоге просто держать на счета вверх, вверх, вверх, вверх, вверх 82 00:04:49,800 --> 00:04:53,130 каждый раз я на самом деле кнопки Обновить на нем. 83 00:04:53,130 --> 00:04:58,830 Так как же это работает? Позвольте мне зайти внутрь этого файла под названием counter.php. 84 00:04:58,830 --> 00:05:02,490 В верхней части оно все синим комментариев, но самое интересное здесь. 85 00:05:02,490 --> 00:05:06,670 В строке 13 мы называем эту функцию session_start, 86 00:05:06,670 --> 00:05:09,600 и что буквально все, что вам нужно сделать, если вы хотите иметь доступ 87 00:05:09,600 --> 00:05:13,610 этого специального суперглобальная называется $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Это делает все это возможным, и мы увидим через мгновение, как такое вообще возможно. 89 00:05:17,430 --> 00:05:20,350 В строке 16 уведомление, что я делаю. 90 00:05:20,350 --> 00:05:25,960 Если ключ, называемый счетчиком - другими словами, значение индекса - "счетчик" 91 00:05:25,960 --> 00:05:32,310 существует внутри этого массива называют сессии, то, что я делаю с ней в строке ниже? 92 00:05:32,310 --> 00:05:36,650 Что такое строка 18 делаешь? 93 00:05:36,650 --> 00:05:40,360 >> [Неразборчиво ответ студента] Что это? [Студент] Сохранение значения. Хорошо. 94 00:05:40,360 --> 00:05:45,800 Это хранения значения, которое находится в СЕССИИ сейчас в новых локальных временных переменных, 95 00:05:45,800 --> 00:05:48,250 $ Счетчика в нижнем регистре. 96 00:05:48,250 --> 00:05:50,770 Обратите внимание, что PHP уже немного ленивый здесь. 97 00:05:50,770 --> 00:05:55,550 Обратите внимание, мы не имеем никакого упоминания о Int или с плавающей точкой или строка или что-то в этом роде 98 00:05:55,550 --> 00:06:00,480 потому что PHP типизирован слабо, в котором вы не должны указывать тип переменной, 99 00:06:00,480 --> 00:06:03,310 и в этом случае здесь я даже не объявлены еще. 100 00:06:03,310 --> 00:06:08,980 Я объявив его внутри этих фигурные скобки, и в отличие от C, это на самом деле хорошо. 101 00:06:08,980 --> 00:06:13,800 Независимо от того, насколько глубоко вложенных декларации переменной в PHP - 102 00:06:13,800 --> 00:06:16,650 Внутри фигурных скобок, внутри фигурной скобкой и т.п. - 103 00:06:16,650 --> 00:06:21,230 она будет на тот момент времени существуют на оставшуюся часть программы, 104 00:06:21,230 --> 00:06:22,680 к лучшему или к худшему. 105 00:06:22,680 --> 00:06:26,930 Так что сразу становится глобальным, как только вы определили его, как мы делаем здесь. 106 00:06:26,930 --> 00:06:31,620 >> В противном случае, если я не нахожу в этом нет ничего в СЕССИИ суперглобальная, 107 00:06:31,620 --> 00:06:34,680 Я видимо инициализации этой переменной счетчика в 0, 108 00:06:34,680 --> 00:06:37,580 таким образом только при условии, что пользователь никогда не был здесь раньше. 109 00:06:37,580 --> 00:06:40,030 И тогда это, конечно, увеличивая счетчик как? 110 00:06:40,030 --> 00:06:44,480 Я обновляю значения, что находится внутри этого ассоциативный массив 111 00:06:44,480 --> 00:06:49,530 , установив его равным независимо от счетчика в настоящее время + 1. 112 00:06:49,530 --> 00:06:53,520 Если я прокрутите вниз здесь, чтобы HTML-страницы, это на самом деле довольно проста. 113 00:06:53,520 --> 00:06:58,920 Все, что я в теле этой страницы: "Вы посетили этот сайт, чтобы и то-то времена". 114 00:06:58,920 --> 00:07:00,350 И это конструкции PHP. 115 00:07:00,350 --> 00:07:06,080 Если вы делаете 00:07:12,600 Это действительно эквивалентно что-то вроде Printf, которые мы видели много раз в C, 117 00:07:12,600 --> 00:07:15,940 хотя, как вы знаете, уже из спецификации в PSET 7, 118 00:07:15,940 --> 00:07:20,160 печать также является функцией, которая просто печатает что-то, это на самом деле не использовать формат кодов, 119 00:07:20,160 --> 00:07:23,270 и вы можете сказать эха, а также. 120 00:07:23,270 --> 00:07:27,460 Они все очень немного разный, хотя суммарный эффект в конечном счете то же самое. 121 00:07:27,460 --> 00:07:31,270 Таким образом, это использование знака равенства является только вид элегантный способ сделать это 122 00:07:31,270 --> 00:07:34,910 более кратко, чем вы могли бы быть в состоянии. 123 00:07:34,910 --> 00:07:38,370 Так вот все это делает сайт. Она выводит значение счетчика. 124 00:07:38,370 --> 00:07:40,550 Как это все происходит на самом деле? 125 00:07:40,550 --> 00:07:43,250 Вы можете вспомнить, неделю назад мы начали искать под капотом 126 00:07:43,250 --> 00:07:47,910 на то, как работает веб-страницы с помощью этой вкладки инспектора. 127 00:07:47,910 --> 00:07:51,900 >> Chrome имеет это как в версии для Mac, версия Windows, и даже Linux версии, 128 00:07:51,900 --> 00:07:59,510 и Firefox и IE имеют сходные механизмы, посредством которых у вас есть это встроенный отладчик 129 00:07:59,510 --> 00:08:01,400 внутри браузера. 130 00:08:01,400 --> 00:08:03,040 Давайте взглянем на следующий. 131 00:08:03,040 --> 00:08:06,960 У нас есть целая куча вкладок здесь, и напомнить, что левые один Elements, 132 00:08:06,960 --> 00:08:10,700 и, как ни godawful HTML и JavaScript в страницу, 133 00:08:10,700 --> 00:08:15,710 Напомним, что с вкладки Элементы вы можете перемещаться по HTML иерархически 134 00:08:15,710 --> 00:08:17,050 и красиво и аккуратно. 135 00:08:17,050 --> 00:08:19,370 Так что, если вы пытаетесь узнать из сайта, как Google или Facebook 136 00:08:19,370 --> 00:08:22,370 или действительно любой сайт, понимаю, что вы, вероятно, лучше 137 00:08:22,370 --> 00:08:26,360 глядя на исходный код таким образом, в отличие от просмотра исходного источника, 138 00:08:26,360 --> 00:08:29,580 , который может быть беспорядок, как мы видели, особенно на сайт Google. 139 00:08:29,580 --> 00:08:32,220 Так что, если я вместо этого щелкните на вкладке Сеть здесь, 140 00:08:32,220 --> 00:08:34,830 Давайте посмотрим, что происходит, когда я посещаю эту страницу. 141 00:08:34,830 --> 00:08:38,669 Прежде всего позвольте мне очистить кэш. 142 00:08:38,669 --> 00:08:43,570 Я собираюсь идти в настройки в Chrome, а затем перейти к истории 143 00:08:43,570 --> 00:08:46,420 и снимите все данные о просмотренных страницах. 144 00:08:46,420 --> 00:08:48,170 Вы могли бы быть использованы для делаю это для других целей, [смех] 145 00:08:48,170 --> 00:08:51,990 Но когда дело доходит до разработки веб-сайтов, на самом деле полезно - 146 00:08:51,990 --> 00:08:55,980 если вы смеетесь вы знаете. [Смех] 147 00:08:55,980 --> 00:08:59,310 Это на самом деле очень полезна при разработке веб-сайтов, потому что реальность такова, 148 00:08:59,310 --> 00:09:04,100 такие вещи, как печенье и тому подобные вещи кэшированных HTML файлы, кэшированные файлы JavaScript 149 00:09:04,100 --> 00:09:06,390 действительно может стать большой головной болью, потому что если по каким-либо причинам 150 00:09:06,390 --> 00:09:11,500 браузер решает для кэширования файлов и все же вы внесли изменения в этот файл на сервер 151 00:09:11,500 --> 00:09:14,670 но браузер действительно не понял, что файл был изменен 152 00:09:14,670 --> 00:09:19,060 и, следовательно, на самом деле не повторно загрузить его, даже если вы нажмете кнопку Обновить, 153 00:09:19,060 --> 00:09:23,210 одна из самых верный способ просто убедитесь, что неисправность не с кодом, 154 00:09:23,210 --> 00:09:26,480 это с поведением браузере, чтобы войти в здесь, в вашем браузере 155 00:09:26,480 --> 00:09:29,950 и просто очистить всю историю, так что нет никакой путаницы. 156 00:09:29,950 --> 00:09:33,210 >> И потом, если вы действительно хотите быть параноиком, закройте браузер, перезапустить его, 157 00:09:33,210 --> 00:09:35,660 , а затем убедиться, что все работает так, как ожидалось. 158 00:09:35,660 --> 00:09:38,820 Короче говоря, очистка кэша хорошо, когда делаешь развития. 159 00:09:38,820 --> 00:09:40,690 Таким образом, здесь мы имеем вкладке Сеть. 160 00:09:40,690 --> 00:09:46,020 Я ранее посещали сайт в 9 раз, но позвольте мне теперь идти вперед и нажмите кнопку Reload. 161 00:09:46,020 --> 00:09:47,500 И я снова до 0. 162 00:09:47,500 --> 00:09:52,100 Давайте посмотрим, как на самом деле это то, что эта сессия суперглобальная претворяется в жизнь. 163 00:09:52,100 --> 00:09:55,990 Я собираюсь нажать на 1-HTTP-запрос, который был сделан, 164 00:09:55,990 --> 00:09:58,810 и это окно отладки позволяет мне заглянуть внутрь этого. 165 00:09:58,810 --> 00:10:01,970 Здесь я вижу только ответ от сервера, который не интересны. 166 00:10:01,970 --> 00:10:04,030 Я видел это в любом количестве способами. 167 00:10:04,030 --> 00:10:06,350 Но то, что технически интересны заголовки. 168 00:10:06,350 --> 00:10:11,770 Если я здесь, прокрутите вниз и сосредоточить внимание на заголовки запроса и нажмите просмотреть исходный код, 169 00:10:11,770 --> 00:10:14,400 что я буду видеть буквально запросу HTTP 170 00:10:14,400 --> 00:10:17,250 что просто пошел из моего браузера к серверу, 171 00:10:17,250 --> 00:10:21,400 GET является оперативное слово и / counter.php быть имя файла, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 просто быть версии HTTP, что мой браузер использует. 173 00:10:25,670 --> 00:10:31,070 Эта линия здесь небольшое напоминание от браузера к серверу, что имя сервера 174 00:10:31,070 --> 00:10:33,020 что он хочет поговорить. 175 00:10:33,020 --> 00:10:38,200 И тогда остальные иногда это интересно, но не соответствующие прямо сейчас. 176 00:10:38,200 --> 00:10:40,090 >> Это просто какая-то любопытство. 177 00:10:40,090 --> 00:10:43,530 Cryptic хотя это строка, в любое время вашего браузера посещает веб-сайт 178 00:10:43,530 --> 00:10:47,110 это информирование сервера, какой браузер вы используете 179 00:10:47,110 --> 00:10:50,040 и какую операционную систему вы используете и какие варианте. 180 00:10:50,040 --> 00:10:52,650 Так что если вы когда-нибудь задумывались, как сайты, как CNN и еще много чего 181 00:10:52,650 --> 00:10:56,860 знаю, что проценты пользователей Mac в сети, пользователи ПК, 182 00:10:56,860 --> 00:11:00,820 IE пользователей, пользователи Chrome и тому подобное, это потому, что все наши браузеры 183 00:11:00,820 --> 00:11:04,300 говорят каждый сайт, там какие мы есть. 184 00:11:04,300 --> 00:11:07,410 Это не обязательно содержат личную информацию, 185 00:11:07,410 --> 00:11:13,060 но это не сказать серверу, что ваши IP адреса и то, что браузер и ОС вы используете. 186 00:11:13,060 --> 00:11:14,720 Так вот где эту информацию. 187 00:11:14,720 --> 00:11:19,960 Но что более интересно сейчас, когда дело доходит до этих сессий заголовка ответа. 188 00:11:19,960 --> 00:11:22,530 Позвольте мне кнопку просмотра исходного кода рядом с ответом. 189 00:11:22,530 --> 00:11:24,590 Что интересно, вот несколько вещей. 190 00:11:24,590 --> 00:11:27,580 1, мы вернулись кодом состояния 200. 191 00:11:27,580 --> 00:11:29,840 Мы никогда не видим этот статус код, потому что это означает, что все хорошо. 192 00:11:29,840 --> 00:11:32,920 Это означает буквально все в порядке, в отличие от чего-то другого. 193 00:11:32,920 --> 00:11:36,380 Что такое число, которое мы иногда видим, что это плохо? [Студент] 404. 194 00:11:36,380 --> 00:11:39,860 404, файл не найден, 403 Вы могли бы наткнуться на уже 195 00:11:39,860 --> 00:11:43,660 что запрещено, а значит, вы забыли что-то CHMOD, скорее всего. 196 00:11:43,660 --> 00:11:45,190 И есть куча других. 197 00:11:45,190 --> 00:11:47,760 >> Здесь, внизу, это немного сумасшедший. 198 00:11:47,760 --> 00:11:52,340 Я просто написал этот файл несколько минут назад, вставив его в Gedit. 199 00:11:52,340 --> 00:11:57,100 Почему этой страницы истекает в 1981 году, прежде чем там действительно было Интернете? 200 00:11:58,010 --> 00:12:00,730 Что там происходит? 201 00:12:00,730 --> 00:12:04,390 >> [Неразборчиво ответ студента] штамп времени. Но почему? 202 00:12:06,110 --> 00:12:09,120 Это несколько произвольно, но это на самом деле полезно. 203 00:12:09,120 --> 00:12:15,500 Что это говорил мой браузер это PHP файл, который вы только что просили уже истек. 204 00:12:15,500 --> 00:12:18,580 На самом деле, он истек 30 лет назад. 205 00:12:18,580 --> 00:12:20,260 Но что это означает? 206 00:12:20,260 --> 00:12:22,500 Это просто означает, что в следующий раз, когда пользователь посещает эту страницу, 207 00:12:22,500 --> 00:12:25,540 ли путем перезагрузки или набрав URL в адресной строке, 208 00:12:25,540 --> 00:12:28,010 убедитесь, что вы сходить за новой копией. 209 00:12:28,010 --> 00:12:30,840 Это своего рода примером кэш перебора, 210 00:12:30,840 --> 00:12:33,790 глупые слова, которое означает лишь пытается отбить браузеров 211 00:12:33,790 --> 00:12:37,260 от фактически кэширование HTML, которое было отправлено с сервера 212 00:12:37,260 --> 00:12:41,490 так что вы не случайно попали перезагрузку, а затем увидеть ту же версию файла. 213 00:12:41,490 --> 00:12:43,730 Вы на самом деле хотите, чтобы сервер отправить новую копию. 214 00:12:43,730 --> 00:12:47,440 Поэтому тот факт, что это 1981 просто означает, что это то, что прибор выбирает 215 00:12:47,440 --> 00:12:50,280 как произвольную дату в прошлом. 216 00:12:50,280 --> 00:12:53,380 Но настоящая сочная линия теперь это одно. 217 00:12:53,380 --> 00:12:57,550 Даже до 50 вы, вероятно, смутно знакомые с печеньем. 218 00:12:57,550 --> 00:13:01,820 По состоянию на сейчас, особенно среди тех, кто менее комфортно или между ними, 219 00:13:01,820 --> 00:13:04,120 Что такое куки в вашем понимании прямо сейчас 220 00:13:04,120 --> 00:13:06,980 хотя мы и собираемся сделать ваше понимание более технический? 221 00:13:08,150 --> 00:13:10,070 Что такое печенье? Да. 222 00:13:10,070 --> 00:13:13,890 [Студент] Информация о пользователе, как если бы они написали свое имя или что-то еще. 223 00:13:13,890 --> 00:13:17,370 >> Хорошо. Это информация о пользователе, будь они ввели в свои имя пользователя уже. 224 00:13:17,370 --> 00:13:21,190 Cookies являются одним из способов которым серверы могут вспомнить что-то о пользователе. 225 00:13:21,190 --> 00:13:25,810 И то, что печенье на самом деле представляет собой текстовый файл или некоторые последовательности байтов 226 00:13:25,810 --> 00:13:28,340 который посадил на сервер в Вашем браузере, 227 00:13:28,340 --> 00:13:31,960 а внутри него файл или среди тех, байт является своего рода идентификатором. 228 00:13:31,960 --> 00:13:35,640 Может быть, это буквально вашего имени пользователя, но чаще всего это что-то более загадочное вид 229 00:13:35,640 --> 00:13:43,700 как эта вещь здесь - bo8dal3ct и так далее - это действительно большой буквенно-цифровую строку 230 00:13:43,700 --> 00:13:47,050 это действительно просто хотел быть уникальным идентификатором для вас. 231 00:13:47,050 --> 00:13:49,790 Или вы можете думать о нем как своего рода виртуальный штамп руку. 232 00:13:49,790 --> 00:13:53,020 Если вы идете в каком-то клубе или в парке развлечений, помнить, что вы фактически уплаченной 233 00:13:53,020 --> 00:13:55,850 и ушли в, они положили маленькую красную наклейку на вашей руке какой-то, 234 00:13:55,850 --> 00:13:59,270 и что напоминает людям на счетчик, который вы уже заплатили 235 00:13:59,270 --> 00:14:01,340 и вы можете приходить и уходить когда угодно. 236 00:14:01,340 --> 00:14:04,250 Cookies немного похожи по духу на это. 237 00:14:04,250 --> 00:14:08,070 В первый раз я посетил этот сайт, так как я только что сделал после освобождения моего кэша, 238 00:14:08,070 --> 00:14:11,620 веб-сервер, прибор в этом случае поставить штамп на моей руке 239 00:14:11,620 --> 00:14:15,030 чье имя PHPSESSID, идентификатор сессии, 240 00:14:15,030 --> 00:14:18,260 , значение которого это действительно длинный буквенно-цифровой строкой. 241 00:14:18,260 --> 00:14:22,470 >> Так что теперь вроде красуется на руке, так что в следующий раз я ударил перезагрузки 242 00:14:22,470 --> 00:14:25,230 или вручную посетите этот URL в браузер, 243 00:14:25,230 --> 00:14:29,230 мой браузер по определению HTTP собирается представить ручной штамп 244 00:14:29,230 --> 00:14:31,940 снова и снова, и снова. 245 00:14:31,940 --> 00:14:34,550 Поэтому, даже если сервер не обязательно знать, кто я, 246 00:14:34,550 --> 00:14:39,610 они по крайней мере знают, что я такой же пользователь или, по крайней мере, более конкретно, того же браузера. 247 00:14:39,610 --> 00:14:45,660 И это, в конечном счете, как СЕССИЯ суперглобальная реализован. 248 00:14:45,660 --> 00:14:51,200 Сервер понятия не имеет, кто вы есть, когда вы вновь сайте во второй или в третий раз 249 00:14:51,200 --> 00:14:53,410 если вы представляете эту руку штамп. 250 00:14:53,410 --> 00:14:55,530 И как только вы представить, что рука штамп, 251 00:14:55,530 --> 00:14:59,370 Веб-сервер по существу идет в маленькую базу данных своего 252 00:14:59,370 --> 00:15:06,040 и проверяет, хорошо, я только что видел руку печать пользователь bo8dal3ct и так далее. 253 00:15:06,040 --> 00:15:09,850 Давайте посмотрим, какая информация хранится программист 254 00:15:09,850 --> 00:15:12,380 Внутри суперглобальная об этом пользователю, 255 00:15:12,380 --> 00:15:17,000 , а затем позвольте мне убедиться, что эти данные снова внутри сессии суперглобальная 256 00:15:17,000 --> 00:15:19,830 так что программист может повторно доступа к данным 257 00:15:19,830 --> 00:15:23,360 даже если оно было установлено несколько минут или часов назад. 258 00:15:23,360 --> 00:15:26,150 Итак, другими словами, печенье, которая получила плохую репутацию в течение некоторого времени 259 00:15:26,150 --> 00:15:29,990 из-за неуверенности в браузерах и они действительно могут нарушать нашу частную жизнь, и все это, 260 00:15:29,990 --> 00:15:31,900 они на самом деле имеют большую полезность, потому что без них 261 00:15:31,900 --> 00:15:36,110 Вы постоянно входе в каждую страницу Facebook вы посещаете 262 00:15:36,110 --> 00:15:40,680 или каждый Gmail электронной почты вы читали, если браузер не есть способ запоминания 263 00:15:40,680 --> 00:15:43,320 что вы уже подлинности. 264 00:15:43,320 --> 00:15:46,640 >> Таким образом, в этом случае печенье отправляются туда и обратно через провод. 265 00:15:46,640 --> 00:15:52,470 Другой любопытство печенье, особенно здесь, в том, что это вполне в открытом виде. 266 00:15:52,470 --> 00:15:54,930 Там нет шифрования происходит здесь бы то ни было, 267 00:15:54,930 --> 00:15:57,240 да и вообще я использую HTTP на данный момент. 268 00:15:57,240 --> 00:16:00,890 Один из наших любимых моментов в CS50, который сейчас 2 года назад, 269 00:16:00,890 --> 00:16:04,750 было примерно в то время инструмент под названием Firesheep вышел. 270 00:16:04,750 --> 00:16:08,320 Это был свободный кусок программного обеспечения, которое было сделано исследователь безопасности 271 00:16:08,320 --> 00:16:13,250 как тревожный сигнал для общества, чтобы сказать, насколько ужасно реализован 272 00:16:13,250 --> 00:16:17,900 определенные механизмы аутентификации на Web были. 273 00:16:17,900 --> 00:16:22,880 Таким образом, в течение некоторого времени, Facebook была почти полностью по HTTP, HTTPS нет. 274 00:16:22,880 --> 00:16:25,640 И даже если вы не представляете, как крипто работает, S является безопасным 275 00:16:25,640 --> 00:16:27,950 таким образом, это означает, что по крайней мере некоторые шифрованием. 276 00:16:27,950 --> 00:16:30,610 Facebook же используется для шифрования имен пользователей и паролей, 277 00:16:30,610 --> 00:16:33,560 Но как только вы посмотрели на вашем тычет или сообщений или новостей, 278 00:16:33,560 --> 00:16:35,360 Все, что было в незашифрованном виде. 279 00:16:35,360 --> 00:16:37,870 Так было до тех пор пока Gmail еще год или 2 назад. 280 00:16:37,870 --> 00:16:41,100 Каждый раз, когда вы вошли в систему, да, они использовали шифрование, 281 00:16:41,100 --> 00:16:44,300 но после этого они не сделали. И почему это может быть? 282 00:16:44,300 --> 00:16:49,210 Почему бы не использовать криптографию все время использования в подобных случаях? 283 00:16:49,210 --> 00:16:53,700 Что это? Я думаю, что я что-то слышал. [Студенту] Speed. 284 00:16:53,700 --> 00:16:56,250 Скорость, правда? Есть способы обойти это. 285 00:16:56,250 --> 00:16:59,610 Но если вы просто вид думать об этом логически, если вы что-то шифрования, 286 00:16:59,610 --> 00:17:01,820 Вы должны сделать по крайней мере, немного больше работы. 287 00:17:01,820 --> 00:17:05,460 В PSET 2, когда вы реализовали Цезаря или Vigenere или даже трещины, 288 00:17:05,460 --> 00:17:07,760 только печать строки относительно легко. 289 00:17:07,760 --> 00:17:12,040 Шифрование и печати строки минимально требует немного больше работы. 290 00:17:12,040 --> 00:17:14,520 >>  Для супер популярных сайтах, как Google и Facebook, 291 00:17:14,520 --> 00:17:18,839 если у вас есть, чтобы сделать больше работы для каждого пользователя, для каждой веб-страницы они посещают, 292 00:17:18,839 --> 00:17:20,520 что просто занимает больше процессорного времени. 293 00:17:20,520 --> 00:17:22,920 А если вам нужно больше процессорного времени, вам может потребоваться несколько серверов, 294 00:17:22,920 --> 00:17:24,270 которая означает, что вы, возможно, потребуется больше денег. 295 00:17:24,270 --> 00:17:27,579 И так на протяжении многих лет это просто действительно не было лучшей практики. 296 00:17:27,579 --> 00:17:31,440 Люди будут использовать SSL шифрование только тогда, когда нужно. 297 00:17:31,440 --> 00:17:34,960 Но оказалось, и как этот парень с Firesheep сделал супер ясно, 298 00:17:34,960 --> 00:17:37,920 когда вы, ребята, которые в настоящее время на Facebook прямо сейчас - 299 00:17:37,920 --> 00:17:39,880 Из любопытства, давайте посмотрим, если вы будете признаться. 300 00:17:39,880 --> 00:17:42,620 Если вы находитесь на Facebook сейчас в некоторых вкладки, даже если он не на переднем плане, 301 00:17:42,620 --> 00:17:46,610 Ваш URL HTTP или HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Несколько студентов] S. S? [Смех] 303 00:17:50,560 --> 00:17:55,510 Хорошо. Любое HTTP? Всего в 1? Хорошо. 304 00:17:55,510 --> 00:17:58,940 Так что все из нас могут взломать Facebook внимание, что парню прямо сейчас. 305 00:17:58,940 --> 00:18:04,100 По большей части это стало включен по умолчанию, по крайней мере в некоторых веб-сайтах. 306 00:18:04,100 --> 00:18:08,120 И Короче говоря, если ваш веб-трафик не шифруется, 307 00:18:08,120 --> 00:18:12,960 не только HTML идти вперед и назад через WiFis незашифрованном виде, 308 00:18:12,960 --> 00:18:16,760 так что такие вещи, как печенье идти вперед и назад по всему воздуха 309 00:18:16,760 --> 00:18:18,940 без какого-либо шифрования. 310 00:18:18,940 --> 00:18:23,540 Так что если у вас есть немного здравого смысла программирования или немного погуглить навыки 311 00:18:23,540 --> 00:18:27,410 найти свободное программное обеспечение, что делает это все, что вам нужно сделать, это сидеть в Starbucks 312 00:18:27,410 --> 00:18:30,680 или сидеть в аэропорту, где там вообще незашифрованном WiFi 313 00:18:30,680 --> 00:18:36,070 и просто смотреть на ключевые слова, как Set-Cookie: PHPSESSID или 314 00:18:36,070 --> 00:18:39,300 потому что, если у вас есть технические здравый смысл, чтобы просто наблюдать за WiFi 315 00:18:39,300 --> 00:18:43,010 для всех битов, которые текут по всему воздух для этой модели, 316 00:18:43,010 --> 00:18:50,840 Вы можете сказать, что PHPSESSID парень, случается, bo8dal и так далее. 317 00:18:50,840 --> 00:18:53,890 И опять же, если вы достаточно технически подкованным и иметь правильный инструмент, 318 00:18:53,890 --> 00:18:58,890 Вы можете просто перенастроить свой браузер, чтобы начать представление, что ручной штамп 319 00:18:58,890 --> 00:19:05,030 на Facebook.com и Facebook просто будет считать, что вы, что парень 320 00:19:05,030 --> 00:19:09,880 потому что все они знают не то, кто вы, но что у вас есть это уникальный идентификатор. 321 00:19:09,880 --> 00:19:14,650 Так что, если вы крадете, что уникальный идентификатор, и представить его на веб-сервер, как свои собственные, 322 00:19:14,650 --> 00:19:16,860 они просто собираюсь показать вам, лента новостей, что человек 323 00:19:16,860 --> 00:19:18,980 или что это лицо сообщения или тычет. 324 00:19:18,980 --> 00:19:23,190 >> И я бы Google Теперь, как активировать HTTPS для Facebook, возможно. 325 00:19:23,190 --> 00:19:25,150 Но это действительно так просто. 326 00:19:25,150 --> 00:19:27,660 И поэтому Facebook и Google, и, как получил действительно хорошее в этом, 327 00:19:27,660 --> 00:19:31,870 но следить, тем более для любых посещаемых веб-сайтов, которые не используют HTTP 328 00:19:31,870 --> 00:19:35,020 и есть какой-то секретной информации на них, 329 00:19:35,020 --> 00:19:37,490 будь то финансовые или личные или тому подобное. 330 00:19:37,490 --> 00:19:43,180 Если они не используют это, вполне возможно, может печенье, как это очень легко украсть 331 00:19:43,180 --> 00:19:46,270 , а затем подделаны, и это именно то, что Firesheep сделал. 332 00:19:46,270 --> 00:19:48,250 Вам не нужно быть программистом. 333 00:19:48,250 --> 00:19:51,680 Все, что вам нужно было иметь подключение к интернету, скачать бесплатный инструмент, 334 00:19:51,680 --> 00:19:56,490 и что он будет делать это вы войти в систему и тогда было бы показать вам Facebook имена 335 00:19:56,490 --> 00:20:00,170 всех в Сандерса, в данной демонстрации, вокруг вас 336 00:20:00,170 --> 00:20:03,260 и все, что вам нужно было только нажать на свое имя и программное обеспечение автоматизированных процессов 337 00:20:03,260 --> 00:20:05,970 из нюхает, что печенье, представив его в Facebook как свои собственные, 338 00:20:05,970 --> 00:20:07,990 и, вуаля, вы зашли 339 00:20:07,990 --> 00:20:11,190 Так что это еще один из тех "не делать этого" официально. 340 00:20:11,190 --> 00:20:14,660 Если у вас есть своя домашняя сеть и вы хотите возиться, все средства, 341 00:20:14,660 --> 00:20:17,530 но понимают это делает пересечь линию на университетской среде. 342 00:20:17,530 --> 00:20:20,030 >> Но цель здесь действительно подчеркнуть не, как это сделать 343 00:20:20,030 --> 00:20:22,320 Но как защититься от такого рода вещей. 344 00:20:22,320 --> 00:20:26,180 И здесь тривиальное решение, даже если оно само является ущербной, 345 00:20:26,180 --> 00:20:31,360 это реально уменьшить использование любых сайтов, которые не используют HTTPS постоянно. 346 00:20:31,360 --> 00:20:34,520 Таким образом, сайты, такие как Facebook и Google все чаще приходится флажков 347 00:20:34,520 --> 00:20:36,200 где вы можете выбрать, чтобы такого рода вещи, 348 00:20:36,200 --> 00:20:40,000 и банков было это в течение многих лет по аналогичным причинам. 349 00:20:40,000 --> 00:20:43,580 Так что просто немного фактор страха, если мы можем. Но это все в двух словах. 350 00:20:43,580 --> 00:20:46,420 То есть, как сервер помнит, кто вы есть. 351 00:20:46,420 --> 00:20:50,760 И как только они могут вспомнить, кто вы есть, они могут помнить ничего о вас 352 00:20:50,760 --> 00:20:56,140 что программист хранятся внутри этого специального суперглобальная называется $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 А для PSET 7 мы используем это тривиально просто чтобы вспомнить, INT, 354 00:20:59,750 --> 00:21:02,260 а именно уникальный идентификатор пользователя, который вошел в систему, 355 00:21:02,260 --> 00:21:05,880 так что мы знаем, что они были там раньше. 356 00:21:05,880 --> 00:21:12,450 Любые вопросы, то на сессиях или печенье или как? 357 00:21:12,450 --> 00:21:15,130 Firesheep не работает, а больше, 358 00:21:15,130 --> 00:21:18,310 и вы должны перевести компьютер в специальном смешанном режиме 359 00:21:18,310 --> 00:21:20,700 так что вы на самом деле прослушивать трафик, кроме себя. 360 00:21:20,700 --> 00:21:23,940 Так что, если вы в настоящее время загрузка Firesheep, понимаю, что это не так просто, 361 00:21:23,940 --> 00:21:26,850 как это было раньше, чтобы продемонстрировать. 362 00:21:26,850 --> 00:21:29,070 Хорошо. И не делайте этого в Сандерса. У его дома. 363 00:21:29,070 --> 00:21:30,890 Базы данных. 364 00:21:30,890 --> 00:21:33,580 Одна из вещей, которые мы сделали в PSET 7 очень сознательно 365 00:21:33,580 --> 00:21:37,780 были мы даем вам пример таблицы базы данных для пользователей, которые имеет некоторые идентификаторы пользователей, 366 00:21:37,780 --> 00:21:41,020 некоторые имена пользователей, и некоторые зашифрованные пароли в нем. 367 00:21:41,020 --> 00:21:44,520 И, как вы увидите, если вы этого еще не сделали, вы будете иметь, чтобы изменить таблицу немного. 368 00:21:44,520 --> 00:21:47,710 Вы будете иметь, чтобы добавить кэш для каждого из пользователей в этой таблице, 369 00:21:47,710 --> 00:21:51,130 и вы будете иметь, чтобы добавить еще одну историю стол, портфели стол, 370 00:21:51,130 --> 00:21:53,310 или, возможно, называть это что-то другое. 371 00:21:53,310 --> 00:21:56,740 Но с точки зрения думать о том, как это сделать, давайте откроем этот инструмент 372 00:21:56,740 --> 00:22:00,570 , который мы использовали в пятницу, но если незнакомый, прибор поставляется с инструментом 373 00:22:00,570 --> 00:22:04,680 называется PHPMyAdmin который случайно написана на PHP, 374 00:22:04,680 --> 00:22:07,950 но его цель в жизни, после того как я войти сюда, как jharvard с малиновым, 375 00:22:07,950 --> 00:22:15,160 , чтобы дать мне удобный способ просмотра и изменения моей базе данных. 376 00:22:15,160 --> 00:22:18,040 >> Базы данных, что я бегу на прибор называется MySQL. 377 00:22:18,040 --> 00:22:23,420 Это очень популярна, и это бесплатно СУБД с открытым кодом, что это чудесно прост в использовании, 378 00:22:23,420 --> 00:22:25,620 особенно передние концы, как это. 379 00:22:25,620 --> 00:22:29,350 Что этот инструмент позволяет мне сделать, например, является мешке вокруг столов. 380 00:22:29,350 --> 00:22:30,890 Позвольте мне идти вперед и делать это. 381 00:22:30,890 --> 00:22:36,580 В пятницу мы создали таблицу с именем студентов, что было супер просто. 382 00:22:36,580 --> 00:22:41,680 Это было 3 колонки - номер, имя и электронную почту, - и я вручную вставляется пару строк 383 00:22:41,680 --> 00:22:44,420 как Дэвид и Майк в этом конкретном примере. 384 00:22:44,420 --> 00:22:47,290 Давайте это немного дальше, и давайте предположим, что мы хотим помнить больше 385 00:22:47,290 --> 00:22:49,660 чем просто имя и адрес электронной о пользователе. 386 00:22:49,660 --> 00:22:53,090 Позвольте мне Структура нажмите здесь на самом верху. 387 00:22:53,090 --> 00:22:55,440 И снова, PSET проведет вас через необходимые шаги здесь, 388 00:22:55,440 --> 00:22:58,150 так что не волнуйтесь, если некоторые это немного быстрее. 389 00:22:58,150 --> 00:22:59,690 Тогда я собираюсь нажмите здесь. 390 00:22:59,690 --> 00:23:02,270 Я собираюсь добавить некоторое количество столбцов после электронную почту 391 00:23:02,270 --> 00:23:04,130 потому что я хочу добавить что-то вроде дома. 392 00:23:04,130 --> 00:23:06,640 Я забыл записать доме студента. 393 00:23:06,640 --> 00:23:11,400 Позвольте мне команду Перейти, и теперь у нас есть эта форма, которая, к сожалению, немного широкий слева направо, 394 00:23:11,400 --> 00:23:13,710 но я буду называть имя этого поля доме, 395 00:23:13,710 --> 00:23:16,050 а потом типа у меня теперь есть выбор. 396 00:23:16,050 --> 00:23:18,870 Итак, давайте кратко поговорить о различных типов в MySQL 397 00:23:18,870 --> 00:23:24,590 потому что в то время как PHP слабо типизированными и он вроде играет быстро и свободно с типами, 398 00:23:24,590 --> 00:23:29,430 в базе данных особенно это супер важно, чтобы реально использовать набрав в свою пользу 399 00:23:29,430 --> 00:23:33,260 потому что одна из вещей, MySQL и других СУБД может сделать для вас 400 00:23:33,260 --> 00:23:37,910 это убедиться, что вы не ставите фиктивные данные в базу данных. 401 00:23:37,910 --> 00:23:41,850 Это своего рода бесплатная проверка ошибок доступны для вас. 402 00:23:41,850 --> 00:23:46,250 >> Для дома, мы, очевидно, не хочу, чтобы это INT, который представляет собой 32-битное значение в MySQL. 403 00:23:46,250 --> 00:23:49,810 Мы сделали коротко рассказать в пятницу о VARCHAR, которая выступает за переменной длины символа. 404 00:23:49,810 --> 00:23:54,720 Что это? Это позволяет вам указать, что вы хотите, чтобы это строка из какой-то. 405 00:23:54,720 --> 00:23:56,840 Вы действительно не знаете заранее, как долго она есть, 406 00:23:56,840 --> 00:24:00,100 поэтому мы сколь угодно говорить дом имени может быть до 255 символов, 407 00:24:00,100 --> 00:24:04,190 но вы можете идти с 32, 64 - любое число на самом деле. 408 00:24:04,190 --> 00:24:10,700 Но преимущество использования VARCHAR над полем называется символ какой? 409 00:24:10,700 --> 00:24:15,110 Просто интуитивно, если я прокрутите вниз здесь, обратите внимание, есть символ и есть VARCHAR. 410 00:24:15,110 --> 00:24:19,520 Varchar переменной длины символов, символов является фиксированной длиной символов. 411 00:24:19,520 --> 00:24:24,730 Таким образом, основываясь только на этом определении, в чем преимущество или недостаток каждого из этих? 412 00:24:24,730 --> 00:24:30,490 Иными словами, кто заботится о различии, или почему вы должны заботиться? 413 00:24:31,660 --> 00:24:35,750 >> Да. [Студент] Varchar обладает большей гибкостью, но занимает больше памяти. 414 00:24:35,750 --> 00:24:40,730 Хорошо. Varchar занимает больше - Давайте посмотрим. Я не уверен, если бы я услышал это право. 415 00:24:40,730 --> 00:24:42,360 Можете ли вы сказать, что еще раз? 416 00:24:42,360 --> 00:24:45,850 [Студент] Я сказал, VARCHAR, вероятно, имеет большую гибкость, но это занимает больше памяти. 417 00:24:45,850 --> 00:24:51,170 Интересно. Хорошо. Varchar, вероятно, дает вам больше гибкости, но занимает больше памяти. 418 00:24:51,170 --> 00:24:53,220 Последнее не обязательно верно. 419 00:24:53,220 --> 00:24:56,290 Это зависит от контекста, но давайте вернемся к этому. 420 00:24:56,290 --> 00:25:03,230 >> [Неразборчиво ответ студента] Именно так. 421 00:25:03,230 --> 00:25:06,900 Это на самом деле так, что символ, как правило, используют больше памяти 422 00:25:06,900 --> 00:25:10,950 потому что символ, как и в С, как струна, это массив символов. 423 00:25:10,950 --> 00:25:13,690 Так что, если вы говорите символ поле длиной 255, 424 00:25:13,690 --> 00:25:16,910 база данных буквально собираюсь дать вам 255 знаков. 425 00:25:16,910 --> 00:25:22,290 И если в доме заканчивает тем, что MATHER и 6 символов всего, 426 00:25:22,290 --> 00:25:25,090 вы тратите более 200 символов. 427 00:25:25,090 --> 00:25:29,640 >> Так VARCHAR эффективно использует только столько символов, сколько необходимо 428 00:25:29,640 --> 00:25:31,590 до максимальной суммы. 429 00:25:31,590 --> 00:25:35,470 Но цена, которую вы платите на самом деле производительность, потенциально. 430 00:25:35,470 --> 00:25:39,740 Если вы заранее знаете, что все ваши строки будет 8 символов - 431 00:25:39,740 --> 00:25:43,090 Например, предположим, что вам требуется пароли длиной 8 - 432 00:25:43,090 --> 00:25:47,350 Положительным аспектом использования символов поля на случай, хотя и не часто, 433 00:25:47,350 --> 00:25:51,100 это указать фиксированную длину что-то вроде пароля 434 00:25:51,100 --> 00:25:53,300 потому что теперь база данных может быть даже умнее. 435 00:25:53,300 --> 00:25:58,160 Если он знает, что каждый символ поля, каждая строка в столбце той же длины, 436 00:25:58,160 --> 00:26:00,780 Вы возвращаетесь функцию случайного доступа. 437 00:26:00,780 --> 00:26:05,110 Вы можете прыгать между различными текстовые поля в таблице базы данных 438 00:26:05,110 --> 00:26:07,940 потому что думаешь базы данных в виде строк и столбцов. 439 00:26:07,940 --> 00:26:11,670 Таким образом, если каждый из струн одинаковой длины, 440 00:26:11,670 --> 00:26:17,820 Вы знаете, что первый находится в байте 0, следующая находится в байте 8 441 00:26:17,820 --> 00:26:20,240 а потом 16, а затем 24 и так далее. 442 00:26:20,240 --> 00:26:24,500 Так что, если все строки одинаковой длины, вы можете прыгать гораздо более эффективно. 443 00:26:24,500 --> 00:26:26,710 Так что может быть польза в плане производительности, 444 00:26:26,710 --> 00:26:29,420 но обычно у вас нет такой роскоши, заранее зная, 445 00:26:29,420 --> 00:26:32,170 так VARCHAR является путь. 446 00:26:32,170 --> 00:26:36,030 Вот еще одна подробность, что даже побежал в Facebook в конце концов. 447 00:26:36,030 --> 00:26:39,670 Ints велики, и мы вроде как их использовать по умолчанию в любое время мы хотим номер, 448 00:26:39,670 --> 00:26:41,750 но это только 32 бита. 449 00:26:41,750 --> 00:26:46,210 >> И хотя Facebook не совсем есть 4 миллиарда пользователей сейчас, 450 00:26:46,210 --> 00:26:48,680 есть определенно некоторые люди там с несколькими учетными записями 451 00:26:48,680 --> 00:26:50,960 или счетов, которые были открыты и закрыты, 452 00:26:50,960 --> 00:26:55,130 Facebook и так сама я считаю, несколько лет назад был переход от Int 453 00:26:55,130 --> 00:27:00,010 в, как метко назвал, BIGINT, который находится всего в 64 бит вместо этого. 454 00:27:00,010 --> 00:27:02,230 Так что это тоже дизайнерское решение. 455 00:27:02,230 --> 00:27:06,570 Вы бы удивительно повезло, если ваш окончательный проект оказывается запуска, 456 00:27:06,570 --> 00:27:10,010 имеет 4 млрд и 1 пользователей, давать или принимать, 457 00:27:10,010 --> 00:27:13,200 В этом случае использование целых чисел может быть немного близорук. 458 00:27:13,200 --> 00:27:16,230 Но на самом деле, пользователи стол, вероятно, хорошо с целыми. 459 00:27:16,230 --> 00:27:19,340 Но за то, как PSET 7, как ваша история столом, 460 00:27:19,340 --> 00:27:23,700 Вы могли бы иметь тысячи, миллионы пользователей, если вы развиваться в etrade.com. 461 00:27:23,700 --> 00:27:26,020 Таким образом, в то время как вы не могли бы более 4 млрд пользователей, 462 00:27:26,020 --> 00:27:30,070 тех пользователей, у вас есть, возможно, более 4 миллиардов операций с течением времени - 463 00:27:30,070 --> 00:27:33,200 покупает и продает и вещи в их истории. 464 00:27:33,200 --> 00:27:38,090 Так что если вы предвидеть - опять же, это хорошие проблемы иметь, если у вас есть столько данных - 465 00:27:38,090 --> 00:27:40,920 если вы предвидеть данных превышает размер INT, 466 00:27:40,920 --> 00:27:47,740 собирается что-то вроде BIGINT это направление не достаточно часто, принятые дизайнеров 467 00:27:47,740 --> 00:27:49,710 потому что люди фигуру, которая не будет проблемой, 468 00:27:49,710 --> 00:27:51,930 но это легко выбрать нечто большее, чем это. 469 00:27:51,930 --> 00:27:55,380 Десятичная мы используем в PSET 7, которая определяет фиксированную точность 470 00:27:55,380 --> 00:27:59,840 так вы сможете избежать вопросов, связанных с поплавками и парном разряде, и вещественные числа и тому подобное. 471 00:27:59,840 --> 00:28:02,440 >> А тут еще некоторые другие поля здесь. Мы машем руками у них в некоторой степени. 472 00:28:02,440 --> 00:28:07,270 Но даты, времени у всех предписанных в формате MySQL, 473 00:28:07,270 --> 00:28:10,830 и преимущество хранения даты как даты, а не типа VARCHAR 474 00:28:10,830 --> 00:28:15,730 означает, что база данных может фактически переформатировать их в различных форматах, 475 00:28:15,730 --> 00:28:18,800 ли формат американского или европейского формата и т.п. - однако вы хотите его - 476 00:28:18,800 --> 00:28:22,700 гораздо более эффективно, чем если бы это были лишь некоторые общие VARCHAR. 477 00:28:22,700 --> 00:28:25,150 А тут еще некоторые другие BINARY, VARBINARY капли. 478 00:28:25,150 --> 00:28:28,580 Эти большие двоичные объекты, и вы также можете хранить данные 479 00:28:28,580 --> 00:28:30,750 а также геометрические данные в базу данных. 480 00:28:30,750 --> 00:28:34,350 Но для нас, мы обычно заботимся о целых и типа VARCHAR и тому подобное. 481 00:28:34,350 --> 00:28:36,230 Давайте закончим этот пример с домом. 482 00:28:36,230 --> 00:28:40,030 Дома я собираюсь сколь угодно говорить будет 255 символов. 483 00:28:40,030 --> 00:28:42,850 Тогда значение по умолчанию мы могли бы это сделать. 484 00:28:42,850 --> 00:28:47,440 Мы могли бы по умолчанию расставит все по Mather дома, например. 485 00:28:47,440 --> 00:28:49,710 Вот как мы могли бы указать, что база данных 486 00:28:49,710 --> 00:28:52,460 должны обеспечить, чтобы кто-то всегда имеет значение. Но я оставлю это будет. 487 00:28:52,460 --> 00:28:55,270 В самом деле, для людей, которые живут за пределами кампуса, а не в доме, 488 00:28:55,270 --> 00:28:59,590 Может быть, я на самом деле хочу указать, что значение по умолчанию для дома NULL, 489 00:28:59,590 --> 00:29:04,890 , а затем мне нужно проверить эту коробку и сказать базе данных это хорошо, если дома пользователя является NULL. 490 00:29:04,890 --> 00:29:07,270 >> Опять же, это еще один защитный механизм, вы можете поставить на место 491 00:29:07,270 --> 00:29:10,590 так что вам даже не придется положить его в PHP кода обязательно. 492 00:29:10,590 --> 00:29:14,630 Эта база данных будет гарантировать, что вещи являются или не являются NULL. 493 00:29:14,630 --> 00:29:17,310 И тогда, наконец, атрибутов. 494 00:29:17,310 --> 00:29:18,920 Ни один из них действительно актуальна. 495 00:29:18,920 --> 00:29:22,880 Binary, без знака - ни один из тех, которые относятся к VARCHAR. 496 00:29:22,880 --> 00:29:24,220 Индекс. 497 00:29:24,220 --> 00:29:27,320 Кто-нибудь знает или помнит или есть предположение о том, что индекс 498 00:29:27,320 --> 00:29:29,510 что-то вроде дома? 499 00:29:29,510 --> 00:29:35,240 Это тоже на самом деле является важным и относительно легко дизайнерское решение. 500 00:29:35,240 --> 00:29:39,200 Для тех, кто еще не видел, в пятницу мы вкратце рассказал о первичных ключей. 501 00:29:39,200 --> 00:29:43,240 В базе данных таблицы, первичный ключ поле или столбце 502 00:29:43,240 --> 00:29:46,270 , который однозначно идентифицирует строки в таблице. 503 00:29:46,270 --> 00:29:49,150 Таким образом, в текущей таблице у нас есть идентификаторы, у нас есть имена и адреса. 504 00:29:49,150 --> 00:29:52,050 Какой из них является лучшим кандидатом, чтобы быть первичным ключом, 505 00:29:52,050 --> 00:29:55,810 роль которого заключается в уникальной идентификации строк? 506 00:29:55,810 --> 00:29:57,530 Наверное ID. 507 00:29:57,530 --> 00:29:59,930 Возможно, мы могли бы использовать то, что хоть? 508 00:29:59,930 --> 00:30:02,860 Может быть, вы могли бы использовать электронную почту, потому что в теории это уникальный 509 00:30:02,860 --> 00:30:05,380 если люди делятся учетных записей электронной почты. 510 00:30:05,380 --> 00:30:09,980 Но реальность такова, что если вы используете цифровой идентификатор типа 1234, 511 00:30:09,980 --> 00:30:14,170 вот только 32 бита, в то время как адрес электронной почты, может быть это количество байт, или это много байт. 512 00:30:14,170 --> 00:30:16,610 Таким образом, с точки зрения эффективности для уникальных идентификаторов, 513 00:30:16,610 --> 00:30:19,270 он имеет тенденцию быть хорошая практика просто использовать Int 514 00:30:19,270 --> 00:30:23,090 даже если у вас есть строка кандидата, что вы могли возможно использовать. 515 00:30:23,090 --> 00:30:26,760 >> За то, как дом, это не должно быть первичным ключом 516 00:30:26,760 --> 00:30:30,770 потому что тогда только 1 человек мог жить в Мазер и 1 человек в Currier и тому подобное. 517 00:30:30,770 --> 00:30:32,790 Кроме того, это не должно быть уникальным. 518 00:30:32,790 --> 00:30:37,830 Разница между первичным и уникальна тем, что в случае нашей текущей таблицы, 519 00:30:37,830 --> 00:30:42,620 ID будет первичным, но письмо не является первичным по той причине, мы только что упомянули - 520 00:30:42,620 --> 00:30:44,740 производительность - но он все равно должны быть уникальными. 521 00:30:44,740 --> 00:30:47,200 Итак, вы все еще можете обеспечить уникальность без претензий 522 00:30:47,200 --> 00:30:49,520 что это супер важно первичное поле. 523 00:30:49,520 --> 00:30:52,610 Но эта является весьма полезным: Индекс. 524 00:30:52,610 --> 00:30:56,180 Если вы заранее знаете, для окончательного проекта, для PSET 7, или в целом, 525 00:30:56,180 --> 00:30:59,480 что это поле доме будет то, что вы поиск по много 526 00:30:59,480 --> 00:31:01,910 помощью выбора ключевого слова или еще что-то, 527 00:31:01,910 --> 00:31:05,180 , то вы можете сказать превентивно базы данных для работы своей магии 528 00:31:05,180 --> 00:31:10,510 и убедитесь, что оно создает в памяти любые фантазии структур данных, необходимых 529 00:31:10,510 --> 00:31:13,770 для ускорения поиска на основе доме. 530 00:31:13,770 --> 00:31:17,860 Может быть, он будет использовать хэш-таблицы, может быть, он будет использовать связанный список. 531 00:31:17,860 --> 00:31:21,260 На самом деле, он стремится использовать дерево, часто называют структурой B-дерева - 532 00:31:21,260 --> 00:31:24,090 Не бинарное дерево, но B-дерева - который является очень широким деревом 533 00:31:24,090 --> 00:31:27,370 что вы могли видеть в класс, как CS124, класс структур данных. 534 00:31:27,370 --> 00:31:31,800 Но в общем, вам не придется беспокоиться о том, что при использовании интеллектуальное программное обеспечение базы данных. 535 00:31:31,800 --> 00:31:35,890 Вы можете просто сказать, что это, "Индекс этой области, поэтому я могу найти на него более эффективно". 536 00:31:35,890 --> 00:31:40,250 >> Если вы оставите эту выключен и вы попробуйте поискать в любой базе данных, которая живет в Mather, 537 00:31:40,250 --> 00:31:42,710 он превратится в линейный поиск. 538 00:31:42,710 --> 00:31:45,360 И если у вас есть 6000 старшекурсники все живое в некотором доме, 539 00:31:45,360 --> 00:31:47,900 Вы собираетесь выполнить поиск по всей таблице, чтобы найти Matherites, 540 00:31:47,900 --> 00:31:52,190 а если вы говорите Index, надеемся, это будет что-то близкое к логарифмическому поиск 541 00:31:52,190 --> 00:31:54,510 чтобы найти те виды студентов. 542 00:31:54,510 --> 00:31:56,750 Это просто бесплатная функция включается, 543 00:31:56,750 --> 00:31:59,530 даже если она придет по цене некоторое количество пространства. 544 00:31:59,530 --> 00:32:02,690 Наконец, автоматическое приращение этой области А.И., 545 00:32:02,690 --> 00:32:05,830 который просто означает, что если это Int и вы не хотите, чтобы заботиться, чтобы увеличить это сами 546 00:32:05,830 --> 00:32:07,570 каждый раз, когда есть новый пользователь, проверить, что 547 00:32:07,570 --> 00:32:11,910 и каждый пользователь, который получает вставлен автоматически получить новый ID. 548 00:32:11,910 --> 00:32:15,620 Давайте нажмите кнопку Сохранить, а теперь давайте придираться к этому дизайну. 549 00:32:15,620 --> 00:32:20,200 Если я иду на Browse, обратите внимание, что оба Майк и мой дом NULL. 550 00:32:20,200 --> 00:32:22,420 Я могу использовать PHPMyAdmin редактировать вручную. 551 00:32:22,420 --> 00:32:25,110 Я могу пойти сюда и введите Mather, а затем нажмите Enter, 552 00:32:25,110 --> 00:32:27,740 и теперь замечаю таблицы разные. 553 00:32:27,740 --> 00:32:29,270 Но заметьте, что я мог бы сделать что-то еще. 554 00:32:29,270 --> 00:32:33,530 ID Дэвида 1, так PHPMyAdmin снова просто средство администрирования; 555 00:32:33,530 --> 00:32:35,970 это не то, что ваши пользователи никогда не увидят. 556 00:32:35,970 --> 00:32:38,810 Так что, если я вместо этого нажмите на вкладку SQL наверху - 557 00:32:38,810 --> 00:32:41,450 и снова, PSET 7 познакомим вас с более из этих запросов - 558 00:32:41,450 --> 00:32:45,260 Я могу вручную запустить SQL структурированного языка запросов команд 559 00:32:45,260 --> 00:32:56,410 UPDATE пользователей SET доме = 'Pfoho' WHERE ID = 1. 560 00:32:56,410 --> 00:33:00,830 Эти SQL запросов, приятно достаточно, довольно читается слева направо. 561 00:33:00,830 --> 00:33:04,350 Обновление таблицы пользователей, установите в поле называют дом Pfoho 562 00:33:04,350 --> 00:33:06,830 где идентификатор пользователя равен 1. 563 00:33:06,830 --> 00:33:11,480 Или я мог бы еще заняться в электронную = 'malan@harvard.edu. 564 00:33:11,480 --> 00:33:14,860 Пока что однозначно идентифицирует меня, что будет работать также. 565 00:33:14,860 --> 00:33:18,810 Но ID, как правило, более высокую производительность, так что давайте делать это. 566 00:33:18,810 --> 00:33:22,950 Давайте нажмите кнопку Перейти. Хорошо, lecture.users не существует. Что моя ошибка? 567 00:33:22,950 --> 00:33:26,220 Что таблице на самом деле называется здесь? 568 00:33:26,220 --> 00:33:28,770 Это называется студентов только потому, что это то, что мы сделали здесь в верхнем левом углу. 569 00:33:28,770 --> 00:33:31,860 Это называется студентов, а не пользователей. Таким образом, нажмите кнопку Перейти сейчас. 570 00:33:31,860 --> 00:33:34,330 1 строка пострадавших. Запрос затрачено 0.01 сек. 571 00:33:34,330 --> 00:33:38,010 Если я нажмите кнопку Обзор, сейчас, сейчас Малан живет в Pfoho. 572 00:33:38,010 --> 00:33:42,070 Так вот другой вкус SQL, но PSET, вы пройдете через немного больше об этом. 573 00:33:42,070 --> 00:33:44,710 >> Там очень глупое решение я уже сделал здесь. 574 00:33:44,710 --> 00:33:47,820 Я бы сказал, что это проектирование баз данных является неэффективной 575 00:33:47,820 --> 00:33:51,650 потому что чем больше людей, которых я добавить в таблицу студентов, 576 00:33:51,650 --> 00:33:54,730 Чем больше нас я начинаю добавив, тем больше я начинаю ТФ добавив, 577 00:33:54,730 --> 00:33:58,320 Мы собираемся начать видеть то, что увольнений в этой таблице? 578 00:34:00,840 --> 00:34:06,020 >> Да. [Студент] видя, что она находится в студенты, мы используем тот же [неразборчиво] 579 00:34:06,020 --> 00:34:07,360 То же самое - Да, точно. 580 00:34:07,360 --> 00:34:10,400 Так что если 400 человек живут в Mather, плюс-минус, 581 00:34:10,400 --> 00:34:15,000 в конце концов эта таблица будет иметь 400 строк, которые говорят "Мазер", "Мазер," 582 00:34:15,000 --> 00:34:16,590 "Мазер", "Мазер", "Mather». 583 00:34:16,590 --> 00:34:19,820 Мы теряем все эти байты, и есть пара вынос там. 584 00:34:19,820 --> 00:34:23,080 1, есть сумасшедшая случае угол, где, если кто-то платит большие деньги 585 00:34:23,080 --> 00:34:25,949 и переименовывает Mather, теперь мы должны изменить всю нашу таблицу базы данных. 586 00:34:25,949 --> 00:34:29,730 Это не будет происходить часто, хотя Pfoho когда-то называли Северной дом 15 лет назад, 587 00:34:29,730 --> 00:34:32,310 так бывает. Но это еще не все, что убедительно. 588 00:34:32,310 --> 00:34:36,000 Более убедительными, чем угла случае, как у нуждающихся в обновлении данных в объемных 589 00:34:36,000 --> 00:34:41,150 для базы данных, почему вы храните MATHER снова и снова и снова и снова? 590 00:34:41,150 --> 00:34:43,020 Это много символов, 6 символов. 591 00:34:43,020 --> 00:34:45,500 Разве мы не можем сделать еще лучше, чем, особенно для Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Конечно, мы можем сделать лучше, чем много символов. 593 00:34:48,320 --> 00:34:51,790 Почему бы не связать уникальный идентификатор с каждым домом 594 00:34:51,790 --> 00:34:55,020 и магазин, что для каждого пользователя? Так давайте попробуем это. 595 00:34:55,020 --> 00:35:00,610 Вместо того, чтобы просто использовать студенты стола, отпустил меня до моей лекции базу данных здесь, в верхнем левом углу. 596 00:35:00,610 --> 00:35:02,600 Обратите внимание, здесь он говорит Создать таблицу. 597 00:35:02,600 --> 00:35:04,550 Позвольте мне создать новую таблицу с именем домов. 598 00:35:04,550 --> 00:35:08,880 Количество столбцов будет 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Теперь у меня есть 2 поля. 600 00:35:11,200 --> 00:35:14,600 Я буду называть это имя, и это будет VARCHAR длиной 255, 601 00:35:14,600 --> 00:35:18,770 >> но это довольно произвольно. Позвольте мне сказать это здесь по соглашению. 602 00:35:18,770 --> 00:35:22,840 Так что ставьте ID здесь. Давайте каждый дом уникальным идентификатором. 603 00:35:22,840 --> 00:35:25,360 Давайте каждый дом имени. 604 00:35:25,360 --> 00:35:30,980 Уточним, что идентификатор будет без знака только по соглашению использовать только положительные числа. 605 00:35:30,980 --> 00:35:35,020 Давайте идти вперед и дать этому автоинкрементного поле на данный момент. 606 00:35:35,020 --> 00:35:38,160 И нужно ли нам что-нибудь еще? 607 00:35:38,160 --> 00:35:41,010 Давайте идти вперед и нажмите кнопку Сохранить. 608 00:35:41,010 --> 00:35:42,480 Теперь у меня есть второй таблицы. 609 00:35:42,480 --> 00:35:45,860 Обратите внимание, как в сторону это немного загадочное SQL команды 610 00:35:45,860 --> 00:35:50,280 что вы должны были бы ввести вручную, если не используется административный инструмент, как PHPMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Таким образом, еще одна причина, мы ее используем. 612 00:35:51,990 --> 00:35:55,480 Это удивительно полезны рода педагогически, потому что вы можете щелкнуть по 613 00:35:55,480 --> 00:36:01,050 и выяснить, как работают вещи простым копированием и вставкой, что PhpMyAdmin сделал. 614 00:36:01,050 --> 00:36:04,150 Но команду Создать таблицу что только что было выполнено, и вот мой стол. 615 00:36:04,150 --> 00:36:11,370 Позвольте мне теперь идти вперед и использовать сырые SQL, а не упрощать, нажав на вкладку Вставка. 616 00:36:11,370 --> 00:36:15,040 Позвольте мне сделать INSERT INTO домов, 617 00:36:15,040 --> 00:36:22,230 и я собираюсь сказать, что название дома будет иметь значение 'Mather. 618 00:36:22,230 --> 00:36:24,790 Вот и все. Этот синтаксис является немного более загадочными. 619 00:36:24,790 --> 00:36:26,660 Это имя поля мы хотим вставить. 620 00:36:26,660 --> 00:36:30,390 Это те ценности, которые надо вставить в этих областях. Позвольте мне кнопку Go. 621 00:36:30,390 --> 00:36:34,410 1 строка вставляется взял 0,02 секунды. Позвольте мне теперь нажмите кнопку Обзор. 622 00:36:34,410 --> 00:36:42,020 >> Обратите внимание, если я нажмите кнопку Обзор, есть Mather, идентификатор которого по автоматизации № 1. 623 00:36:42,020 --> 00:36:45,000 Позвольте мне сделать еще один. Позвольте мне перейти в закладку SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO домов. Название дома будет иметь значение Pfoho и так далее. 625 00:36:52,950 --> 00:36:56,350 Go. И я могу продолжать делать это снова и снова, и снова. 626 00:36:56,350 --> 00:36:59,470 Или, если вам скучно использованием PHPMyAdmin, вы можете просто использовать вкладку Вставка 627 00:36:59,470 --> 00:37:01,000 и не придется вводить сырые SQL. 628 00:37:01,000 --> 00:37:04,690 Вы можете просто ударить его быстрее, набрав, например, курьер, Enter 629 00:37:04,690 --> 00:37:07,610 и теперь, если мы нажмите кнопку Обзор, есть курьер с ID 3. 630 00:37:07,610 --> 00:37:09,920 Так это то, что мы подразумеваем под автоинкрементного. 631 00:37:09,920 --> 00:37:12,280 Но теперь мы должны исправить что-то в студенты. 632 00:37:12,280 --> 00:37:16,240 В студентами, что должно тип данных поля доме теперь быть? 633 00:37:16,240 --> 00:37:19,450 Это должно быть целое число, не так ли? 634 00:37:19,450 --> 00:37:23,950 Таким образом, цель здесь, чтобы вынести за скобки, иначе известный как нормализация, таблицы 635 00:37:23,950 --> 00:37:27,940 так что мы не храним информацию избыточно ни в одном из моих таблиц. 636 00:37:27,940 --> 00:37:31,130 И снова путь, которым мы были здесь собирается сказать Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, что очень избыточных 638 00:37:34,220 --> 00:37:36,240 с точки зрения расточительности символов. 639 00:37:36,240 --> 00:37:40,820 Итак, позвольте мне идти вперед и изменить это, нажав структура, 640 00:37:40,820 --> 00:37:44,620 и позвольте мне пойти дальше и проверить у дома поля, нажмите кнопку Изменить 641 00:37:44,620 --> 00:37:46,990 и теперь я собираюсь изменить это, чтобы быть Int. 642 00:37:46,990 --> 00:37:49,490 255 уже не актуально. 643 00:37:49,490 --> 00:37:54,010 Позвольте мне пойти дальше и сказать, что это хорошо, если она по-прежнему NULL. Сохранить. 644 00:37:54,010 --> 00:37:55,870 Теперь таблица студентов был изменен успешно, 645 00:37:55,870 --> 00:37:59,090 и обратите внимание, опять дома Int. 646 00:37:59,090 --> 00:38:02,220 Как в стороне, игнорировать число в скобках, когда дело доходит до целых чисел. 647 00:38:02,220 --> 00:38:03,770 >> Это для старых причинами. 648 00:38:03,770 --> 00:38:06,920 Еще в тот день, когда у вас не было графического интерфейса, вы вместо этого был среду командной строки, 649 00:38:06,920 --> 00:38:11,580 10 и 11 соответственно указано, сколько символов вы должны показать 650 00:38:11,580 --> 00:38:13,950 в окне терминала на самом деле отображения полей. 651 00:38:13,950 --> 00:38:19,150 Это не имеет ничего общего с битовой длины фактического поля, поэтому мы будем просто игнорировать, что в настоящее время. 652 00:38:19,150 --> 00:38:20,990 Теперь я должен идти в эту таблицу. 653 00:38:20,990 --> 00:38:24,610 И если Дэвид живет в Mather, дом не должен быть 0, 654 00:38:24,610 --> 00:38:27,350 , которая является значением по умолчанию Int ближе к NULL. 655 00:38:27,350 --> 00:38:29,810 Он должен жить в доме 1. 656 00:38:29,810 --> 00:38:36,870 Давайте сколь угодно говорить, что Майк живет в Pfoho, поэтому дома номер 2. 657 00:38:36,870 --> 00:38:40,160 Теперь моя таблица выглядит немного более загадочными. 658 00:38:40,160 --> 00:38:41,960 Но рассмотрим эффективность. 659 00:38:41,960 --> 00:38:44,860 Я теперь использует только 32 бита для идентификации дом, 660 00:38:44,860 --> 00:38:49,530 что означает, что только 1 канонического определения моего дома Mather и Pfoho 661 00:38:49,530 --> 00:38:52,090 и это в таблице домов. 662 00:38:52,090 --> 00:38:55,880 Так что, если я хочу сейчас вернуться этих таблиц, подумайте вот о чем. 663 00:38:55,880 --> 00:39:01,980 Вот у меня есть мои ученики стол, а на правой стороне есть эти цифры, 1 и 2. 664 00:39:01,980 --> 00:39:04,180 1, Mather, 2, Pfoho. 665 00:39:04,180 --> 00:39:08,580 У нас есть те же числа в этой другой таблице, которая называется домов, 666 00:39:08,580 --> 00:39:11,020 1 и 2 и 3 для тех, 3 дома. 667 00:39:11,020 --> 00:39:14,990 То, что мы сейчас хотим сделать, это иметь возможность в коде PHP и SQL, 668 00:39:14,990 --> 00:39:18,800 к виду воссоединиться с этими таблицами, где, если они являются студентами и эти дома, 669 00:39:18,800 --> 00:39:22,050 Мы хотим, чтобы как-то объединить их таким образом, что 1 линии с 1, 670 00:39:22,050 --> 00:39:25,670 2 линии с 2, так что мы можем выяснить, где Давид 671 00:39:25,670 --> 00:39:28,000 и где Майк и где все еще живет. 672 00:39:28,000 --> 00:39:31,850 Для этого мы можем выполнить SQL запрос вроде следующего. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM студентов присоединиться домов ON - 674 00:39:40,470 --> 00:39:43,000 А теперь, какие поля мы хотим вступить на? 675 00:39:43,000 --> 00:39:49,520 Так students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Немного загадочно, но эта часть буквально означает создать новую временную таблицу 677 00:39:54,150 --> 00:39:56,690 вот и результат присоединения студентов и домов. 678 00:39:56,690 --> 00:40:00,340 А как вы хотите совместить кончиками пальцев здесь? 679 00:40:00,340 --> 00:40:05,280 Набор студентов доме поля равна домов поля ID. 680 00:40:05,280 --> 00:40:10,220 И если я сейчас нажмите кнопку Перейти, я вернусь именно то, что я надеялся. 681 00:40:10,220 --> 00:40:15,890 Давид в Mather, Майк находится в Pfoho, и я также увидеть уникальные идентификаторы. 682 00:40:15,890 --> 00:40:18,640 Но дело в том, теперь у меня есть полная таблица. 683 00:40:18,640 --> 00:40:23,020 И так вынос здесь PSET 7 или действительно для окончательного проекта: 684 00:40:23,020 --> 00:40:25,830 Если вы обнаружите, что вы хранения любой информации избыточно, 685 00:40:25,830 --> 00:40:28,850 будь то дом, может быть, это город, штат и почтовый 686 00:40:28,850 --> 00:40:32,050 ZIP, где, как правило, но не всегда может быть использован в качестве уникального идентификатора, 687 00:40:32,050 --> 00:40:35,810 придется ехать через упражнения мысленно, а затем что-то вроде PHPMyAdmin 688 00:40:35,810 --> 00:40:40,660 факторинга, что общие данные, так как особенно ваш сайт становится более хорошо использовать 689 00:40:40,660 --> 00:40:45,440 и более популярными, это, как вы убедитесь, что все супер быстрый, 690 00:40:45,440 --> 00:40:51,930 путем предоставления базы данных, как многие намеки на уникальность насколько это возможно. 691 00:40:51,930 --> 00:40:53,860 Это было много. 692 00:40:53,860 --> 00:40:59,010 Есть вопросы? Хорошо. Давайте 5-минутный перерыв там и перегруппироваться. 693 00:41:01,600 --> 00:41:03,540 Хорошо. 694 00:41:03,540 --> 00:41:08,680 Ниже приведен пример, который был использован несколько лет назад, когда я взял CS161, 695 00:41:08,680 --> 00:41:10,960 которая является операционных систем класса в колледже 696 00:41:10,960 --> 00:41:15,160 которая известна тем, что удивительно, но сумасшедший объем работы, 697 00:41:15,160 --> 00:41:19,810 и он сосредоточен на самом деле на некоторых из низкого уровня проблем, возникающих в операционные системы 698 00:41:19,810 --> 00:41:22,700 и даже в мире баз данных. 699 00:41:22,700 --> 00:41:27,040 >> История, которую рассказал мой профессор, Марго Зельцер, что год был следующим. 700 00:41:27,040 --> 00:41:30,990 Предположим, что у вас есть маленький холодильник общежития для вас и ваших соседей 701 00:41:30,990 --> 00:41:34,030 и оба вы действительно любите молоко. 702 00:41:34,030 --> 00:41:36,360 Итак, вы приходите домой из класса в один прекрасный день, ваш сосед по комнате еще не было, 703 00:41:36,360 --> 00:41:39,650 Вы открываете холодильник, и вы понимаете: "О, черт, мы из молока". 704 00:41:39,650 --> 00:41:42,070 Таким образом, вы закрываете холодильник, вы идете по улице, чтобы CVS 705 00:41:42,070 --> 00:41:45,830 и получить в более длинных очередях, чтобы купить молока в CVS. 706 00:41:45,830 --> 00:41:48,470 Между тем, ваш сосед приходит домой из своего класса, 707 00:41:48,470 --> 00:41:51,690 входит в комнату, открывает холодильник действительно желающих молока, 708 00:41:51,690 --> 00:41:54,130 открывает холодильник и "Черт, нет молока". 709 00:41:54,130 --> 00:41:57,890 Таким образом, он или она закрывает холодильник, выходит за дверь, и идет в ABP 710 00:41:57,890 --> 00:42:00,910 или где-то кроме CVS, где вы не собираетесь сталкиваются друг с другом 711 00:42:00,910 --> 00:42:02,790 пойти получить немного молока. 712 00:42:02,790 --> 00:42:04,820 Конечно, спустя несколько минут, вы оба вернетесь домой 713 00:42:04,820 --> 00:42:07,740 и теперь у вас есть в два раза больше молока, как вы на самом деле хотели. 714 00:42:07,740 --> 00:42:10,670 И, молоко, теперь он собирается идти плохо, потому что вы любите молоко 715 00:42:10,670 --> 00:42:14,200 но вы действительно не нравится молоко, так что теперь у вас слишком много молока, поэтому это будет портиться. 716 00:42:14,200 --> 00:42:16,830 Это ужасно, ужасно ситуации. 717 00:42:16,830 --> 00:42:22,920 Что могло бы решить эту затруднительном положении, если вы были первым домом соседа по комнате? Да. 718 00:42:22,920 --> 00:42:25,970 [Студент] Вы должны были оставить записку. [Смех] 719 00:42:25,970 --> 00:42:28,090 Хорошо. Вы должны были оставить записку. 720 00:42:28,090 --> 00:42:32,320 Вы должны были положить Пост-это к сведению или, как говорят, "Унесенные для молока", 721 00:42:32,320 --> 00:42:36,830 и тогда ваш сосед по комнате концептуально была бы заблокирована на самом деле делать это. 722 00:42:36,830 --> 00:42:38,010 Или вы могли бы пойти на 1 шаг дальше. 723 00:42:38,010 --> 00:42:41,060 Вы могли буквально запереть холодильник с какой-то замок, 724 00:42:41,060 --> 00:42:44,870 и теперь ваш сосед по комнате в буквальном смысле будет заблокирована из холодильника. 725 00:42:44,870 --> 00:42:48,520 Если обобщить вернуться к программированию, 726 00:42:48,520 --> 00:42:51,610 Вы можете подумать, из холодильника как некая переменная или структура, 727 00:42:51,610 --> 00:42:53,500 своего рода контейнер для информации. 728 00:42:53,500 --> 00:42:58,290 Проблема принципиально здесь то, что вы оба были разрешены для проверки 729 00:42:58,290 --> 00:43:02,370 или читать состояние этой структуры данных, 730 00:43:02,370 --> 00:43:08,050 но вы рассматривали его в разные времена и еще вы оба приняли решение 731 00:43:08,050 --> 00:43:11,920 в зависимости от состояния мира в эти различные моменты времени. 732 00:43:11,920 --> 00:43:15,570 Так, если бы вы заперты в холодильнике, вы бы по крайней мере, избежать ваш сосед по комнате 733 00:43:15,570 --> 00:43:19,070 от того, были в состоянии проверить состояние мира, 734 00:43:19,070 --> 00:43:22,530 чтобы он или она не мог бы сделать то же решение. 735 00:43:22,530 --> 00:43:25,780 Так баз данных, как выясняется, есть эта проблема постоянно. 736 00:43:25,780 --> 00:43:31,050 >> Давайте посмотрим, если мы можем построить сценарий. 737 00:43:31,050 --> 00:43:34,310 Предположим, что вы вроде плохого парня, и вы идете в банк Америки 738 00:43:34,310 --> 00:43:37,950 или одной из других мест на площади, которые имеют сторону пару банкоматов с другом, 739 00:43:37,950 --> 00:43:41,200 и каким-то образом вы поняли, как дублировать банкомат карту - не все так сложно. 740 00:43:41,200 --> 00:43:42,730 Это всего лишь магнитной полосой. 741 00:43:42,730 --> 00:43:45,180 И поэтому то, что вы хотите, чтобы попытаться сделать, это играть в эту игру 742 00:43:45,180 --> 00:43:49,060 которому вы положили 1 карта на 1 машину, еще одну карту на другую машину, 743 00:43:49,060 --> 00:43:51,980 и вы, по сути хотите, чтобы попытаться снять деньги одновременно, 744 00:43:51,980 --> 00:43:54,930 потому что представьте себе, что история идет следующим образом. 745 00:43:54,930 --> 00:43:57,350 Машина слева берет вашу карту и PIN-код, 746 00:43:57,350 --> 00:44:00,240 и тогда вы говорите: «Дайте мне 100 долларов». 747 00:44:00,240 --> 00:44:04,790 Банкомат запрограммирован сначала сделать выбор в его базе данных или эквивалент - 748 00:44:04,790 --> 00:44:10,780 все, что база данных он использует - видеть ничего этого пользователя есть по меньшей мере $ 100 в свой аккаунт? 749 00:44:10,780 --> 00:44:16,180 Если так, то выплюнуть $ 100 и $ 100 вычесть из своего баланса. 750 00:44:16,180 --> 00:44:20,470 Но, конечно, если есть несколько машин здесь или несколько способов проверки 751 00:44:20,470 --> 00:44:23,560 состояние этого мира, банковское хранилище, чтобы посмотреть, сколько у вас денег, 752 00:44:23,560 --> 00:44:26,780 Предположим, что просто случайно машину на левой и правой 753 00:44:26,780 --> 00:44:30,140 как задать этот вопрос примерно в то же момент времени. 754 00:44:30,140 --> 00:44:34,160 >> И это, безусловно, может случиться. Банкоматы компьютеров в эти дни. 755 00:44:34,160 --> 00:44:37,670 Таким образом, если машина слева говорит: "Да, у вас есть по крайней мере $ 100", 756 00:44:37,670 --> 00:44:42,150 Тем временем машина на правом говорит: "Да, у вас есть по крайней мере $ 100", 757 00:44:42,150 --> 00:44:47,420 Затем оба действовать до конца своих программах и на самом деле выплюнуть $ 100 758 00:44:47,420 --> 00:44:50,820 и говорят: "Раньше у вас была $ 200." 759 00:44:50,820 --> 00:44:54,890 "Позвольте мне обновить переменную теперь будет $ 100 оставшихся в счет". 760 00:44:54,890 --> 00:44:58,780 Но если оба из них проверили свои счета и обнаружил, что это $ 200 761 00:44:58,780 --> 00:45:02,000 и оба из них, то делать математику и говорят 200 - 100, 762 00:45:02,000 --> 00:45:06,990 Машины потенциально плевать два 100-долларовых купюр в каждой машине, 763 00:45:06,990 --> 00:45:11,360 но они обновляются только ваша сумма баланса составит $ 100. 764 00:45:11,360 --> 00:45:15,130 Другими словами, вы взяли на $ 200, но потому, что они осмотрели состояние мира 765 00:45:15,130 --> 00:45:18,840 одновременно, а затем было принято решение на основе этого значения, 766 00:45:18,840 --> 00:45:21,930 они не могли бы сделать математику в конечном итоге правильно. 767 00:45:21,930 --> 00:45:25,520 Таким образом, в банке ситуацию слишком вы действительно хотите иметь какие-то блокировки 768 00:45:25,520 --> 00:45:28,450 так что, как только вы проверили состояние некоторых переменных 769 00:45:28,450 --> 00:45:31,220 что действительно важно, как ваш баланс счета, 770 00:45:31,220 --> 00:45:36,070 Не позволяйте никому принимать решения, основываясь на этом, пока вы не сделали делают свое дело, 771 00:45:36,070 --> 00:45:38,920 где в этом случае вы банкомат слева. 772 00:45:38,920 --> 00:45:41,160 Блокировка всех остальных из. 773 00:45:41,160 --> 00:45:44,650 Вы действительно можете достичь этого эффекта в несколько различных способов. 774 00:45:44,650 --> 00:45:48,660 >> Самый простой способ в MySQL является линия SQL, что мы дали вам 775 00:45:48,660 --> 00:45:52,030 в спецификации проблема набора, который выглядит так же, как это. 776 00:45:52,030 --> 00:45:57,420 Вставьте в таблицу - там это называется - идентификатор, символ, и акции, количество акций, 777 00:45:57,420 --> 00:45:59,660 следующих значений, например. 778 00:45:59,660 --> 00:46:03,370 Если вы еще не читали спецификацию не менее, это пример, связанный, как вы идете о 779 00:46:03,370 --> 00:46:07,340 покупку 10 акций этой запас пенни на пост президента Skroob, 780 00:46:07,340 --> 00:46:10,340 которых идентификатор пользователя, случается, число 7? 781 00:46:10,340 --> 00:46:14,070 Это говорит INSERT INTO таблица следующий идентификатор, символ, и количеством акций 782 00:46:14,070 --> 00:46:18,200 7, "DVN.V, и 10. 783 00:46:18,200 --> 00:46:21,510 Но - но, но, но - вторая линия является важным. 784 00:46:21,510 --> 00:46:26,310 ON DUPLICATE KEY UPDATE = акции акции + VALUES (акций). 785 00:46:26,310 --> 00:46:28,350 Таким образом, совершенно загадочным перспективных на первый взгляд. 786 00:46:28,350 --> 00:46:31,990 Но дело в том, что этот запрос SQL, даже если она переносится на 2 линии, 787 00:46:31,990 --> 00:46:35,920 составляет 1 длинный запрос, это означает, что это атомное 788 00:46:35,920 --> 00:46:41,000 В том смысле, что этот запрос будет либо выполнены все вместе или нет вообще. 789 00:46:41,000 --> 00:46:45,100 И по определению MySQL, то, как они реализуются этого запроса. 790 00:46:45,100 --> 00:46:51,010 Это, по определению, в руководстве гарантированно выполнять все сразу или не на всех. 791 00:46:51,010 --> 00:46:54,020 Мотивацией для этого состоит в следующем. 792 00:46:54,020 --> 00:46:58,540 Если в этом случае вы пытаетесь купить 10 акций, 793 00:46:58,540 --> 00:47:02,260 это вроде та же история, молока, это вроде та же история, банкомат. 794 00:47:02,260 --> 00:47:04,970 >> Если вы сделали ошибку, не используя следующий синтаксис 795 00:47:04,970 --> 00:47:09,610 но вместо выбора из базы данных, чтобы увидеть, сколько акций этой запас пенни 796 00:47:09,610 --> 00:47:13,750 Президент же Skroob есть, и думаю, что он имеет 10 акций, 797 00:47:13,750 --> 00:47:19,330 , а затем некоторые долю секунды позже вы выполните UPDATE заявление, 798 00:47:19,330 --> 00:47:24,810 что является еще одним заявлением в SQL, который говорит пойти дальше и добавить еще 10 акций 799 00:47:24,810 --> 00:47:28,700 в его нынешней 10, так что в идеале общая 20, 800 00:47:28,700 --> 00:47:33,490 Проблема в том, что в базе данных современных систем и потому, что в современных компьютерах 801 00:47:33,490 --> 00:47:35,990 у вас есть несколько процессоров, нескольких ядер - 802 00:47:35,990 --> 00:47:38,920 Другими словами, компьютер может в буквальном смысле делать несколько вещей одновременно - 803 00:47:38,920 --> 00:47:44,270 нет никакой гарантии, что ваш SELECT, UPDATE и ваша в этом случае 804 00:47:44,270 --> 00:47:46,150 будут происходить спиной к спине. 805 00:47:46,150 --> 00:47:49,140 Так плохой сценарий был бы вы ВЫБОР 806 00:47:49,140 --> 00:47:51,670 чтобы узнать, сколько акций этого запаса пенни же Skroob есть, 807 00:47:51,670 --> 00:47:54,710 а потом просто случайно другую базу данных запрос будет выполнен - 808 00:47:54,710 --> 00:47:57,740 может быть, его Skroob в другом окне браузера пытается купить 10 акций 809 00:47:57,740 --> 00:48:00,700 в другом окне в целом, так же, как ATM - 810 00:48:00,700 --> 00:48:05,410 и предположим, что другой запрос попадает между SELECT, и UPDATE. 811 00:48:05,410 --> 00:48:10,210 Это может быть так, что Skroob сейчас теряет некоторое количество акций 812 00:48:10,210 --> 00:48:14,340 потому что другой процесс проверки состояния его мир, 813 00:48:14,340 --> 00:48:17,800 или он получает больше акций, чем должен был бы. 814 00:48:17,800 --> 00:48:23,250 Мы не будем вдаваться в особенности то, что эти конкретные сюжетные линии будет, 815 00:48:23,250 --> 00:48:28,380 но дело в том, если вы должны проверить переменные значения, а затем принять решение, 816 00:48:28,380 --> 00:48:32,500 если есть риск, что кто-то другой делает что-то среднее между этими 2 заявления, 817 00:48:32,500 --> 00:48:36,220 как может случиться в многопроцессорных системах, в многоядерных системах, 818 00:48:36,220 --> 00:48:41,220 компьютеры с возможностью сделать несколько вещей одновременно, плохие вещи могут случиться 819 00:48:41,220 --> 00:48:44,530 счетах банков, как их списания неправильно, покупая вдвое больше молока, 820 00:48:44,530 --> 00:48:46,730 или в данном случае неправильное количество акций. 821 00:48:46,730 --> 00:48:48,370 Но есть и более простой способ думать об этом. 822 00:48:48,370 --> 00:48:53,290 >> Оказывается, что SQL также поддерживает, если вы настроить таблицу правильно, 823 00:48:53,290 --> 00:48:56,920 то, что называется сделок, которые я бы сказал, на самом деле даже проще для понимания 824 00:48:56,920 --> 00:49:00,650 чем это, но это не 1-лайнера, так что это на самом деле немного сложнее. 825 00:49:00,650 --> 00:49:04,960 Существует буквально с заявлением, в SQL называется START TRANSACTION. 826 00:49:04,960 --> 00:49:08,300 Так же, как есть SELECT, UPDATE, INSERT, DELETE, и присоединиться и куча других, 827 00:49:08,300 --> 00:49:10,970 Есть ключевые слова, как начать транзакцию. 828 00:49:10,970 --> 00:49:13,560 И что вы тогда делаете в контексте PSET 7 - 829 00:49:13,560 --> 00:49:17,270 Вы не должны делать это для PSET 7; он явно отрицал, как не надо, 830 00:49:17,270 --> 00:49:18,830 но для окончательных проектов это может быть полезно - 831 00:49:18,830 --> 00:49:22,820 если вы звоните запрос START TRANSACTION, а затем другой запрос 832 00:49:22,820 --> 00:49:25,620 , а затем еще один запрос, а затем еще, еще, и еще, 833 00:49:25,620 --> 00:49:31,860 эти запросы фактически не будет выполняться до вызова SQL заявление COMMIT, 834 00:49:31,860 --> 00:49:37,220 в этот момент, будь то 2 заявления или 20 заявлений, все они будут выполнены сразу, 835 00:49:37,220 --> 00:49:42,770 это означает, никто не может случайно купить слишком много молока или дебетовой слишком много денег 836 00:49:42,770 --> 00:49:46,340 или купить слишком много акций, потому что все ваши запросы будет выполнять 837 00:49:46,340 --> 00:49:48,410 спиной к спине, чтобы спина к спине. 838 00:49:48,410 --> 00:49:51,580 И это очень важно, особенно когда вы делаете что-то вроде этого. 839 00:49:51,580 --> 00:49:54,900 Это произвольный пример, который говорит давайте обновим банковского счета 840 00:49:54,900 --> 00:50:00,200 путем установления баланса равна баланса - $ 1000, где номер счета 2. 841 00:50:00,200 --> 00:50:04,260 И тогда второй оператор теперь давайте депозит, $ 1000 842 00:50:04,260 --> 00:50:07,310 в чужой банковский счет, счет которого номер 1. 843 00:50:07,310 --> 00:50:10,400 >> Другими словами, это идеальный пример того, где вы хотите, чтобы убедиться, 844 00:50:10,400 --> 00:50:13,590 что оба эти заявления произойти или не на всех 845 00:50:13,590 --> 00:50:15,450 поскольку в противном случае клиент собирается ввернут 846 00:50:15,450 --> 00:50:17,670 и вы собираетесь забрать свои деньги, а не внести его в другом месте, 847 00:50:17,670 --> 00:50:20,470 или банк будет ввернут, где вы собираетесь внести деньги 848 00:50:20,470 --> 00:50:23,140 но на самом деле не вычесть его из учетной записи пользователя. 849 00:50:23,140 --> 00:50:25,810 Итак, вы хотите, чтобы они оба выполнять вместе. 850 00:50:25,810 --> 00:50:29,140 Таким образом входит в мир операций. 851 00:50:29,140 --> 00:50:31,360 Так что это что-то иметь в задней части вашего ума, 852 00:50:31,360 --> 00:50:34,710 не столько для целей только окончательный проект, 853 00:50:34,710 --> 00:50:36,700 Но если вы хотите принять ваш окончательный проект где-то, 854 00:50:36,700 --> 00:50:39,040 если вы хотите, чтобы запустить некоторые компании вокруг него, 855 00:50:39,040 --> 00:50:41,270 если вы хотите решить проблему некоторые студенческие группы на территории кампуса 856 00:50:41,270 --> 00:50:45,210 и на самом деле есть живой, активный сайт, это своего рода тонкие ошибки, которые могут возникнуть 857 00:50:45,210 --> 00:50:49,480 если вы не совсем продумать, что может случиться, если 2 человека 858 00:50:49,480 --> 00:50:54,190 пытаются получить доступ к вашему сайту в буквальном и тот же момент времени, 859 00:50:54,190 --> 00:50:56,890 которой их запросы могли бы получить переплетаются между собой. 860 00:50:58,840 --> 00:51:01,420 >> Готовы к некоторым JavaScript, тизер его? 861 00:51:01,420 --> 00:51:04,320 Это наш последний языка в течение семестра. Хорошо. 862 00:51:04,320 --> 00:51:09,940 К счастью, JavaScript выглядит очень, очень, очень похожие на 2-х языках, C и PHP, 863 00:51:09,940 --> 00:51:11,140 мы сделали до сих пор. 864 00:51:11,140 --> 00:51:14,340 Там нет JavaScript в PSET 7, но это невероятно полезный инструмент 865 00:51:14,340 --> 00:51:18,840 когда дело доходит до веб-проектов или окончательных действительно только веб-программирования в целом. 866 00:51:18,840 --> 00:51:20,950 Таким образом, краткий обзор того, что называется DOM. 867 00:51:20,950 --> 00:51:23,600 Вот это супер простую веб-страницу, которая действительно просто говорит Здравствуй, мир! 868 00:51:23,600 --> 00:51:25,970 как в названии и в теле. 869 00:51:25,970 --> 00:51:29,270 Как отступ было предположить некоторое время, 870 00:51:29,270 --> 00:51:31,380 действительно существует иерархия веб-страниц. 871 00:51:31,380 --> 00:51:34,220 Я мог нарисовать этот же фрагмент HTML в виде дерева, 872 00:51:34,220 --> 00:51:37,470 вспоминая наши обсуждения структур данных в C, следующим образом. 873 00:51:37,470 --> 00:51:40,710 У меня есть некоторые специальные корневой узел называется узлом документа, 874 00:51:40,710 --> 00:51:43,650 и мы увидим, аналог этого в наличие в одну минуту. 875 00:51:43,650 --> 00:51:48,330 Первым ребенком и единственным сыном, что в данном случае является HTML тегов. 876 00:51:48,330 --> 00:51:49,880 Там нет прямого отображения типа документа. 877 00:51:49,880 --> 00:51:53,170 Это особая вещь, поэтому мы должны просто игнорировать его, когда дело доходит до этого DOM, 878 00:51:53,170 --> 00:51:55,810 эта объектная модель документов дерево. 879 00:51:55,810 --> 00:51:59,530 Обратите внимание, что тег HTML, который я произвольно изображены в виде прямоугольника, 880 00:51:59,530 --> 00:52:02,890 имеет 2 детей: голова и тело. 881 00:52:02,890 --> 00:52:04,840 >> Те, которые так же рисуется как прямоугольники. 882 00:52:04,840 --> 00:52:08,970 Это имеет смысл наглядно, что голова слева от тела. 883 00:52:08,970 --> 00:52:11,960 Подразумевается, что голова идет первым в дерево. 884 00:52:11,960 --> 00:52:14,910 Так что там на самом деле заказ на дерево, когда вы рисуете это так, 885 00:52:14,910 --> 00:52:17,460 хотя формы и еще много чего являются произвольными. 886 00:52:17,460 --> 00:52:20,360 Между тем руководитель имеет одного ребенка, называют названия, 887 00:52:20,360 --> 00:52:25,170 и название на самом деле имеет свой собственный ребенок, который является "привет, мир", 888 00:52:25,170 --> 00:52:32,210 которые я намеренно обратил как овал здесь, чтобы сделать это немного отличается от прямоугольника. 889 00:52:32,210 --> 00:52:37,420 Эти прямоугольники элементов, в то время как привет, мир действительно текстового узла. 890 00:52:37,420 --> 00:52:39,850 Так что это узел в дереве, но это другой тип узла 891 00:52:39,850 --> 00:52:41,730 так что я обратил его произвольно по-разному. 892 00:52:41,730 --> 00:52:45,000 Точно так же ничего теле есть ребенок называется Hello, World, а также, 893 00:52:45,000 --> 00:52:47,910 так другой узел даже если они случайно и тот же текст, 894 00:52:47,910 --> 00:52:52,100 но я нарисовал его, используя ту же форму. Так кого это волнует? 895 00:52:52,100 --> 00:52:56,820 Ну, что хорошее о HTML является то, что у него есть эта иерархическая природа. 896 00:52:56,820 --> 00:53:01,010 И что приятно о JavaScript и, в частности библиотек, которые находятся в свободном доступе 897 00:53:01,010 --> 00:53:07,120 и популярной, как jQuery, вы можете перемещаться по структуре дерева так удивительно легко. 898 00:53:07,120 --> 00:53:11,790 Любой из материала, который мы сделали в C с указателями и перемещения деревьев и рекурсии на узлах 899 00:53:11,790 --> 00:53:15,300 левая ребенка права ребенка, вдруг мы можем сортировать считать само собой разумеющимся 900 00:53:15,300 --> 00:53:19,450 как удивительно просветительской если совсем не расстраивает 901 00:53:19,450 --> 00:53:22,470 но далеко не эффективный способ идти о программировании. 902 00:53:22,470 --> 00:53:24,470 И так с этим высокий уровень языки, как JavaScript 903 00:53:24,470 --> 00:53:28,340 мы сможем перемещаться по дереву гораздо более интуитивно. 904 00:53:28,340 --> 00:53:30,430 >> И действительно, синтаксис будет хорошо знакомы. 905 00:53:30,430 --> 00:53:32,950 Если вы никогда не видели прежде JavaScript, это действительно хорошая ссылка 906 00:53:32,950 --> 00:53:35,910 от Mozilla люди, люди, которые делают Firefox, 907 00:53:35,910 --> 00:53:38,370 так что не стесняйтесь просматривать, что в вашем удобстве. 908 00:53:38,370 --> 00:53:41,590 Что вы найдете - и эти слайды идентичны тем, что мы использовали другой день - 909 00:53:41,590 --> 00:53:44,030 Аналогично, основные ушел. 910 00:53:44,030 --> 00:53:47,010 Поэтому, когда вы пишете программу в JavaScript, нет главной функции. 911 00:53:47,010 --> 00:53:48,690 Вы просто начать писать код. 912 00:53:48,690 --> 00:53:51,660 Но ключевое различие между JavaScript и C и PHP 913 00:53:51,660 --> 00:53:55,890 является то, что в то время как C и PHP до сих пор были выполнены на стороне сервера 914 00:53:55,890 --> 00:53:59,180 на устройство в этом случае или в более общем-сервером, 915 00:53:59,180 --> 00:54:04,270 Наличие по конструкции обычно выполняется с помощью браузера. 916 00:54:04,270 --> 00:54:08,440 Другими словами, вы можете написать код JavaScript, когда мы собираемся, 917 00:54:08,440 --> 00:54:13,080 на сервере в прибор, но включить ее в число ваших HTML, среди ваших CSS, 918 00:54:13,080 --> 00:54:16,100 Среди ваших GIF-и PNG-ваши и вашего изображения в формате JPEG 919 00:54:16,100 --> 00:54:19,170 так что, когда пользователь посещает веб-страницу, если вы используете JavaScript, 920 00:54:19,170 --> 00:54:21,770 , что код JavaScript приходит от сервера к браузеру, 921 00:54:21,770 --> 00:54:24,540 и это браузер, который фактически выполняет его. 922 00:54:24,540 --> 00:54:27,960 Так что это имеет значимые последствия даже для интеллектуальной собственности. 923 00:54:27,960 --> 00:54:32,600 Это глупо даже думать о защите вашего IP когда дело доходит до кода JavaScript 924 00:54:32,600 --> 00:54:37,560 потому что по своей природе языка он запускается на выполнение обычно стороне браузера. 925 00:54:37,560 --> 00:54:40,360 >> Вы можете скрыть его, что означает, что вы можете сделать его с ума, и уродливое 926 00:54:40,360 --> 00:54:45,400 , без пробелов, ужасные имена переменных, чтобы сделать это тяжелее для людей, чтобы украсть ваш IP, 927 00:54:45,400 --> 00:54:48,120 но главное в том, что он выполнен стороне браузера. 928 00:54:48,120 --> 00:54:51,790 Даже если, как в сторону JavaScript может быть использован на стороне сервера, 929 00:54:51,790 --> 00:54:54,480 Наиболее распространенный случай использования прямо сейчас все еще находится на браузер. 930 00:54:54,480 --> 00:54:59,800 А вот как он выглядит. Вот если-иначе, если-иначе строится так же, как C, так же, как PHP. 931 00:54:59,800 --> 00:55:02,420 Вот это логическое выражение, когда вы "или" 2 вещи вместе. 932 00:55:02,420 --> 00:55:04,330 Вот когда вы "и" 2 вещи вместе. 933 00:55:04,330 --> 00:55:08,300 Вот переключатель заявление, которое похоже на PHP 934 00:55:08,300 --> 00:55:10,810 в том, что вы можете переключаться на разные типы ценностей. 935 00:55:10,810 --> 00:55:15,180 Петли Аналогично, для петель здесь, которые структурированы одинаково к тому, что мы видели раньше. 936 00:55:15,180 --> 00:55:18,110 В то время как петли, у нас есть делать во время циклов. 937 00:55:18,110 --> 00:55:20,290 Переменные, очень немного другая. 938 00:55:20,290 --> 00:55:24,560 Вы объявлять переменные как вы делаете в PHP и C, 939 00:55:24,560 --> 00:55:27,860 но так же является наличие слабо типизированными. 940 00:55:27,860 --> 00:55:32,730 Вы не указали Int или с плавающей точкой или строка или что-нибудь подобное, что обычно. 941 00:55:32,730 --> 00:55:34,240 Вы можете задать обл. 942 00:55:34,240 --> 00:55:38,040 Вам не нужно указывать переменную, но это имеет значение, если вы не делаете. 943 00:55:38,040 --> 00:55:42,000 Обычно, если вы опустите Вар, вы случайно создать глобальную переменную, а не местные. 944 00:55:42,000 --> 00:55:46,420 Итак, позвольте мне предложить, что вы почти всегда только сказать, вар, а затем имя переменной. 945 00:55:46,420 --> 00:55:48,740 Это не тип, это просто VAR для переменной. 946 00:55:48,740 --> 00:55:52,930 Это было бы, например, будь то 123 или "привет, мир". 947 00:55:52,930 --> 00:55:58,910 Массивы присутствуют и синтаксически похожи на PHP. 948 00:55:58,910 --> 00:56:03,690 Я скажу VAR номера и затем использовать квадратные скобки снова объявить переменную 949 00:56:03,690 --> 00:56:08,870 , тип которого является массив, который имеет именно эти номера в нем через запятую. 950 00:56:08,870 --> 00:56:11,740 И тогда, наконец, это единственное, что действительно выглядит иначе. 951 00:56:11,740 --> 00:56:16,700 Напомним, что в PHP, мы бы реализован ассоциативный массив для студентов 952 00:56:16,700 --> 00:56:20,220 как Zamyla, что может выглядеть следующим образом, где переменная называется студента. 953 00:56:20,220 --> 00:56:23,370 Квадратные скобки означают здесь идет массива. 954 00:56:23,370 --> 00:56:28,500 >> Тот факт, что я не использую числовые индексы, но строки - ID, дома, и название - 955 00:56:28,500 --> 00:56:30,990 означает, что это ассоциативный массив, 956 00:56:30,990 --> 00:56:34,490 и эти стрелки с знак равенства и угловой кронштейн 957 00:56:34,490 --> 00:56:37,310 означает, что ключ "ID", значение равно 1; 958 00:56:37,310 --> 00:56:39,310 ключ "дом", значение Winthrop дома; 959 00:56:39,310 --> 00:56:41,800 ключ "имя", значение Zamyla Чан. 960 00:56:41,800 --> 00:56:47,110 Таким образом, есть 3 ключа внутри этого ассоциативный массив, каждый из которых имеет свое значение. 961 00:56:47,110 --> 00:56:52,880 Мы видели, что в PSET 7, или вы скоро, в наличие же идею, 962 00:56:52,880 --> 00:56:55,220 но это будет выглядеть следующим образом. 963 00:56:55,220 --> 00:57:00,070 Так VAR студента - не знак доллара и никакого упоминания типа до сих пор, но вар - 964 00:57:00,070 --> 00:57:05,860 равных, а затем открыть фигурные скобки, потому что в JavaScript, когда у вас пар ключ-значение, 965 00:57:05,860 --> 00:57:08,900 вы на самом деле используют так называемый объект. 966 00:57:08,900 --> 00:57:13,490 И те из вас, кто займет АСУ ТП и т.п. могли бы вспомнить объектов Java 967 00:57:13,490 --> 00:57:15,140 или похожие языки. 968 00:57:15,140 --> 00:57:17,880 JavaScript не является Java, в первую очередь. 969 00:57:17,880 --> 00:57:21,600 Это было преднамеренное лет назад дизайнерское решение, чтобы сбить что-то другое, что было популярно, 970 00:57:21,600 --> 00:57:25,640 его имя, даже если оно не имеет принципиального отношения к себе Яву. 971 00:57:25,640 --> 00:57:31,490 JavaScript есть объекты, а их создании путем обозначения фигурной скобкой. 972 00:57:31,490 --> 00:57:36,710 Объекты в JavaScript являются в значительной степени эквивалентно ассоциативные массивы в PHP 973 00:57:36,710 --> 00:57:40,030 когда дело доходит до хранения данных внутри них. 974 00:57:40,030 --> 00:57:44,100 >> Но еще более мощно в JavaScript вы можете связать очень легко функциями 975 00:57:44,100 --> 00:57:48,040 Внутри объекта, и, хотя вы можете сделать это на других языках, 976 00:57:48,040 --> 00:57:50,040 это довольно распространенная парадигма, как мы увидим. 977 00:57:50,040 --> 00:57:54,380 Короче говоря, этот объект представляет студента, который особенно Zamyla, 978 00:57:54,380 --> 00:58:00,380 и это похоже концептуально, просто синтаксически отличается от этого. 979 00:58:00,380 --> 00:58:03,840 Давайте реально использовать JavaScript в файл. 980 00:58:03,840 --> 00:58:05,570 Оказывается, есть тег. 981 00:58:05,570 --> 00:58:08,180 Мы видели стиле теги и мы видели другие HTML теги. 982 00:58:08,180 --> 00:58:11,510 Тег на самом деле будет содержать некоторый код JavaScript. 983 00:58:11,510 --> 00:58:15,500 Отпустите меня в прибор, где у нас есть некоторые исходные коды готовых. 984 00:58:15,500 --> 00:58:18,700 Я не отправил его еще на сайте, но я сделаю это после занятий. 985 00:58:18,700 --> 00:58:21,770 Давайте откроем до этого, blink.html. 986 00:58:21,770 --> 00:58:27,560 Еще в 1990-х годах, не было буквально HTML теги называют мгновение тегов, 987 00:58:27,560 --> 00:58:30,340 и это была одна из самых чудесно злоупотреблять тегами в интернете 988 00:58:30,340 --> 00:58:36,140 , в котором вы хотите посетить некоторые стиле 1990-х годах веб-страницу и начать видеть текст мигающим вам, как это, 989 00:58:36,140 --> 00:58:39,810 Результаты маркиза тег, который собирается текста, как это. 990 00:58:39,810 --> 00:58:45,070 Один из немногих случаев, когда мир фактически согласился на веб-стандарт, 991 00:58:45,070 --> 00:58:48,250 все через борт убил мгновение теги несколько лет назад. 992 00:58:48,250 --> 00:58:52,860 Но мы можем воскресить его наличие в качестве демонстрации силы у вас есть 993 00:58:52,860 --> 00:58:56,660 когда вы можете написать программу, внутри веб-страницы. 994 00:58:56,660 --> 00:59:00,240 Прежде всего, давайте пропустить новый материал и сосредоточиться только на старых. 995 00:59:00,240 --> 00:59:01,780 >> Вот старые вещи в этом примере. 996 00:59:01,780 --> 00:59:06,350 У меня есть теги HTML, глава теги и заголовок. 997 00:59:06,350 --> 00:59:11,210 Тогда у меня есть тело тега здесь дел, которые Напомним, это просто прямоугольная разделение страницы 998 00:59:11,210 --> 00:59:14,720 что я дал уникальный идентификатор произвольно "приветствие", чтобы, 999 00:59:14,720 --> 00:59:18,320 именно так, у меня есть способ однозначно ссылаясь на него, что есть очень простой текст: 1000 00:59:18,320 --> 00:59:20,220 Здравствуй, мир. 1001 00:59:20,220 --> 00:59:23,940 Теперь позвольте мне прокрутку вверх к вершине этот файл и посмотреть, что нового. 1002 00:59:23,940 --> 00:59:27,710 Первое, что нового пополнения является тег, 1003 00:59:27,710 --> 00:59:31,280 и внутри уведомление теги сценария я объявил функцию. 1004 00:59:31,280 --> 00:59:34,610 Чтобы объявить функцию в JavaScript, очень похож на PHP, 1005 00:59:34,610 --> 00:59:37,930 Вы буквально написать функцию, то имя функции, скобки, 1006 00:59:37,930 --> 00:59:40,400 и, возможно, некоторые аргументы, если он принимает любые. 1007 00:59:40,400 --> 00:59:43,510 Тогда у меня есть фигурные скобки, как обычно, и теперь у нас есть немного нового кода 1008 00:59:43,510 --> 00:59:45,230 но давайте посмотрим, что это означает. 1009 00:59:45,230 --> 00:59:48,670 Так VAR DIV, это просто означает, дайте мне переменные называемых дел. 1010 00:59:48,670 --> 00:59:50,530 Я мог бы назвать ее Foo, но я хотел, чтобы она вызывалась дел 1011 00:59:50,530 --> 00:59:52,620 по причинам, которые будут ясны в секунду. 1012 00:59:52,620 --> 00:59:57,480 Тогда получается в JavaScript - и это JavaScript код, внедренный в веб-страницы - 1013 00:59:57,480 --> 01:00:01,760 есть специальная глобальная переменная рода называется документ. 1014 01:00:01,760 --> 01:00:04,780 Наличие в действительности является объектно-ориентированным языком. 1015 01:00:04,780 --> 01:00:07,230 Мы не будем вдаваться в подробности в 50 о том, что это означает, что, 1016 01:00:07,230 --> 01:00:11,180 но теперь знаю, что объект является в значительной степени как структуры. 1017 01:00:11,180 --> 01:00:14,740 Как мы видели, путь назад, когда в одной из первых проблемой устанавливает 1018 01:00:14,740 --> 01:00:17,150 где мы положили много информации в структуре, 1019 01:00:17,150 --> 01:00:21,330 Аналогичным является документом специальной структуры, которая поставляется с браузером, 1020 01:00:21,330 --> 01:00:24,810 поставляется с любой веб-страницы. Это не то, что я создал. 1021 01:00:24,810 --> 01:00:28,210 Внутри этой структуры документа, хотя, вы должны не только данные 1022 01:00:28,210 --> 01:00:30,010 но вы также должны функций. 1023 01:00:30,010 --> 01:00:34,090 >> И в любое время у вас есть функция внутри структуры, внутри объекта, 1024 01:00:34,090 --> 01:00:36,490 это называется методом. Но это то же самое. 1025 01:00:36,490 --> 01:00:40,110 Метод является функцией, которая просто так случается, внутри что-то другое. 1026 01:00:40,110 --> 01:00:42,990 Таким образом, это означает, что специальная глобальная переменная документов 1027 01:00:42,990 --> 01:00:47,690 есть функция, называемая GetElementById, которая буквально делает это. 1028 01:00:47,690 --> 01:00:52,460 Это поможет вам элемент из DOM, Document Object Model дерева, 1029 01:00:52,460 --> 01:00:55,520 идентификатор которого в этом случае приветствие. 1030 01:00:55,520 --> 01:00:59,200 Другими словами, все это время мы потратили на структуры данных, в игру вступает здесь. 1031 01:00:59,200 --> 01:01:01,400 Эта картина DOM, что у нас было минуту назад, 1032 01:01:01,400 --> 01:01:06,100 даже если страница выглядит немного иначе, если бы я имел дел в этой картине, 1033 01:01:06,100 --> 01:01:11,180 document.getElementById, что вернется ко мне будет фактически указатель 1034 01:01:11,180 --> 01:01:15,440 в прямоугольник в дереве, ссылка на прямоугольник в дереве. 1035 01:01:15,440 --> 01:01:18,410 Так вот что это означает на самом деле позвонить по одному из этих функций. 1036 01:01:18,410 --> 01:01:21,960 В этом случае опять же это див. Это не тело или заголовок. 1037 01:01:21,960 --> 01:01:26,480 Итак, давайте посмотрим, что я потом делать с этим дел теперь, что у меня внутри этой переменной дел. 1038 01:01:26,480 --> 01:01:32,580 Оказывается, с JavaScript у вас есть возможность настроить CSS вашей страницы динамически. 1039 01:01:32,580 --> 01:01:39,060 До сих пор все CSS мы сделали, хотя и ограниченную, в атрибуты стиля, 1040 01:01:39,060 --> 01:01:41,730 или где еще были положить CSS? 1041 01:01:42,730 --> 01:01:45,810 Я отчасти испортил тот. В стиле тегов в верхней части файла. 1042 01:01:45,810 --> 01:01:49,180 Или третье место было в? 1043 01:01:50,710 --> 01:01:54,590 >> Внешний файл, что-то. CSS. 1044 01:01:54,590 --> 01:01:56,730 Так что те 3 места мы сделали CSS до сих пор, 1045 01:01:56,730 --> 01:01:59,310 но загвоздка в том, что мы жестко все это. 1046 01:01:59,310 --> 01:02:04,060 Вы решили, как вы нырнули в PSET 7, мы решили, прежде чем читать лекции, что наш CSS будет. 1047 01:02:04,060 --> 01:02:07,380 Но если вы хотите изменить свой CSS, вы можете сделать это 1048 01:02:07,380 --> 01:02:09,370 когда у вас есть фактические языка программирования. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - не языки программирования. Наличие есть. 1050 01:02:13,910 --> 01:02:18,200 Вот и получается, что как только у вас есть один из тех прямоугольники из дерева 1051 01:02:18,200 --> 01:02:23,050 называется DOM, она сама некоторым данным внутри него. 1052 01:02:23,050 --> 01:02:27,820 Так дел, что я просто схватила из дерева имеет то, что мы называем собственности внутри него 1053 01:02:27,820 --> 01:02:34,390 называется стиль, и стиль собственности само свойство видимости. 1054 01:02:34,390 --> 01:02:37,330 Я знаю, что это только глядя руководство пользователя по CSS. 1055 01:02:37,330 --> 01:02:41,160 Оказывается, есть свойство видимости CSS, что делает то, что он говорит. 1056 01:02:41,160 --> 01:02:44,530 Это делает что-то видимое или нет, видимым или нет. 1057 01:02:44,530 --> 01:02:46,810 А как вы это сделаете это. 1058 01:02:46,810 --> 01:02:50,510 Я прошу программно, если видимость этого DIV скрыто, 1059 01:02:50,510 --> 01:02:53,390 то, что я могу изменить его? Visible. 1060 01:02:53,390 --> 01:02:58,840 Иначе, если видимость этой страницы не скрывается, по логике вещей я сделать его скрытым. 1061 01:02:58,840 --> 01:03:04,070 Я понятия не имею, почему это видимые и скрытые, а не видимого и невидимого. 1062 01:03:04,070 --> 01:03:06,000 Это было плохое решение дизайна по пути. 1063 01:03:06,000 --> 01:03:09,530 Но это действительно противоположностей в CSS: видимые и скрытые. 1064 01:03:09,530 --> 01:03:15,520 Все это есть, это означает изменение CSS моего файла и выключается, и выключается 1065 01:03:15,520 --> 01:03:16,870 для этого конкретного дел. 1066 01:03:16,870 --> 01:03:20,630 Но опять же, это функция называется мигать. Когда мгновение функция называется? 1067 01:03:20,630 --> 01:03:24,080 Оказывается, что есть другой специальной глобальной переменной называется окном, 1068 01:03:24,080 --> 01:03:28,220 близки по духу документа, но в то время как документ относится к вашей веб-странице, 1069 01:03:28,220 --> 01:03:31,700 как дерево DOM, HTML вы послали с сервера, 1070 01:03:31,700 --> 01:03:35,250 окна относится к хром вокруг него, в адресной строке, в строке заголовка, 1071 01:03:35,250 --> 01:03:37,880 и все, что вещи вокруг вашей веб-странице. 1072 01:03:37,880 --> 01:03:42,800 >> И получается, что объект окна имеет специальное внутри функции, называемой setInterval 1073 01:03:42,800 --> 01:03:44,360 , что делает то, что он говорит. 1074 01:03:44,360 --> 01:03:48,600 Он будет устанавливать интервал - в этом случае каждые 500 миллисекунд - 1075 01:03:48,600 --> 01:03:52,270 и сделать предположение, что он собирается делать каждые 500 миллисекунд? 1076 01:03:52,270 --> 01:03:55,240 Это будет выполнять эту функцию мигания. 1077 01:03:55,240 --> 01:03:58,560 И что приятно здесь является то, что мы могли бы сделать это в C, хотя мы никогда не делали. 1078 01:03:58,560 --> 01:04:01,580 C действительно есть то, что называется указателей на функции, где вы можете передать функции по 1079 01:04:01,580 --> 01:04:03,140 в качестве аргументов. 1080 01:04:03,140 --> 01:04:07,620 Точно так же в наличие Вы можете передать имя функции в другую функцию. 1081 01:04:07,620 --> 01:04:10,630 И обратите внимание, что я делаю. Я не делаю этого. 1082 01:04:10,630 --> 01:04:14,380 Если я ставлю скобки после мигать, это означает, звоните мгновение функции. 1083 01:04:14,380 --> 01:04:17,430 Если бы я их опустить, это означает, что здесь мгновение функции 1084 01:04:17,430 --> 01:04:21,330 так что setInterval можно назвать каждые 500 миллисекунд. 1085 01:04:21,330 --> 01:04:28,200 Таким образом, конечный результат, зверским, хотя это, что если я иду в локальный и перейти к blink.html, 1086 01:04:28,200 --> 01:04:32,120 Теперь у меня это происходит снова и снова. 1087 01:04:32,120 --> 01:04:34,950 А если я на самом деле осмотр элементов, давайте посмотрим, если мы можем это увидеть. 1088 01:04:34,950 --> 01:04:38,550 Позвольте мне Осмотрите элемент, позвольте мне просто прокрутите вниз немного, 1089 01:04:38,550 --> 01:04:44,320 Позвольте мне выбрать элементы здесь, и обратите внимание на DOM внутри инспектор Chrome. 1090 01:04:44,320 --> 01:04:48,840 Это буквально меняется и обратно каждые 500 миллисекунд. 1091 01:04:48,840 --> 01:04:55,660 Если мы вернемся к нашему другу Нейта, 1092 01:04:55,660 --> 01:05:00,020 Если вы когда-нибудь задумывались, как это работает, подобная идея с интервалом, 1093 01:05:00,020 --> 01:05:04,810 Nate но на самом деле делает очень эффективно использование цвета в данном конкретном случае. 1094 01:05:04,810 --> 01:05:07,350 Так что еще мы можем реально сделать с этим? 1095 01:05:07,350 --> 01:05:09,990 Давайте откроем еще один пример и попробовать что-то 1096 01:05:09,990 --> 01:05:12,940 это программно даже более полезна, чем делать вещи мигать. 1097 01:05:12,940 --> 01:05:17,990 Отпустите меня в нашем каталоге формы сегодня и идем в form0. 1098 01:05:17,990 --> 01:05:20,820 Это был самый уродливый возможной форме, что я мог придумать, 1099 01:05:20,820 --> 01:05:23,290 и позвольте мне показать вам, как это выглядит в браузере. 1100 01:05:23,290 --> 01:05:28,960 >> Позвольте мне перейти в локальный / формы, и это form0. 1101 01:05:28,960 --> 01:05:33,400 Это супер уродливые формы HTML, который имеет несколько полей для электронной почты, паролей, 1102 01:05:33,400 --> 01:05:37,190 пароль, а затем немного флажок, чтобы согласиться на некоторые условия. 1103 01:05:37,190 --> 01:05:41,350 Загвоздка в том, если я посещаю эту форму, и я не хочу, чтобы дать вам мой адрес электронной почты, 1104 01:05:41,350 --> 01:05:44,730 Я не хочу, чтобы согласиться с условиями, может быть, я могу нажать Регистрация 1105 01:05:44,730 --> 01:05:46,920 и это позволяет мне через так или иначе. 1106 01:05:46,920 --> 01:05:50,800 Это происходит представить глупые файле PHP называется dump.php. 1107 01:05:50,800 --> 01:05:58,420 Все это делает печать содержимого $ _GET только для диагностических целей. 1108 01:05:58,420 --> 01:06:01,580 Это то, что было представлено пользователю только сейчас. 1109 01:06:01,580 --> 01:06:05,010 Но предположим, что мы на самом деле хотим проверить форму представления пользователей. 1110 01:06:05,010 --> 01:06:06,530 Отпустите меня в версии 1. 1111 01:06:06,530 --> 01:06:11,420 Это form1.html. Это выглядит эстетично так же плохо, но обратите внимание, как это фантазии. 1112 01:06:11,420 --> 01:06:15,450 Если я нажимаю Регистрация без сотрудничества, я получаю крикнул. 1113 01:06:15,450 --> 01:06:17,320 "Вы должны указать свой адрес электронной почты". 1114 01:06:17,320 --> 01:06:21,670 Хорошо. Итак, позвольте мне попробовать. Так malan@harvard.edu. Мне не нужен пароль. 1115 01:06:21,670 --> 01:06:25,100 Зарегистрируйтесь. "Вы должны ввести пароль". Хорошо. 1116 01:06:25,100 --> 01:06:28,470 Так что я буду предоставлять пароль малиновый. Зарегистрируйтесь. 1117 01:06:28,470 --> 01:06:32,300 "Пароли не совпадают". Я должен теперь ввести в малиновых здесь. 1118 01:06:32,300 --> 01:06:35,710 Я случайно проверил это. Зарегистрируйтесь. 1119 01:06:35,710 --> 01:06:39,860 "Вы должны согласиться с условиями". Хорошо. Согласитесь там. Зарегистрируйтесь. 1120 01:06:39,860 --> 01:06:43,700 И теперь он показывает мне диагностические там. 1121 01:06:43,700 --> 01:06:45,630 >> Так что же случилось? 1122 01:06:45,630 --> 01:06:48,330 У нас была эта возможность проверки формы представления. 1123 01:06:48,330 --> 01:06:51,420 В самом деле, если вы сделали погружение в PSET 7, есть функция извинения 1124 01:06:51,420 --> 01:06:54,620 , что делает его довольно легко кричать на пользователей с сообщением на экране. 1125 01:06:54,620 --> 01:06:57,580 Я использую несколько иной механизм, функция предупреждения, 1126 01:06:57,580 --> 01:07:03,690 который не является функция, которая улыбнулась, поскольку она делает очень некрасиво сообщения пользователя. 1127 01:07:03,690 --> 01:07:05,710 Но давайте посмотрим, что я здесь делаю. 1128 01:07:05,710 --> 01:07:09,620 Это form1.html, и заметил, что у меня есть некоторые довольно знакомый синтаксис: 1129 01:07:09,620 --> 01:07:12,920 тело тега, тег формы, действие атрибута, метода атрибут. 1130 01:07:12,920 --> 01:07:17,050 Но заметьте, я дал моей форме уникальный идентификатор для удобства. 1131 01:07:17,050 --> 01:07:19,190 Затем я получил письмо поле, тип которого является текст, 1132 01:07:19,190 --> 01:07:23,780 Пароль поле, тип которого является пароль, подтверждение поле, тип которого является паролем, 1133 01:07:23,780 --> 01:07:28,070 , а затем флажок, имя которого соглашение сюда, типа флажок. 1134 01:07:28,070 --> 01:07:30,380 А то у меня есть кнопка отправки. 1135 01:07:30,380 --> 01:07:33,050 Но обратите внимание на верхнюю, что еще у меня есть. 1136 01:07:33,050 --> 01:07:35,810 Прежде всего, есть другой использованием тега сценария. 1137 01:07:35,810 --> 01:07:40,520 Если у вас есть код JavaScript в другой файл, так же, как с CSS вы можете включить его. 1138 01:07:40,520 --> 01:07:44,530 И вы делаете это с помощью скрипта источника, а затем заметить, что я уверен, подключение по-видимому 1139 01:07:44,530 --> 01:07:50,349 в googleapis.com на очень долгий путь, но чьи названия заканчиваются в jquery.min 1140 01:07:50,349 --> 01:07:52,420 для минимума. JS. 1141 01:07:52,420 --> 01:07:55,969 JQuery это супер популярная библиотека для JavaScript, что просто делает JavaScript 1142 01:07:55,969 --> 01:07:58,230 Тем более удобной в использовании. 1143 01:07:58,230 --> 01:08:00,610 Он фактически стал стандартом де-факто. 1144 01:08:00,610 --> 01:08:04,090 Поэтому, несмотря на то, что вы собираетесь смотреть, не является чистым наличие такового, 1145 01:08:04,090 --> 01:08:09,340 это библиотека на вершине JavaScript так же, как CS50 библиотека слоя 1146 01:08:09,340 --> 01:08:13,670 на вершине низкоуровневого кода C; реальность такова, почти все в интернете использует его. 1147 01:08:13,670 --> 01:08:18,030 Так что это не обучение колеса. Это просто лучшая практика в эти дни. 1148 01:08:18,030 --> 01:08:22,830 Теперь обратите внимание ниже, чем мой собственный тег сценария, и заметил, что я сделал здесь. 1149 01:08:22,830 --> 01:08:27,450 Оказывается, что JQuery делает что-то немного фантазии. 1150 01:08:27,450 --> 01:08:29,660 JavaScript имеет знак доллара, но они не имеют смысла. 1151 01:08:29,660 --> 01:08:32,870 >> Они похожи на буквы А или B или C. 1152 01:08:32,870 --> 01:08:36,670 JQuery просто приняла Конвенцию или рода претендовали на то, 1153 01:08:36,670 --> 01:08:40,280 , что $ будет их специальным символом. 1154 01:08:40,280 --> 01:08:44,950 Поэтому, как только вы загрузите этот файл глобальных наличие здесь с тег, 1155 01:08:44,950 --> 01:08:49,080 Вы имеете доступ к специальной глобальной переменной, которая называется $. 1156 01:08:49,080 --> 01:08:53,009 Это более правильно называть JQuery, но это не выглядит почти так же сексуально, как $. 1157 01:08:53,009 --> 01:08:56,250 Но $ не имеет особого смысла. В PHP это имело особый смысл. 1158 01:08:56,250 --> 01:08:58,440 Вы должны были иметь его перед переменной. 1159 01:08:58,440 --> 01:09:01,670 Это просто сексуальная вещь, которую они взяли на себя. 1160 01:09:01,670 --> 01:09:03,389 Что здесь происходит? 1161 01:09:03,389 --> 01:09:08,830 Обратите внимание, что я передаю в JQuery функции моя глобальная переменная документов 1162 01:09:08,830 --> 01:09:10,860 а потом я звоню. готов. 1163 01:09:10,860 --> 01:09:15,480 Что JQuery по существу делает это позволяет делать некоторые вещи ванили JavaScript 1164 01:09:15,480 --> 01:09:17,889 как объект документа, окно объекта, 1165 01:09:17,889 --> 01:09:20,790 и если вы передать его в JQuery функции - 1166 01:09:20,790 --> 01:09:24,429 и снова, чтобы было ясно, что это функция под названием jQuery - 1167 01:09:24,429 --> 01:09:28,240 что она делает, это вернется к вам специальную версию документа 1168 01:09:28,240 --> 01:09:30,700 , который имеет больше функциональных возможностей, связанных с ним. 1169 01:09:30,700 --> 01:09:34,760 Таким образом, в сырых JavaScript нет готовых функций, 1170 01:09:34,760 --> 01:09:37,810 но если вы передаете документ в JQuery функции первого, 1171 01:09:37,810 --> 01:09:40,960 он возвращается к вам специальную версию документа объект 1172 01:09:40,960 --> 01:09:43,030 , которая имеет более модные функции. 1173 01:09:43,030 --> 01:09:48,230 И вот почему людям нравится. Он просто делает вещи проще делать, так как мы собираемся, чтобы видеть. 1174 01:09:48,230 --> 01:09:49,820 Итак, что же эта строка кода в виду? 1175 01:09:49,820 --> 01:09:52,690 Эта строка кода в данном случае означает, когда документ готов - 1176 01:09:52,690 --> 01:09:56,830 Другими словами, как только браузер закончите читать этот файл сверху вниз - 1177 01:09:56,830 --> 01:09:59,200 идти вперед и выполнить следующие функции. 1178 01:09:59,200 --> 01:10:03,540 Что действительно интересно в JavaScript - PHP и имеет это, а также - 1179 01:10:03,540 --> 01:10:05,450 является анонимной функции. 1180 01:10:05,450 --> 01:10:10,560 В JavaScript можно объявить функции, которые не имеют имени, но у них есть тело. 1181 01:10:10,560 --> 01:10:12,570 Обратите внимание, что здесь происходит. 1182 01:10:12,570 --> 01:10:16,220 >> Эта функция называется готовы, и это просто означает, выполните следующие 1183 01:10:16,220 --> 01:10:20,220 когда вся веб-страница будет готова, когда все это было прочитано в с сервера. 1184 01:10:20,220 --> 01:10:23,090 Что вы хотите сделать? Я хочу, чтобы выполнить кусок кода. 1185 01:10:23,090 --> 01:10:27,120 Обратите внимание, что мы не хотим, чтобы выполнить этот код сразу. 1186 01:10:27,120 --> 01:10:34,350 Если я пропустил это, это будет означать, немедленно начать выполнение этих строк кода. 1187 01:10:34,350 --> 01:10:39,040 Но то, что я говорю, нет, нет, нет, обернуть это в анонимной функции, как это 1188 01:10:39,040 --> 01:10:43,000 средства не выполнить его еще, называют его в конце концов. 1189 01:10:43,000 --> 01:10:45,430 Мы видели эту минуту назад в нашем предыдущем примере формы. 1190 01:10:45,430 --> 01:10:49,990 Что же функцию мы называем в конце концов, 500 миллисекунд позже? Blink. 1191 01:10:49,990 --> 01:10:51,480 Так же идею. 1192 01:10:51,480 --> 01:10:53,950 Опять же, даже если это выглядит немного странно, просто взять сейчас на вере 1193 01:10:53,950 --> 01:10:57,060 объявить, что анонимная функция, которая вызывается в конце концов, 1194 01:10:57,060 --> 01:11:01,720 Вы просто написать функцию () { 1195 01:11:01,720 --> 01:11:05,380 Так что код мы будем выполнять в конце концов? Следующее. 1196 01:11:05,380 --> 01:11:10,460 Это тоже выглядит немного нового, но это означает вот JQuery функции, 1197 01:11:10,460 --> 01:11:13,430 и это теперь является сокращенным. 1198 01:11:13,430 --> 01:11:18,830 Этот фрагмент HTML в нижней части экрана, конечно, имеет некоторое представление дерева. 1199 01:11:18,830 --> 01:11:21,730 Это не в этом. Эта страница является более интересным, чем это привет, мир пример. 1200 01:11:21,730 --> 01:11:25,210 Но есть некоторые дерева, который соответствует этому HTML. 1201 01:11:25,210 --> 01:11:28,910 Было бы боль в шее, чтобы реализовать какую-то рекурсивную функцию 1202 01:11:28,910 --> 01:11:34,380 начать с корневого узла, а затем найти узел с идентификатором регистрации. 1203 01:11:34,380 --> 01:11:38,340 Так что JQuery делает супер просто для нас является в прямом смысле этого. 1204 01:11:38,340 --> 01:11:43,000 Иди и принеси мне все, что дел или любой форме, независимо HTML элемент 1205 01:11:43,000 --> 01:11:45,820 имеет идентификатор регистрации. 1206 01:11:45,820 --> 01:11:52,440 Это эквивалентно document.getElementById ('регистрация'). 1207 01:11:52,440 --> 01:11:54,170 >> Почему такие люди, как JQuery? 1208 01:11:54,170 --> 01:12:00,110 Потому что это короче, чтобы напечатать. Но это все, что есть. Это та же идея. 1209 01:12:00,110 --> 01:12:02,630 Дайте мне тег с идентификатором регистрации. 1210 01:12:02,630 --> 01:12:06,300 И когда это тег, который бывает форме, представляется, 1211 01:12:06,300 --> 01:12:08,300 идти вперед и выполнить этот код. 1212 01:12:08,300 --> 01:12:11,320 Итак, давайте один взгляд на то, как сейчас мы делаем форму проверки. 1213 01:12:11,320 --> 01:12:15,950 Синтаксис правда загадочные на первый, но то, что происходит? 1214 01:12:15,950 --> 01:12:21,050 Если эта строка кода, правда, я собираюсь кричать на пользователя предоставить свой адрес электронной почты. 1215 01:12:21,050 --> 01:12:22,970 Так что же это строки кода? 1216 01:12:22,970 --> 01:12:25,560 $ Означает, JQuery. Теперь заметить это. 1217 01:12:25,560 --> 01:12:27,920 Это вроде как CSS. 1218 01:12:27,920 --> 01:12:33,370 Если вы нырнули в CSS все же, вы будете знать, что это означает, что элемент с идентификатором регистрации. 1219 01:12:33,370 --> 01:12:39,840 Пространства означает найти ребенка или потомок регистрации, чье имя входа. 1220 01:12:39,840 --> 01:12:42,970 И тогда эта вещь в квадратных скобках немного фильтр. 1221 01:12:42,970 --> 01:12:47,010 И даже если это выглядит загадочно, это просто означает, перейдите в форму с идентификатором регистрации, 1222 01:12:47,010 --> 01:12:51,230 перейти к внутренней входной элемент, что, чье имя электронной почты, 1223 01:12:51,230 --> 01:12:55,440 , а затем получить его значение, независимо от его значения, случается, - 1224 01:12:55,440 --> 01:12:59,670 ASDF, если это все, что я набрал malan@harvard.edu или, если это то, что я набрал. 1225 01:12:59,670 --> 01:13:05,250 Таким образом, если значение электронную почту формы поля == ничего, кричать на пользователя. 1226 01:13:05,250 --> 01:13:09,700 Иначе, если значение в поле пароля == ничего, кричать на пользователя. 1227 01:13:09,700 --> 01:13:19,520 >> Иначе, если значение в поле пароля не равно значению подтверждения поле, 1228 01:13:19,520 --> 01:13:22,850 который был другом элементе формы, кричать на пользователя. 1229 01:13:22,850 --> 01:13:25,680 И тогда, наконец, - и этот тоже имеет некоторые новые синтаксис своих, 1230 01:13:25,680 --> 01:13:29,270 но как только вы видели его, это хоть немного более разумным - 1231 01:13:29,270 --> 01:13:34,060 еще, если форма с идентификатором регистрации имеет входной элемент, имя которого соглашение 1232 01:13:34,060 --> 01:13:39,720 и проверяем, идти вперед и кричать на пользователя. 1233 01:13:39,720 --> 01:13:42,520 Так что я полностью признаю, что это полностью подавляющим на первый взгляд. 1234 01:13:42,520 --> 01:13:46,530 Это много нового синтаксиса. Но все эти JQuery следующие виды узоров. 1235 01:13:46,530 --> 01:13:49,880 И если честно, я даже не знаю, что это существовало лишь несколько минут назад. 1236 01:13:49,880 --> 01:13:53,640 Я Googled, "Как вам проверить, если установлен флажок в JQuery?" 1237 01:13:53,640 --> 01:13:55,680 и это синтаксис, потому что есть различные способы сделать это 1238 01:13:55,680 --> 01:13:58,010 с фактическим сырой код JavaScript. 1239 01:13:58,010 --> 01:14:01,030 Так как самые первые страницы Проблема Set 7 подчеркивается, 1240 01:14:01,030 --> 01:14:04,500 PSET 7 очень много упражнений в себя загрузку 1241 01:14:04,500 --> 01:14:08,650 где мы ввели, мы надеемся, концептуальная основа, с которой по решению PSET. 1242 01:14:08,650 --> 01:14:12,280 >> Но, как это часто бывает с веб-дизайном, это до вас действительно копаться, 1243 01:14:12,280 --> 01:14:16,680 включать фрагменты кода и примеры из Интернета, пока вы привести их 1244 01:14:16,680 --> 01:14:17,960 в соответствии с условиями в тот первый лист, 1245 01:14:17,960 --> 01:14:21,460 и понимают, что изучение HTML, CSS, JavaScript и даже SQL 1246 01:14:21,460 --> 01:14:26,020 на самом деле предназначены для этого в домашних упражнений, как мы приступим к принятию этих учебных колеса прочь. 1247 01:14:26,020 --> 01:14:29,150 И понимаю, тоже есть так много других вещей, которые вы можете сделать с браузером. 1248 01:14:29,150 --> 01:14:33,790 Внутри большинства из этих элементов есть и другие вещи называются обработчиками событий. 1249 01:14:33,790 --> 01:14:37,140 И хотя мы просто смотрели на них называются OnSubmit и onready, 1250 01:14:37,140 --> 01:14:40,310 Вы можете делать вещи, как OnKeyDown, OnKeyUp, 1251 01:14:40,310 --> 01:14:43,410 нравится, когда пользователь прикасается к ключевым, вы можете слушать, за что и вверх. 1252 01:14:43,410 --> 01:14:45,940 Gmail имеет клавиатуру. 1253 01:14:45,940 --> 01:14:49,490 Как Google осуществления сочетания клавиш, как C для сочиняете? 1254 01:14:49,490 --> 01:14:54,120 Они слушают для событий, как они называются, как OnKeyPress или OnKeyUp и OnKeyDown. 1255 01:14:54,120 --> 01:14:56,360 Если вы когда-либо парил курсор мыши на некоторых меню 1256 01:14:56,360 --> 01:15:00,180 и вдруг, вуаля, появится меню или графический изменения цвета, 1257 01:15:00,180 --> 01:15:01,920 как они это делают? 1258 01:15:01,920 --> 01:15:06,940 Вместо того, чтобы прослушивать onready или OnSubmit, вы слушаете для OnMouseOver или onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Короче говоря, с этим очень простые основы, которые мы начали царапать поверхность сегодня 1260 01:15:10,920 --> 01:15:13,940 и мы будем нырять в дальнейшем в среду, у вас есть, в большей степени, 1261 01:15:13,940 --> 01:15:17,530 власти для реализации вещи, которые вы уже знакомы. 1262 01:15:17,530 --> 01:15:21,620 Так что давайте заканчивается, и мы будем продолжать эту среду. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]