ДАГ Lloyd: Так в нашем видео по синтаксису PHP, мы много говорили о том, как PHP может быть использован в командной строке для запуска программ таким образом, чтобы мы довольно знакомы из С. Но, как Я также упомянул в этом видео, PHP изначально был разработан для осуществить веб-программирование, веб-сайты. И так в этом видео мы поговорим о том, как мы использовать PHP в контексте веб-разработки. Мы знаем, уже с наше видео на HTML, что сайты строятся из набора HTML-теги что семантически определить структура веб-страницы. Но сайты, которые являются построен с чистого HTML страдают от очень, очень серьезное ограничение. И, чтобы проиллюстрировать это ограничение, давайте рассмотрим следующее. Так что теперь я хочу, чтобы создать веб-страницу что всякий раз, когда пользователь посещает его, это дает мне тока время в Кембридже, штат Массачусетс., отображение до последней минуты. Если я делал это прямо сейчас, Я мог бы сказать что-то вроде этого. Текущее время в Cambridge-- так что я HTML-теги, теги, название голова теги, Тело tags-- ток время в Кембридже 14:08, печать военную время. Что произойдет, если он сейчас 2:09 вечера, 14:09? Ну так далеко, с HTML, я пойти и изменить его на 14:09. А потом через минуту, Я должен изменить его снова. А потом через минуту, Я должен изменить его снова. И, как вы можете себе представить, что это вероятно, худшая работа когда-либо. Вы веб-мастер для веб-страницы, и каждую минуту, 24 часа в сутки, вам необходимо обновить текущее время вручную открывать time.html и изменения просто фрагмент кода, чтобы сказать текущее время в часах и минутах. Это, вероятно, не очень хорошее использование наших ресурсов, как человек и вычислительная. Сайты, которые все HTML- полностью статичны. Единственный способ вы можете обновить Содержание, как мы только что видели, это вручную открыть те источник файлы, редактировать их и сохранять их. А потом, когда пользователь обновляет страницу, или посещает страницу в первый Время, они будут получать последние содержание. Но только потому, что мы вручную редактировать его. Если мы начинаем смешивать некоторые PHP там, наш код может получить гораздо более гибким. И мы можем иметь способ для наших страницах быть динамичным, или обновить себя, не требуя наш бедный вебмастер в предыдущем примере чтобы вручную обновить вещи. Они могут сделать это автоматически. Мы не должны вмешиваться. Мы можем поспать. Что, наверное, хорошо, если Вы делаете много веб-программирования. Таким образом, в CS50 IDE, мы запускаем Веб-сервер Apache называется. Это очень широко используется, открытая система веб-сервер источник. Эта система имеет способность интерпретировать PHP, который будет полезным, если Вы хотите, чтобы делать какие-либо программирования PHP. И в CS50 IDE, у нас есть команда чтобы сделать это очень легко сделать, apache50 начать. А потом, что косая черта Путь, слэш, чтобы, слэш реж, что это просто очень распространенным способом с указанием, что вы указали здесь это путь к конкретному каталог, который вам хочу быть корнем Сайт, или корневая страница, или папка, из которой ваш веб-сервер начнет изучать файлы и служить их до клиентов, которые просят их. Итак, давайте поп к CS50 IDE, просто показать вам, очень быстро, как это работает. Так вот в CS50 IDE, я в Каталог называется Неделя нулевой Девять. И у меня есть two-- меня есть выполняется команда LS только выше, чтобы показать вам, что у меня есть две директории в здесь, PHP, который является набором файлов, которые я использовал в синтаксиса PHP видео, а затем PHP-веб, который является набором файлов, которые я хотели бы использовать в этом видео. И я хотел бы начать экземпляр веб-сервер с содержанием PHP-веб-папки так как файлы в настоящее время подают. Так что я собираюсь делать? Я собираюсь ввести apache50 пространство начать, пространство PHP, тире веб. Это путь к директории откуда настоящее время я. Тогда я ударил Enter. Это собирается сделать немного вещей здесь. А потом скажет, Apache успешно запущен. Ваш сайт теперь доступен и at-- то есть URL-адрес для сайта. Так что я собираюсь делать? Я собираюсь быстро скопировать этот. И я собираюсь открыть up-- и Я уменьшить немного here-- Я собираюсь открыть новая вкладка в Chrome. И я собираюсь посетить этот адрес. Я ударю Enter. Это происходит, чтобы загрузить. И я буду удалять снова. И мы видим, здесь является содержимое моего веб-каталог PHP. Так что теперь, в основном, происходит здесь, мой экземпляр CS50 IDE отбывает эти файлы любой, кто просит их. И в течение это видео, мы сортировать взглянем на кучу из них разные файлы в контексте. Чтобы проверить, что ваш Apache сервер работает, который обычно собирается чтобы быть в случае CS50 IDE, но если вы делаете это в более общем, и вы начинаете строить свой собственный веб серверы, есть действительно распространенный вид аналогового к, "привет мир", что, как правило, используется для PHP веб-разработки. Что иметь файл состоящий только из этого code-- PHP-разделитель установлен с информацией PHP, скобки, точка с запятой между ними. Который является в основном специальная Функция PHP, который говорит вам то, что версия PHP вы работаете. Таким образом, в CS50 IDE, я что файл доступен только чтобы показать вам, что это будет выглядеть. Так что я смотрю на мою индекса от моего экземпляра PHP. Мой экземпляр Apache работает содержимое PHP-Web. И у меня есть файл здесь называют info.php. Я собираюсь выбрать его, уменьшения масштаба. Это то, что вы собираетесь чтобы видеть, довольно много. Это просто говорит мне, что мой сервер Apache работает. И это, по-видимому, версия PHP, что я бегу. Это мой аналог "привет мир". Так что я знаю вещи являются действующими. Так что мы хорошо идти. Мы можем исходить из здесь. Итак, давайте вернемся, что Пример раз мы были говорить о нашей бедной с веб-мастером который должен был обновить страницу постоянно. Это может быть исправление, как Я бы реализовать вещи так что веб-мастер не сделал должны постоянно обновлять время. Было бы просто вроде произойдет автоматически. Вниз ниже, HTML, это очень похожи, за одним исключением. Но здесь я получил некоторые PHP в верхней части. Я, по-видимому, это называется Функция date_default_timezone_set. И мы не говорим о всех эти функции в CS50, потому что, вероятно, имеет PHP десятки тысяч. Это может быть чем-то вроде преувеличение, но оно не может быть. Он получил много встроенных функций в. И так это функция, по-видимому устанавливает часовой пояс, как США / Восточной, что часовой пояс, что я В настоящее время в создании этого видео. Тогда я сделать вызов Функция называется, дата. И, по-видимому, я хранения HIS-то называется, времени. Так что здесь происходит? Ну, в принципе то, что происходит, я делаю вызов в какой-то сервер, который собирается скажи мне, что время в настоящее время. И я, преобразовав его в формате часов, минут, секунд. И причина это столица Н это собирается дать мне 24 час времени, не 12 час времени, которое будет в нижнем регистре ч. И я просто хранить, что в переменной называется, времени. Так что вторая линия PHP есть, вызов функции, Дата, становится только некоторая строка, которая является собирается дать мне дату и время и куча другой информации. И первый аргумент есть, что его, просто извлечения важную роль что я забочусь о данном примере, который час, минуту и ​​секунду. Так что это все, что происходит. Так что я хранить, что в переменной $ времени. А потом вниз на самом низу, я есть что сокращение для распечатки текущего времени. Так что я просто хочу, чтобы напечатать , что текущее время. Итак, давайте взглянем на это в CS50 IDE и увидеть, как мы теперь экономии, который вебмастеру много неприятностей. Ладно, так вот я снова назад в корневом каталоге моей Например Apache. И у меня есть файл здесь называют time.php. Я просто хочу, чтобы нажать на что. И я прокрутки вверх, потому что мы увеличено довольно далеко. Текущее время 14:20:34. Так что я делаю это часы, минуты и секунды. И я могу освежить страница и получить новое время. --41. Я собираюсь обновить страницу и получить новое время, 44, 46, 47. Так, я, очевидно, не меняя ничего себе. Я здесь обновить страницу. Поэтому я не могу быть там редактирования. И я обещаю вам, я не есть единомышленники которые редактируя файл от моего имени на стороне. Я просто с помощью этой функции PHP, Время, чтобы произвести время для меня автоматически. Так что, даже если я сплю, и мой веб-сервер работает, пользователь, который посещает, что страница все еще собирается получить именно текущее время. Так что это довольно хорошо. Я сделал мой сайт более динамичным с не слишком много кода PHP. Это было всего две строки кода, а затем немного заявлении для печати. И уже у меня есть гораздо более динамический сайт чем тот первом примере мы видели в начале видео. Так, напомним, из видео на синтаксиса PHP что когда РНР работает наша программа, она игнорирует все это не внутри PHP разделителей, выплевывая его. В этом примере, что самое что он был выплевывая был HTML. А это значит, я могу теперь пересыпать HTML и PHP вместе. Потому что интерпретатор будет просто игнорировать HTML и вывести его в буквальном смысле. И это хорошо, правильно? Потому что по-видимому, в конце дня, Я хотел бы мой сайт для быть изготовлены из HTML. Так что любой веб-браузер может интерпретировать это, или не понимают HTML на странице и делают это как-то, что мы может на самом деле понять, как люди. И я могу использовать только PHP для частей моего сайта Требовать динамизм, что требуют от меня чтобы иметь вещи, которые обновляют постоянно. Статическая информация может остаться то же самое. ОК, так что это нормально. Но почему бы мне это сделать? Почему я смешать HTML и PHP? Я мог бы просто распечатать все HTML, используя функцию PHP печати. Почему я не делаю, что? Подумайте об этом на секунду. Почему, когда я мог бы просто напечатать out-- я может иметь линии PHP, которые просто говорят, Печать HTML-тег, печатающая головка. Почему я не делаю, что? Почему я смешивания PHP и HTML? Ну, если вы думаете, об этом ни на секунду. PHP-интерпретатор имеет интерпретировать то, что он видит. И таким образом, это будет иметь выполнить строку кода. Распечатать HTML. Распечатать открыт головной тег. Распечатать открыт тег заголовка. Это придется выполнять и интерпретировать что каждый шаг пути. Почему бы просто не позволить переводчик просто замазать вещи не понимают и делать это автоматически? Это спасет меня много времени смешивать мою HTML и PHP мой вместе. И вот почему мы не просто открытый PHP разделитель а затем просто распечатать весь Содержание нашей страницы как один гигантский PHP вызов функции, Печать, а затем близко PHP разделитель, и мы сделали. Так вот почему мы смешиваем их вместе. До сих пор мы не видели слишком много разница от общего синтаксиса PHP. Это было довольно просто. Мы уже видели знак вопроса, равны. Мы видели несколько новых вызовов функций, но на самом деле ничего не фантазии происходит. Давайте, может быть, сделать вещи немного любитель. Что делать, если мы хотим передать информацию между различными файлами PHP, так что, возможно, пользователь может представить информацию для меня. И тогда я мог бы сделать что-то с ним на другой странице. Итак, PHP имеет поддержку то, что называется Супер Глобальный Переменные, который звучит довольно удивительным. Они на самом деле просто гигантские ассоциативные массивы которые помогают осуществить это Функциональность мимоходом информацией между PHP файлов, которые являются существующие на нашем веб-сервере. Первый из этих супер глобальные называется $ _GET. И это, пожалуй, Проще понять. Что происходит с $ _GET? Ну, в принципе, пользователь собирается ввести дополнительную информацию В конце наших адресов. И все, что они типа, предполагая, это отформатирован определенным образом называется строкой запроса, который находится всего набор пар ключ-значение разделенных амперсандами. Эти ключевые пары значений будут хранится в $ _GET ассоциативного массива. А из нашего видео на Синтаксис PHP, мы знаем, как работать с ассоциативные массивы уже. Так вот пример некоторые PHP, где, может быть, я извлечения всех пар ключ-значение что пользователь ввел в URL. Так у меня есть PHP Open разделитель. У меня есть цикл по каждому элементу. Я итерации по супер Глобальный массив $ _GET. И я хочу, чтобы иметь возможность обратиться как к ключ и значение. И я просто печатая их из, каждый по-видимому, на собственный тэг абзаца здесь. Я распечатки некоторые HTML и интерполяции значений ключа и значения в этом заявлении. Итак, давайте взглянем на то, как это будет на самом деле работают на нашем IDE. И, может быть, это поможет иллюстрируют немного что GET на самом деле делает. Так я снова здесь, в моем веб-сервера. И я буду масштаба в немного, чтобы показать вам что у меня есть файл с именем, get1.php. Итак, давайте нажмите на get1.php. И я не вижу никакого содержания. Это странно, не так ли? Ну, на самом деле не на самом деле. Потому что я не поставить что-нибудь в URL. Я собираюсь get1.php, но я не поставить все пары ключ-значение как часть моей строке запроса. Так давайте добавим строку запроса и посмотреть, что этот файл может сделать. Чтобы начать строку запроса вы просто введите вопросительный знак. Тогда, возможно, я буду говорить имя = Doug & год = 2015. И тогда я ударю Enter. Теперь обратите внимание, что происходит. Я до сих пор в get1.php. Но теперь я поставляется пар ключ-значение, и я печать их самостоятельно paragraph-- имя, Doug-- год, 2015. Именно код, мы просто увидел на слайде минуту назад. И если я хочу, чтобы, может быть, добавить еще один пара ключей значение, и класс = CS50. Теперь у меня есть еще один ключевой значение Пара, которая печатается когда я пересмотреть URL снова. Теперь, может быть, это не отформатирован ужасно хорошо. Так что у меня еще один вариант get.php. Это get2.php. Разница в этом один у меня есть CSS файл, и форматирует вещи немного больше приятно для меня. Это, может быть, не самый красивая CSS в мире. Но это просто еще один способ сделать это. Так что я все еще можете получить доступ мои переменных с использованием $ _GET. И в этом случае, я просто вид делает CSS немного больше фантазии. И если мы поп к мой IDE для второй, Я покажу вам, на мой PHP веб Каталог здесь, get2.php. Мы откроем ее, некоторый HTML здесь. Видимо я связывая в том, что CSS файл я говорю. Я открываю тег таблицы. И тогда вот мой цикл по каждому элементу. Вот, что то, что я показали на слайде раньше. Разница лишь в том, что я есть этот ключ и значение CSS укладка, что я применяю к нему. Но это все, что я делаю, я это итерации по $ _GET, чтобы получить все из пар ключ-значение. И я их печати в виде таблицы. И, по-видимому, я форматирования ключи в одну сторону, с TD Class = "ключ" <. Таким образом, очевидно, что относится и к некоторым Селектор в моем CSS файла GET.CSS класс. И, по-видимому, я печатаю мои ценности совершенно по-другому. Что довольно много что мы видели здесь, где наши ценности были напечатаны с синим фоном, и наши ключи были напечатаны с желтым фоном. Так вот, как я получаю эти разные стили. Так как я использую различные классы CSS. Но это в значительной степени это для GET. Как я только что извлечение информации. И в этом случае, я просто печати на экран. Я получаю его из URL, и это то, что GET делает для нас. Видите ли вы возможности Проблема здесь, хотя? Зачем мы, может быть, не хотите использовать $ _GET? Что делать, если, может быть, я делал этот запрос? --to get3.php, которые я не в моем IDE. Это просто гипотетическая файл. Но обратите внимание, здесь, по-видимому, что проходя свой пароль в. И, может быть, мой пароль неловко. Или, может быть, я не хочу, чтобы люди в знаю, что мой пароль, прав. Если я передаю его though-- если я использую метод $ _GET, что происходит, является, что будет в URL. Таким образом, некоторые злоумышленник может быть в состоянии видеть то, что я делаю. Я, может быть выдавая их конфиденциальная информация. Или, может быть, это даже не злоумышленник. Может быть, это просто ваш друг, который стоит через плечо. А теперь они знают пароль на ваш счет в Facebook. И, может быть, они не будут сделать что-нибудь с ним. Но если ваш пароль был представлены через $ _GET, чтобы Facebook, Теперь они знают, пароль Facebook. Потому что это прямо в URL когда вы сделали представления информации. И поэтому, возможно, это не самый лучший способ передать конфиденциальную информацию. Это хороший способ, чтобы передать информацию что мы не особенно заботиться о как слишком чувствительны. Потому GET довольно быстро, по сравнению с другими супер глобальных мы собираемся поговорить. Но, может быть, не самый лучший инструмент для чувствительной информации. Для этого мы могли бы использовать то, что называется $ _POST, что является еще одним супер глобальной переменной. Это еще один ассоциативный массив. Так это работает в значительной степени точно так же, как GET. Кроме этого, вместо того, чтобы извлекать информация из URL, он делает что-то через HTTP заголовков. Так, помните из нашего видео по HTTP, мы говорили о том, как браузеры, серверы, и клиенты взаимодействуют. И информация передается обратно и вперед в HTTP заголовках. С $ _POST, информация, как правило, отправлено через HTTP заголовков тех. И мы обычно видим в $ _POST контекст представления HTML формы. Вы по-прежнему можете использовать HTML формы представить вещи, чтобы получить. Но они, как правило, используется в контексте POST. Так вот пример HTML форме. Теперь мы видели это раньше, но у нас есть не видел эту часть, действие = "" Post.php. Поэтому, когда мы говорили о формах в контекст HTML, я была кнопка Submit. И если вы помните, я нажмите кнопку Отправить а затем страница просто обновляется, ничего не делать. В этом случае, я представления все, что я типа в этой форме, в PHP файл под названием post.php. И, по-видимому, как я делаю, что в таком виде, используя метод POST. Таким образом, каждый кусок информации что я типа в этой форме будет представлен по заголовкам HTTP. Это будет доступен в Post.php, потому что это действие моей форме. Это будет доступен перейдя в $ _POST. И, видимо, то, как я могу получить на каждого отдельного элемента с этой ассоциативного массива с этой атрибута, Имя атрибута наших входных тегов. Таким образом, очевидно, я могу сказать, $ _POST площади Кронштейны назвать, чтобы получить все пользователю набрали в первом поле. И $ _POST пароль, ВН, а, получить на то, что пользователь ввел во втором поле. Итак, давайте взглянем на это более в CS50 IDE. И вот мы, и я увеличить на секунду. И у нас есть файл с именем post.html. Я нажимаю на post.html. На самом верху вот у меня есть очень простой веб-формы. Это форма мы только что видели на слайде секунду назад. Я могу напечатать, Дуг, и я могу введите свой пароль, который мы все знать squadgoals. И я ударю Отправить. И, видимо, что подчиняется Post.php. И я, по-видимому, что печать. Так что я избавиться от всех безопасности что пост дает мне, просто распечатав имя пользователя и пароль. Имя пользователя Дуг. Пароль пользователя является squadgoals. Как мне это сделать? Ну, поп к IDE снова на секунду. Мы прокрутите вниз, чтобы взять взгляд на Post.php, который был действие, которое я использовал, чтобы представить здесь. Это было действие моего HTML форме. И это все, что я делаю. Имя пользователя является, и я печати из содержания $ _POST "имя". А потом пароль пользователя составляет $ _POST "пароль". Так что я получил эту информацию путем подачи HTML форму. И теперь я могу извлечь его, используя $ _POST потому что метод я использовал для передачи Данные с этой форме был метод POST. Теперь это, вероятно, не так great-- я собираюсь вернуться на секунду в нашем множестве here-- это, наверное, не так здорово, если я представления информации с POST, который якобы более безопасным. Это, вероятно, не настолько велика, если я делаю это, а затем печать из пароля пользователя. Это должно быть более безопасным. ОК, но это не совсем безопасно. И поэтому в этот маленький фрагмент здесь я хочу просто обратить ваше внимание на некоторые проблемы безопасности данных, просто что-то думать о пока вы работы или с помощью Интернет. Это просто что-то, чтобы рассмотреть. Я сказал вам, что информация представлены через HTTP заголовков при использовании метода POST в. Это означает, что они не совсем безопасно. Они труднее найти, чем используя метод GET в, где это просто прямо в URL. Но есть еще способ, чтобы найти его. И я просто хочу, чтобы показать Вы это так, что вы, возможно, начать думать об этом а вы работаете, или с помощью сайты и представления пароли, и, возможно, с помощью тот же пароль в Много разных местах. Знайте, что это по-прежнему на самом деле довольно легко узнать чью-то пароль. И вот, я иду чтобы перейти к post2.html. И разница с post2.html и post2.php довольно тонким. Разница лишь что я не печатать пароль, когда я отправить форму. Так что я собираюсь ввести, Дуг. И я собираюсь ввести в, squadgoals, даже хотя мы знаем, что это пароль. Перед Я предлагаю форме, хотя, я собираюсь чтобы открыть Developer Tools, просто показать вам, что произойдет здесь. Таким образом, в Chrome, я просто хочу, чтобы поразить F12. И, что собирается открыть мой Средства для разработчиков на правой стороне. Я не представил форму еще. Теперь я собираюсь ударить Отправить на моей форме. И, видимо, я сделал позвонить, или я сделал запрос чтобы post2.php, что имеет смысл. Я собираюсь нажать на это. Тогда здесь, я собираюсь нажать на заголовки. Там очень много вещей происходит здесь. Но если я прокрутите вниз до самого снизу, справа уведомление there-- мой календарь заблокировал его для second-- права есть на самом нижнем углу, name-- Doug, pw-- squadgoals. Поэтому, даже если я использую POST метод, который является более безопасным, просто надо знать, что, когда вы это сделаете, Вы по-прежнему передачи информации через HTTP. И он по-прежнему может быть найдены противником. Это просто что-то мы собираемся иметь дело с действительно. Может быть, есть некоторые способы шифрования наш пароли, прежде чем отправить их, что было бы лучше, который я не делаю здесь. Но просто быть в курсе, что POST метод имеет ограничения тоже. Это улучшение по сравнению с GET в условия пребывания сразу видно. Но это не полный исправление. Так вот пример быстрый дома упражнения что вы можете использовать, чтобы получить некоторые практиковать работы с PHP. Создайте следующую пару веб-страниц. Первая должна быть просто очень простой образуют с одного поля и Отправить Кнопка. Так очень похож на то, что мы только что сделал с post.html. А потом второй файл, который вы должны создать файл, файл PHP, что ожидает ввода, с помощью POST, и на основе того, что пользователь ввел, который можно предположить, будет целым числом. Вы не должны делать ничего проверка ошибок или тому подобное. Вы можете предположить, пользователю будет ввести целое число, или что-то вроде интерпретируется PHP как целое, в этой форме. Вы просто хотите, чтобы создать н таблицей умножения п. Таким образом, если пользователь отправляет 10, мы хотим, чтобы есть таблица 10 по 10 умножения. Если пользователь отправляет 12, мы хотим таблица 12 по 12 умножения. Только так можно увидеть, что мы едем на здесь, мы взглянем на этот файл в моем IDE. Так вот в IDE, я mult_form.html. Я щелкните его. Все, что я хочу сделать, это представить значение. Введите 10, нажмите Отправить. И, видимо, mult_table.php, что мы можем увидеть на вершине там в URL, Я создаю 10 по 10 Таблица умножения. Если я печатаю 15 и ударил Отправить, теперь я есть таблица 15 по 15 умножения. Я, конечно, не собираюсь показать Вы содержимое mult_table.php, потому что это весело взять из этого дома упражнения. Но это отличный способ, чтобы получить некоторые практиковать работы с PHP петель и после, очень простой, надеюсь, стресса пример, просто чтобы сделать немного практики. И я получил немного CSS происходит здесь, чтобы сделать свой индивидуальный стол Клетки просто вид палить чуть-чуть и выглядеть немного более как таблицу умножения, а не просто текст, просто вид сидеть там. Последние супер глобальная мы поговорим о в этом видео то, что называется $ _SESSION. И, может быть, это на самом деле лучший пример чего-то мы бы рассмотреть глобальные. Это еще один массив. Это еще один ассоциативный массив. Но это доступно через каждый PHP-файл, который существует на нашей системе. Мы не должны представлять Информация по одной странице за раз как мы делаем с GET и POST с. Это всегда там. И так это здорово для страницы где вы вошли в систему, например, и вы хотите свою регистрационную информацию сохраняться от страницы к странице, чтобы странице. Вы можете просто начать сессию, а затем использовать $ _SESSION, чтобы сохранить вещи, как Имя пользователя или пользователя Идентификационная информация, и так далее. И, что информация останется в $ _SESSION, Пока вы не уничтожить сессию немного позже. Написание динамических веб-сайтов с PHP делает их намного лучше. Ваши сайты становятся очень динамичный, и вы не нужно сделать слишком много больше, чем в противном случае вы бы сделали просто делают это с HTML. Но это требует практики, много практики. Вы уже знаете, как работать с C, и так прыгает PHP не слишком сложно. Что, может быть, немного немного сложнее работает с этой новой идеей GET и POST, и, возможно, смешивая ваш HTML и PHP свой вместе. Но также известно, что в Интернете это огромное хранилище информации. И документация PHP доступен во многих местах, но, пожалуй, наиболее канонически в php.net. И вы можете найти там, множество различных функций, и случаи использования и примеры на примерах, используя примеры. Где, если вы хотите, чтобы попытаться выяснить как сделать что-то, наверняка, кто-то, вероятно, сделали это перед вами. И вы можете использовать их в качестве источником вдохновения для реализации все это вы пытаетесь реализовать тоже. Я Дуг Ллойд. Это CS50.