[Powered by Google Translate] [Неделя 8, продолжение]
[David J. Малан] [Harvard University]
[Это CS50.] [CS50.TV]
>> Это CS50, так это к концу недели 8 здесь.
Мы, конечно, было немного урагана ранее на этой неделе,
поэтому сейчас это действительно только ты и я в этом лекционный зал,
Но сегодня мы продолжаем наш разговор о PHP
и о веб-программировании в целом, и мы также ввести понятие
базы данных, в частности, одна называется MySQL, которая является довольно популярным в эти дни,
В значительной мере благодаря ее масштабируемости, а также потому, что его быть свободным и открытым исходным кодом.
>> Но сначала посмотрим на котором мы остановились в прошлый раз.
Напомним, что мы искали в нескольких Frosh примеры мгновенные сообщения,
и это была отвратительная форма, которая мне пришла в голову еще 15 лет назад +
для того, чтобы иметь студентов на территории кампуса регистр для первокурсников очной спортивных
, фактически не имея к походу больше через двор к Wigglesworth
скользить физической бумагу под дверь некоторых Проктора.
Вместо этого мы переехали все в Интернете, но для этого мы должны использовать
несколько технологий, так что, нам нужно HTML, язык гипертекстовой разметки,
что опять же это язык разметки, с которой вы делаете веб-страниц структурно.
>> Используя немного CSS в эти дни, каскадные таблицы стилей,
которым мы пользуемся стилизации веб-страницы, используя несколько иной синтаксис,
в то время как HTML было все, о структуре их.
Нам также необходимо ввести языка веб-программирования.
В этом случае, мы будем использовать PHP, и PHP будет позволить нам
для динамического вывода контента, а также делать программные вещи, как
отправка электронной почты, как это было на ноте мы уехали на прошлой неделе.
>> Напомним, что код этого была в 2-х частях.
Один из них, мы должны были froshims3.php,
и это было в значительной степени разметки HTML с формой внутри него,
чуть-чуть CSS здесь, в атрибуты стиля
так что сама форма будет по центру страницы, но помимо этого
у нас были некоторые представителем входа форме, в текстовое поле, флажок,
некоторые радио-кнопки, выберите меню, и кнопка отправки.
И через эту форму, мы представили в файл, который был по-видимому называли register3.php,
что само по себе выглядело немного что-то вроде этого.
Теперь, большая часть кода в register3.php, напомним, было все об электронной почте.
Он сделал немного проверку виде, который был представлен, чтобы убедиться,
, что поля были на самом деле при условии, что ожидалось.
Тогда мы называли некоторые функции с использованием PHP немного нового синтаксиса,
даже если он заимствован из C.
>> Эта стрелка оператора позволяет нам использовать то, что называется объектно-ориентированного программирования.
Мы не будем вдаваться в том, что в любой детали, но знаю теперь
это способ иметь функции, связанные с объектами,
которые представляют собой особый тип строения, как мы видели в C.
Но сейчас, просто принять на веру, что это правильный синтаксис для использования
При использовании библиотеки как эта библиотека PHPMailer.
И тогда к концу этого файла мы динамически генерируемых электронной почте
, что послали на мой счет jharvard@cs50.net
от моего jharvard@cs50.net счета,
и мы проинформировали пользователей соответственно, что они были зарегистрированы для этого вида спорта.
Это в значительной степени то, что сайт Frosh чаты сделал много лет назад
Когда я реализовал ее, правда, на другом языке,
но он показывает вам, возможно, власть, которая у вас есть
Теперь, когда вы можете выразить себя не только программными
на низком уровне в языке, как C, но на гораздо более высоком уровне
с этим очень реальный мир приложений, как электронная почта на самом деле решить
некоторые реальные проблемы мира.
>> Сейчас, конечно, хотя я использую этот скрипт для создания некоторых
сообщения электронной почты динамически из jharvard@cs50.net, которая действительно счету
что у меня есть доступ к, не быть достаточно осторожным, чтобы отправить
почты только со счетов, что на самом деле свой собственный,
чтобы вещи вам в небольшом количестве горячей воды в жизни.
С учетом сказанного, давайте теперь переход к решению другой проблемы в целом,
что сохранения государства.
Итак, что же это на самом деле означает?
HTTP, этот протокол передачи гипертекста,
на самом деле без протокола, и что это означает, что
когда вы тянете что-то вроде Google.com а затем нажмите ввод
Обычно ваш браузер имеет какой-то вращающийся значок, который затем
Результаты в некоторых веб-страницы загружаются,
а затем, что маленький значок прекращает вращаться, и что на самом деле предлагает
, что HTTP завершил какой-то соединение с сервером, вот и все.
HTTP является лицом без гражданства, в том смысле, что оно не поддерживают
постоянное подключение к серверу в том же Skype случае не
или Gchat делает, потому что с HTTP
Предполагается, что, как только вы взяли веб-страницу, вот и все.
>> Сейчас, на самом деле в эти дни на таких сайтах, как Facebook и Google Maps
и Twitter, и как там много больший динамизм которой
даже после этого значка останавливает вращение, может на самом деле получить больше обновлений
от сервера, больше твитов, больше обновлений статусов на Facebook и тому подобное.
Но даже это, используя технику, что мы будем говорить в неделю или две
известный как Ajax с использованием языка JavaScript называется,
но в конце дня, HTTP-прежнему без гражданства.
И все же, если вы хотите, чтобы как-то помню вещи о пользователе
даже после того как они отключены от сервера
PHP делает позволить вам средство этом
поскольку, как мы видели в последний раз, PHP имеет ряд суперглобальных,
и суперглобальная, опять же, специальные глобальные переменные
который передал вам веб-сервером и PHP себя.
>> Вы не должны ничего делать, чтобы положить значения в нем,
и среди суперглобальных мы видели до настоящего времени, получать и отправлять,
который является, где поля формы ставятся автоматически для вас,
, а также несколько других, которые мы еще не видели.
Внутри $ _SERVER некоторые специальные переменные, связанные с самим сервером.
Что такое IP-адрес, что протокол, HTTP или HTTPS вы используете,
что метод запроса вы используете и т.п., так что некоторые интересные,
пикантные подробности о сервере, а на самом деле, пользователь в там же.
Там в $ _COOKIE, который является, где эти вещи называются куки хранятся.
Мы не будем тратить время на печенье себя сегодня,
но знаю теперь, что печенье является лишь небольшой фрагмент информации
, что веб-сервер могут посадить на веб-браузере
и в свою очередь ее память или жесткий диск своего компьютера
для хранения информации о пользователе, например, свое имя пользователя
так, чтобы они не придется вводить его каждый раз, когда они войти в систему или некоторых
Уникальный номер или идентификатор для этого пользователя
так что вам не придется приставать к ним с тем же виды вопросов о
предпочтения в будущем, но большинство из интереса
Прямо сейчас составляет $ _SESSION.
>> Это суперглобальная, который, как и другие, передают вам автоматически PHP
когда вы пишете PHP-сайтов на основе
можно хранить все, что угодно, строки, числа,
плавающей точкой, значения, массивы, объекты,
на самом деле все, что вы хотите, и это позволяет сохранить его таким образом,
что даже если пользователь посещает вас то и дело
возвращается минутах от теперь и в 5 минутах от теперь, потому что
они принимают их время, прежде чем нажать некоторые другие ссылки
PHP будет гарантировать, что все, что вы положите в этой сессии суперглобальная
минуты или 5 минут назад все еще будет там, когда возвращается пользователю.
А под капотом этого суперглобальная осуществляется путем
те вещи, называемые куки, но сейчас это просто абстракция
которым это своего рода программный эквивалент корзине.
Что бы вы, программист, положить в том, что
суперглобальная ассоциативный массив будет там некоторое количество минут позже
до тех пор пока вы его не удалите или пока пользователь не выйдет своего браузера в целом.
>> Давайте посмотрим на примере, как эта вещь действительно используются.
В counter.php среди части сегодняшнего код
мы имеем следующую строку.
В начале этого файла у нас есть куча синих комментарии, которые неинтересны сейчас.
Но в строке 13 у нас есть новая линия,
session_start, и что на самом деле делает именно то, что он говорит.
Она начинается сессий.
Это позволяет использовать это большая суперглобальная $ _SESSION, и это так просто.
Теперь, если мы исходим, чтобы посмотреть на линию 16, давайте попробуем выяснить, что эта веб-страница будет делать.
Если (Исеть ($ _SESSION ["счетчик"]), а затем пойти дальше
и хранить в переменной счетчика, строчные счетчика,
$ _SESSION ["Счетчик"].
Это, кажется, объявления локальных переменных называется счетчиком
внутри которых он надевает копию того, что находится внутри суперглобальная
называется сессии в положение "счетчик".
В противном случае, по-видимому, эта маленькая локальная переменная счетчика, устанавливается на 0.
>> Но потом через несколько строк в 26 Обратите внимание, что копия сессии счетчика,
ее ключом, имеет новый присвоено значение, который является его текущее значение плюс 1.
Короче говоря, этот файл выглядит как обновление
Счетчик, который хранится внутри сессии суперглобальная
, увеличивая его на 1, но он сначала сохраняет копию предыдущего значения
, сохраняя его в локальной переменной с именем $ счетчика,
, а затем сюда давайте посмотрим, что осталось.
Оказывается, это в значительной степени только HTML.
В нижней части этой страницы мы видим в строке 37, которые я посетил этот сайт
Счетчик количество раз, так что есть несколько интересных особенностей здесь.
Один из них, это явно переменной, но это не достаточно просто положить
$ Счетчика в теле вашего HTML, потому что, конечно,
если это только там, среди ваших PHP HTML будет считать, что это просто HTML.
Вы буквально хотят $ счетчиков, которые будут напечатаны на экране.
>> Но вместо этого падения в режиме PHP
с этой частью синтаксиса мы можем динамически вставить значение здесь
Очень близки по духу к тому, что мы сделали в прошлый раз с
вставка значения в строки.
На самом деле, это просто сокращенное обозначение для сказав что-то вроде этого буквально,
Печать ($ счетчика) или даже что-то вроде Е (% S, счетчик),
или даже, как вы, возможно, видели в Интернете или в учебниках,
есть функция в PHP называется эхо
которая делает то же самое, и все это только больше наматывается способами
сказать <? =.
В этом случае вам не нужно ставить
Слово PHP после знака вопроса.
Это сокращенное обозначение для, опять же, то, что мы только что видели минуту назад
который эхом некоторое значение.
>> Давайте посмотрим, что конечным результатом этого на самом деле.
Позвольте мне перейти в наш файл counter.php,
и мы увидим, что Дэвид просто ошибся, играя с код.
Давайте исправление то, что он облажался,
и ошибка вроде бы есть, нет, в строке 37.
По началу страницы я посетил этот сайт 0 раз.
Ну, давайте идти вперед сейчас, и в верхней части окна браузера нажмите на
перезагрузить значок, и я нажимаю кнопку перезагрузки,
и теперь я посетил сайт 1 раз, 2, 3, 4, 5, 6, 7, 8.
И действительно, если мы посмотрим на исходный код этой страницы реальный исходный код меняется,
и обратите внимание на полное отсутствие каких-либо PHP, и это потому, что
PHP код оцениваются или интерпретировать стороне сервера,
и так, что означает, что выход из сценариев PHP является то, что в конечном итоге направляется в браузер,
который в данном случае является некоторым сырья HTML и некоторых сырой текст.
Что здесь происходит?
>> Ну, с относительно небольшим количеством строк кода, я могу хранить
постоянно в течение нескольких секунд, или если мы достаточно долго ждали,
минут, даже часов, некоторые значения таким образом, что делает HTTP
кажется состоянием, как если бы мы сохранили
это соединение с сервером, и это просто помню, что я говорил в прошлый раз,
но на самом деле есть целая куча сложности происходит под капотом
с участием печенье которая позволяет PHP, чтобы дать мне эту иллюзию
этой корзине подобные функции.
На данный момент тривиальный пример, где мы просто хранить целое число,
но эта функция вернется к иметь большое значение
Когда мы начинаем говорить о более сложных проектов,
Среди них задачу, поставленную 7.
Это ваш самый последний вопрос, поставленный в CS50.
Я знаю, это так печально, но то, что вы найдете то, что мы собираемся заключить
эта часть семестра на самом деле переход
Из контекста C, конечно, в контексте PHP
но при использовании некоторых из той же основы
Мы говорили в течение некоторого времени.
>> Цель с PSET 7 является осуществление CS50 финансов,
который является вашей собственной версии Yahoo Finance и Google Finance
или даже Etrade.com, в котором вы имеете возможность
посмотреть цены на акции для данного символа, но даже более того
у вас есть возможность "купить" и "продать" акции
, которые торгуются на различных биржах, потому как это главная страница
Здесь предложения, которые действительно, в какой степени мы начали
Проблема набора для вас, вы должны войти формы, которая спрашивает имя пользователя и пароль.
Она имеет кнопку отправки, но после того, как мы в конечном счете видеть,
ничего не происходит на самом деле под капотом еще и потому, что
остается для вас, чтобы реализовать возможность регистрировать новых пользователей,
Возможность купить акции, продать акции,
на самом деле посмотреть текущие цены на акции.
>> И действительно, это будет как реальный мир, как возможно потому, что мы сделали
есть кусок кода, который позволит вам с одной функцией
для запросов Yahoo Finance, которая чудесно делает доступным бесплатное данных
для поиска цен на акции на основе символа акции или тикер,
и вы получите обратно текущие цены на акции в день.
Данные на самом деле вы видите в данном PSET будет
О, как реальный мир, как он может получить, так что вы на самом деле взаимодействие
с реальными запасами мир, реальные мировые цены,
и мы будем видеть, сколько денег вы можете сделать, возможно,
в течение следующих нескольких дней, играя с вашим собственным набором проблем.
>> Но давайте сначала подготовить почву для, как проектировать то, что, конечно, более сложная
чем counter.php, это сложнее, чем любой из Frosh примеры чаты до сих пор,
и давайте попробуем ввести несколько парадигм здесь, которые позволяют нам
как для PSET 7 и, может быть, для вашего проекта, если вы делаете что-то веб-основе
чтобы сохранить ваш код хорошо организованы, чтобы держать себя в здравом уме,
и сделать шаг в сторону сотрудничества, будь то в окончательном проекте CS50 в
или за ее пределами, если вы будете продолжать программировать что-то в будущем.
Там в эту общую парадигму дизайна
в области информатики и в разработке программного обеспечения в целом
известный как MVC, Model View Controller,
и это глупо акроним, который описывает очень хорошая идея,
которая является разделение различных аспектов программы,
специально ведения отдельных логики или бизнес-логику сайта
так что все, что включает в себя такие вещи, как
Вызов функций и запросов к базам данных и т.п.
происходит не среди ваших HTML
а в отдельных файлах, и, действительно, есть такой один файл
Обычно, что вы назвали контроллер
что на самом деле мозги за операцию, и мы увидим, например,
это в один момент.
>> Там есть модель, которая программного кода
, что делает разговаривал с базами данных, который разговаривает с Yahoo Finance и т.п.,
а там V в MVC, виды,
Все вещи, которые связаны с эстетикой, файлы, которые на самом деле содержат
ваши HTML, CSS, может быть, ваше и тому подобное.
Идея здесь в том, как эта картина предполагает, что контроллер
это файл, как мы скоро увидим, и как вы будете особенно видеть в PSET 7,
что мир говорит с помощью своих веб-браузеров.
Это файл, который будет побывал на интернет-общественности,
но контроллер общается с потенциально модели,
которая является одним или несколькими другими файлами, которые содержат код, связанный с данными,
Код, связанных с базами данных и т.п., а потом разговаривает с
Контроллер один или несколько других файлов, известных как взгляды,
которые являются эстетика веб-страницы, шаблоны в духе,
, что может занять некоторое данных в качестве входных данных, но в конце дня
Только логика внутри целью должно быть оказание этих данных,
итерации цикла и на самом деле плевать на некоторые
HTML на основе их исполнением или даже что-то вроде PDF.
>> Что приятно о MVC является то, что вы можете иметь различные взгляды
в зависимости от типа устройства, в зависимости от типа файла формата, который вы на самом деле
хотите показать пользователю.
Давайте посмотрим на несколько более и более сложные и хорошо продуманные примеры
, начиная с первой версии 0 здесь.
Позвольте мне идти вперед и открывать в нашем каталоге MVC сегодня
файл с именем index.php в каталоге: 0.
Обратите внимание, это супер простой и очень восторг сайта
это своего рода версия 0 из домашней страницы для CS50,
и заметил, как у нас есть ссылка на лекции, у нас есть ссылка на учебный план,
и если я перейдите по ссылке на уведомления лекции о том, что URL
наверху будет меняться в lectures.php.
Если бы я тогда следуйте по ссылке неделя 1 Обратите внимание, что URL изменений в week1.php.
Там, кажется, довольно простой иерархической структуры здесь.
>> Давайте бросим быстрый взгляд под капотом, как это выложил,
И действительно, если посмотреть на index.php это довольно просто.
В самом деле, хотя я и назвал эту файле PHP нет никаких фактических программный код.
Там в комментарии, что я написал здесь, в PHP просто, так что пользователю не до конца видя его.
Конечно, как и раньше, ничего, что между PHP теги
интерпретируется, даже если это комментарии, и интерпретировать комментарий
означает просто выбросить его в конце дня, и на самом деле не
отправить его в браузер, так что все здесь просто эстетика.
Если я открываю аналогичным lectures.php это тоже просто жестко кодированных файлов.
Это происходит называть что-то. PHP,
но это действительно просто. HTML, и week1.php, week2.php
Точно так же только разметка, так что куча недостатков этой конструкции.
Один из них, это огромное количество копировать / вставить.
Даже несмотря на то единственное, что меняется Среди этих файлов в случае маркированного списка,
Ли теги, я, тем не менее есть док типа, HTML, головы,
названия, близкие тела, близкие HTML и многое другое
В каждый файл, который означает, что если я когда-нибудь хотите реструктуризацию
эта веб-страница или restylize это я должен пойти и изменить
Все эти файлы вручную или с некоторым массивным найти и заменить.
>> Давайте сделаем шаг в сторону умнее, больше думать дизайна в версии 1 здесь
которым в соответствии читать мне, что мы включили, так что вы можете играть вместе с
эти более спокойные дома, обратите внимание, что мы имеем здесь
Резюме файлы в версии 1 этого сайта,
и кажется, что я взял на себя смелость вынести за скобки
общий код, header.php и footer.php.
Ну, давайте взглянем на то, что внутри первой из них.
Header.php выглядит знакомо,
но обратите внимание, где это отрезать?
Сразу после строки 19, так что это все, что было общим
из файла index.php, lectures.php,
Неделя1 и week2.php из предыдущего примера.
Что я сделал копию и вырезать все, что было общим для всех этих файлов,
положить его в отдельный файл заголовка, а так же в footer.php
я применить тот же принцип, согласно которому только интересные линии
В footer.php эти два, недалеко тела и близких HTML.
>> Но что это означает теперь, что в новой версии
из index.php обратите внимание, как много проще он может получить.
Конечно, немного более загадочным выглядит, немного меньше, интуитивно
следовать сверху вниз, но боже мой, все, что избыточность в настоящее время нет.
Мы требуем использованием PHP функция называется буквально требуют наверху,
которая очень напоминает, напомним, С # включить в механизм.
Мы требуем header.php на самом верху.
Мы требуем footer.php на дне, и единственное, что различные
или особенного в этом файле содержание, которое должно быть уникальным для этого.
Если бы я тогда идут, скажем, lectures.php, тот же принцип применяется.
Опять же, некоторые комментарии наверху, но потом требуют заголовке, требуют нижний колонтитулы,
и между ними, это только содержание, что на самом деле изменилось.
И если бы мы смотрели в неделю 1 и 2-я неделя мы будем видеть
что этот же принцип был применен там.
Ну, мы не совсем сделано там.
>> Давайте взглянем на версии 2, который имеет аналогичную структуру,
не заметить, что теперь я ввел нечто другое.
В строке 10 я представил helpers.php,
который очевидно содержит вспомогательные функции.
Вспомогательные функции, как правило, относительно короткими функции
что вы пишете, чтобы помочь вам в различных местах,
и давайте посмотрим, что внутри helpers.php.
В этом случае, похоже, что она имеет 2 функции.
Напомним, с другой день с кубом пример
Вы можете определить свои собственные функции в PHP, и то, что я сделал, теперь у меня
функций называется оказывают подвал и сделать заголовок,
первый из которых принимает параметр называется данными,
которого по умолчанию является пустой массив, как это было предложено там,
и мы действительно можем написать это еще более кратко в последней версии PHP
, сказав, открытые квадратные скобки, закрытые квадратные скобки.
Это означает, что пустой массив размером 0, но, тем не менее массива.
>> Этот экстракт функция немного специфичен тем, что
что он делает это в качестве аргумента ассоциативный массив
, который имеет 0 или более пар ключ-значение, и если у вас есть ключ Foo
а значение бара экстракт функции
создает ситуацию, в которой сейчас, как линии 11,
у вас есть локальная переменная $ FOO, значением которого является бар.
И если бы у вас было больше ключей и значений в массиве данных,
Аналогичным бы они извлекаются в локальную область
или пространства имен, так что и footer.php
та же идея здесь, чтобы header.php
имеют доступ к этим переменным.
В самом деле, позвольте мне открыть снова header.php
и обратить внимание на то, что теперь он выглядит в этой версии.
>> Вместо жесткого кодирования CS50 в качестве названия для каждой страницы
заметит динамизм, что это возможно сейчас.
В строке 5 я эхом название переменной,
но сначала я передаю, что название переменной функцию под названием HTMLSpecialChars.
Глупое имя для функции, если она есть, но она действительно делает то, что он говорит.
Это гарантирует, что любые специальные символы
в строке, который был принят в правильно бежал HTML.
На самом деле это способ избежать так называемых Cross Site Scripting атаки
которой кто-то может злонамеренно или случайно
вводить свои собственные HTML на свой сайт
путем вставки в той или иной форме, например,
то, что вы были не совсем ожидал, в частности, наличие кода,
как мы будем говорить в неделю или два времени.
>> Это сейчас header.php, это вид
В том смысле, что оно позволяет просматривать эстетическое содержание некоторых наборов данных.
Но более конкретно, это шаблон.
Это своего рода план теперь, что мы хотим заголовке каждой страницы, чтобы выглядеть,
но есть некоторая динамика в том, что мы хотим, чтобы название будет динамически вставляются
Судя по названию переменной
, которое было извлечено, когда мы звонили, опять же,
Функция визуализации заголовка.
Теперь, если мы посмотрели на рендер подвал, там на самом деле не так много использования, что прямо сейчас
потому что в footer.php нет динамизма бы то ни было.
Там могут быть, но на данный момент это жестко запрограммированный список из 2 тегами,
но та же идея применима, так что фактически предлагает почему
ли мы тратить время имеющий заголовок визуализации и рендеринга колонтитул функцию?
Отпусти меня, а теперь в версии 3,
и в версии 3 в помощники я решил упростить ее еще больше.
>> Позвольте мне один визуализации функций.
Дайте мне его взять еще один аргумент, на этот раз называется шаблоном,
, который предназначен, чтобы быть имя шаблона,
и тогда я буду объединения дерзко. PHP, чтобы значение этой переменной,
, а затем, если он существует foo.php, bar.php или header.php и footer.php,
Затем я собираюсь идти вперед и извлечь переменных данных
, а затем требуют, чтобы путь.
Другими словами, использование этого сейчас, если я открываю index.php
заметить, что я не называю визуализации заголовка больше.
Я просто называю сделать, но я пройти в кавычках значение заголовка
ясно дать понять, какой шаблон я на самом деле хочу, чтобы загрузить.
>> Тогда здесь заметить, что я делаю.
Я передаю в динамично ключ название,
Значение CS50, и это тоже, как мы видели раньше,
мог бы быть более краткими в последней версии PHP
где я могу заменить функцию массива в квадратных скобках,
который я предлагаю еще более читаемым и, конечно,
немного легче набирать.
И, конечно, с вынести колонтитул вызова в нижней части,
Мы не беспокоят проходящие во второй аргумент вообще, не ассоциативный массив,
потому что нет ничего динамического внутри этого колонтитула.
Это всего лишь некоторые близкие тегов для HTML.
Хорошо, мы предпринимаем шаги по очистке вещи действительно здесь,
но позвольте мне открыть 2 финала примеров.
Это один, номер 4, обратите внимание, что я принял сознательное решение сейчас
чтобы улучшить предыдущий пример, наконец, используя некоторые иерархии мои файлы.
>> Обратите внимание, что в данном резюме, в этом читал мне, я представил
включает в себя каталог и каталог шаблонов
, содержимое которых будет то, что я хочу, чтобы включить
и шаблоны, которые я хочу сделать, соответственно.
Это действительно я, будучи анальный и пытается держать вещи опрятными,
сохранить файлы, связанные вместе, но конечный результат
является то, что у нас теперь есть немного опрятнее установки, но мы должны помнить, теперь
в, например, index.php
когда мы требуем файл helpers.php
мы должны теперь требуют его через включает / helpers.php
, а не просто говорить helpers.php, потому что теперь это на самом деле в подкаталог.
Теперь, как и в сторону, вы увидите в этих примерах и некоторые другие
функции, как требуется, требуется один раз.
Там на самом деле сама функция называется включать, и все они имеют несколько иное поведение.
Здесь я говорю требуется один раз, чтобы сделать супер ясно, что я только хочу, чтобы эти
Помощники, включенных в моем проекте раза.
Но если я осторожно, и если я на самом деле думаю через мою логику правильно
этого должно хватить слишком просто сказать, требуют наверху
Пока я сам не случайно требует, чтобы и тот же файл в другом месте.
На самом деле, это немного более эффективный способ делать вещи, затем с помощью
требуется один раз, так что я буду урезать его до просто требуют.
>> Давайте возьмем еще один шаг вперед.
Этот последний пример сейчас, версии 5, имеет еще чище иерархии папок.
Обратите внимание на то, что я сделал здесь за читала мне в этой последней версии
Теперь у меня есть HTML каталог, который у меня был все это время,
но внутри там сейчас только index.php, lectures.php,
week1.php и week2.php.
Каталог включает в себя в настоящее время живет рядом с HTML каталога,
так на том же уровне, как родной брат, так сказать.
Так же как и шаблоны папки.
Ключевым вынос здесь я представил немного больше структуры,
но ключевой особенностью является то, что теперь только файлы
, которые должны быть доступны веб публично адресуемых
по URL на интернет-общественности в моем HTML каталога.
>> Между тем, другие файлы, helpers.php, footer.php,
header.php, которые, возможно, являются, возможно, более чувствительны,
Может быть, помощники на самом деле имеет некоторые имена пользователей и пароли или некоторые интеллектуальные
свойство мое, функции, я действительно не хочу, чтобы мир видел, даже если случайно.
Это хорошая практика, чтобы держаться подальше от общественных каталога HTML
любые файлы, которые не нужно себя публике.
Все, что нужно сделать в этом случае, когда смотрю, например,
index.php каталога в HTML файл,
Заметьте, что мы просто должны быть немного более осторожны, когда требуется
или требуется только файл.
Мне нужно сначала сделать .. для перехода в родительский каталог,
то же / входит / helpers.php
нырять вниз, чтобы получить файл, который меня волнует.
>> Любые вопросы, то на MVC
или это относительно простое воплощение его?
И позвольте мне пояснить, что мы сосредоточились совсем немного на
V здесь, мнения и факторинговые из этих шаблонов.
Мы на самом деле не отличается от M C только пока.
На самом деле, там действительно нет M здесь, и даже наш C,
контроллера, на самом деле не делают все, что много, но вы получите намного больше
знакомый с обоими этими 2 письма от MVC,
или, вернее, вы получите гораздо больше знакомы с C
В MVC для задачи набора 7, поэтому есть больше, что на горизонте.
Вопросы?
Там на самом деле никого нет.
>> Хорошо, давайте теперь перейдем к второй и последний тема на сегодняшний день.
То есть введение базы данных.
До этого момента мы имели несколько способов хранения данных.
Мы использовали переменные.
Вернуться в нашем файле C, I / O обсуждения мы начали использовать текстовые файлы
и использование файлов, таких как Fprintf, и тогда мы даже начали
говорить о CSV-файлов немного, значения, разделенные запятыми,
так что все это позволило нам иметь данные, хранящиеся
либо не постоянно, или настойчиво.
Но даже CSVs на самом деле не способствует поиску
и вставки и удаления.
Это действительно просто глупо текстовых файлов, разделенных запятыми
строка за строкой путем строка за строкой, поэтому если вы хотите, чтобы
поиск файлов, что лучшее, что вы можете сделать действительно линейный поиск.
Вы должны начать в верхней части файла, читать все это в,
и искать некоторое значение интереса.
Если Вы хотите вставить в нее вы должны сделать то же самое,
итерации он и вставки в определенном месте,
и в том, что Вы должны сделать все поиски логики себе.
>> Вы не можете сделать умное шаблону на файл CSV, если вы сами написать код.
Вы не можете сделать фильтрацию файлов CSV
если вы сами написать код.
Разве не было бы здорово, если бы кто-то другой положил во всех усилий
на самом деле сделать поиск простым и легким вставки
и удаления и обновления и так далее?
Это именно то, что база данных.
SQL, язык структурированных запросов, является еще одним языком
что мы представляем здесь сегодня, но это тоже довольно доступной,
и то, что мы действительно собираемся сделать, это просто вырвать из него некоторые из наиболее характерных
характеристик, так что для PSET 7, и если вы делаете что-то веб-основе,
ваш окончательный проект, у вас есть возможность выразить себя
по данным запросам.
У Вас есть возможность хранить мало или много данных
в более структурированном виде, что будет в конце дня
сделать вашу жизнь проще, потому что с SQL вы можете выразить себя
гораздо точнее, гораздо более методично, с тем чтобы
вернуть некоторые подмножества данных из большого корпуса данных.
>> Вы можете думать о базе данных, в этом случае база данных SQL, действительно, как Excel
или чисел, где это электронная таблица,
или, может быть, нескольких электронных таблиц и таблиц, конечно,
есть строки и столбцы, и это потому, что
SQL базы данных реляционную, реляционную в том смысле,
что они хранят данные в терминах этих таблицах,
строк и столбцов.
Они более высокой производительностью, чем что-то вроде таблицы,
и таблица предназначена для использования человеком.
База данных предназначена для использования программистом
написание кода против этого, поэтому воплощение базы данных
будет либо командной строки.
>> Один из самых популярных реляционных баз данных там, опять же, MySQL,
которая чудесно бесплатно, очень высокопроизводительные, и это то, что
Facebook использовать очень рано и до некоторой степени еще и сегодня
хранить много своих данных, и мы увидим в момент
что с помощью относительно простых команд
мы можем выбрать данные, вставки данных, обновление данных,
удаление данных и тому подобное, но, к счастью, есть более удобный интерфейс
чем просто введя в черно-белой строки здесь.
Мы будем использовать для PSET 7 и за бесплатный инструмент под названием PHPMyAdmin.
Название является случайным.
Инструмент случается быть реализованы в PHP,
но это принципиально не имеет значения.
Что полезного о PHPMyAdmin том, что это веб-утилиты.
Мы предварительно установили его в прибор для вас,
и с его помощью вы можете создавать таблицы в базе данных,
Вы можете вставить данные, удалять данные, и вообще см.
Ваши данные в достаточно удобной средой.
Ваши пользователи не собирается использовать PHPMyAdmin.
>> Это действительно только административные или разработчик инструментов
, с которой, чтобы увидеть и копаться ваши данные и выяснить, как структурировать ее,
так же, как вы сами можете использовать Excel или Numbers,
но это будет отличный способ визуализации, что происходит под капотом
так что вы можете сосредоточиться на решении проблем интересным и не столько
на тайные команды.
Давайте посмотрим на пример данных, которые могут храниться таблично
В реляционной базе данных.
Вот один из таких примеров.
Сейчас, к сожалению, PHPMyAdmin ошибку на стороне бросать слишком много слов
и графики на вас, но если вы оттачивают только на
ID колонки, колонки имя пользователя и хэш-столбца
это эффективно таблицы, но это случается, фрагмент
таблицы внутри прибора
использование файлов, мы предоставляем вам в проблеме набор 7.
>> В частности, мы даем вам файл, который представляет
пользователем таблицы, поэтому таблицу, содержащую пользователей с 3 колонками,
одним из которых является уникальный идентификатор, начиная с 1 и увеличивается время после этого.
Во втором столбце имя пользователя, и те из вас, кто сделал хакер,
Хакер издание для PSET 2, могли бы признать некоторые из этих имен пользователей по крайней мере.
На правой стороне находятся пароли, но они не буквальное пароли.
Они хэши их, так получается
, что хранить пароли в базе данных, это действительно плохая идея.
Вы все, наверное, читали в какой-то момент некоторые веб-сайт
или базы данных, некоторые компании компрометации, а затем вы должны
изменить пароль, вам нужно получить возврат на вещи
потому что некоторые плохой парень на самом деле ворвались в своем аккаунте в качестве результата.
>> Хранение паролей в незашифрованном виде, в открытом виде в базе данных
совершенно глупый, и все же это очень забавно
Затем, чтобы прочитать о некоторых очень известных компаний
Иногда в прессе, базы данных которых оказываются под угрозой,
и эта часть не смешно, но факт, что базы данных содержат незашифрованные
Пароли смешно, потому что буквально с одной строки кода
Вы можете защититься от этой конкретной угрозой, и это то, что мы сделали здесь.
Даже для наших поддельных немного CS50 финансов версии
Мы шифрования паролей только для хорошей мерой, и тот факт, что
Все эти пароли начинаются с $ 1 $ это просто конвенции.
Это просто означает, что они зашифрованы или действительно хэшируется
которая, как односторонняя функция шифрования
которых вы не можете ликвидировать ее последствия с так называемой MD5.
>> Тот факт, что 50 это после того, что означает, что значения соли
из 50 были использованы для перемешивания все эти пароли, за исключением одного.
Шахта, конечно, как вы видите, есть, HA,
было использование различных солей, так что те из вас, кто получил слегка споткнулся
Может быть, в Hacker 2, что, возможно, было результатом нашей использовав
различных хэш, чем другие, потому что мой пароль фактически то же самое
как и некоторые другие Пользователь там.
В самом деле, если вы ждали все эти недели, чтобы узнать
что эти пароли были здесь были пароли, которые вы были оспорены
взломать в Hacker издание проблемой набора 2, так что не слишком сложно.
В самом деле, Малан был таким же, как jharvard,
Но если мы вернемся они выглядели по-другому.
>> Сосредоточьтесь на jharvard в малиновый, потому что они были соленые по-разному.
Алгоритм был возмущенный таким образом, что
хэш-значение, зашифрованное значение выглядит немного иначе
потому что входы были немного другими, но пароль под капотом
по-прежнему в конечном счете, малиновый.
Теперь, кто заботится об этом?
Ну, мы предоставляем вам с образцами пользователей, имена образцов пользователей
и хэши паролей, так что у вас действительно есть некоторый
клиенты для CS50 финансов, когда вы впервые оторваться от земли с вашим кодом.
Вам придется выполнять несколько таблиц внутри MySQL, внутри базы данных.
Вы будете иметь, чтобы создать более таблиц, эффективно, но мы решили дать вам эту
, чтобы вы начали, и вы увидите, что проблема набора спецификаций
проведет вас через процесс импорта этой таблице
а также объяснить, что некоторые из характеристик,
и вы также увидите, что мы предлагаем Вам код
для обработки хэширования или шифрования данных паролей,
так что вам не нужно слишком беспокоиться о том, что MD5 или как на самом деле все.
>> Таким образом, SQL, язык структурированных запросов.
Это, попросту говоря, язык, который мы собираемся начать использовать в PSET 7
и, возможно, за пределами запросить данные из некоторых баз данных.
Данные, опять же, хранится таблично в этих реляционных таблиц, столбцов и строк,
но с использованием некоторых относительно простой синтаксис, как удаление,
вставки, обновления и выбора мы можем сделать именно это.
Мы можем удалить из базы данных, вставки,
обновления данных, а также выбрать, то есть извлечения данных из базы данных.
Как мы можем идти об этом?
Позвольте мне идти вперед в устройство.
Позвольте мне подтянуть http://localhost,
который, опять же, местные сам прибор.
Это по умолчанию прозвище.
И позвольте мне перейти к / PHPMyAdmin.
Это случается, специальный URL, что прибор предварительно понять,
, что сразу подсказывает мне имя пользователя и пароль.
>> Как обычно, я собираюсь ввести jharvard и малиновый,
но понимаю, что это учетная запись администратора на компьютере.
Это просто совпадение, что есть также jharvard зарегистрированы для CS50 финансов.
Jharvard, малиновый, введите дает мне пользовательский интерфейс, который мы видели
проблеск минуту назад, и это немного подавляющим сначала,
но будьте уверены, вы никогда не будете иметь, чтобы нажмите большинство ссылок в этом инструменте.
Вы будете в конечном итоге с помощью небольшой группы, которые являются супер полезно,
первый из которых баз данных здесь.
Если я подхожу к базам данных, заметили, что я предложено создать базу данных.
Это как создание нового файла Excel, эффективно.
Я собираюсь пойти дальше и называют эту лекцию, и я просто не обращать внимания на поле там, сортировки.
Это связано с представлением данных в нем,
и я собираюсь нажать кнопку создать, а сейчас заметила, как я отпустил создать
на левой стороне, где он говорит, что нет базы данных
Я скоро см. лекцию базы данных.
>> Если я теперь нажмите на левую сторону, лекции базе данных,
заметит мои вкладки изменится немного.
У меня есть структуры, SQL, экспорт, импорт и некоторые другие вещи.
Структура является в значительной степени пустым.
Никаких таблиц в базе данных, как сказано здесь,
поэтому давайте создадим таблицу, и давайте идти вперед и создавать таблицы
как студенты, и сколько колонн мы хотим?
Давайте держать это простой, и давайте записи для каждого студента
ID номер, имя и адрес электронной почты.
>> Мы будем держать это простым, как, что, таким образом, 3 колонки, иди.
Форма, которую вы здесь видите, сейчас немного грязный и подавляющим,
но мы просто должны пройти через это строка за строкой, поэтому очень быстро давай
Первый столбец в этой базе данных имя ID для уникального идентификатора.
Это будет целое число. Я могу фактически игнорируют длины и значения.
Int будет 32 бит независимо от того, что вы печатаете там, так что давайте оставим это поле пустым.
Значение по умолчанию, я мог бы сделать его нулевым, как они определены.
Я собираюсь оставить это в покое. Давайте не будем беспокоиться о значениях по умолчанию.
Давайте прокрутки здесь направо, атрибуты.
Это интересно.
Давайте идти вперед и несколько условно сказать, что идентификаторы должны быть подписаны.
Давайте не будем терять ни отрицательных чисел.
>> Пойдем от 0 до 4 млрд, плюс-минус,
и давайте не будем касаться любого из этих полей просто еще там,
но тогда позвольте мне ввести имя здесь,
, а затем другая электронной почты, поэтому улов электронной почте
и имя, очевидно, не целые числа, так что давайте менять их на другое поле.
Оказывается, VARCHAR, переменной длины символов,
, как строка в базе данных SQL
но переменной длины, и вы на самом деле нужно сказать, что это заранее
Максимальная длина строки, так что я собираюсь несколько условно
по соглашению типа 255 символов.
Я могу сказать совершенно 32. Я мог бы сказать 1.000.
Вы вроде необходимости решить для себя, на основе ваших демографических что
самый длинный студента имя и идти с этим номером или немного больше,
но то, что хорошо о VARCHAR он не собирается тратить
255 байт на имя каждого студента.
Если это DAVID он не собирается использовать все 255 байт,
но это верхняя граница, так что я пойду с 255 только по соглашению,
но мы могли бы обсудить, что будет несколько ниже стоимости, так и для электронной почты
просто быть последовательным 255, но опять же, мы могли бы иметь такую ​​же дискуссию.
Но я собираюсь сделать еще одну вещь здесь на правой стороне.
>> Что мощных о базе данных является то, что она может делать много тяжелой работы
или сложная работа для вас.
В частности, я действительно не волнует, что ID моего студента числа.
Это просто должно быть уникальным идентификатором в базе данных
так что у меня есть 32-разрядные кратким представлением, что студент
так что у меня есть какой-то способ уникальной идентификации их
чтобы не быть 2 Давидс, например, в классе.
На самом деле, я собираюсь этот флажок А.И., автоматическое приращение,
так что база данных, MySQL, выясняет,
что ID каждого вновь вставленной студента будет.
Я даже не придется заботиться о том, что в моем коде,
и я также буду выбирать что-то под индексом меню.
Индекс выпадающие здесь первичные, уникальные,
индекс и полный текст.
Можно догадаться, что, может быть, пару таких вещей,
но оказывается, что в реляционных базах данных
Вы программист или администратор базы данных, чтобы получить превентивно
давать подсказки к базе данных как к тому, что поля
В таблице немного особенным.
>> Например, в данном случае я хочу сказать, что ID
будет первичный индекс, иначе известный как первичный ключ.
Что это означает, по определению, является то, что отныне ID
однозначно идентифицировать студентов в этой таблице.
Ни один студент не будет иметь тот же ID, потому что я введения этого ограничения или этот индекс.
Кроме того, что это собирается сделать для меня это расскажет
MySQL, что ID является специальным.
Я забочусь особенно о ID, так что идти вперед и делать магию вашей фантазии структура данных, в
создать своего рода дерево.
Обычно это то, что называется B-дерева, которые мы не смотрим на недели назад,
но это другая такая структура данных, близкого по духу к бинарные деревья
и пытается, что мы смотрели, но она скажет
в базе данных этого поля является настолько важным, что я, вероятно,
хочу быть в состоянии искать на это, идти вперед и строить некоторые фантазии
Структура данных в памяти, чтобы ускорить поиски, так что идеально
они постоянные времени или, по крайней мере близко к тому, как возможно
так, что она не превратится в линейный поиск, который не будет
Самый высокопроизводительный подход.
В отличие от этого, адрес электронной почты, возможно, был первичным ключом.
>> В теории, адрес электронной почты каждого человека уникальным, если вы не разделяя некоторые счета,
но это как правило не хорошо использовать что-то вроде строки
в качестве первичного ключа, потому что, если его цель в жизни, чтобы однозначно идентифицировать
строк в таблице нет никаких причин использовать 255 байт максимально
однозначно идентифицировать кого-то, если вы можете обойтись только 4 байта
или 32-разрядный Int.
В общем, первичный ключ должен быть коротким и краткие
а в идеале что-то вроде целое или большой INT, который бывает 64 бит.
Но адрес электронной почты должен быть уникальным, и одна из особенностей базы данных слишком
, чтобы обеспечить уникальность для меня.
При выборе уникальных здесь рядом с электронной почтой, хотя само по электронной почте
прокручивается с экрана, я говорю в базу данных
мне не доверяешь.
Не дай мне вставлять в базу данных
же адрес электронной почты два раза, даже если я идиот, и я не
очень хорошо с моей IFS и IFS еще и фактический код PHP
и я случайно позволить пользователю зарегистрироваться в существующий адрес электронной почты
База данных является еще одним уровнем защиты для корректности
для обеспечения того, чтобы дублирующиеся адреса электронной почты не до конца в таблице.
>> Теперь, наоборот, для названия вы, вероятно, не хотят, чтобы это уникальное
потому что тогда никогда не может быть 2 или 2 Davids Майк Смит, например,
в базе данных, так что мы просто оставить в покое.
Я собираюсь идти вперед и нажмите кнопку Сохранить в правом нижнем углу,
и все выглядит хорошо, но заметил здесь
это часть, которая на данный момент мы не будем тратить слишком много времени на
потому что синтаксис немного сложным, и мы не должны создавать таблицы
Все, что часто, но SQL сам по себе является языком,
синтаксиса, для которых это прямо здесь, что я выделил.
Что PHPMyAdmin действительно это создает веб-интерфейс для вас
, с которой вы можете сэкономить время и не придется вручную вводить из
довольно долгое SQL запросов вроде этого.
>> Другими словами, если вы хотите, чтобы вручную создать эту таблицу,
либо на этой черно-белой строки или даже в PHPMyAdmin
С помощью этой вкладки другой, на этой вкладке SQL, где вы можете набрать в любом запросов SQL
Вы хотите, честно говоря, это заняло бы мне минуту
на самом деле помнит весь синтаксис, и даже тогда я бы, наверное,
сделаны некоторые опечатки, поэтому этот инструмент является полезной вещи, как, что, и это тоже поучительно.
Вы можете начать делать вывод, что синтаксис
просто хорошее цветовое кодирование, что PHPMyAdmin добавляет
для нашего визуального удобства.
А теперь давайте сделаем это вместо этого.
Позвольте мне перейти на вкладку Вставка на вершине, и позвольте мне идти вперед и вставить, например,
Идентификатор скажем, на самом деле меня не волнует.
Это будет автоматическое приращение. Я хочу, чтобы база данных справиться с этим.
Но я буду Давид, и моя электронная почта должна быть malan@harvard.edu.
>> Давайте пойдем дальше здесь и положить в Майк Смит другой.
Я дам себе фамилию, а также,
и мы должны быть ему smith@example.com,
и тогда, где я могу идти дальше?
Ну, это выглядит как пойти, кнопку нажать, и вуаля.
Обратите внимание, в верхнем 2 строки вставлены.
Это реальный запрос SQL.
Это PhpMyAdmin инструмент выполнен для меня,
но в конечном итоге, заметьте, если я сейчас перейдите на вкладку Обзор,
, чтобы увидеть 2 строки в этой таблице, очень напоминают эстетически
в таблице мы видели ранее для наших пользователей от PSET 7,
один из которых является Дэвид Малан, один из которых в настоящее время является Майк Смит.
Но только, чтобы быть ясной, мне не нужно использовать PHPMyAdmin,
И действительно, вы собираетесь в ближайшее время писать код для PSET 7
, которая автоматизирует процесс добавления строк, удаление строк, обновление строк и т.п.,
так что позвольте мне вместо этого перейти к вкладке SQL здесь
и типа SELECT * FROM студентов, где
электронную почту = "malan@harvard.edu".
>> Другими словами, предположим, теперь у вас есть
некоторые HTML форме, и пользователь вводит свой адрес электронной почты, среди других областях,
и цель сейчас находится в PHP на заднем конце кода
на самом деле искать другие детали этого пользователя.
Каково ваше полное имя? Каков ваш ID номер?
Вы могли бы написать SQL запрос, как это, выберите * от студентов
где письмо = "malan@harvard.edu".
И если я затем нажмите кнопку Перейти, заметили, что я должна, и действительно я, вернуть только одну строку.
Майк исключены из этого набора результатов, так как коллекции строк
обычно называют, потому что он не имеет тот же адрес электронной почты, как я.
>> Теперь, опять же, здесь PSET 7 вы сможете использовать PHPMyAdmin как административный инструмент
и педагогической инструмент, чтобы узнать свой путь
по всему миру SQL, но в конце дня
Вы собираетесь писать эти запросы внутри фактический код PHP,
и поэтому следите за обновлениями в руководстве Zamyla в частности
где вы получите тур по распределению код для этой проблемой набора
где мы дали вам не только эстетика для страницы входа
и хороший сексуальный логотип, который говорит CS50 финансов, но мы также дали вам
кучей функций, которые сделают вашу жизнь немного легче.
Мы также написал часть PSET для вас,
Вход часть его, в частности, чтобы дать вам ощущение представитель дизайн
что на самом деле использует контроллер, например, index.php,
login.php и тому подобное, и тогда вы увидите PSET также имеется каталог шаблонов
, которая имеет все свои взгляды, все эстетики.
И поэтому общий рабочий процесс в PSET 7 будет в том, что
Ваши пользователи посетить контроллер через URL в браузере.
Это Контроллер содержит PHP код, который вы написали, так и внутри вашего кода PHP
может быть несколько строк SQL вложенные в двойные кавычки
и передается в функцию мы написали называется запросом
, которые помогут вам общаться с базой данных без использования что-то вроде
административных инструментов, как PHPMyAdmin.
>> Вы сможете писать SQL заявления в PHP кода
и вернуться PHP массив результирующего набора,
строк, которые фактически соответствуют данному запросу.
А так же вы сможете сделать вставки или удаления
или обновлений и т.п., синтаксис которого очень похож,
и вы увидите, с некоторых интернет-ссылки, с распределением код
и от PSET упаковать себя в точности, как идти об этом.
Поймите, в конечном счете, мы действительно просто царапать поверхность SQL
и MySQL, но власть это действительно то, что он освобождает вас
сосредоточить внимание на проблемы вы хотите решить, использование случаев вы хотите реализовать
не беспокоиться совершенно так же, по крайней мере, на ранней стадии,
о том, где и как хранить и искать базу данных,
и это вполне буквально, где Facebook сама получила свое начало
Использование MySQL, а затем с помощью более MySQL сервер, а затем более серверов MySQL
до времени, пока они тогда были действительно начать думать над тем, как
хранилище данных, как хранить вещи, даже более эффективно,
так что даже если мы считаем само собой разумеющимся тот факт, что индексы и уникальные ограничения
и так далее просто работать есть очень интересный разговор
что это может в конечном итоге привести всех к, так понимаю, что мы просто царапать поверхность
, что в конечном счете может для вас или ваших проектов становятся совсем немного больших данных.
>> С учетом сказанного, давайте заканчивается, и мы увидимся на следующей неделе.
[CS50.TV]