[Powered by Google Translate] [Пошаговое руководство задач 7] [Zamyla Chan] [Harvard University] [Это CS50] [CS50.TV] Привет всем, и добро пожаловать Прохождение 7, CS50 финансов. Теперь мы официально сделали со всеми psets в CS50, и мы только что вышли с еще одной которая будет весело реализации веб-сайта, где пользователи могут войти в систему CS50 финансы и покупать и продавать акции. Сегодня мы будем иметь несколько инструментов, имеющихся в нашем распоряжении. Мы будем говорить о разрешениях. Всякий раз, когда у вас есть веб-папки, Вы собираетесь хотите разрешить пользователям выполнять определенные файлы но и просто читать другие, так что мы будем смотреть в разрешениях и как вы можете установить эти. Тогда мы будем смотреть на PHP, HTML, SQL и код. Во-первых, разрешения. Когда вы находитесь в терминал в определенной директории, то, что вы хотите сделать, вы хотите запустить команду CHMOD. Это следует либо букв или цифр соответствует тому, что вы в основном хотят, чтобы мир видел, Вы сами увидеть, и т.д. Например, всякий раз, когда у вас есть папка, то вы хотите эту папку, чтобы быть исполняемым всем, что видит его, так что вы могли бы сделать это Вы могли бы выполнить команду CHMOD + х , а затем имя папки. Если у вас есть файл, такие как CSS файлы или файлы изображений - как в формате JPEG и растровых изображений, и тому подобное, или любой код JavaScript - Вы хотите, чтобы быть доступны для чтения всем, так, то что вы делаете это, вы можете использовать шаблон - которая является звездочка - в основном указывают в папке CSS - все в этой папке -  Я хочу сказать, что это собирается быть доступны для чтения всем. С разрешения, когда мы используем буквы, мы можем также использовать цифры вместо этого. Таким образом, вы видите, что в конечном счете, если вы хотите что-то быть исполняемым - которая представлена ​​номер 1 - что-то, чтобы быть читаемыми это число 4, а затем - запись имеет номер 2 - и так существенно, если вы хотите сочетание этих, то их добавления. Если вы хотите что-то, чтобы быть на чтение, запись и исполняемые Затем можно добавить до 4, 2 и 1, и что даст вам 7, Затем, когда у вас есть папка Вы хотите, чтобы быть исполняемым все - а также для чтения и записи - то, что вы делаете 7, 1, 1. Это будет 7 для вас, то 1 для других людей. Если у вас есть спекуляция, это будет на самом деле указать, какие папки и какие файлы должны быть CHMOD-е изд конкретно. Например, если у вас есть папки - это те 7-1-1 - когда у вас есть фотографии или HTML, CSS, JavaScript, Затем эти собираетесь быть 6, 0, 4 - или 6, 4, 4 - и PHP файлов будет 6, 0, 0. Идея, что в том, что пользователи не должны действительно увидеть ваш PHP код, но просто быть в состоянии видеть на выходе. Отлично! Переезд в PHP. Просто, когда вы хотите файле PHP, файл суффикс. PHP. Вы можете также смешать с кодом HTML PHP. Если у вас есть HTML файл, например, , то вы можете заключить его с левого угла, знак вопроса, PHP - разместить PHP код - и закройте его с другим знаком вопроса и под прямым углом. Переменные в PHP намного легче иметь дело, чем переменных в C. Любая переменная только начинается со знака доллара перед ним, и они слабо типизированными. Это означает, что вам не нужно беспокоиться об установке что-то равно строка или целое число. Вы можете просто сказать, это мое имя переменной и то это его значение, так что это будет легче иметь дело с там. Другое дело, что PHP позволяет использовать ассоциативные массивы. Вы можете просто определить массив как это делается в C , говоря, знак доллара, имя массива равны, , а затем в квадратных скобках имеют в основном только список значений всех элементов в массиве. Но, в PHP, что вы можете сделать, это указать в основном - это вроде как хэш-функции. Вы можете указать индекс - что вы собираетесь назвать его - а затем, что соответствует значению. Если вы действительно переходят в = 1, B = 2, C = 3, Затем вашем массиве по индексу даст вам 1. Это PSET согреет вас с некоторыми PHP в секции вопросов, и тогда мы погрузиться в CS50 финансов. У нас есть пара - у нас есть некоторые функции, в основном, для реализации на этом сайте. Мы хотим, чтобы пользователи могли зарегистрироваться на нашем сайте с помощью имени пользователя и пароля. Мы хотим, чтобы они могли найти цитаты, и тогда мы бы напечатать название этой цитатой, а также текущие цены, что оно находится. Мы хотим, чтобы они могли видеть портфель всех акций, которые они купили до сих пор. Мы также хотим, чтобы позволить им покупать акции, а также продавать их. И, наконец, мы хотим, чтобы дать им возможность видеть историю всех операций, которые они сделали. И, наконец, после того как вы выполнили все это, Затем вы можете свободно реализовать одну дополнительную функцию. Мы пойдем на них. Это могут быть либо позволяя пользователям получать дополнительные денежные средства путем нанесения дополнительных денежных средств, или вы могли бы позволить им изменить свой пароль, или что-то вроде этого, отправить их получения, когда они покупают или продают акции. Там очень ограниченный список функций, которые вы могли бы реализовать себя, так что это последний там. Поскольку это веб-сайт, вы, ребята, тоже есть много свободы, чтобы настроить его. Мы предоставляем код CSS, но вы определенно бесплатно, чтобы настроить его, чтобы она выглядела лучше, но лежащие в ее основе является базовой функциональности поэтому всегда относятся к спецификации о том, что вам действительно нужно, чтобы включить туда. После спецификации, мы будем использовать прибор как и сервер. Это будет наш веб-сайт хостинг для нас, на своем локальном сервере. Если вы будете следовать этим инструкциям и распакуйте PSET 7 Распределение код в вашем виртуальном хосте / локальный хост папку,  то вы можете просто посетить http://localhost/ в Google Chrome в прибор, и тогда вы бы достичь код, в котором вы написали PSET 7. Pset 7 поставляется с кучей распределения кода, и, надеюсь, we've - через все psets до этого - приучили нас к чтению через распределение кода, понимание того, что функции уже предусмотрены, и как мы могли бы использовать те, и другие функции, которые мы собираемся реализовать. В этом случае, у нас есть 3 папки. У нас есть HTML папки, папки включает в себя и шаблоны папки. Что мы будем делать с этим PSET это своего рода разделение мышления - программирование мышления - из PHP кода с фактическим визуального аспекта. Мы будем иметь один PHP файл, который делает все мышление, говорится в базу данных, печатает вещи, если есть заявления - такие вещи - а затем, что буду передавать данные в наш файл шаблона - или файл template.php. То, что это будет сделать, это прочитать данные, а затем она будет распечатать его. Мы можем относиться к шаблонам, как "немой" в том, что мы действительно не хотим, чтобы они будет делать много работы по определению вещи. Мы хотим, чтобы наши контроллеры, чтобы сделать это. Немного на что - давайте взглянем на некоторые из распределения кода. Здесь у нас есть файл index.html, и это довольно пусто. По сути, что она делает - это говорит, хорошо, я буду требовать, чтобы configuration.php файл. Мы не видим, что прямо здесь, но это в основном вызова configuration.php файл, и выполнение этого. После того, как это делает, это собирается сделать портфолио. Rendering является функцией, поэтому, когда мы находимся в контроллер, мы будем называть визуализации, мы дадим ему файл, а затем данные, которые мы передаем в, так, чтобы она позвонит в portfolio.php--вид в тот данных, так что портфель может с этим справиться. А теперь, вот, у нас есть login.php формы.  Это контроллер, который в основном заботится о входа в учетную запись Здесь он проверяет, если форма была отправлена ​​на этот файл и сделок с проверки представления. Мы рассмотрим в этой извинения функции. Когда мы хотим, чтобы распечатать сообщение об ошибке, мы используем извинения, и что будет перенаправлять пользователя на определенную страницу , которая будет выдавать сообщения об ошибке, что мы указываем. Продолжая, он будет запрос к базе данных - МЫ попасть в более об этом позже. Тогда вы увидите, что здесь, если форма не была представлена, то она делает вид. Это означает, что он идет к login_form.php, так что давайте посмотрим на это. Login.php на самом деле, где мы видим HTML дело с фактическим визуального аспекта. Здесь мы имеем ввода тегов для имени пользователя, ввод пароля, а также кнопки отправки. Это на самом деле, где визуальный аспект и форма HTML будет проводиться. Здесь он говорит, что он собирается быть представлен определенный метод, называемый пост. Мы войдем в различиях между методами - сообщение сравнению получите, есть также нечто, называемое говоря - Мы войдем в эти методы позже, но интерес этот PSET, Я бы настоятельно рекомендуем вам использовать почту. Мы знаем, что в основном только эта форма будет отправлена ​​- от login_form.php-- то он пойдет к действию - login.php-- в основном проходят во всех этих параметров от тех форм в login.php. Результаты этой формы содержатся в этой должности ассоциативный массив. Показатели различных элементов в массиве сообщение именно то, что вы здесь указать. Вы говорите, что имя этого входа имя пользователя. Название это один пароль. Кроме того, вы увидите имя пользователя в качестве индекса ассоциативный массив там. Если мы идем в папку включает в себя, у нас есть эти функции файл, который будет очень полезен. Все эти функции реализованы для вас. Вам не нужно специально для реализации любого из этих себя, но они будут весьма полезны. Мы извинения, которые, как я уже сказал, будет в основном распечатать сообщение об ошибке для вас на конкретную страницу - apology.php. Тогда у нас есть свалка, так что если вы просто позвоните свалку, а затем передать в переменную, Затем он принесет вас на страницу, которая будет отображать эту переменную для вас. Потом мы Выход, который будет в основном закончить сессию определенных пользователем. Lookup будет полезно. Так как мы имеем дело с кавычками и запасы, мы собираемся быть в состоянии - и это существенно режиме реального времени. Мы должны знать, что эти акции значения, поэтому у нас есть функция поиска, которая занимается документацией Yahoo, акции. Как только вы заметили определенного символа акции, он вернется к вам символ акции а также название и текущую цену этой акции. Это функция поиска. Тогда мы имеем дело с MySQL, так что мы собираемся желая выполнить определенные запросы на нашем SQL базы данных. У нас есть запрос на сделку - некое абстрактное некоторых это. Мы собираемся проходящих в целом ряде наш SQL запрос - и все переменные, которые входят в нее - и что она делает на самом деле выполнить это для нас. Вместо того, чтобы написать все это каждый раз, когда вы хотите, чтобы запрос - , получая все результаты этого запроса - , то вы можете просто позвонить функция запроса, и он будет возвращаться к вам - в зависимости от того, что вы используете для вашего запроса - Вероятно, рядом все результаты, которые соответствуют запросу или аналогичный. Подробнее об этом позже, хотя. Наконец, мы должны перенаправить который, как следует из названия, перенаправляет на другую страницу. А потом мы должны вынести, которые мы собираемся вызова пару раз. Когда вы находитесь в контроллер, вы звоните сделать в шаблон страницы , а затем передать в значениях, что шаблон будет иметь дело. Эти ценности, вероятно, будет иметь дело с типом вывода, который вы хотите будут показаны на вашей странице шаблона. Хорошо. Те функции, и есть намного больше к этому распределению код. Я призываю вас, чтобы пройти через это и исследовать его самостоятельно. Кроме того, спецификации, вероятно, вы пройдете через некоторые другие элементы распределения кода. Вот краткая информация о функциях найдены в functions.php. Хорошо. Первая задача, чтобы позволить пользователям регистрироваться на сайте. Прямо сейчас, есть форма входа на сайт, и вам предоставляется несколько пользователей с паролями. Вы можете использовать эти имена пользователей и войти в систему, но вы хотите, чтобы люди могли сделать свои собственные имена и добавить себе на сайт. Макет для регистрации очень похож на форму входа, кроме имени пользователя не ранее существовавших, и пользователю необходимо также обеспечить новый пароль, а потом обычно у нас есть подтверждение пароля. Как только пользователь вводит все, что информация, Мы хотим, чтобы добавить их в нашу базу данных пользователей. Мы собираемся, чтобы иметь базу данных - база данных SQL - что мы собираемся ссылаться. В этой базе данных, мы будем иметь таблицу со всеми пользователями содержащих их имя пользователя, его пароль, а также, сколько денег они имеют. В регистре, мы хотим, чтобы позволить им ввести эту информацию. Мы хотим, чтобы отобразить эту форму. Мы хотим, чтобы убедиться, что их пароль - что они вошли в один, а затем и о том, что пароли совпадают, когда они ввести его дважды. После того как все что ни делается - при условии, что те ошибки, которые проверили - Затем мы хотим добавить этих пользователей в нашей базе данных. Наконец, когда вы зарегистрировались, это довольно удобно, если вам не нужно снова войти в систему Как только Вы зарегистрировались, так что мы собираемся войти в них на сайте, если они зарегистрированы в успешно. Первая задача для отображения формы, и это на самом деле будет - весь этот процесс регистрации будет смоделирован довольно близко после входа в систему только вместо login.php вы могли бы register.php. Вместо того, чтобы login_form.php--который является шаблоном - Вы будете иметь регистрационную форму. Вы хотите, чтобы добавить еще одно поле - поле подтверждения пароля - , а не только одно имя пользователя и один пароль. Далее, мы хотим проверить, является ли пароли совпадают или являются пустыми. У нас есть контроллер - register.php--которая будет заботиться о выполнении этих проверок. При отправке формы с помощью метода сообщению, Затем все эти переменные, содержащиеся в сообщение массива. Вы хотите, чтобы убедиться, что значение поста массива по индексу пароля соответствует подтверждения элемент. Вы хотите, чтобы убедиться, что они не являются пустыми, и вы хотите, чтобы убедиться, что они совпадают. Одна удобная вещь о PHP является то, что мы не должны использовать сравнение строк больше. Мы можем использовать равна-равно оператором  для проверки строки равны друг другу. Для обработки ошибок, вы хотите, чтобы извиниться. К сожалению, вы просто вызовите функцию  а затем указать тип сообщения, которые вы хотите на выходе. Затем Вы хотите, чтобы добавить пользователя в базе данных. До сих пор все, что мы делали только локально дело с результатами форме. Теперь мы действительно хотим, чтобы добавить их в нашу базу данных. Для этого мы сначала хотим, чтобы убедиться, что имя пользователя не является пустым. Поймите, что на сайте, вы не можете иметь несколько пользователей с одинаковым именем пользователя, так что вы хотите, чтобы убедиться, что, когда вы вставляете что-то в вашей базе данных - вставить новый пользователь - то вы не получите столкновения между уже существующими имя пользователя и имя пользователя, которое пользователь пытается представить. Для этого, как только вы выполните запрос - вставка определенного пользователя с паролем и начальная сумма денежных средств - После того как вы называете это запрос, то MySQL будет на самом деле вернуться ложным, если это не удается. Структура пользователей такова, что имя пользователя является уникальным значением, так что вы не можете иметь более одного. Когда вы пытаетесь вставить новую строку с именем пользователя, который уже существует, что собирается вернуться ложным - как логическое значение ЛОЖЬ. Хитрость здесь в том, что вы хотите, чтобы убедиться, что результат есть результат вашего запроса. Если это не удается, то вы будете хотеть, чтобы проверить с тройным равно оператора. Что на самом деле происходит, чтобы проверить, есть ли в аварии или нет, , тогда как в простой равно-равно, это было бы верно, если строка была пуста. В результате выхода из строя, если есть столкновение имена является фактическим ложные ценности. Вот как вы должны вставить в базу данных. Вот запрос, который будет работать строго в SQL. Одна вещь, что вы можете перейти на сайт, который управляет базой данных SQL и поиграть там, введя вручную значений или строк. Она будет выводить то, что SQL выход. Вы также можете запустить SQL команды в базе данных  , а затем посмотреть, что синтаксис может быть, , а затем перевести это в запросе функции, которые мы имеем в PSET 7, который будет очень похож на запросы, которые вы реально работать. Если бы я хотел, чтобы вставить новую строку в моей таблице пользователей, то я хотел бы указать вставки в пользователей, которым это имя моего стола. Тогда я хотел бы указать имена столбцов. Тогда я хотел бы предоставить значения вместе с моим паролем. Пароли в нашей таблице пользователей хранятся не только как строку. Они хранятся в виде зашифрованных версии, так что вы хотите, чтобы запустить функцию склеп на фактический пароль, и что даст вам правильный тип хранилища для массива пользователей. Выполнение этого будет вставить новую строку в таблицу пользователей. Чтобы справиться с функцией запроса, раньше в C мы использовали знак процента в качестве заполнителя. Кроме того, та же концепция заполнителя применяется здесь. В запросе необходимо указать весь запрос, исключением случаев, когда вы имеете дело с переменными, как ваш вклад в запросе, Затем вместо того, чтобы действительно положить их внутрь - например, когда у нас было Printf заявления в C. Мы хотели бы поставить строку, а затем у заполнитель там, а затем после каждого запятой, указать, какие переменные мы имели. Здесь мы собираемся использовать знак вопросительный знак, как наши заполнителя , а затем передать по каждой переменной, соответственно, в порядке, для заполнителей - где эти переменные должны идти. Так вот, первый знак вопроса будет заменен на фактическое имя пользователя то второй знак вопроса пароль. И, наконец, как только вы зарегистрировали их и добавили их в базу данных, то вы хотите войти в их веб-сайте. У нас есть вид супер-глобальных переменных называется сессии. Сессия требует определенного идентификатора, и что идентификатор соответствует пользователю, что в настоящее время прошли идентификацию Что вам нужно сделать, это найти то, что их идентификатор пользователя , а затем установить, что идентификатор сессии, как идентификатор конкретного пользователя. Функции, которые вы хотите использовать здесь SQL команды , который будет извлекать последний вставленный идентификатор из таблицы. Тогда строки будут звонить - it'll называть ID - it'll назначить имя в число, что она возвращает. Он позвонит, что идентификатор. Теперь мы закончили зарегистрироваться, и мы можем двигаться дальше процитировать. Цитировать позволяет пользователю ввести имя определенного запаса, а потом вернусь качеств этой акции. Что вы хотите, чтобы сделать здесь есть контроллер и некоторые шаблоны. В этом случае мы будем иметь контроллер, который будет делать все мышление для нас. Это будет искать символ, а затем передать в значениях к шаблонам, которая будет выдавать. Мы собираемся, чтобы иметь 2 шаблонов здесь. Мы собираемся иметь 1 шаблон, который предоставляет форму, в которой пользователи будут Введите название акции - название акции. Тогда мы также собираемся нужен другой шаблон, который отображает эти значения. Вы можете посмотреть на вход для примера того, как вы есть форма, которая принимает входные, исключением здесь, мы только хотим поля 1. Мы не хотим, имя пользователя и пароль поле. Мы просто хотим, 1 текстовое поле, которое позволяет пользователю ввести имя определенного запаса. Тогда вы хотите отправить эти данные - как только вы посмотрели на эти акции - в quote_form.php. Lookup возвращает символ акции, название и цена. Те, которые содержатся в ассоциативный массив. Посмотрите функция поиска внутри functions.php для получения дополнительной информации о возвращении этих типов. Отлично! Итак, наконец, вы хотите, чтобы отобразить биржевой информации. Вы хотите, чтобы, вероятно, отображение - вы будете хотеть получить доступ к этим переменным. Если у вас есть цена в переменной - а также имя и символ - то вы хотите, чтобы отобразить те в шаблон страницы. Это шаблон страницы можно было бы назвать show_quote.php или что-то. Ваша quote.php страницы сделает шоу цитаты, а затем передать во всех этих значений. Тогда в вашем PHP-страницы, вы на самом деле распечатать эти значения в HTML аспект этой странице. Вы просто использовать функции печати и передать в цене. Есть 2 способа - вы можете объединить его с оператором точка, или использовать заполнитель. Пользователи в конечном итоге будут покупать и продавать акции. Мы хотим, чтобы они каким-то образом видеть все акции, которые они в настоящее время. Мы будем называть это своего портфеля. Портфолио бы, по-видимому, для каждого пользователя, содержат кучу строк перечисляя типа долю, что они есть, и то, как многие из тех, которые они имеют. Наши существующую таблицу - сейчас мы имеем таблицу пользователей в нашей базе данных. Это имя пользователя содержит пользователей, а также их паролей и сколько денег они имеют. Там нет реального способа хранения всех своих запасов в этом. Это не то, мы можем вставить новые столбцы для каждой акции. Это было бы очень, очень длинный ряд, потому что у нас есть бесконечное количество виды акций, которые они могли бы иметь. Таким образом, вместо того, что мы будем делать это в одной базе данных, мы будем иметь таблицу пользователей, но тогда мы будем иметь портфель таблице. Портфель таблица будет определенно связана с таблицей пользователей, но вместо того, структура портфеля таблица будет иметь биржевую информацию, Сколько акций этой акции пользователю, а также пользователей частности идентификационный номер. У вас есть пользователи таблицу, которая имеет свой идентификатор, а также имя пользователя, хэш - это пароль, зашифрованный пароль - , а затем сумма денежных средств у них есть. Идентификационный номер будет связан с идентификационным номером из портфеля. Портфель бы просто символ акции, а также акции - Количество акций, что акции, которые пользователь имеет. В этом портфеле таблицы вам придется в основном все акции обладают все пользователи на ваш сайт. Позже, указать только акции определенных пользователем - только портфель своих - Вы извлечения значений из таблицы вашего портфеля таких, что Идентификатор является специфическим для данного пользователя. При отображении портфель, вы хотите сообщить о каждой из акций, входящих в портфель пользователей. Вы хотите сообщить о количестве акций и текущей стоимости этих акций. Это текущая стоимость этих акций не хранятся в портфеле стол потому что это будет обновления - как минимум - каждый день на Yahoo. Для получения этой информации, вы не можете ссылаться на что из вашего запроса. Какая функция предусматривает, что к нам? Какие функции будет получить цену? Это поиск, поэтому использование поиска на определенном символ даст вам много информации. Это даст вам 3 штуки информацию - имя, символ, равно как и цена. После поиска определенного символа, то вы можете получить цену, а затем вы можете использовать цены, которые будут отображаться в вашем портфеле. Портфель должен также отображать текущий остаток денежных пользователей. Это поле хранится в вашей таблице пользователей. И тогда вспомнив, как мы в основном необходимости - Мы с различными типами PHP файлов. Мы собираемся, чтобы иметь контроллер, который в основном делает все мышление для вас. И тогда у нас есть шаблон, в которой шаблон имеет дело с выводом данных. Вы должны думать о том, что переменные контроллера необходимо будет принять дюйма Если мы имеем дело с портфелем, который выводит каждое имя, символ, и количества акций, а также текущая цена акции, то вы хотите, чтобы найти какой-то способ в основном проходящие в - Вы можете передать в массив значений, которые соответствуют этому. Давайте в качестве примера того, как можно получить все акции принадлежащие конкретному пользователю. Это не дело - еще - с ценой акции. Что это будет сделать, это запустить запрос. Было бы получить символ, а также акций - Я называю эту таблицу, но в этом случае, что бы это было? Что имя таблицы, что мы имеем дело с символом, который имеет и акции для конкретного пользователя? Это либо пользователям или портфель. Портфолио. Что это будет сделать, это запрос портфель символы и акции для конкретного пользователя. Вот, говорю я, (SELECT символ, акций столовая ложка - но вместо стола, вы собираетесь заменить, что с портфелю. "Где" в основном мое состояние. Я говорю, я только хочу, чтобы получить эти ассоциативные массивы, которые соответствуют  к этому следующее условие - ID равных.  Тогда я ставлю заполнителя там и тогда идентификатор сессии. Что это будет сделать, это сказать для каждой строки в строки. Это отличный способ, вместо того, чтобы действительно создать цикл , который перебирает все индексы, то в PHP вы можете иметь в наличии для каждого цикла. Если у вас есть данный массив, то вы можете сказать, что я буду называть каждый последующий элемент - Я буду звонить каждый элемент этого имени. Таким образом, для каждого из этих элементов, я буду называть их, то я могу это сделать. В этом для каждого, у вас есть строки, как ваш фактический массив, и каждая строка вы собираетесь звонить подряд. Каждый раз, когда он выполняет тело, он будет идти вверх, и она будет обновить строку к следующему элементу в рядах. Теперь, с точки зрения покупки акций, что мы хотим сделать, это получить акции, которые пользователь хочет купить и количество акций, которые пользователь хочет купить, а потом - если они хотят - Добавим, что акции в свой портфель. Очевидно, что если они покупают что-то, то, что происходит снижение Сумма денег, которую они имеют, таким образом, что собирается уменьшить свои деньги. Мы собираемся иметь дело с обновлением портфолио, а также таблицы пользователей, в котором содержится денежных средств. Но сначала вы должны получить фактический запас и количество акций, которые пользователь хочет. Для этого вам понадобится HTML формы, которая будет запрашивать символ акции что вы хотите купить, а также количество акций. Тогда вы хотите добавить. Вы хотите, чтобы выбрать определенные значения. Мы прошли через это немного уже, но когда вы пытаетесь получить определенные строки - получить определенные строки из таблицы SQL, это следующий синтаксис. Вы выбираете, а потом, если вы укажете звезды, что будет в основном возвращаются в целом вся строка для вас. Опять же, у Вас есть состояние, когда, а затем указать - Я хочу только имя пользователя, равной почтовой, так что это будет только получить строку в пользователей, которые соответствуют почты в. Когда пользователь хочет добавить ресурс в портфеле, Вы должны проверить несколько ошибок. Вы хотите, чтобы убедиться, что пользователь может себе позволить акций, так что вы хотите, чтобы проверить их денежных средств. Раньше мы звезды, чтобы извлечь все строки из таблицы SQL. Но и здесь мы можем на самом деле просто указать, что я хочу только 1 значение - Я хочу только наличные. Так вот, это было бы вернуть денежные средства для пользователя с ID номером 1. Если пользователь уже приобрел определенный запас, но затем покупает больше этой акции, Затем в вашем портфеле - Вы не хотите отдельной строкой, другая строка, содержащая, что новая транзакция. Вы на самом деле хотите обновить суммы. Все, что изменения действительно является количество акций, что пользователь владеет. Если вы используете вставки в запросе - так это просто вставить в свой портфель все эти значения - ID номер пользователя, а также символ акции, которые они покупают и акции, то вы также хотите, чтобы указать, хорошо, если я бегу в дубликат ключа - В этом случае дубликат ключа является не только ID пользователя, но и символ акции - потому что вы можете иметь только - Мы исходим из того, что вы можете иметь только 1 строку  , что соответствует 1 конкретный символ. Так, на дубликат ключа - если вы столкнетесь столкновения там - вы только собираетесь обновить акции ее новое значение. Акции равно все, что мы имели до плюс количество акций, которые пользователь покупает. Теперь, когда мы обновили портфеля стол, мы хотим обновить денежных пользователей. Вот в таблице пользователей, поэтому мы собираемся вычитания определенной суммы из денежных средств. Предположительно, она будет равна наличные денежные средства минус - а затем определенную сумму. Чтобы обновить наличные деньги, вы бы - если бы я хотел, чтобы забрать деньги из почтовой, то я бы выполнить этот запрос - "Обновление пользователей, а затем установить колонку по кассе на наличные - Я хотел бы удалить 9999 долларов только если имя пользователя равно почте в. Но, в данном случае, мы не хотим, чтобы вычесть 9999 в частности. Мы хотим, чтобы указать, хорошо, мы хотим, чтобы вычесть текущей цене акций умноженной на количество акций, которые они покупают. Теперь мы позволили им увидеть все запасы, которые у них есть, , а также купить больше акций. Мы также ранее позволил им заглянуть в текущей цене акций. Здесь мы хотим дать им возможность продать их. Сначала мы хотим, чтобы отобразить в основном - Мы хотим, чтобы они могли увидеть все запасы, которые у них есть, так что здесь мы хотим, чтобы отобразить все строки из портфеля. Если они решат продать определенный запас, то мы будем считать, что они хотят продать все это. Они не просто собирается продать 50% своих акций, они собираются продать 100% от нее. Мы можем просто удалить все строки из портфеля. Мы можем удалить акций данного пользователя к определенным символом. Там в синтаксисе для этого. Затем мы хотим обновить денежных средств. Мы собираемся добавить в денежной равно количеству акций, которые они продают умноженной на текущую цену акции - Не цене, по которой они купили его, а цена, по которой они являются - текущие цены, когда они продают его. Для ссылки на текущую цену акции, Вы хотите использовать поиск, который даст вам цена акции на текущий момент. Теперь мы остались с историей, которые вы хотите разрешить пользователю отслеживать все свои операции - хочет видеть всякий раз, когда они продавали что-то, всякий раз, когда они купили акции. Мы хотим, чтобы указать время, в которое они сделали это, а также, сколько они купили и что это была акция. Есть ли у нас тока, существующая структура, которая определяет, что? Ну, у нас есть портфель, который отображает количество акций, которые пользователь имеет для данной акции. Но мы структурирования портфеля таким образом, что он обновляет, когда мы покупаем несколько, в то время как история должна - если вы покупаете Apple, 10 акций, и потом на продажу 5, то вы хотели бы видеть тех, отдельно, как отдельные действия, отдельных строк. Принимая во внимание, что действия по себе, что в нашем портфеле стол будет просто обновление к этой конкретной строки,  так что мы, вероятно, захочется другую таблицу. В нашей базе данных у нас есть таблица пользователей, у нас есть портфель стол, и теперь мы, наверное, хотите историю таблице. Это история таблица может отслеживать текущую дату, а также конкретный символ акции, а также о том, как много акций, и какие действия он - были ли Вы покупать эти акции, или же вы были продавать их. Чтобы справиться с датой, есть несколько способов, которые вы можете сделать это. PHP есть способ отслеживания даты, которые вы можете посмотреть сами. В SQL можно также использовать ни сейчас, ни текущее время. Это зависит от вас. Просто убедитесь, что каждый раз, когда пользователь покупает или продает, вы будете обновлении своих денежных В таблице пользователей, вы будете обновлять строки в таблице портфелей, то вы также будете обновление истории, так что собираемся быть 3 отдельных SQL запросы, которые вы будете вызове там. У нас есть куча функциональности сейчас. Буквально за пару напоминания, что в вашем индексный файл, вы хотите перейти по ссылке по крайней мере, ваши - но вы хотите, чтобы позволить пользователю перейти по ссылке магазин На рыбалку страницу. Это происходит, чтобы позволить пользователю - Энциклопедия программ является контроллер, так что это будет либо отправить вас - что собирается отправить вас в форме, которая позволяет искать вещи. У нас есть история. Мы выход из, получить цитату, а затем продают. Это минимум, что вы хотите показать. С точки зрения портфеля, портфеля, фактически отображаемых на странице индекса. Если мы идем в индекс, то здесь мы видим, что он делает portfolio.php и проходит в ассоциативный массив - в основном названия равна портфеля. Таким образом, это контроллер. Если мы идем в шаблон portfolio.php, потом все это имеет, - показывает в основном картина, которая говорит, ой, этот сайт находится в разработке. Позже, когда вы передаете - вы будете проходил в основном более конкретной информации. Вместо того чтобы просто название, вы, вероятно, проходящей в другие вещи. Если у вас есть тех значений, то portfolio.php могут справиться с этими значениями и печать их в каких-либо целях. После того как вы выполнили все из них, вы также должны реализовать еще 1 функцию. Это может быть позволяющий пользователю изменять свой пароль, чтобы сбросить свой пароль, если они забыли - так для сброса пароля, то Вы, вероятно, также необходимо изменить реестр так, что это позволяет им указать электронную почту, так что если они забыли свои пароли, то они могут получить это. Они, вероятно, может ввести в свое имя пользователя, а затем будет отправлено письмо с ними со ссылками, чтобы иметь возможность сбросить пароль. Вы можете есть то, что позволяет пользователям получать квитанции каждый раз, когда что-то купить или продать, и, наконец, дать им возможность добавить денежные средства на свой сайт. Просто, чтобы вернуться в понятие контроллеры и шаблоны немного. Вы будете иметь что-то вроде - так вы будете иметь контроллер здесь. Сейчас мы смотрим на login.php пример. Когда у нас есть контроллер, в основном это собирается взять 2-х случаях. Когда у нас есть контроллеры, мы в этой части, что мы также отчасти дело с когда у нас есть формы, а также. Контроллер будет в основном имеют отдельные действия - один, если форма уже была представлена, а затем два, если пользователь приходит на эту страницу в первый раз и все еще нуждается вводить эту форму. Я собираюсь перейти к этому делу, прежде чем подойти к первым случаем, имеющие вид дюйма Вот мы говорим, если форма была отправлена ​​с методом пост - Не беспокойтесь об этом немного. Не беспокойтесь о том, что слишком много, но понимаю, что в основном эта функция имеет дело с ли форма была представлена ​​или нет. Это условие является истинным, если пользователь отправил форму. Если нет, то мы собираемся хотите позвонить визуализации login_form.php, а затем передать в названии. Этот титул только в основном будет появляться в заголовке. Что это делает в основном говорит, хорошо - хорошо, если пользователь переходит на login.php и фактически не вошли в систему, то я хочу, чтобы отправить их на страницу, которая имеет эту форму что позволяет им ввести имя пользователя и пароль. Тогда я иду к login_form, а затем, что есть реальная форма. Затем, когда пользователь утверждает, что форма, они собираются представить его login.php с методом пост. Тогда я на самом деле собирается войти в этот раздел моего если-иначе цикл. Тогда это здесь, что мы имеем дело с ценностями, введенные в форму. Это здесь, что мы имеем дело с теми. Затем, когда вы имеете дело с теми ценностями, - если вы имеете дело с - сказать, что мы имеем дело с quote.php страницу, где кто-то может ввести акций, которые они хотят выглядеть, а потом увидеть, что дисплей - это отчасти похожи здесь. Здесь у нас есть форма входа - you'd, вероятно, цитата форме - но потом, как только пользователь фактически утверждается, что информация, то вы хотите, контроллер переходит в другой шаблон , который покажет им, что фактическая информация. Итак права здесь, то вы, вероятно, - примерно в конце вашего состояния здесь - если метод равных пост - то вы, вероятно, хотите, чтобы сделать другую страницу - шоу цитата - которые посылает вам на этой странице - show_quote.php-- , а затем в том, что файл будет ссылаться на эти значения. Имеет ли это смысл? У нас есть контроллер, который в основном имеет дело с 2-х случаях - ли вы ввели в форму или нет. Если вы еще не вошли в форму, Затем он будет перенаправлять вас к этой форме, которая затем вернуть вас обратно на эту страницу. Затем, когда у вас есть информация в контроллер, что тело будет иметь дело с этим информацию по мере необходимости - либо глядя значения для акций, , а затем, как только это посмотрел эти ценности и имеет их в отформатированной массива, Затем можно передать этот массив в шаблон страницы  , которая занимается выводом этой информации. Опять же, поскольку это веб, это будет весело. Мы вне C таким образом, мы не ограничены ASCII и выходной разъем, так весело с этим. Вы можете сделать это как визуальный, как вы хотите. Вы можете позволить пользователям вводить миллионы долларов в то время, или ограничить их и быть действительно означает и позволит им лишь ввести 1 пенни в то время, или что-то вроде этого. Определенно быть уверены, чтобы весело провести время с этим. PHP код немного проще в том, что это немного легче, чтобы наметить ваши псевдокод в фактической реализации. Так что, безусловно, весело провести время с этим, потому что это на самом деле наш последний кусок в CS50. При том, что это был Пошаговое руководство 7. Как только вы закончили просмотр руководства и закончили PSET, Затем они были также psets, и сейчас мы находимся на конечный продукт - после того, как мы пройдем тест 1. Тогда, надеюсь, вы можете использовать инструменты, которые вы узнали из psets - не только синтаксис, но более абстрактного понятия, как принять определенное - нравится, я хочу сделать это, а затем на самом деле осуществления этого. Обучение, как бороться через синтаксис и распределения кода. Чтение кода других людей, а затем интерпретации, что использование уже существующих функций. Так что, удачи в последнем PSET. Это было приятно вести пошаговые руководства. Я надеюсь, что они были полезными для вас. Это были прохождение, и благодарит очень много. [CS50.TV]