[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 буде насправді повернутися помилковим, якщо це не вдається. Структура користувачів така, що ім'я користувача є унікальним значенням, так що ви не можете мати більше одного. Коли ви намагаєтеся вставити новий рядок з ім'ям користувача, який вже існує, що збирається повернутися помилковим - як логічне значення FALSE. Хитрість тут в тому, що ви хочете, щоб переконатися, що результат є результат вашого запиту. Якщо це не вдається, то ви будете хотіти, щоб перевірити з потрійним одно оператора. Що насправді відбувається, щоб перевірити, чи є в аварії чи ні, , Тоді як в простій одно-одно, це було б вірно, якщо рядок була порожня. В результаті виходу з ладу, якщо є зіткнення імена є фактичним помилкові цінності. Ось як ви повинні вставити в базу даних. Ось запит, який буде працювати строго в 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]