SAM LEVATICH: Добре дошли в секция за тази седмица. Аз не съм Andi. Andi е паднал болен този ден, и аз са били нещо като призова в последната минута да поеме. Това е грипен сезон, така че се уверете, че сте отседнали чиста, измиване на ръцете, и здравословно хранене, така че вие също не сте прикован към леглото. Но без по-нататъшно приказки, нека да започнем. Днес ние ще говорим за PHP малко bit-- как PHP е свързано с HTML, как се отнася до CSS, и някои от мрежата нещата, които направи на последното възлагане. Отиваме да поговорим малко за SQL и как можете да работите с бази данни, което е доста ключов компонент на P зададете 8-- P зададете 7. P зададете 7. И тогава ние ще говорим малко по- малко за това как вижте контролери работят и защо това е философията зад някои модерни уеб страници и различен дизайн. Доста много видове приложения и приложения може да превозва използвате този модел, рамка оглед контролер, че вие ​​ще бъдете като се използва в P зададете 7, така че аз ще поговорим малко за това, защо това е станала популярен, защо е важно и хубаво. И тогава аз ще най-накрая се премине към някои полезни съвети за справяне с определени P 7. И ако имаме време останала в края, всъщност можем да направим някои работим върху това заедно. Така че, PHP. Всъщност, може би сте забелязали this-- наистина не трябва да се потопите в it-- но P зададете 6 имаше някои PHP код, който се случва. И тъй като PHP е C-подобни език, PHP, за разлика от HTML и CSS, е език за програмиране, като има предвид, HTML и CSS са статични. Те са езици за маркиране, занимаващи със стил и визуално оформление. PHP е реална сделка. PHP има примки, тя има conditions-- всички тези неща, че е забавно за C. Той има няколко неща, които са малко по- малко по-добре, отколкото C, които ние ще видим, но мисля, че най-лесният начин да се говори за PHP е просто да се потопите инча Така че аз ще отида надясно в IDE в този момент. Първото нещо, което започваш да направите, е действително изглеждат малко в някои от най- PHP код, който е бил в P зададете 6. Така че начинът, по който правим that-- преди, по начина, по който се работи сървъра за уреда беше, че ние ще трябва да type-- или да използвате вашата реализация или изпълнението на персонала на server.c като отидете в директорията и работи с server.c или не arguments-- така че просто го призове локален хост, което е това, което най-вероятно Направих повечето от time-- и след това хранене а directory-- с които да се използват като своя корен където уебсайта би да тичам, основно. Тази седмица за P избран 7, като голяма, колкото нашия код за server.c е, че има хора, които вече имат писмено тези хубави неща, над най-CS50 които имат по-малко повече функционалност, сървъра програма, която е способен за справяне с малко по- на тънкостите, че ние ще виж в двете P зададете 7 и 8 P зададете. И начинът, по който да започнете състава на сървър е като напишете "apache50." И преди да направите нещо, искате да се уверите, че Apache 50 не е вече работи, тъй като е на моята машина, която аз направих, за да го тествате. А ти направи това, като се обадите apache50. Спрете, и ще видите, че това е спирането уеб сървър, ако можете да погледнете там в долната част на прозореца на терминала. И след това просто да се започне, ние сме Ще се обадя, "apache50 започне." И тогава отиваме да я храня директория. Сега, тъй като искаме да погледнем в някои от най-P зададете 6 код че сме изпълнени, аз всъщност копират малко от P настроите 6 код в моята собствена папка, които можете да видите в ляво има. Тя се нарича "SECTION8" във всички главни букви защото аз съм просто толкова развълнуван да бъде предаван на живо днес. Така че, ако ще свършим това, трябва да всичко работи доста ефективно. Той казва, OK, нашият сайт е сега на разположение на адреса на IDE, основно, което е това, което сте използвали точно както беше в P зададете 7-- P зададете 6. Всичките ми индекси са един форум днес. Така че можем да отидем на тази, адрес, ако си спомняте, само с щракване върху тази малка бутона в горния десен ъгъл. И вие си спомняте този код, който случило, когато отиде в hello.php. И какво кода е предназначена да направите, е, когато сте написали в името here-- ако кажеш Sam защото това е моят name-- и аз кликнете Say Hello, когато отидохме до следващата страница, това име е трябвало да бъдат показани. Тя ще каже: "Здравейте, Сам" или "Hello", каквото и да име сложите в него, въпреки че ние отидохме на изцяло ново уеб страница. И това е едно от нещата, че PHP може да направи за вас. PHP е в състояние да премине на данни между две уеб страници. Това е напълно различна страница. Ще видите заглавието е "здравей" тук. Всъщност, те имат същото заглавие, но аз Обещавам, че са различни уеб страници, ако погледнем на източника. И вие може да премине на данните, които е вписаните в тази текстово поле, можете да го представи на следващия страницата, която се извиква, и след това, че данните са в състояние да да има в сегашния си вид. Сега ние все още не са приложени това себе си, които е това, което ние ще направим точно сега да подреди получите вкус за това как работи PHP, но ключовият Идеята е, че можете да PHP-- нещо като мисля за него като функция. Нещо, което може да ви позволи PHP направите, е да може да предприеме параметри че сте принос в една HTML страница чрез използване на PHP и форми, и той може да премине тези, като параметри към следващата страница, която се зарежда до. В този случай, ние сме натоварване до този страница с бутона "Кажи здравей". Но за сега, аз всъщност заличава някои от този код в hello.php че е бил тече че действително е показване на "Здравей, свят "или" Здравей, Сам ", или "здравей", каквото и да беше само вход. Така че за сега, ние сме Ще направя това, общо взето. Отиваме да пресъздаде, че и Също така добавете малко повече функционалност, направи малко повече с него, виж какво PHP е наистина способен. Така че на първо място, нека да поговорим за този файл, hello.php. Така че, ако ние я увеличите в Малко bit-- и сега съм нещо се опитва да преминете всички Между другото around-- там отиваме. Ще видите това се нарича hello.php, но синтаксиса на него прилича на HTML файл. Това е така, защото действителната PHP в този файл е всичко остана между тях Question Mark-карета блокове. Всичко тук се счита PHP код. И вие ще забележите, че когато го направих коментар, ще видите познатото две наклонени черти. И ако си спомняте, в HTML, ако напишете коментар, тя изглежда нещо по-близо до това, което е коментар в HTML. Така че наистина всичко между тези две ъглови скоби Сега е PHP код, който се отразява във факта, че този малък коментар символ се превърна в коментар. Така че всеки път, когато пиша PHP код, дори Ако няма HTML код извън нея, тя винаги ще бъде затворени в тези ъглови скоби с въпросителни знаци. Можете да някак си помисля it-- как всичко на кода, който тече във вашите C програми беше затворена в едно цяло число основната, нищожен, фигурна скоба, край къдрава изявление презрамки. И ще видите фигурни скоби в PHP, също, но това е нещо като основен метод за PHP. Така че сега, как ще правим нещо в PHP? Сега, PHP е програмиране език, който е много подобен на C, но тя работи в интернет. Така че едно нещо, което ще immediately-- една от първите неща, които наистина направиха с С беше ли отпечатани неща, нали? Така че в C, което направихме, че с функция ФОРМАТ. Ние го даде низ, вероятно с нов ред, и тогава ние прекратено то с точка и запетая. Така че начинът, по който ние ще направим това в PHP--, защото това не е съвсем ФОРМАТ. Това е малко по-различна от синтаксис. Начинът, по който се печата нещата в PHP е да кажем, "ехо здравей" или "ехо" на всяка дума. И това има ефекта на правене ФОРМАТ с връв, "здравей". И той добавя новата линия към него. Така че нека сега направим sure-- Ще намалите пак малко bit-- нека да се уверите, че този код работи защото има много мощ добре да е бъг в този код че ние ще трябва да се справим. Така че сървърът е стартиран. Така че, ако ние превъртете надолу до дъното, Мда, сървърът все още работи. Така че, ако ние просто натиснете този Малко полето here-- welcome-- ние трябва get-- страхотно. Ние все още сме като запознат "Кажи здравей" на диалога, но когато напишете "здрасти", ще видим че текстът "здравей" беше наистина разпечатан, което е точно така, както очаквахме, защото ехо в PHP е точно като изявление ФОРМАТ. Така че обратно към кода, как в P зададете 6 направих кода за дистрибуция, което е предвидено той направи така, че PHP ще изхода на нещо, което въведена от предишния екран? И някак да проучи защо това се случи, ние сме ще отидат в index.html, който е оригиналния файл, файлът, че се появява на този екран с помощта на бутона "Кажи здравей". Можете да забележите, че има всички класически неща сме дошли да се очаква от такава HTML тъй като тези неща, тези тагове затворени в ъглови скоби, като PHP но без въпросителни знаци, което показва нещо специално за HTML. Имаме заглавие, което е "здравей". И вие ще забележите, че както видяхме, Заглавието е "здравей" и в двата случая. Нека да променим това да "каже", за да сме можем да се разграничи къде сме. Но ние имаме тяло. И тогава интересна бит, на битов, която се проявява в HTML, е тази форма елемент. И така, ние имаме една форма. И това е ключът. Това е начина, по който работите с PHP. Параметърът за действие на форма, казва, че hello.php е това, което ние ще изпратим стойностите в тази форма да. Това е мястото, където ние сме минаваща параметрите, така да се каже. Ще забележите, друго нещо тук е, че методът е "да". Има два основни методи, чрез които ще се да се използва PHP за преноса на данни между websites-- уеб страници, rather-- в тази задача. И тези методи са "да" и "след". Има някои фините разлики между получи и пост че ние ще се into-- ние ще "получи" в, ако щете. Но за всички намерения и цели, може да получи и пост и двете са само начини, които можете да зададете параметрите с малко по-различни екзекуции. За сега, ние ще използваме получи, защото получите това, което е бил използван първоначално в PHP файла на P зададете 6. И действително, ако отидем в и погледнете преди сме редактира всичко друго, Отивам да кажа здрасти to-- какво е вашето име? АУДИТОРИЯ: Елиът. SAM LEVATICH: О, Боже. Аз не знам как да обяснят това. Може ли да се пише това за мен? АУДИТОРИЯ: E-L-L-I-О-Т. SAM LEVATICH: I-O-T? АУДИТОРИЯ: Да. SAM LEVATICH: Perfect. ДОБРЕ. Предполагам, че знаех как да обяснят това. Съжалявам за това. Но ако кажем "здравей Say", това не е това няма да се появи на екрана Все още, защото ние модифициран кода малко. Но ако ние "Кажи здравей" - ОК, така че "здравей" е тук. Но ако погледнем по- погледнем в себе си URL, ще видим, че тя завършва с hello.php? име = Elliot. Така че, това е начин на комуникиране към следващото уеб страница параметрите, които сме преминали. Казахме име = Elliot. И това е в крайна сметка как P зададете 6 преглеждана променливата, че минахме през през формата. И това е нещо, което Особеното на заявка за получите. Заявка за GET прави параметрите известен в URL адреса на сайта. И вие ще си припомним също, в P зададете 6, че сте трябваше да се напише функция че се справиха с факта, че този стринг заявка може да съществува, след като даден файл. Може да има въпросителен знак, последван от основно с произволен брой символи. И това е точно това, което става тук. И причината, поради която трябваше да се анализира, че в изпълнение на server.c в P настроите 6 е, така че бихте могли да кажете кода PHP, че назове = Elliot. Вие необходимо, за да бъде в състояние да разбор, че от URL така че файлът PHP въпросната знаеше какво се занимават с. Така че да се надяваме това дава мотивацията да server.c сега, че ние се движим по извън C в PHP. Така че нека действително се съсредоточи върху достъпа до неща, минали през заявка Вземи Сега в този момент. Отивам да запазите този. Ние не променя нищо. Тя изглежда като ние имаме поле за въвеждане. Ние сме за създаване на някои имоти, както можем да направим един HTML. Това са прости неща. Ние нямаме нужда от тях. Но ние имаме функция за автоматично довършване на разстояние, които основно says-- знаете, когато сте написали неща в интернет, понякога той се опитва да запълни тази в за вас. Така че това е хубаво нещо. Искаме да го изключите за тази цел. Това беше решение на CS50. Така че ние можем да изтриете, че ако ние искахме. Автофокусът просто се придържа курсора в правото на форма в началото. Отново, не е твърде важно. Но име = "име" - това е малко сложно, защото това е име и име. Но можем да се промених това към нещо друго. И в действителност, това е какво ще направим сега. Ние ще кажем "човек", който е нещо като име ако човек се определя от тяхното име. Така че нека да затворите този, възобнови до нашия сайт тъй нашия сървър все още работи Apache 50, и ние ще кажем, здравей, ето Elliot отново. Защо не? Здравей. И ако се върнем тук, ще видим След това, вместо името = Elliot, тя казва, човек = Elliot. И това е пряк резултат от факта, че ние просто сменя името = "човек." Така че в един вход елемент от една HTML форма, полето Име е идентификаторът за параметър, който е да се прехвърлят. Това е като, ако се създаде функция "добави", състояла се от две цели числа и ти каза, инт а и б инт. Това ще бъде името на, и ако искахте друга форма, която можем да направим само чрез копиране и пастиране, тогава щяхме да имаме име б. Така че сега ще имаме два параметъра че се пропуска през стигнем до следващото website-- следващата уеб страница, hello.php. И всъщност ние можем да видим че отново, ако искаме. Това е най-лесният начин да се справят с уеб кода в IDE, основно. Вие стартирате сървъра, го получи използвате, и след това всеки път, вие се направят някои промени, точно в близост този файл, само за да бъдат безопасни. Натискането на бутона за връщане е малко трудно защото може да се зареди ранен версия, а не най-актуалната един. И тогава просто кликнете си бутона отново, поп полето up-- о, и сега има две форми. И така, ако сме написали едно нещо във всяка one-- "Джейсън hirshhorn," за instance-- ние кажа здрасти. Ние погледне нашите параметри. Тя изглежда като сме се погрижили, като Очаква се, а = Джейсън и б = hirshhorn, която представлява два параметъра че сме преминали към тази функция. Така че сега нека да се получи в действителност да прилагане на тази функционалност, че ние имаше в P зададете 6. Така че сега ние просто ехо здрасти. И това не е много полезно. Искаме да повторя някои променлива че е приет за нас. И ние знаем името на тази променлива. Ние имаме и ние да б. Така че можем да изберем да повторя нито една. Но как да получите достъп до него? Е, има някои глобални променливи в PHP. И аз отивам да пиша тях в коментари тук. Двете най-важните от тях са GET и пускате за нашите цели точно сега. Това са редове или, Технически, речници където нашите променливи, че ние сме преминаване към следващия уеб страница на живо. И скоро ще видим как да ги използват. Друга кратка бележка за PHP код и някои особености на it-- в C, да декларира променлива или да се използват променливи, първо трябваше да ги декларира. И това, което трябваше да направя, когато декларирани тях беше кажа инт една или Чар б. Вие трябваше да декларират видовете тях променливи, преди да са ги създали. PHP-- не е нужно да се направи нещо от това. PHP не пита за вида на променлива. И така, че създадете variable-- скоро отколкото казваше инт, Чар, string-- което е наистина Чар *, тъй като ние know-- вместо да правиш всички това, защото всичко е от същия тип, typeless, ние можем просто използвате един герой, който е знака за долар. И вие ще видите, че вече се пръкват нагоре, малки неща, автоматично довършване. И това казвам, че _GET и _POST са две възможности, които имам на разположение за мен. Някои от тези други неща са други глобални променливи в PHP че ще се използва повече хода на P избран 7. За сега ние ще съсредоточи върху получи и пост. Но това е полезно нещо, което прави логическо устройство където някога сте въвели в това знак за долар, тя ще започне попълване на глобални променливи или променливи вече сте дефинирани. Така че, ако искате да се определи променлива, наречена "низ" можете просто да го настроите равен на "здрасти". И това е в общи линии толкова просто като това. И тогава бихме могли да направим нещо като "ехо $ низ." Специализираното логическо устройство трябва да се хвърлят някаква грешки, ако аз правя нещо нередно, така че се надяваме аз правя всичко по силите си. Но грешки винаги се пораждат. Друг труден нещо за PHP е, че това не е компилиран. Така е и с програмите на С, бихте направили ежедневието of-- основно, бихте направили, редакции на кода си, вие искате да го запазите, и тогава ще да го направи, когато беше грим стъпката, която нарича съставител, трясък, за да направите вашия код, този текст файл, в изпълнима. PHP е C-подобни, но това е екзекутиран в движение с вашия уеб браузър. Така че няма начин да се знае. Направете ще хвърлят тези, полезни грешки, нали? Това би било като, вие не е декларирал тази променлива преди да се опита да го използвате. Ти направи всичко това лошо stuff-- segfault, segfault, всичко, което ги сортира от забавни моменти който дойде с грим. PHP е нож с две остриета защото вие няма да получите тези грешки, но това също така означава, че вие ​​няма да знаете наистина това, което не е наред с вашата програма ако просто го стартирате и това не е работа. Но дебъгер трябва да се отбележи, някои надяваме полезни малки неща синтактично, че можете да поправите. Така че сега, ако ние отидем to-- кажа, нека да затворите това. Отворете отново. И ние сме назад тук. Така че ние имаме променлива и променлива б. И те не ще в крайна сметка има значение. Ще им се обадя и з г без специален повод. И ние кажа здрасти. Сега изглежда, че нашият стринг "здрасти" е наистина печат. Ние създадохме променлива, наречена "низ", да го настроите равен на "здрасти". Забележете, че ние не трябва да правим изчистване или да направите герой масив. В PHP, защото променливи са typeless, низ е същото като знак за всички намерения и цели. Това би могло да бъде "здрасти". Това може да бъде само к характер. Това може да бъде номер 1. И това не го интересува. PHP не се интересува от типа на променливата. Или го прави грижи. Тя се грижи, когато се опитате и прави неща с него, но тя не се интересува от етапа на декларация. И точно като можете в C, можете да Декларирам струни на стека като този макар да казва "комин" е малко по- малко на погрешно название, когато потенциалното ние не говорим за PHP. Но ние не трябва да се тревожи за това. Така че ние имаме нашия низ "здрасти", и ние си спомняме низ. Така че сега сме обсъдени променливи. Така че сега ние трябва да говорим за GET и публикувате и да извърши окончателната нещо, което е необходимо наистина да се получи това обратно нагоре до функционалността на Р зададете 6. Така че в момента ние сме отекна низа, но ние нямам тези променливи получават и пост. И тъй като ние използваме методът получи, тя изглежда естествено, че нашата променлива, която ние сме заинтересовани в, както а и б, ще се намира в масива или речника, технически получите. Така че, ако ние се създаде получите като този с вашия groups-- Натиснах въведете и той не искал it-- но тук имаме точка. И така се получи вече съществува. Така че ние вече можем да започнем да достъп някои от елементите на получите. Ако се получи, този синтаксис за масиви в PHP е много C-подобен. Ние имаме нашите две квадратни скоби. Така че, ако ние кажем получите в нормална масив, бихме могли да получите достъп Индексът на нулевия, първия индекс. PHP е индекс нула. Можем да кажем, нула, едно, two-- подобни неща. И аз съм бил казвайки, че се получи е технически речник. И така, какво PHP прави под капака, което е малко по-хубав, отколкото C, това е вече ви дава някои речник функционалност, която е наистина хеш таблици, или се опитва да, уж. Или, технически него може да пробвам, както добре. Но PHP реализира хеш таблица, което е ефективно речника. И така, ние знаем името на нашата променлива, нали? Това е да се прехвърлят в низ за търсене, като PHP. Имаме = Н и б = гр къде и б са имената на променливите. Така че начинът, по който ние можем да получите достъп до стойност, която съответства на ключа в нашия речник е Просто като казва _GET_GET ["а"]. Така че сега ние имаме _GET ["а"]. И ако ние просто замени вътре нашата ехо, ако ние си спомняме _GET_GET ["а"] - и ще видим дали дебъгер хвърля някакви грешки около this-- ние ще спаси и затворете това. Отвори я. Така че ние просто правим право сега, така че не трябва да б значение. "й" и "него" - "бучене." "й" и "бучене." Звучи добре. И това отпечатва "я", което е лудост. Но това е точно това, което се случва в P зададете 6. По принцип, това, което P зададете 6 беше doing-- ехо здравей, name-- където тя имаше име на променлива и то просто ви моли да напишете, че малко текст. Имаше и някои допълнителен код, където тя включва, ако отчети, което можем да направим в момента. Можем да кажем, ако съществува, което е функция, в рамките на PHP, _GET С долна черта, "име" - която е в основата казвайки "ако името е попълнен на" защото ние може просто да кликне върху бутона да представи под формата без пишете нищо в това поле. И ние увийте, че в нашата приятелски фигурни скоби. Ние можем да имаме изявление на друго. И това е всичко в рамките на ъгъл PHP скоба, въпросителен знак ъгъл на стена, ако щете. И сега ще видим дали това работи. Продължавам да чакат, за да трасира и глупости за мен, общо взето, но все още не разполага. Може би това ще стане сега защото аз говорихме. Да. Той е направил, в действителност. Така че, нищо не се показва. Това е, защото за нещо нередно че съм написал в кода на PHP. И аз споменах отстраняване на грешки е трудно, защото в PHP, ние не го компилирате предварително и компилаторът не беше като, Тук е мястото, където вашите грешки са. Но какво можем да направим is-- направя хората помнят как да се вгледате в различна мрежа искания, които PHP-- или интернет страниците изпрати? [? Malin?] Е направил това в лекция веднъж или два пъти. Спомняш ли си, когато отидем да намерим различните дългове и 200 ОКС, всички тези кодове, които се изпращат чрез HTTP от уеб страница, за уеб страница? Дали някой си спомня къде отиваме, за да направи това? АУДИТОРИЯ: Page Source. SAM LEVATICH: източник Page. Точно. Ако отидете в Page Source-- перфектно. Така Page Source издърпва инспекторът. И аз съм с Safari. Много от вас вероятно ще да се използва Chrome или Firefox. Но докато сте във всеки модерен browser-- и не се колебайте да се следват заедно, ако искате. Можете да въведете до този кодекс или просто погледнете вътре в P комплект 6 директория за някои сходни неща. hello.php е това, което сме в момента работи върху подражават. Така че има голямо разнообразие от разделите. Ние можем да разгледаме всички ресурси. Ние можем да видим сорс кода. Така изглежда, че не е направил мине покрай тялото в края. Тя бе открита грешка в PHP и да го спря зареждането на цялата уеб страница. Ние дори не трябва край маркер за HTML или нищо. И ако погледнем към мрежата, което можем се види, че ние сме се изпрати искане. Това е областта. Това е адреса. Това е документ. Ние сме се използва методът на получите. И това е червено. Или това беше червено, когато I Не е избирането му. Как мога да го откажете от избора? Е, това е червено. Позволете ми да освежи. Ето го. Сега е червено. Така че е червено, което означава, тя се провали, което е лошо. Така че нека да разгледаме защо това се е провалил. Така че всичко, което Източника Page може основно кажете ли ти е нещо не е работа, която вече можем да видим. Така че в идеалния случай би там да бъде по-полезен инструмент. И има някои разширения на браузъра които ви позволяват да трасира PHP, но ние няма да се пише един тон на PHP, така че е вероятно просто най-добрият да погледнете през вашия код внимателно и просто се уверете, че тя не прави нищо друго. Така че нека да видим дали форматът на това ако твърдение е къде е проблемът. Искам да се зареди, че обратно тук. Здравей здрасти. Така че има проблем там. Така че за правилния синтаксис на PHP, PHP ще да бъде C-подобен в които ще видите примки. Ще видим дали изявления. Ще видите всички тези приятели че сте се запознаят с течение на този CS50 семестър. Но най-добрият начин да разбера как да направи нещо в PHP е да го Гугъл или да разгледаме някои примери за PHP код защото знаете функционалността. Знаеш ли какво можеш общо с програмата. Можете линия. Можете контур толкова пъти, колкото искате. Можете линия във всички всевъзможни различни начини. Можете да създавате функции. Можете да създавате функции, които повикване на други функции, функции които наричат ​​себе си. И вие имате имена за тези понятия. Имаш рекурсия, дръжки, ако това другите потоци контрол. И така, Google е най-добрият ти приятел. Дори и да каже: "PHP, ако Декларация "и там ще бъде тона мнения с отговори на други хора които съм имал подобни въпроси към вас, които са само началото с PHP и любопитни за нещо синтаксис. Защото ние имаме лукса да са в състояние да погледнете кода в P набор 6, ние всъщност го спра и да видим, че OK, ето нещо интересно. Така че това е, което е в действителност Приличаше на P зададете 6. Така че, ако ние преминаваме през това, можем да видим, че ние сме имам няколко от тях малко Бита въпросителен знак PHP-подобни. И там не са фигурни скоби. Има и запетая. И там са къдрава тиранти в PHP, но това е формат и начин на правене PHP, който работи добре с HTML защото както ще видите, ние сме затваряне изключите тези PHP bits-- на иначе и ИС и на всички that-- и след това ние сме разпръснато вплитане HTML вътре в тях докато все още следвайки контрол на потока, определен от PHP. Така че аз съм просто ще бърза разходка през този защото това е много еднакви концепции, които правехме преди. Имаме, ако не е празна, скоби, _GET_GET ["име"]. Това е още едно и също нещо. Ние използваме речника на _GET, че PHP изпраща при поискване от форми, защото е параметрите на действие, както и методът е точка. И след това, което завършва това. Дебелото черво е означаващо просто да направите това ако, ако изявлението оценява да е вярно. Това е като фигурна скоба. И в действителност, това е фигурна скоба в други езици като Python, които може да срещнете, ако просто направи това за своя окончателен проект. И тогава тази линия, здравей. Тогава ние имаме това нещо странно. Имаме повече скоби. Няма по HTTP there-- или PHP, съжалявам. Но има знак за равенство. И тогава имаме функция, htmlspecialchars (_GEThtmlspecialchars (_GET ["име"]). Това е нещо като по- усъвършенствана версия на ехо. Както бяхме ехо като начин да отпечатате неща в PHP. Това е функция, която е определени в PHP че ще се занимава с някаква по-груба символи и ценности байт че бихте могли да я премине. Той винаги е най-безопасният да използвате тази. Но ехото ще си свършат работата само глоба, ако не сме занимаващи се с нещо твърде груба. И така, това има същото ефект на основно, тези неща в между въпрос марка се оценява чрез PHP. htmlspecialchars връща приятно HTML отпечатана стойност _GET_GET ["име"], т.е. каквото и да въведе във формуляра. И тогава той ще кажа здрасти, запетая пространство и след това. Това цялото нещо между ъглови скоби ще бъде заменен от каквото и htmlspecialchars пъди. Така че това е в общи линии сходна до това, което правим. И ние имаме едно изявление друго, което е Здравей, свят, който има смисъл. Така че сега нека се върнем към нашия код и да видим exactly-- о. Казах съществува, което не е нещо, което искахме да направим. Ние искахме да кажем, не е празна. И така, това трябва да работи малко по- малко по-добре, не е празна _GET_GET ["име"]. И това фигурна скоба съвпада с тази фигурна скоба. Имаме нашите фигурни скоби тук. ехо здравей _GET ["име"]. Да видим дали това работи малко по-добре. Ние все още използвате нашия сървър. Здравейте Джейсън. Здравейте Джейсън. И тя работи това време. И така, това е доказателство, че можете наистина използвате фигурните скоби, че сте знаем и любов в PHP код в HTML. Кодът на PHP е предвидено да сте в pset 6-- pset 6-- предвижда друг начин за правиш, че едно и също нещо. Така че сега ние имаме силата. Имаме функционалността за изпълнение кода на PHP, които видяхме в pset 6 от себе си, в общи линии. Преди да се премине, какви са някои от най- въпроси, които имате в този момент? Да [недоловим]. АУДИТОРИЯ: Така че в редакцията му в pset6, когато го стартирате, има пространство. И мога да видя къде е пространството след запетаята. [Недоловим] старт отворената скоба. Как се включи в пространството начина, по който пише свои собствени кодове? SPEAKER: Това е добър въпрос. И така, нека да разберат това. Така че това е наистина добър въпрос и този, който аз не помисли. Но нека го направим заедно. Така на първо място, което Правя с ехо е, когато ние просто ехо здравей, здравей да подава. Ако ние си спомняме сега тази точка на отделен линия, нека да разгледаме какво се случва. Така че ние кликнете върху тази. Поддържаме казвайки: Здравейте Джейсън. Така че отново, ние нямаме това пространство. И това е, защото в PHP, когато сме ехо, без значение колко spaces-- Не, не на V-- без значение колко пространства ще се постави в here-- ако сега се зареди, че отново, Здравейте Джейсън. Да, вижте, всички тези, пространства имам изядени. И това е нещо, което ехо функцията прави. Така че, за да се грижи за това пространство, и това е една от причините, защо не използвате ехо и можете да използвате htmlspecialchars вместо. Аз съм любопитен какво ще се случи, ако ние направихме това където ние затворено пространство, в низ. Аз честно казано не съм сигурен какво ще се случи, когато аз правя това. Така че това е един от начините. Това е един от начините да се грижи за него. Ако увийте пространството низ, тогава пространството Ще се изведе добре с ехо. Най-безопасният нещо да направите, е да се направи htmlspecialchars. Това е винаги безопасно залог. Но сега ние имаме начин да се направи то с ехо, ако е необходимо. И по същия начин, ние можем ехо нови линии, всички вид неща вие сте запознат правиш в PHP. Някой друг, какви са повече въпроси, които други хора са в този момент за PHP? Ако хората се появиха малко късно, Щастлив съм да остана след малко и да поговорим за някои от самото начало. И това е също и всички livestreamed, и архивира, който е луд. Както и да е, така че сега нека да се направят някои по-напреднали неща с PHP. И един от най-ранните неща, бяха въведени в C е за вериги. И PHP има по-мощен за линия, наречена примката foreach. И изглежда, че за всяка празна this-- като празни, фигурни скоби, направете нещо. Така че това е в основата на стенограмите. Ето, за цикъл като синтактичен строеж бе създадена в C и в монтажа език и такива неща. Разработена в C, точно, като стенограф за много от видовете електрически вериги че хората ще видят. Както, когато ви е написал една линия, има често е стъпка инициализация изпълнена точно в начало, състояние, при което веригата ще stop-- и това е характеристиката това е само в една линия, докато, или че докато има точно Просто feature-- и след това стъпка на нарастване На в края. И така бихте често откриете себе си пишете код като следното. Отивам да изтриете някои от това. Но ако сме итерации през герои в масив, например, като ние сме имам един набор от знаци. Съжаляваме да върне C. Знам, Вие смятате ли стана това. Но това е само за целта, на обучение PHP, обещавам. Така че, ако имаш ул Чар на разстояние 8, и нека казват, че казва Hellooo с плаващ нищожна. Great, така че това е нашият стринг. И тогава имахме за контур. Имаме инт аз равна на 0. И ние искаме да излезете, когато STR аз не се равнява на равно на нула, защото ние излезете, когато тя е равна на нула. И след това, което правим аз ++ при всеки точка в за контур. Правейки нещо с ул от и. Така че основната формула е, имахме този масив, че ние Исках да третират като отделни елементи. Но това, което трябваше да направя, е, че трябва да основно се създаде отделна число променлива, която се брои всеки път минахме през примката. И тогава ние ще трябва да се обадя след това strstr [в], когато това, което наистина исках да направя е просто отидете характер по знак, нали? Ние не искаме да увеличите на число и след това да използва това число за достъп до всеки един от героите поотделно. Ние наистина искаме знак по знак. И така за всяко интелигентно изчислява, че за нас. Ако имаме масив, който ние може да обяви в PHP като just-- ако имаме променлива призовани, нека го наречем масив. Чудесата на не пишете, че е точно като всяка друга променлива. Това е просто един масив. И ние имаме малко [недоловим] като 1, 2, 3, само един вид Initialized масив. Всичко е наред, той не харесва ми foreach. Но ако ние действително foreach-- Написах, че малко погрешно. Има два начина да направите един foreach цикъл. Има синтаксис в и като синтаксис. И ние ще направим в първия синтаксис не, като. Това е моя грешка. Така че foreach бр в масив, ехо бр. И PHP се крещи ми по някаква причина. Тя намери неочакван в в нещо, което е малко по-притеснява. Но ще разбера Затова, че е в един миг. Така че не ми харесва това. Нека се опитаме с помощта на като. Тя предпочита АС синтаксис е изглежда. Така че нека да направим foreach масив като бр. Така че по-малко обяснение от това, което се е случило е като синтаксис е saying-- добре на първо място, нека да погледнем какво е това отпечатва. Така че ние отваряме нашият IDE. Ние отидете тук. Ние казваме, Hello Джейсън. И го е направил 123, които са били на съдържанието на масива, че сме създали до върха. Така че да се гмурне в този цикъл foreach, имаме променлива, наречена масив който е масив от три числа. И тогава ние правим foreach масив, както бр, ехо бр. И това е по- интуитивно, отколкото за клепнали. Ние което казваш, лечение на всеки един от нещата в масива, както бр, Искам да ми дадете бр. И това е точно това, което прави. PHP е, че изчисляването когато казвате foreach масив, и имаш работа с масив, това, което започваш да искаш да обхождане е, че героите в масив, е на цели числа в тази масив, е, че елементите в масив. И това е което ви позволява да съхранявате тези променливи като бр, и след това просто изход бр веднага, вместо да кажат: Имам променлива, наречена аз, и След това искам да изход strstr [в]. И така, това ни позволява да направим готини неща. Като основно ние не трябва да се създаде тези променливи, като аз си и да правят всичко това нарастване На неща в края. PHP се грижи за всичко това за вас. Така че сега нека поговорим за foreach като тя се прилага към нашия _GET речника. Така че ние ще коментирате това бързо. Така че ние имаме нашата _GET масив. Ние имаме тази променлива. И тя има някои неща в него. Точно сега, ние имаме само една променлива да се прехвърлят към него, който е име. Но ако това натиснете Enter, сега ние можем да имаме две променливи. Ние можем да имаме име и възраст, например, ако искаме да получим възрастта и също на името на лице, достатъчно смешно. Така че сега _GET ще бъде речник с два елемента, с две двойки ключови стойности. И първото key-- Отивам да пиша това един на дъската също. Имаме нашия речник е _GET. За съжаление, това е е малко трудно да се види. Но вътре нашия речник имаме Име, което ще бъде нещо че ние сме дал. И ще имаме възраст, който също е щеше да бъде нещо, което ние не дава. И това е съвкупността на нашия речник. Така че тя има две елементи в него. И така, защото foreach примки са умни, ние Може би си мислите, и правилно Може би си мислите, че foreach може обхождане чрез този речника, отпечатване стойностите, дадени по име и възраст. Така че нека да всъщност правят точно това. Да се ​​изгради foreach цикъл. И ние ще направим за _GET като. И ние ще направим следното. Така че нека да видим какво ще стане, ако ние латиница просто дума, а след това казват ехо дума. Ние също така ще ехо на нов ред просто за да бъде малко по-ясни, какво става. Така че нека да видим. Това не ми дава никакви грешки. И ние ще се затвори тази. На нашия сайт, вие ще трябва да се прави много от които в течение на pset7. Така че ние казваме, моето име е Сам. Моята възраст е 45. Не е. Но това отпечатва, както се очаква, Sam 45. И така, вие ще забележите, че какво foreach цикъл did-- тук, нека се върнем към това, така че това е до на board-- стигнем _GET като дума. И имаше четири неща в _GET. Но това отпечатана само две неща. foreach, е неговата интелигентност самостоятелно, Предполага се, че това, което ние наистина искахме беше ценностите, а не на ключовете. Но има един начин, по който можем да отпечатате от клавишите, както и, ако искахме да. Ако искахме да се знае какво тези променливи са били наричани, има начин, че ние може да получите достъп до тази, както добре. И по пътя към нещо като направите това, така че можем да кажем, нека наистина тя се раздели на двойки ключови стойности. Така че нека да видим какво ще стане сега. Така че ние имаме ключ. Имаме стойност. Имаме още един нов линия за четливост. И нека да видим какво ще се случи когато правим това сега. Аз не знам на колко години е Джейсън. Джейсън 15. Така че ние имаме име Джейсън, 15-годишна възраст. Така че ние успяхме да влезем ключът и стойност на двойки на този речник просто като кажа като ключови точки за стойност. И това е foreach синтактична захар битов, който позволява можете да получите достъп до неща в речника. Така че да се надяваме този вид подчертава мощността на цикъла foreach. Можете доста много хвърляне всичко, което iterable изглежда, като всичко, което има множествена елементи като масив, като dictionary-- тези два първични неща, които ще бъдат работещи с както в живота и в pset 7. Така че можете да хвърлят тези неща в нея, и тя ще разбера какво искате да правите с него. Той ще каже, OK, аз отивам да получите тези неща от данните, които е приет за мен. И това е нещо, което сте ще бъде с помощта на много по pset 7. Отивам да се бърза превъртане надолу, само за да види къде съм на. Дали хората имат въпроси в този момент? Въпроси на всички? Да? АУДИТОРИЯ: Така че с ключа и стойността, можете да се сетите нещо друго и тя все още ще работят? SPEAKER: Ами сега. Уау, аз съм напълно изтрита цялата линия. Чудесна работа. Така че, един. Key и стойност не е просто една конвенция. Това е от полза. Вие ще получите някои дизайн точки, може би някои точки за стил за това, че тъй като тя наистина предава намерението. Но ние казваме, а и yarp. АУДИТОРИЯ: Вие не трябва да промени нищо в HTML файл за да се отрази това? SPEAKER: Ни най-малко. АУДИТОРИЯ: И той просто знае, че поради равенство голяма than-- SPEAKER: Да. АУДИТОРИЯ: --that индикатор, който that's-- SPEAKER: Да. Това е синтаксис foreach, но да. АУДИТОРИЯ: Там не са видове. И какво от това, ако искате възраст да бъде само няколко? Има ли начин да се направи това? SPEAKER: Има начини, за да проверите дали променливи отговарят на определени видове. Така PHP пита малко повече от вас, защото не съществуват видове в. Някои от начините да го пита по-малко. В някои отношения тя иска повече. Защото, ако имате само нещо в променлива, вие нямате представа какъв тип е тя. Но ако сте умни за променливите обаче да задавате типове на и се уверете, която функционира само вие return-- Искам само функции на възвръщаемост един вид стойност, така че че можете основно Очакваме, че променливата се върнеш от функция ще бъде от типа че си мислиш, че ще бъде, в общи линии. Но има някои методи чрез която можете да проверите. Аз не ги помня разстояние от върха на главата ми. Чакам го да се оцвети в синьо. isint? isstr? Има методи вградена в PHP, които могат да провери вида на променливи за вас. Но ако зададете променливи изящно, не трябва да трябва да се направи, че твърде много в pset 7. Но тези методи съществуват. И това е нещо, което е в самия език. И аз не си спомням точната синтаксис. Ние дори може да го гледам. Но времето е от съществено значение. има ли някой друг имате някакви въпроси? Да. АУДИТОРИЯ: Имам само още един. Така че ви спомена метода GET, но ти не спомена метода POST. Дали сме се върне към това? SPEAKER: Да, ние ще да се върне към това. Това е точно това, което търсех в моя телефон, който сега заспа, но аз ще го намеря. Просто като се уверите, че ударихме всички PHP бележки. Да, няма грешки версия. Да, имаме още няколко неща, които ние искаме да направим сега в този момент. Така че говорим за POST, които споменахте, единствената разлика между GET и POST е че си спомням, когато погледнахме На този URL и видяхме, о, Име равнява на и възраст се равнява yarp си прав в URL адреса има за нас. POST е малко по-потаен с неговото приемане на информация. Така че, ако не искаше потребител да се знае, например, можете не му попречи потребителско име и парола на лицето влезете в момента, за да се покаже в адреса, който е разумен нещо да не искате в URL адреса, защото някой може да го види. Ако те се свърже някой към страница, вие не искат тяхната URL измазани там, защото това ще позволи на хората да се логнете само с поставяне на URL, вместо на действително попълване на формуляр. POST е малко по-потаен. И единствените неща, които ние ще трябва да се промени са този метод, промяна от точка, за да оставите. И тогава вътре в HTTP, вместо за достъп до _GET масив, отиваме за достъп до _POST масив. И ние ще забележите, че, ако ние отваряме тази отново нагоре, Джейсън бавно отслабва във възрастта. Име на Джейсън, 14-годишна възраст. В едно и също нещо ще изскочи. Но ние отидете на URL адреса и тези променливи не са там. И начинът, по който POST passes-- така че не забравяйте как да изглежда при източника на една страница. Отиваме към мрежата. Ние освежи. И това е друго нещо, което POST ще ви даде предупреждения относно. Може би сте виждали кутия, текстово боксира като този във вашия браузър. Сигурни ли сте, искате изпращане на формуляр отново? POST е какво се изпраща тези форми. Тъй като основно, ако сте изпратили информация за кредитни карти с някого, че няма да се показват в URL адреса. Това ще бъде искане за POST. Така че, когато обнови страницата, това е повторно изпращане, че след запитване. Така че сега ние искаме да изпратим образуват отново, защото това не се случва да се създадат някакви дублиращи покупки. И ние ще забележите, че тук долу, метода ние използваме е POST. И това наистина е било направено от байтове. Тя се прехвърля 401 от тях. Програма е доста малка. Но има къде, че можем да видим стойностите, които се предават. Уеб страниците сами могат да видят, но ние като потребители не са в състояние да се види, освен ако не сте хакер. Ако сте добър хакер, можете да погледнете. Ако знаете основните формат на HTML, стойностите ще направят явили в страниците. Вие ще бъдете в състояние да се види. Стойностите ще бъдат там, те са само малко по-малко очевидни за вас да имат достъп, в общи линии. Имаме ли по- въпроси за GET, POST before-- това, което ние ще направим следващата е действително да разгледаме някои от кода че можете да започнете да даде в pset 7, говорим за как използва някои от тези понятия, и говори за неща, които вие ще трябва да се направи малко по pset 7. Всякакви други въпроси преди това? Още един интересен вие имате? Страхотен. Добре, нека да погледнем малко по pset 7, Няма съмнение това, което са всичко най-ентусиазирани. Искам да кажа, това е нещо, което David минава през малко. Но ще имаме три директории в отгоре, както и конфигурационен файл. Това е за бази данни, които ние ще говорим за около пет минути. Включва, никога не се нуждаете да погледнем в тази директория ако не искате да, но това е хубаво да знаем, че има най-различни помощници. Помощници е като полезни функции. И тогава имаме довереник, която определя някои неща нагоре. Има някои функции, които има CS50 писмено, че са в помощник и довереник. А някои от РНР, че вече излиза във файлове ще направи много по-сортиране на тъп крак работа за вас. Подобно, ако отидем в публичния login.php, което е това, показва полето, когато отидете в pset 7. Ще видим, че има това изисква декларация. И това нещо като рязък включва, таг включва, ако сте на по-нова генерация. Но това основно казва, че имам нужда от достъп до всички функции в config.php. И вие може да имате изисква за всякакви други неща. довереник всъщност изисква помощници. Така че винаги, когато имате нужда от довереник, вие сте също включително, или изискваща помощници, както добре. Така че ви дава достъп до всички готини функции, които ние ще използваме, неща, които харесваш направи. Аз всъщност ще облекчи това надолу малко. Така че функцията тогава ние сме Ще преминете през точно преди да преминем към SQL малко битов е функцията login.php, просто защото използва някои от темите че ние просто говори в PHP. Виждате ли първото нещо е, ако $ _SERVER. Това е друга глобална променлива, че започваш да се занимават с. Това е като _GET и _POST, но това, което сървър съдържа се това може да ви разочарова знам дали методът на поискване Беше GET или POST. Както по-рано това, което правехме е само в нашата код, който писахме, ние просто се променя тя да бъде GET и POST в зависимост от това, което има HTML. Но има страници, които могат да бъдат преглеждана с двата типа искания. И вие може да искате да направите, различни неща в зависимост от вида на искането, точно като вход прави. Така че можете да проверите това искане метод, чрез достъп до ключове, чрез използване на ключ и получаване на стойност на нещо в речника _SERVER. Така че това е още една глобална променлива като _GET и _POST. Ако това е GET, ние искаме да направи формата за вход. Render е функция, която в общи линии просто поставя съответния HTML и тя преминава някои параметри. Това заглавие е параметър, който е използвана при показване, достатъчно странно, заглавието на страницата в въпрос, нещо тук, каже здравей или в предишния пример. Сега имаме различно нещо. Иначе, ако това е POST, ние направя някои други неща. Използваме, че празна метод. Това не е налице, това е празна. И видяхме преди, PHP има справедлива стойност на вградения в методи, които David will-- ако има са методи, които са полезни за вас, те ще бъдат предупреждавани да ви в разходката през тази David дава в началото галерията, а също и полезни бита Zamyla му. Тя се е върнала всички. Ние всички можем да се радваме. Извиняваме се е уместно наречена функция че просто основно отпечатва някои съобщения за грешка, защото CS50 е много любезен. И сега това, това е сложен малко, защото това е мястото, където ние сме заявки в базата данни. Сега ние не сме говорили за бази данни. И ние отиваме в следващия пет минути, или така, максимум. Но това е функция че CS50 е написал за да получите една маса основно от база данни че ние работим с по pset 7. Аз съм много зле с моя нула индексиране днес. Но да, това е 7. Така заявка, че ще се върне на масив, общо взето е ключовата бит. И тъй като тези неща не са машинопис, толкова редове е масив от масиви. Защото, когато мислим, таблица, това, което ние ще направим е, както сте научили в psets харесват играта на 15, така или иначе където трябваше да се използва двойна решетка, ние основно имаме масив от друга масиви прави таблица. И имаш редове и колони. И тогава може да има достъп до тях, като [0] [1], можете да получите на [0] [1]. Basic подобни неща. Така че това, което правим тук, в тази функция, ние искаме базата данни ако потребителят, който е опитвайки се да се логнете, че ще бъде изпратено чрез метода POST. Ще видим ставаме все потребителското име от _POST. Те ще са изпратили, потребителят или вие, ще изпрати на стойност чрез формуляр, чрез POST, защото това е потребителско име и парола неща. Проверяваме потребителско име да се види, е тази в таблицата? Защото, ако даден потребител се влезете в, след това си име трябва да се съхранява в таблицата на Потребителите, които съществуват за този сайт. Така че основно, ако за употреба е в базата данни, заявка ще се върне този ред, който е масив. Но сложната част е, че ако дори и ако двойната масива е само на един ред, дори ако това е един ред array-- като сте се погрижили basically-- ако имаш размер на един масив , който е притежател на друг масив, сте наистина се занимават с една колона. Но тя все още се обработва като двойна масив. И това е мястото, където тя понякога може да получите сложно, защото ние имаме редове тук. Нашата променлива е редове. И тогава ние създаваме нова променлива, наречена ред и определя равен на първия ред на реда. И вие ще забележите, че коментара казва, че е първият и единствен ред. Така че това е най-труден част, където сега функции може да се върне масиви много лесно. Там не е mallocs. Вие няма да видите mallocs. Така че вие ​​няма да видите SEG грешки. Но функции ще са все още минава около масиви и данни в групи. И вие трябва да се притесняват от това, което точно си функции ще се върнат. И дори ако това е една колона като тази, задава въпроси все още продължава да се върне двойно масив. Така че, за да достъп че column-- или сте мога да мисля за всичко това, както е обърната тъй като ние не говорим за реда. Но за достъп, които един ред, не може просто да се каже редове. Въпреки че е един ред, трябва да се се rowsrows [0] някак да елиминират този Външният малко на масива и Трябва просто да си един ред. Направете някои други неща. Има една функция наречено password_verify която проверява парола, която беше публикуван. И тогава ние виждаме друг глобалната променлива тук, _SESSION. По принцип сесийния идентификатор Ето как можете да следите на, ако някой е влязъл в или не. Така че точно сега с login.php, ние сме влезете потребител инча Така че това, което искаме да направим, е да искаме да казват сесийния идентификатор е равна на ред идентификатор, който просто има смисъл, защото всеки ред ще има различен номер номер като част от масата. Ще получите в SQL в второ, така че ако някой от този Изглежда малко като дрън, тогава всичко ще се изясни. Но ние отиваме да зададете идентификацията равна на правилното нещо, като влезете потребителят инча Извинявам се, ако нещо се обърка. И това е целта влизания в живот като професор Malan бих казал. Така че това беше login.php. И много от кода PHP пишете в pset 7, ще бъде малко. Не забравяйте да коригирате да правилните разрешения. Ще има малко за че в началото на спец. Но РНР, че сте писането ще бъде правиш неща, които е подобен на този. Ще бъде достъп до някои неща, които са дадени за вас в глобални променливи на PHP, че се занимаваме с тока влезете в профила на потребителя, дали има са заявки, изпратени до този страница, различни неща. И това също ще бъде потенциално итерации чрез редове на това нещо. В различна функция, заявка се връща този двоен масив. И ако има повече от един редове в него, ако има are-- да, ако има са повече от един редове в него, след това ще бъде една маса. И вие може да искате да превъртите чрез редовете на този масив, използвайки примката foreach, че ние описано. Така че, ако го направите foreach на двойното масив, каква ще бъде word-- тук, Аз всъщност ще го напиша. Аз ще го напиша бързо тук. Ако имаме foreach редове като ред, какъв е вида на ред? Някой знае ли? Имаш го? Така редове е двойна масив. Така че това, което се случва foreach да се направи извод че искаме от този двоен масив ако сме итерации над него? Можем да приемем, че в общи линии това ще бъде или елементи, или редове или колони, общо взето. И така, ние, редове и колони може да третира като едно и също нещо. Основно това, което примката foreach се случва да направите, е, че ще се върне редове. ред ще бъде от тип ред, като има предвид, редове е двойна масив. Така че, ако ви дам foreach двойна решетка, това е Няма да превъртите дълбока повече от едно ниво. Коя е основно да се каже, ако има осем клетки в този table-- 1,2, 3 4, 5, 6, 7, 8-- на foreach цикъл не е ще мине през всяка от тези клетки. Какво примката foreach ще направя беше, че ще мине през този ред, ти дам целия този ред. И тогава тя ще мине през този ред. Така че само итерации едно ниво дълбоко. Ако добавите вложените foreach цикъл, тогава може да лекува всеки ред се върна от редове, които правиш foreach ред като елемент, да речем. И тогава може да повторя елемента. Така че това е един кратък малко опреснителни за това как възможно е да използвате foreach шлейфове в контекста на заявката. Има ли някакви въпроси относно PHP? Каквото и да е, преди да сме преминете към говорим за SQL и на шега на база данни? Чувствам се добре? Чувствам се добре. Всичко е наред. Нека преминем обратно към PowerPoint, което вероятно сте пропуснали. SQL, Уау. Хората, които са в разрез ми обикновено Ще знаете, че подпозиции на акроними винаги са само първите думи Мисля, че на този мач, който algorithm-- че акроним. Това не е един алгоритъм. Така че SQL е база данни. Това е език, който работи с бази данни. И всички бази данни са се маси, най-малко в начина, че SQL ги представлява. Друг начин да се мисли за бази данни е бази данни са набор от ключове и стойности основно. Можете да мислите за база данни, като речник, а също и във вид на таблица. По принцип това е начин да се сдружават различни данни с други данни, често чрез редове и колони. И това е начинът, това е SQL работи най-добре. Така че това е един пример на маса. Имам няколко примера за хора в моята част, което Аз не са имали време да се промени. Но ние имаме неща като ID, име, суперсила, и родния град. Аз не знам някой да е, където от в рубриката ми, така че аз съм просто ще приемем всички са от Ню Йорк Сити, защото имам висока статистическа вероятност да бъдат верни. SQL автоматично ще се грижа на колоната ID за вас. Ако поставите нов ред в SQL база данни, това ще увеличи че ID номер и просто основно се придържаме като пет имена, суперсила, родния град, който към края на същата таблица. Така ID е колона ще Никога не трябва да се притесняваш. Но, както в случая на login.php, когато ние получаваха ID на сесията от една маса и само с помощта на ID, ID е начин да се идентифицира по уникален начин елемент на база данни. Така че, ако имахме два Sams, като и двете който преподава CS50, и двете от които бяха от Милуоки, които биха все още имат различни идентификационни номера и по този начин да се различава в контекста на масата. Така че това е, което се занимава SQL с, работа с в задния край. Сега това са четирите команди че ще трябва да работи с SQL. И аз ги вдигна на един слайд. Но ние ще мине през всички тях поотделно. Първата команда е UPDATE, който прави това, което може да се очаква. Речем, че има някои данни в таблицата, която е остаряла. Подобно ако поддържаш следите на имената на хората и възрасти, ако на някого след това се увеличава с възрастта, вие ще искате да отидете и актуализира възраст само на това лице. За пример, който работи с първата ни table-- не се притеснявайте за написването всички тези команди в същото време. Но ако имаш актуализация надолу, че ще бъде добре за тази част, защото ние ще се върна на масата. Така че, ако се върнем на масата, нека да кажа нещо, което се е случило е имало земетресение или неизправност линия, която разделя директно чрез New York City. И ние искахме да се актуализира всеки който е живял в Ню Йорк. Всички те трябваше да се премести в Пенсилвания. Това не е роден град. Всички те трябваше да се премести в Ню Хейвън. Ето. Така че всеки в Ню Йорк се премества в Ню Хейвън. И така, това е нещо, което е редактиране на три реда в тази таблица. Но в SQL, можете да направите че само за една декларация. Така че ние се върнем към актуализация. Нека бързо да изтрие този форум отново. Когато ние говорим за актуализиране, има няколко части на синтаксиса, които са от ключово значение. Е, всички от синтаксиса е от ключово значение. Но нещата в зелено е задължително. Изискват се белия, като предварително дефинирани имена. И светлосиньото са неща, които се различават в зависимост от масата. Така че това е, което се случва с цветовата схема тук, там горе. Така че, ако искаме да се актуализира само тези редове на хората, които живеят в Ню Йорк, И така, какво ще правим, ако ние казахме UPDATE? Така маса е мястото, където ще се постави Името на нашата маса. Нека просто кажем името на нашата маса е една маса. Така че ние искаме да се актуализира на маса един. И ние искаме да set-- какво искаме да зададете? Ами ние искаме да кажем, така column-- PHP третира редове като уникални идентификатори. И тогава колони са различните области на тези елементи на базата данни. Така че първият елемент на базата данни има име на Сам, суперсила на CS50, и родния град на Милуоки. Така че, ако ние серията, нека да погледнем отново параметрите, които набор отнема. Имаме колона е равна стойност. Така че ние искаме да кажем някои column-- които помним е field-- искаме да видим по- поле равно на нещо ново. Така че, ако ние просто каза актуализация таблица 1, задайте име равно Elliot. Вземи някои хора от нов раздел в по този въпрос. Но ако ние просто направихме актуализация таблица 1 зададете име равно Elliot, какво щеше външния вид на маса като след това? Хората имат някаква идея? Да. АУДИТОРИЯ: Всичко в тази ред ще стане Елиът. SPEAKER: Всичко в кой ред? АУДИТОРИЯ: На първия ред. SPEAKER: На първия ред? Защо първия ред? Не искам да кажа, за да се заяжда с теб. АУДИТОРИЯ: Може би всичко в цялата таблица? SPEAKER: Всичко в цялата таблица, да. И това е точно така because-- I е просто да ви помага, а малко по- there-- защото ние пропуснахме опционалната WHERE клаузата. Ако не разполагате, където клауза, какво ще направи тази команда е, че ще работя с всеки един ред в таблицата. Името на всеки човек ще стане Elliott, общо взето, които Elliot е много щастлив за. Или Yanni, един от двамата. Но името на всички, ще се промени. Така че начина, по който ние използваме КЪДЕ clause-- и това се отнася за всички Призвана които са във всяка тези различни неща. Така вие ще забележите, че SET има колона еднаква стойност. Това се случва и къде. Но те са различни видове отчети. Така колоната се равнява на стойността в SET е в присвояване. Както можем да кажеш, че ние искаме за да зададете име равна на Елиът. Но в клаузите за къде, това са изявленията на равенството. Така че нека да кажем, ние искахме само да промените името на лицето, за да Elliot ако тяхното име е Райън, да речем. Така че, когато казваме КЪДЕ име се равнява на Райън, че ще е успешно само промяна само name-- че ще промените полето Име в редове когато полето за име е равна на Райън. Така че, ако имахме няколко души на име Райън, всички от имената им щеше да се промени, за да Elliot. Това е подобно на примера на линия, ако вината разделя New York City и всеки трябва да се се премести в Ню Хейвън, начина, по който можем да направя, че в един отчет е UPDATE таблица1 SET родния = Ню Хейвън където родния равнява New York City. Това е силата на изложението UPDATE. Ние можем да изберете произволен брой редове чрез верни твърдения за областите, в тези редове. Не можем да кажем UPDATE таблица1 набор Име = Elliot КЪДЕ ред = 1, с изключение на това, което можем да кажем, ако ID = 1. Така че ние ще бъде работа с равенство на полета, равенство на колони. Но с помощта на полето ID е начин да се изберете специално отделни редове, защото полето за идентификатор е уникален идентификатор в SQL база данни. Така че като актуализиране ред един, ID е равно на 1. Актуализиране поредни две, просто промените този номер. Но силата на КЪДЕ твърдение е, че ние да актуализирате неща въз основа на това, което им текущите стойности на някои неща са. Да Елиът? АУДИТОРИЯ: И какво, ако искате to-- отново, това е друг въпрос. Но първият ми въпрос е, където се случва това? Къде съм аз актуализиране на този? Това ли е в код PHP? SPEAKER: Къде ли се актуализира, да. Ние ще говорим където за цялата се случва нещо веднъж да отидем чрез всички команди. Но това, което трябва да се знам за сега е основно че вашата SQL база данни съществува като нещо да бъдат достъпни от заявката функция, която определя CS50. Така че, ако използвате функцията за заявка, можете да получите достъп до тази таблица. Така че ще изпрати тези команди за вашата маса в PHP файлове чрез функцията за търсене. Можете също така да си поиграете с вашата маса директно. И това е най-добрият начин да се тествате тези видове команди. И ние ще проверете как точно да направите това само малко. Така че това е UPDATE команда. И останалата част от командите Ще бъде нещо подобно, работи по подобни неща. The вмъкнете в е вероятно най-различни един от UPDATE. Отивам да напусне, че там горе за само малко и работят тук. Така INSERT INTO, ще видите тази таблица е все същата. Вие искате да вмъкнете в. На капитализация, SQL е нечувствителен. Така че не е нужно да капитализира тези неща. По конвенция думите в бяло, се капитализират. Но аз също ги цвят кодирани. Единствената причина, поради която сте се възползва тези, когато сте ги въвеждате е просто да подчертая че онези са константи. И така, можете да разгледате капитализиране или на факта, че аз съм ги оцветени по различен начин. Така че ние имаме INSERT INTO, нека да направим таблица1 отново. Това е всичко, на един ред. Аз съм просто го отделя от различни изявления. Така че не се притеснявайте за това, че таблица1 да се качи на втория ред. Така че ние искаме да вмъкнете В Таблица 1 някои стойности. И вие ще забележите, опционален битов, което ще получите в секунда. Така че ние имаме ценности. Така че нека да кажем искаме да добавим Andi до масата ни, защото ни липсва Andi. Andi е болен. Така че нека да добавите Andi нашата трапеза. Не забравяйте, че ID номер се актуализира автоматично. Така единствените области ние трябва да се тревожи за са име, суперсила, и родния град. И така, начинът, по който го правим, погледнете в нашата синтаксис, е ние сме просто имам скоби, с запетая разделени стойности, всяка от които е ценност. Така че, ако искаме да вмъкнете Andi в нашата маса, всичко, което трябва да направите, е прав Andi. Какво е суперсила Andi му, хора в раздел Andi е? Тя искала полет, или искали скорост, или нещо такова. Какво ние вече имаме там? Имаме CS50, полет, скорост и сила. АУДИТОРИЯ: Пътуване във времето. SPEAKER: Пътуване във времето, невероятно. Така че ние имаме Andi, време пътуване, и родния си град. Това е един наистина добър въпрос. New York City, освен ако някой не знае. Всички са от Ню Йорк е най- урок, за да отнеме от днес. Така че това твърдение би вмъкнете, като пети ред, с времето за пътуване на суперсила и родния град на New York City. Но полето за избор е в основата на пътя да се уточни точно кои колони искате да вмъкнете неща вътре. Начинът, по който го правим сега, Andi, времето за пътуване, New York City, върви в точния ред на нашата table-- име, суперсила, родния град. И ако искаш да направиш нещо, различно от това, като кажа, че не са знаели нечий суперсила, като как аз не знаех Andi на суперсила в началото. Така че всичко, знаех си беше име и родния си град. Какво можех да направя, е можех do-- аз ще изтрие тази бърза. Искам само да актуализирате колоните. И това е мястото, където опционален списък колона влезе в игра. Искам само да актуализира име и роден град. И тогава аз ще кажа ЦЕННОСТИ. Ще направя Andi и New York City. Ако бях пропусната в списъка на колони и просто да направи тези две неща, където ще New York City са отишли? Кои колона би Ню Йорк Сити са поставени в? Хората имат някаква идея? Суперсила, точно. Така че това просто ще отидат в ред. И след като са достигнали до края на списък, той просто ще спре попълване неща вътре. И ценностите, които тя ще се придържаме в всички колони просто ще бъде нула. Така че ние определено, защото име и роден град, ние ще имаме ID 5, Име на Andi, суперсила NULL. Така суперсила е неинициализирана стойност. Не е задължително да получите Същите Valgrind грешки, ако се опитате и достъп до него. Всичко ще бъде добре занули излезе, защото NULL е ценност в SQL. Това е константа. И тогава родния град ще бъде в Ню Йорк. Така че това е вмъкнете в командването. Преди да се премести, има още две команди. Дали хората имат някакви въпроси относно UPDATE, за INSERT INTO, за SQL обикновено преди да преминем върху крайните нашите бита? Хората се чувстват добре, чудесно. Обичам го. Така че нека да говорим за SELECT. Отивате канавка UPDATE тук. И SELECT ще бъде много подобен. Целта на SELECT, SELECT цел в живота е да ви дам един куп колони които отговарят на определени условия. И когато казвам задоволи определени условия, ума си мощ веднага се върне към тази WHERE клауза които излязоха в UPDATE. И тази клауза е точно там, в SELECT. Ако не се изведе, където клауза и ние казваме SELECT име, hometown-- лимец, че малко wrong-- име, родния град ОТ таблица1. Ако можем просто да кажем, че това, което SELECT ще ни даде е това е ще ни даде по- double-- маса, по-скоро. Двойно масив ако сме мисля за в PHP усеща. Но това е просто ще ни даде по- двойна масив от два columns-- име, и родния град. И това ще игнорира ID. И това ще игнорира суперсила. И това просто ще ни даде всичко един ред от тази таблица. Така че, ако ние просто вмъква Andi, ще имаме Andi. И ще имаме оригиналната четворка. Ако те са били актуализирани, че ще да бъде отразено и така нататък, и така нататък. Така че това е така, защото ние не използва клаузата WHERE. Но можем да я използваме в точния същия начин можем да го използва в UPDATE. Ако ние искаме само таблица на имената и супер сили на хората, живеещи в Ню Йорк, ние може да изпълни изявление като SELECT име, superpower-- Аз съм просто ще напусне that-- ОТ таблица1 КЪДЕ родния = New York City. Така че това идва да покаже, че това е възможно получите напълно различни колони, и след това пуснати колони, че не сте дори и да се върна в клаузата WHERE. Ние дори не искам родния град на всеки. Но ние искаме името и суперсилата на хората чийто роден град е Ню Йорк. Така че това е нещо, което ние може да се направи с КЪДЕ клауза е да можем да се справим с колони че ние не трябва непременно искам обратно. По същия начин, по UPDATE, можем да се справим с колони, че ние не правим задължително искате да актуализирате. Ние можем да се актуализира на всеки един град кой е име е Сам, например. Ние можем да актуализираме град всеки, чието ID номер е 2. Така че просто се актуализира град на втория ред където ние не трябва да се справят с необходимо общата въпрос. И изтриване е, както бихте очакваме, изтриете от таблица 1. И тогава ние имаме друга клауза WHERE. Така че можем да кажем, КЪДЕТО ID = 1. Изтриване на първия ред. И ИЗТРИЙ винаги ще изтрие един ред, или тя ще изтрие някои брой редове. Изтрий от масата, където родния = New York City ще изтрие всички в New York City. Това е, ако имаше внезапната трагична чума и просто исках да се премахне всеки от масата, които живял в един град че е бил ударен от чумата. Нека те почиват в мир. Това са четирите SQL команди че ще трябва да се използва. Ти дори не може да се наложи да ги използват всички. Но това са четиримата че CS50 ви очаква да се чувстват удобно с навлиза в както викторина 1 и също pset7 и pset8. Има само тази таблица отново. В този един, суперсила Рой има беше обновен до лазерни лъчи, които е пример не съм използвал. Аз не знам кой от тях Roy предпочита, но сила. Рой има суперсила на сила. Катрин не го направи днес. Това е жалко. Но тя има супер скорост. Добре, че беше PHP. Преди да говорим за MVC, прави Някой има ли въпроси за PHP? Сега SQL, PHP или ако изведнъж има излезе с един въпрос за PHP? Страхотен. Добре, ние сме всичко е готово след това. Така че говорим малко по- за модел вижте контролери, нека се върнем към някои от нещата в pset7. Така че какъв модел оглед контролер is-- аз не съм Ще запазите промените ми да се логнете защото аз напълно го заклал. Но в общи линии имаме две отделни неща се случват. Имаме публично директория, която съдържа код, който се случва да бъде изпълнено и уеб страниците, които ще бъдат посетени. И ние също имаме тази гледка директория. И видяна съдържа шаблони. Това е, което функцията render-- видяхме рендера функция в един куп от кода на PHP че CS50 вече е написана за вас, който взема в определени параметри. Какво прави този код е, че ще ходи в гледка, които са набори от харесват prewritten HTML код, и това е поставяне стойности в някои места. Това е начина, когато отидат в CS50 финансите, същото заглавието е на всяка страница. Същата футъра е на всяка страница. Това е така, защото начинът които оказват произведения е, че ще автоматично закърпи в тази глава и зрителя, които можете да намерите в изглед. Ние всъщност може да отиде в заглавието, и Виж, това е един HTML файл с главата. Тя има някои стилове. Не е нужно да погледнем в CSS за pset7, ако не искате да. Но можете да модифицирате ги, ако искате, да направи Вашата финансите изглежда малко по-различно. Тя има някои PHP в заглавната малко, за да видите ако има друго заглавие тя трябва да сложи в тази глава. Но само някои други скриптове, и връзки, и други неща. Head приключва, тялото започва и Опа, ние имаме това странно малко край битов. И има Разделения, точно като безформен вид елемент , който има представа за средата. И тогава, когато ние виждаме футър, имаме в края на Разделения. Ние имаме дъно, което е където текстът на долния е. Край на Разделения, край на тялото, в края на HTML. Така че това, което правят, е прави се направи е нещо от закърпване с глава, а различна PHP файл, който ще съдържа действителните неща вие ще видите, като маса на запасите си ако купувате или продажба на акции. И тогава тя ще добавим в долния им край. А гледката на модела Идеята е, че ние контролер Искам да се разделят, как нещата изглеждат от кода. Това е, което искаме да се разделят на интерфейса и гръб, когато интерфейса е неща, които потребителят вижда, на хубаво visuals-- HTML, CSS, такива неща, снимки и така нататък. И гръб е PHP. Това е код, който ти пиша. Това е мястото, където кодът, който е прави реални операции. Това е, когато сте добавяне фондова да си на маса, когато сте закупуване и продажби, това е обезопасен. И ние можем, като те видях, включително PHP директно в HTML. Така че това, което можехме да направим за тази задача е просто трябваше един HTML файл за всяка страница, като вход. И тогава на тази страница, точно имаше огромен блок от PHP код, включително всички от код, който тази страница конкретно ще трябва. И тогава бихме могли да имаме направил това за портфейла. Бихме могли да са направили всички купуването и продажба в рамките на отделните страници. Но тъй като ние сме прави отделно от където пишем гръб код, можем лесно промени начина, нещата изглеждат без променя всеки един файл. Ние правим неща, като просто добавете нова Div до дъното of-- Hello I модифициран футъра. Можете да просто правя подобни неща. Но също така, можете да промените цялата визуална оформлението без това да повлияе това, което е върви в гръб. И вие можете да промените целия гръб и все още трябва да изглежда точно като го е направил преди. Това Дали идеята за модел оглед контролер. И това всъщност е наложено парадигма в някои от езиците за програмиране може да искате да използвате за окончателните проекти. Ако го направите развитие IOS, те имат гледка, което е това, което виждате на iPhone, и След като бекенд като нещо отделно. Можете да си помисля малко. Има много неща, на изпълними файлове в компютърни науки, което е смешно, защото всичко е в двоичен. Не планирах това. Това беше игра на думи неволно. Да, игра на думи, която не е предназначена. Но подобно .h файлове и .c файлове, има много разделителна неща, които ние може да не се наложи. Така че ние можем просто да редактирате з файлове, или някой може просто да видите .h файл и да знаят точно функциите, които са в .c файл, без непременно да знае тяхното изпълнение. Тази идея за разделителни компоненти че зависят един от друг но може да подреди на достъп до всяка друга чрез различни канали, минаваща на променливите, просто включва изявления, неща ей така, на този принцип помага за създаване на приложения който може да бъде по-лесно редактирано от няколко души, може да бъде по-лесно да се промени или изменение на голям мащаб, и по-лесно се трасира в много отношения. Наистина бързо, имам няколко съвета за pset7, което аз ще направя на цял екран, така че не Просто погледнете в the-- върха върха Tippee. Там не са много полезни съвети. Но аз споменах PHP е трудно да се трасира. Двойни и тройни го проверите. Ако кодът не е просто показва на страницата, това вероятно е грешка PHP, съжалявам. Вие никога не трябва да разгледаме CSS, ако не искате да. Но след като сте готови, то може да бъде Малко нещо забавно приятно просто да отида в и се забъркваш с параметрите на CSS. CSS и HTML са пример за модел изглед стил контролер нещо прекалено, нали? Може да имате стил тагове вътрешността на HTML елементи. Но ако нещо ги аутсорсинг към CSS, те са по-лесно да редактирате, и да играе наоколо с, и да се забавляват с. Отнасяйте CS50 помощник функционира като черни кутии. Не е нужно да знаете точно това, което Render прави, но му се доверите винаги правя правото нещо, в зависимост от това, което го давате, неща като това. И аз бих препоръчал гледане на Давид репетиция, преминавайки през всички неща, а не само Todos, но наистина може да лекува тези като черни кутии. Не отивам в тях функции, които търсят бъгове. И приветствам връщането на нашия повелител Zamyla. Страхотен. Има ли някакви въпроси преди окончателните ние някак скача за деня? Am I все още живеят? Страхотен. Здравейте Излъчване на живо хората. Страхотен. Има ли вече въпроси? Не? И тогава мисля, че ние сме добре да тръгвам за днес. Аз ще си наоколо малко след това, ако хората са имали въпроси те се страхували да попитам на потока. А иначе, имате един добър ден.