>> R.J. Акино: Ајде да почнеме.
Значи ова е квиз 1.
Еве некои високо ниво информации.
На За страница за квизот е во овој URL-то, не CS50.net, иако тоа
сè уште ќе работи.
Тоа е CS50.harvard.edu/quizzes/2013/1.
Тоа е голема За страница, ти го кажувам каде и кога, имено следната среда
во еден куп на соби.
И од следната среда, јас значи два дена од сега.
Сите овие информации е таму.
Но, тоа е кумулативен.
>> Па сè, од првата половина на година е потенцијално на квизот,
затоа што навистина не може да го направи напредни работи во C без доколку условите и
за јамки и слично.
Но ќе има акцент на материјалот опфатен од Квиз 0,
почнувајќи со structs и датотеката I / O. Тоа е типично повеќе
предизвик од Квиз 0.
Просечна оценка е обично пониски.
Учат напорно.
>> Додека учите, бидете сигурни да го користите CS50/discuss да ја објавите вашата прашања
и прочитајте прашања на други луѓе.
Па ако не се имате било какви прашања, се најавите и да прочитате
прашања на вашите пријатели.
Тие се веројатно добри прашања.
И да ги преземат пракса тестови.
Ние сме биле даваат тестови за седум или осум години.
Сите тие се онлајн.
Иднината прашања се слични на старите прашања.
Тоа е како ние ги прават.
>> Квиз уште не постои.
Никој од нас не го видел.
Но, тоа ќе изгледа претходната квизови.
За овој преглед сесија, ова не е исцрпна листа на теми.
Вие не може само да присуствуваат на ова, а потоа да биде совршено подготвен за квизот.
Во спротивно, тоа не би било дека многу од квизот.
И ова е, исто така, не мора да значи сè што треба да знаете за какви било
дадена тема.
Тоа е со цел да можете да се изложуваат на нештата сме покриени, ве потсетам што ние
покриени, како и начинот на која ние ја покриваше.
Но ќе мора да оди подалеку и подлабоко кога ќе учат да провериш
дека знаете сè за било која дадена тема и дека сте пополнети
сите агли, кои беа опфатени во предавање.
>> Квиз белешки ти кажам да одат во писарот белешки, часовник предавање видео клипови.
Тоа е добар начин да бидете сигурни дека сте опфатени сите ваши бази.
Така да започнете, кога сум направил овие слајдови, јас се обидував да се стави каде што го најдов
информации.
Значи за датотеката I / O, на пример, недела 7, Понеделник предавање, и испратени
Дел 6 и проблем Постави сите имаат информации за датотеката I / O. Јас го направив
ова за секоја тема.
Па оние наслов слајдови може бидат корисни за вас.
>> Значи тука имаме датотеката I / O. Се сеќавам, во Проблемот Намести 5, ние се користат fopen, запишам,
запишување, fread и fseek.
Ја обнови 30ish JPEG слики и ја менува големината и збркана со
bitmaps, треба да биде прилично запознаен со овие функции
и како тие работат.
Ако не сте запознаени, дефинитивно ги разгледаме.
И бидете сигурни дека ќе се разбере она различни аргументи се,
кога тие се користат.
>> Но заедничка датотека поврзани со грешки може да биде побарано за тоа -
Па, ако сте заборавиле да проверите дали fopen всушност работел пред да одите во
менувате датотека.
Тоа би можело да биде лошо.
Ако сте заборавиле да запишам датотеката дека сте fopened, тоа е слично
меморија излегуваат во јавноста.
Тоа е прилично лошо.
И заборавање да се провери ако сте до крајот на датотеката пред да
почнам да пишувам на него.
>> Значи, ако ви кажам, еј, јас сум на на крајот на датотеката.
Дај ми уште 5 бајти.
Па, тоа е веројатно нема да работат надвор од начинот на кој се очекува.
Тоа е навистина за датотеката I / O, бидејќи ние го сторивме тоа голем дел од неа
со проблемот во собата.
Значи, ако сфати што се случува во проблем Постави 5, се сеќаваш на bitmats
и JPEG слики, тогаш сте веројатно сите во собата за датотеката I / O. Ако тоа е малку
нејасни, дефинитивно видиш дека проблем во собата и поврзани материјал.
>> Structs беа тема кои беа на линија помеѓу Квиз 0 и Квиз 1.
Не сосема направи намалување за Квиз 0.
Па тие дефинитивно ќе биде на Квиз 1, недела 7, понеделник.
Што е struct?
Еве ние се покаже на struct.
Тоа е како нов тип.
Тоа е како сад за повеќе полиња.
>> Во овој случај, ние сме прогласи struct студент кој има две полиња -
низа, дека ние сме повикувајќи име и на int, дека ние сме повикувајќи возраст.
Па кога ќе помине околу студенти или јас менувате студенти, јас ќе бидам во можност да
пристап до нивното име и возраст.
Ајде да погледнеме во некои код за тоа.
Овде можеме да видиме дека сум прогласена за студент на, исто како и
Изјавувам секоја променлива -
int x, int y, и така натаму.
>> Тука е студент на.
Тој започнува со ништо во неговиот полиња.
Па ајде да ги постави.
Ја поставите полиња на struct со точка.
Па јас сум рече дека овде s.name = RJ.
И s.age = 21.
Можете исто така да се ажурира полиња на ист начин дека ќе се ажурира
вредноста на променлива.
Па сакам да го сменам името од RJ со нема периоди да R.J. напишани на
правилен начин.
Тоа ќе биде s.name = RJ, исто како што се вели оригинално.
А потоа можете да им пристапите.
>> Па ние сме ги поставиле.
Ние ги нема.
Исто така можете да им пристапите во истиот начин.
Па еве, јас сум печатење R.J. Е 21 години.
И јас сум пристапуваат тие вредности со s.name и s.age.
Значи тоа е пристапот structs со точка нотација.
Да, прашање?
>> Публика: Дали постои причина за претходниот слајд дека не сте се стави
студент на врвот линија, како typedef struct студент, а потоа
студент на крајот?
>> R.J. Акино: Значи, прашањето е, на овој слајд, ние обично се гледа
typedef struct јазол, а потоа полиња на struct и
тогаш зборот јазол.
И како дојде тука не реков, typedef struct студент, а потоа
полиња на struct, а потоа студент?
Причината е во тоа што јас не треба да се пристап до неа внатрешноста на struct.
Па тоа е во ред да го оставиме без име.
Јас само може да го оставиме тоа како анонимен struct.
>> Причината поради која го го направи тоа за поврзани листи и работи е затоа што во тебе треба
да повикување на struct јазли ѕвезда.
Па на struct мора да има име, па можете да имате пристап до него подоцна.
Тоа е мал детал.
Но обично ќе видите typedef struct тркалезните загради, ако не треба
името и typedef struct некои име проследено со големи загради ако сакате
треба името.
Па тоа е добро прашање.
>> И на таа точка, тежнееме да ги менувате structs и помине околу structs од
референца, а не од вредност.
Па ние само ќе помине околу покажувачи на structs наместо поминува низ
structs себе.
Па ти си многу често ќе биде користење, во овој случај, студентот * или
struct јазол * или јазол *, наместо надвор студенти или јазли.
Па еве, јас сум рече, во ред, променлива кон меморија се случува да биде на адресата на е.
Тоа се случува да биде на покажувачот на студентот R.J.
>> Па ние може да се добие на овие полиња исто како што ние се ништо.
Прво, проект повикување на покажувачот да се добие на struct.
Тоа е * кон меморија, а потоа точка, а потоа возраст.
Така да пристапите на поле, и јас сум ажурирани сега до 22, бидејќи, да
да речеме, тоа беше мојот роденден.
Има кратенка синтакса користење на стрелките тука.
Па кон меморија стрелките возраст е само исто како * ptr.age.
Сега, тоа е нешто што треба да запаметат и се сеќавам.
>> Го користат многу во pset6, на правопис pset.
Но, ова е, всушност, она што се случува на под хауба.
Тоа е dereferencing покажувачот а потоа пристап до неа.
Прашање?
>> ПУБЛИКАТА: [нечујни].
>> R.J. Акино: Значи зошто сме користење совети како structs, наместо на
structs себе?
Причината би било ако сте поминува на struct до некоја функција, веројатно
сакаат да го поминат околу само 4 или така бајти кои претставуваат покажувач, како
за разлика од потенцијално 30 или 40 бајти кои се на struct.
Така поминува нешто на функција е полесно кога нешто
е помала во кратки.
Прашање?
>> Публика: Може да се споменат овој на почетокот, но постојат
други слајдови врз [нечујни]?
>> R.J. Акино: Овие слајдови ќе биде после прегледот седница.
Ние ќе ги објавите на веб-сајтот.
Па преместување и се движат на малку побрзо, ние ќе зборуваме за податоци
структури.
Постојат многу.
Ние опфатени еден куп од нив.
Тука е она што треба да се разбере за податочна структура.
>> Вие навистина треба да се разбере на високо ниво што секоја структура е.
Можете ли да објасните на англиски јазик за да ги пријател кој не е донесена CS50 како
ние сме организирање нашите податоци и зошто ние би се користи нешто на овој начин?
Тоа е нешто што.
Нешто две, се разбере на имплементација.
Па да се разбере како да ги користат овие нешта во В И ние ќе се случува во текот на овој.
>> А потоа нешто три ќе бидат знае работи пати и на ограничувањата на
различни структури што го користите.
Па да се разбере зошто би користеле хеш табелата наместо низа.
Се разбере колку брзо, во просек, пристапуваат хаш табелата е.
Се разбере она што операции се брзо на поврзана листа, но бавно на низи и
обратно.
Па да се разбере тоа, ќе треба да се разбере Биг-О нотација само да знаете
Како да се зборува за овие видови на нештата.
И ние ќе зборуваме за тоа.
>> Значи прво нешто, поврзани листи.
Тука е на високо ниво слика на поврзаните листа.
Ние ја прикажете во класата.
Ние обично имаат 10 луѓе стои на сцената.
Но ние имаме серија на јазли, каде што секоја јазол има некои вредност и покажувач
на своите следната вредност.
Па да се добие од еден јазол кон следниот, ќе речеме, дај ми следниот јазол.
Имате тој јазол.
Дај ми го следниот јазол.
Имате тој јазол.
Дај ми го следниот јазол и така натаму додека нема јазол лево.
>> Па продолжи да зборува за тоа на високо ниво.
Тоа е многу лесно да вметнете работи во поврзана листа.
Ако не се грижат за редот, можете само да го испуштите
правото на почетокот.
Тоа е постојана време.
Но тоа е тешко да се најде вредноста.
Ако се обидуваш да прашам, е седум во мојата листа?
Мора да се оди преку секој вредност.
Дали е ова седум?
Одново и одново.
И тоа е О (n).
Па кога ќе студираат за квизот, споредете го ова со низи.
>> Е тоа во ред?
Светлата отиде темни.
OK.
Кога е поврзана листа подобро?
Кога е низа подобро?
Па ајде да погледнеме некои код.
Тука е потенцијален јазол.
Тоа е struct.
Што има int n, кои ќе биде нашата вредност.
И има struct јазол * Напред, кои е нашата покажувач кон следниот јазол.
Па еве, можеме да видиме дека ние се случи да се стави int во нашата јазол.
Но, ако ова беа поврзани листа на знак Ѕвездите или поврзано листа на плови, ние
целосно да го направите тоа премногу.
>> Се сеќавам во pset6, веројатно имаше поврзана листа на знак ѕвезди или само
статички знак низи.
Да ги погледнеме тука, на операција.
Затоа сакаме да вметнете нова n во нашиот поврзана листа.
Ние почнете да излегува со глава покажувач, кој е покажувач на овој јазол кој има
вредноста на n и следната на показател дека поени за да овој јазол е вредноста на
n и следната од нула, бидејќи тоа е последната јазол.
Па во интерес на времето, јас ќе стави сите на кодот на екранот.
И ние ќе одиме низ него неколку линии во исто време.
>> Па овде е кодот.
Се надевам дека тоа е читлива.
Првото нешто што го правиме е ние Примерок нов јазол.
Па тоа го прави покажувач кон нов јазол дека сосема не се ништо во собата
во него уште.
Ние се провери да бидете сигурни дека новиот јазол не е нула.
Инаку, ние треба да се откажат.
Па го провериле тоа, ние сега Нагодете вредности во јазол.
Па ние се стави на нови n во нашиот n област.
И ние во собата за следната покажувачот да се укаже на оригиналниот главата, така што можеме да
сега се вметнува оваа јазол во нашата листа.
>> Конечно, имаме глобалната точка глава за нашите нови јазол, така што ако ние требаше да
со почеток во главата, ние ќе бидеме во овој нови првиот јазол наместо
стариот прв јазол.
И кога оваа функција излегува, на променлива нов јазол повеќе не постои,
поради тоа што беше локално до функција.
Значи ова е држава на светот.
Нашата глобална главата укажува на нашите нови прв јазол, што укажува на нашите
оригиналниот првиот јазол, кои точки на јазол после тоа.
>> Тоа беше вметнување.
Се надевам дека е релативно лесно да се следат.
Кога се двоумите, нацрта слика.
Па сметам дека зборува за поврзани листи и да гледа во
код е многу не корисен.
Додека гледа во сликата на поврзани листа ми дозволува да мислам, ох, толку
Имам овој јазол тука.
Но, ако јас се ажурира дека покажувач, тој завршува исклучени.
И на Си ја заборавив каде јазол оди.
И кодот излегува.
И имаш повеќе јазли кои се исклучени.
А вие не заврши со листата што го сакате.
>> Значи, ако се подготви на слика и направете го тоа чекор по чекор, се надевам, ќе видите
правилен ред на нештата во однос на ажурирање на совети како да бидете сигурни дека
дека листата доаѓа заедно.
Внеси е релативно јасна.
А покомплициран еден ќе биде вметнување во сортирани листа.
А покомплициран функција е избришете и да се најде, па гледајќи низ листата да
види дали нешто не е таму.
Можеби сте го направи тоа во pset6 кога ќе влезе во вашиот хеш табелата и што рече ти,
добро, е зборот јаболко во мојот поврзана листа?
>> Па можеби веќе имаат направено ова.
Но дефинитивно, се освежи вашата меморија и обидете се да reimplement најдете и
reimplement избришете за поврзана листа.
Забавно страна на белешка, има, исто така, двојно-поврзани листи, каде што треба
совети кои упатуваат и напред и назад, така што ќе може да оди на
следниот јазол и на претходниот јазол.
И имаше прашање за минатата година квиз од тој вид, да разговараат
за двојно поврзани листи.
>> Сега, тоа е структура која сте релативно запознаени со тоа, бидејќи повеќето
од вас веројатно ги користат на pset6.
Тука е оној кој е малку помалку познати.
Како од страна на белешка, јас мислам дека Квиз 1 е првенствено потешко отколку Квиз 0, бидејќи
работи што правиш, ти не сте го направиле толку многу.
Да се ​​стави дека на друг начин, за Квиз 0, сте напишале многу В И ние
те праша за В
>> За Квиз 1, ние ќе ве прашам за PHP и го вклучите Javascript-, кои ќе
не се напишани како многу.
Ние ќе ве замолам за C-кодот, кој вие не го имаат напишано како дел од,
оваа напредна C нешта.
Па дефинитивно, се практикуваат работи кои зборуваше за во предавањето што ќе
не мора да направи на проблемот во собата.
>> Зборувајќи за кои, да не имаат напишано магацинот на проблем во собата.
Но, тоа беше во предавање.
Тука е на високо ниво слика Купишта дека ќе покажеме секоја година.
Тоа е магацинот на коцки во на Mather мензата.
На високо ниво, Купишта се последна во, прв надвор податочна структура.
Тоа значи дека си оди да се стави работите во -
1, 3, 7, 12, 14, негативни 0.
Една работа не можев да се рече - негативни 3, 0.
Ќе се стави сите овие работи внатре
А последната ќе се стави во е првиот оној кој се случува да излезе.
>> Па имате два операции -
им помогнам и поп.
Сите пуштање во кои јас бев покажувајќи како ова се притисок.
А потоа кога ќе стигнат во зграби нешто или да стигне на врвот да го зграби
нешто, тоа е поп.
Па ние ќе да се спроведе Купишта.
И ние ги покажа во предавање користење на низи.
Но можете да ги направите користење на поврзани листи.
Комплет е концептуално податоци структура, не како
спроведување специфични еден.
>> Така што тоа ќе изгледа?
Тоа ќе изгледа нешто како ова.
Ќе треба на големината на цел број.
И ќе имаат низа на вредности кои ние сме повикувајќи пепелниците, затоа што тоа е
она што на сликата е за нас - int коцки -
а потоа некои максималниот капацитет.
Па што ќе им помогнам изгледа?
Па, ако имаме магацинот s, а потоа да се поттикнат нешто врз, ние ќе ја добие
големината на s.
И дека ќе биде следната отворена самото место на нашата низа.
Значи, ако имаме три нешта во нашиот оџакот, тогаш пепелниците 3 ќе биде следната
отворен место, бидејќи 0, 1, и 2 се веќе пополнети.
>> Значи ќе стави вредност во s.trays [s.size], третото место.
А потоа ние прираст s.size да се каже, еј, ние имавме три работи пред тоа.
Сега, имаме четири.
Значи следниот пат кога ќе се притисне, ќе бидете случува да се стави нешто во 4.
Или следниот пат кога ќе поп, си оди да се погледне на 3 наместо 4 или whatever.
А потоа ние ќе се вратат точно да се да речеме, еј, ние успеавме.
Ова работел.
Како правило на палецот, ако функција која е би требало да се вратат точно или
лажни секогаш се враќа точно, можеби имаат направено нешто погрешно.
Така го прави ова дело?
>> Па, таа работи парична казна за 1, и 2 и 3, и 4, и пет.
Но, да речеме јас стигнам до мојата капацитет.
Јас тогаш сте работи во проблем, бидејќи ако големината е иста како и капацитетот, јас сум
сега се обидуваат да се стави нешто во низа каде што јас немам простор.
Значи кратко проверете, за да го надминете овој.
Ако s.size == капацитет, враќање false.
Инаку, одат и да го направи она што ние го сторивме.
Па што друго би можеле да бараме за за Купишта?
Што друго треба да учат?
Што друго треба да се практикуваат?
>> Па, спроведување поп.
Ние веќе го сторија притисок.
Јас ќе го поправам тоа.
А имплементација не-низа, каде што користите поврзана листа, можеби.
А имплементација не Инт.
Ние го сторивме ints тука.
Но, тоа би можело да се плови.
Можев да бидам жици.
Тоа би можело да се знак ѕвезди.
Погледне во минатото квизови за видови на прашања ние сме праша за Купишта.
>> Јас ќе кажам дека сме опфатени Купишта околу исто како што ние си ги опфатени во
изминатите години.
Па квиз прашања треба биде добар показател.
Се движат напред, дури и побрзо, редици.
Тие се како Купишта.
Но тие се на прво место во, прв надвор.
Ако сте британски, зборот на дното веројатно направи многу смисла за вас.
Инаку, можеби ќе треба слушнал за тоа како линија.
Тие работат како линијата во продавница на Apple.
Првиот човек да се појавиш на 03:00 наутро е првиот
лице да купат неговиот iPad.
>> Значи имаме две операции -
Стави во ред и dequeue.
Стави во ред става некој во линија.
Dequeue повлекува првиот лице надвор од линија.
Повторно, може да се имплементираат со низа.
Значи она што е на struct ние покажа во лекција?
Тоа беше оваа.
Повторно, броеви.
Повторно, големината и оваа нова работа пред себе.
Зошто постои нешто што се нарекува пред?
Тоа е индексот на следната елемент за dequeue.
Тоа е само внатрешно следење на првиот човек да се појавиш, така што можеме
да го повлече кога треба да се.
>> Дефинитивно се погледне на материјалите и обидете да се спроведе Стави во ред и dequeue
кога ќе студираат за квизот.
Важни нешта да се размислува за.
Завиткување околу ако предната плус големина завршува поголем од капацитетот.
Повторно, ако вашата структура е полна, ви се случува да имаат проблем.
Хеш табели што сте виделе досега.
Повеќето од вас веројатно спроведува овие на pset6.
Тоа е структура која има за цел О (1) постојана време вметнување и O (1)
постојана време збор.
>> Во CS50, воведовме ова како низа на поврзани листи.
Клучна компонента на хеш табелата е хеш функција.
Па таа го претвора вашиот влез, да речеме, речникот збор, во голем број,
кој ќе биде нашиот индекс.
И ние ќе ја користат таа индекс во нашите низа.
Па тука е една симпатична малку сликата од study.50.net.
Ние фрли сите зборови во нашите хеш функција.
И хаш функција ни кажува каде да се стават овие зборови.
>> Ова е сите големи во земјата каде што има само еден збор за секој слот.
Но, како што се сеќавам од pset6, има се повеќе зборови отколку слотови.
Значи она што се случува кога ќе добие судир?
Наместо за чување на една вредност во, да речеме, хеш табелата 3, можете
складира поврзана листа.
И така наместо диња тука, ќе има поврзана листа,
каде што првиот јазол е диња.
И следниот јазол е мачка.
И третиот јазол е судир, ајде да каже, затоа што сите овие зборови на проектот
со C.
>> Па повеќето од вас го направи ова за pset6.
Ако не се направи хаш табелата на pset6 и сте се обиделе нешто како
на TRIE, дефинитивно се видат хеш табели.
Ако го направи тоа на pset6, дефинитивно видат хеш табели.
И ако тоа го правеше на pset6 и тоа не работат надвор сосема во право и ти
имаше многу проблеми со него, дефинитивно видат хеш табели.
Па лекција навистина е дефинитивно видат хеш табели.
>> Огромното малцинство сте се обиделе надвор се обидува на pset6.
Високо ниво на сликата.
Тоа е нешто како ова, каде што секој јазол има множество на деца, каде што секој
дете одговара на писмото.
И секој јазол, исто така вели: еј, јас сум еден збор.
Така што во овој пример, зборот Максвел, ако ги следат М за А на
X-W-E-L-L, а потоа следат една повеќе.
И ќе го добиете овој симбол, делта, која ние значи да значи ова е зборот.
Па Максвел е зборот.
Овие делти се во текот означување кои работи се зборови, а кои
работите не се.
>> Па во pset6, податоците ние се чуваат заедно со било кој од нашите јазли беше "Јас сум
збор. "И кул работа во врска со обиди е тие демонстрираат вметнување и
Пребарување во О (должина на зборот).
Па само да се добие преку Максвел, тоа е M-A-X-W-E-L-L. Значи седум или осум -
Јас не може да смета -
чекори за да се стигне до крајот и проверете работи надвор.
Толку брзо имплементација тука.
Роб помина низ поврзани листата во неговата посмртна.
Па провери тоа.
Жал.
Помина низ TRIE во неговата посмртна.
Па провери тоа.
>> Но вие во основа имаат секој јазол има 27 покажувачи на следниот јазли и еден
Boolean за сум јас збор.
Проверете посмртна на Rob за тоа како Ова всушност е имплементирано.
Нашата конечна структура, нашите дрвја и бинарни пребарување дрвја.
Па гледајќи овие, овие беа опфатени неодамна Недела 8, понеделник.
Дрвото е сличен на TRIE, освен што не мора да имаат 27 јазли на
секоја точка.
А вие не ја имаат оваа податоци во секоја чекор што го означува дали -
патот не е важно.
Со оглед на тоа TRIE, на патот од врвот до дното, Максвел, е важно за нас.
>> Но секој јазол има повеќе деца, можеби.
Имаме некои повеќе речник.
Коренот на дрвото е на самиот врв.
И велиме дека многу bottommost јазли кои немаат
децата се лисја.
Па како TRIE, дрво е структура на јазли.
А заеднички тип на дрво дека ние ќе да се зборува за е бинарно дрво, каде што
секој јазол нема деца или едно дете или две деца.
Значи оваа слика тука не е бинарни дрва, бидејќи
јазол 3 има три деца.
>> Но, ако бевме да ги игнорира овие, остатокот тоа е бинарно дрво поради тоа што
покажува на имотот што секој јазол има нула, еден или две деца.
Па, како би можеле да го изразат ова во кодот?
Ние би можеле да имаат еден јазол каде секој јазол има цел број во него, како и
како покажувач до дрвото на левата и покажувач кон дрвото на
право, па двете деца.
Како е ова корисно?
Па, ако се направи правила за тоа каде ние стави јазли, може да се направи за пребарување побрзо.
>> Па постои концептот на бинарни пребарување дрво, каде што сите јазли на
лево поддрво имаат помала вредност од јазол ние барате.
И сите јазли на десната поддрво имаат поголема вредност
од коренот јазол.
Сега, тоа изгледа како многу зборови.
Одам да го стави во внатрешноста на двојно цитати и ќе покаже слика.
Значи тука е пример за бинарен пребарување дрво.
Видите дека ние започнуваме со 10.
Сè што од лево на 10 е помал од тоа.
И сè до правото е поголем од него.
>> Но уште повеќе од тоа, секој јазол во дрвото изразува овој имот.
Па јазол 7 има 3 до лево и 9 десно.
Така што сите од нив се помали од 10.
Но гледање на само оние, на 7 има 3 до левата и од 9 до неговото право.
И слично, на десната страна, 15 има 14 неговата лева и 50 до неговото право.
Па три јазли таму, 15, 14, и 50, се исто така валидни бинарно дрво
или регуларна програма пребарување дрво.
И сите тие се поголеми од 10.
Па им е дозволено да бидат на десната таму.
Дали постои прашање?
>> Публика: Како да се справи кога имате два седум?
>> R.J. Акино: Да.
Како да се справи со двете вредности кои се исти?
Некои бинарни пребарување дрвја се каже дека игнорираат дупликати, бидејќи целта е
само да се каже, сум го видел овие работи досега.
Некои бинарни пребарување дрвја може да се каже имаат брои внатрешноста на јазол.
Други може да се каже дека сè до лево е помалку од или еднаков на.
И сè до правото е поголема од.
>> Тоа само зависи од тоа што Проблемот е што си решавање.
Па во речник, на пример, може не би се грижеле за дупликати.
Ќе ги фрли.
Но некој друг проблем што може да се грижи.
>> Публика: Дали е можно да имаат 1 до левата од 15, кои
е помала од 10?
>> R.J. Акино: Не
Ако 14 тука беа 1, тоа би не биде валидна бинарни пребарување дрво,
бидејќи сè на правото на 10 мора да биде поголема од него.
И ние ќе се види зошто.
Ако во земјата на пребарување мојата цел е да се најде 14, почнувам во коренот.
Па гледам.
OK.
Ние ќе започне во коренот.
Погледне во 10.
>> Добро, 14, нашата цел, е поголем од 10.
Па тоа мора да биде на десно.
Ова е многу слична на целиот телефон книга работа која ја направивме, бинарната
пребарување таму.
Но, наместо на бинарни пребарување во низа, ние сме бинарни
бараат во ова дрво.
Па ние сме сè уште ги барам за 14.
И 14 е помал од 15.
Значи, ако тоа е во нашата дрво, тој мора да биде во оваа област тука.
Тоа мора да биде на правото на 10 и од лево на 15.
>> И така ние се провери овој јазол.
И Yay, ние Наидовме 14.
Јас не одам да се оди преку неа.
Но, тука е код.
Тоа е всушност релативно јасна,
бидејќи ова е рекурзивен.
Што би можело да бараме од вас да се направи на квизот?
Ние може да ви побара да ја напишам оваа код.
Ние може да ви побара да се погледне на овој код и да ја менувате овој код и објасни она што
таа го прави.
Да.
Прашање?
>> Публика: Дали овие слајдови ќе биде ставени на располагање како што беа минатиот пат?
>> R.J. Акино: Да.
Па овие слајдови дефинитивно ќе да бидат објавени.
>> ПУБЛИКАТА: Тие се всушност испратени токму сега на веб-сајтот.
Дејвид го направија тоа.
>> R.J. Акино: Слајдовите се токму сега на веб-сајтот.
Јас веројатно ќе се закрпи до неколку на грешки што истакна и да ја поправите нив.
Но, има струја верзија на страницата.
Други работи што може да побара да се направи -
пишува внесување.
Напиши итеративен верзија на рекурзивен функција ние само ви покажа
или се зборува за овие работи, како и во ставови, во зборови, во реченици.
Споредба на бегство пати и објаснувајќи она што вие би сакале да се користи бинарен
Барај дрво за наместо хаш табелата, на пример.
>> Значи се разбере овие структури на прилично длабоко ниво.
Се разбере како да ги пишувам, како да ги користат, како да се зборува за нив.
А вие сите ќе бидат поставени.
Прашање?
>> Публика: Кога сте пишување на бинарни пребарување дрво, како да
утврди она што вредност да го прават тоа како корен?
>> R.J. Акино: Значи, прашањето е, она што вредност правиш како root?
Во зависност од вашиот код, можете може да има глобални корен.
Па можеби ќе треба, најверојатно, имале во pset6 глобален хаш табелата.
Или можеби помине коренот во како аргумент.
Значи ова пребарување функција тука зема аргумент јазол *.
И така што јазол ви се случи да биде гледа во е само на една сте лекување
како вашиот корен кога ќе го помине внатре
И јас сум сите во собата.
Тоа се моите слајдови.
На следната лице може да дојде трампа во лаптоп и микрофон.
>> Роб BOWDEN: Мислам дека би можеле да имаат толкува тоа прашање поинаку.
Но јас го толкува како, ако имате броевите 1, 2 и 3, како ние
знае да се направи 2 коренот што е спротивно на 1 или 3?
Ако се направи 2 коренот, тогаш тоа е убаво 1 и 3 на лево и десно.
Но, ако 1 е коренот, тогаш тоа е 1 на врвот, 2 десно, 3 на десно.
Па по дифолт, не знаеш што да прават коренот.
И за било алгоритам Ние очекуваме да ви даде, само првото нешто што
вметнете ќе биде коренот.
Или ние би ви даде бинарни дрво кое веќе постои, кој има корен.
Но други алгоритми постои таков што коренот ќе се ажурира, така што ако
завршат во ситуација каде што тоа е 1, 2, 3, тој автоматски ќе ги ажурира за да
направи 2 новата корен, така што тоа е уште убаво избалансиран.
>> ANGELA ЛИ: Кул.
Еј, момци.
Јас сум Ангела.
И јас одам да се доврши нашиот C и потоа оди во некои од нашите веб
технологии -
HTTP, HTML, и CSS.
Па првото нешто е тампон претекување напади.
Па ајде да ги разгледаме во овој код.
Тоа е прилично едноставна.
Има функција foo.
И тоа не врати ништо.
Но, потребно е во покажувач на низа наречен бар.
>> И тоа се случува да пријават тоа амортизер кој е лик
низа која има 12 слотови.
И тоа го користи memcpy, која е само функција која копии од една адреса
во друг.
Значи ова е се обидувам да го копирате во нашите тампон од она што
бар е да се покажува.
Па секоја идеја што е проблемот со овој код?
>> Публика: Ако бар е подолг од Ц, тие ќе ги избрише.
>> ANGELA ЛИ: Да, точно.
Ние немаме гаранција дека бар ќе биде помалку од 12.
Ние само направи некои произволни број 12.
И бевме како, да се надеваме дека нашите корисник влез е помалку од
12 карактери.
Па во еден идеален свет, ако нашите влез е секогаш како што се очекуваше, тогаш ние ќе дојдеме
нешто како, здраво.
Тоа е помалку од 12 карактери.
Станува прочитате во знак в.
А потоа ние се направи нешто со неа.
Тоа навистина не е важно.
>> Но малициозен лице може да се направи нешто повеќе како оваа, каде што
ни даде она што бар е да се покажува, тоа се случува да се укаже на оваа огромна низа
само А.
И ова е начинот на кој повеќе од 12 години.
Па затоа се случува да одат по целиот пат овде до каде враќање
адреса се користи да биде.
Па да речеме оваа функција се нарекува foo.
Можеби foo беше наречен од страна на некои други функција, која бил повикан од главните.
Па кога foo е вклучен, треба да знаат каде да се вратат на.
>> Ако foo беше наречен од страна на некои функција наречена baz, треба да знаете дека тоа е
мора да се вратиме на baz.
И тоа е она што ова враќање адреса овде ни кажува.
Но, ако ние ја пребришете со некои други адреса, во овој случај, тоа е
застапеност на адреса на самиот почеток на оваа тампон, а потоа
она што всушност ќе се случи е дека наместо да се врати назад кон baz,
кој се повикува нашата функција, тоа е само ќе одат на фронтот на овој код.
>> И ако тоа беше таму, бидејќи малициозен хакер пријателе дојде и
инјектира ова, тогаш можеби оваа сума на А всушност и не е А.
А тоа е всушност само законик, што паузи вашиот компјутер или нешто слично.
Така да биде дефанзивна за овој вид на работа, треба никогаш да се претпостави дека
корисникот влез е одреден износот на карактери.
На пример, кога ќе се прави правопис, ти беше кажано дека зборовите се
само ќе биде 40 карактери долго максимум.
И тоа беше добро.
>> Но ако не, тогаш ќе треба да се осигурајте се да прочитате само во 45
карактери во исто време.
Инаку, можеби ќе ги пребрише вашата тампон.
Било какви прашања за тоа.
Да.
>> Публика: Може ли само да се зборува малку повеќе за овие?
>> ANGELA ЛИ: Извини.
Да.
>> Публика: микрофон е само за видео.
Јас ќе се обидам и проект.
Здраво, момци.
Поддршка?
Па ајде да одиме во текот на неколку работи во CS50 библиотека, која сте биле со
сите семестар, главно да се добие корисник влез.
Како што знаете, сте запишале CS50 библиотека од само прави CS50.h, која
ги содржи сите прототипи на функции кои можете да го користите, како
GetString и GetInt, и GetFloat, итн.
И таму е ова една линија во CS50 библиотека со кој се дефинира низа, која
вие момци сите знаеме до сега е само знак *.
>> Но ајде да ги погледнеме како GetString работи.
Ова е многу скратена верзија.
Можете да се повлечат до CS50 библиотеката датотеки од, мислам, manuals.CS50.net.
И можете да ја прочитате преку вистинската функција.
Но ова ги опфаќа некои од важни делови.
Па ние направивме некои тампон со некои капацитет.
И она што го правиме е да добиеме еден карактер во време од стандарден n.
Тоа е каде што корисникот влезови текст во конзола.
>> И така ние ќе се читаат во карактер толку долго како што не е нова
линија и тоа не е крајот на датотеката, која е крај на стандарден влез.
И за секој лик што го читаме во, ако тој лик завршува додавање
на бројот на карактери ние Прочитав и тоа е повеќе од нашата способност,
тогаш што правиме е ние едноставно менување на големината на нашата тампон, така што тоа е двојно повеќе.
Па уште еднаш, ова се заштити од тампон overflow напади, бидејќи ќе прочитате во
карактер во исто време.
И ако во било која точка ќе прочитате во премногу многу, само да ги прошират своите тампон.
Го мултиплицираат од страна на две.
И тогаш ќе имаме повеќе простор.
>> Инаку, вие само додадете лик на тампон.
И откако ќе ги прочитате во сите карактери, ќе се намали на тампон
назад до нормална големина, да додадете нула терминатор, а потоа се врати.
Сега, ајде да погледнеме на GetInt.
Може да ви момци прочита ова?
Можам да зумирате малку.
Не знам како компјутерите работат.
Никогаш умот.
Не можам да зумирате правилно.
>> Ова е навистина тешко.
Жал ми е.
Ајде да се погледне на овој.
Па што GetInt не е тоа прва го чита во низа од GetString, која
ние сме спроведува пред.
И важен дел да се напомене тука е ако ова споделување дека тоа завршува
читање е како да не, всушност, стринг, тогаш ние само се вратат INT_MAX да
претставуваат неуспех.
Зошто ни се врати INT_MAX наместо негативни 1 или 1?
Сите идеи?
>> ПУБЛИКАТА: [нечујни] негативни 1 на еден.
>> ANGELA ЛИ: Да, точно.
Па ти си патот почесто само сакате за да го внесете 1 или негативни 1 кога ќе бидете известени
за енти и што енти maxes.
Тоа е огромна.
Ти си веројатно нема да го користам.
Значи ова е како дизајн одлука да бидете сигурни дека ќе не случајно
се врати грешка или не се вратат 1, што може да се парсира
како точен одговор.
Па ако некој линија не постои, ние се врати ИНТ-MAX.
Инаку, ние ги користиме sscanf, кој е како scanf.
Но тоа чита од серијата.
>> И ние имаме овој форматирана низа, што е% i% c.
И ние се обидуваме и натпревар тоа со без оглед на корисникот ни даде.
Ние сакаме бројот на исти работи да биде 1, што значи дека ние само
навистина сакате да се совпаѓаат цел број опкружен со можеби бели
простор, можеби не.
Во овој случај, ако се стави во нешто како бар, бар не се совпаѓаат на сите,
бидејќи таму треба да биде цел број на почетокот.
Па никогаш не sscan претвори 0.
Значи, вие не се врати тоа.
>> Алтернативно, ако се стави во нешто како 1, 2, 3, A, B, C, која одговара на
и цел број, но, исто така, ликот по него.
Па sscanf ќе се врати 2, кој исто така не е идеален.
Вие не сакате 1, 2, 3, А, Б, Ц да биде валидна Инт.
Така што, исто така, не функционира.
Но велат дека ќе се стави во нешто како 50.
Кои ќе одговараат на% i, што значи тоа ќе се прочита во Н.
И сега, n ќе содржат бројот 50.
А потоа можете да го вратат.
>> Инаку, ќе го погоди Обидете се повторно.
А потоа тоа само оди одново, додека ќе добие соодветниот влезен сигнал од корисникот.
Било какви прашања за тоа?
>> Публика: Значи, ако сте во ситуација да испечатите вредноста на GetInt на [нечујни]
тоа ќе биде само цел број и макс?
>> ANGELA ЛИ: Да.
Значи, ако користите GetInt, треба да се претпостави дека вие не сакате енти максимум за
да биде валидна влез, бидејќи си оди да се претпостави дека тоа беше лошо.
>> Публика: Ако немавме знак C и некој стави во 1, 2, 3, Сем, би го
уште работат за 1, 2, 3?
>> ANGELA Ли: Мислам дека тоа ќе работат.
Но, вие не сакате да 123Sam да биде валидна влез од страна на корисникот.
Тоа не е навистина Инт.
Па тоа не изгледа фер да го анализирам како int.
OK.
Во тој случај, ајде да се движат за да на интернет.
Па HTTP не е јазик.
HTTP е само збир на стандарди за како ви испратиме работи од клиентите,
тоа е вас, да сервери.
Тоа е на другите луѓе на интернет.
>> Па HTTP се залага за Хипертекст Протокол за пренос.
Тоа е срцето и душата на целиот веб.
Хипертекст дел само се однесува на HTML.
Трансферот е клиенти, како што ќе испрати барања за
сервери, кои даваат одговори.
И протоколот е само, како да очекувате некој сервер да се однесуваме?
И како треба да се однесуваме така што можете да се насочат овој
процесот на комуникација?
>> Па HTTP барања изгледа многу слични на оваа.
Добивај е тип на барањето.
Вие момци го виделе GET барања и POST барањата.
Дека втората работа таму, / мене, тоа е само URI или URL-то на местото каде што можете
сакаат да одат во рамките на домаќин.
Значи ова барање се прашува за страница, како www.facebook.com / мене.
И тоа е GET барањето.
А потоа и оваа HTTP/1.1, тоа е само верзијата на HTTP сте користите.
Тоа е речиси секогаш 1.1.
>> А потоа, тука е еден куп на други работи исто така.
Ти всушност може да се види овие ако отвори својата конзола, кога сте
прелистување на веб.
Одговори изгледа нешто повеќе вака.
Горниот дел е, повторно, тип на HTTP сте користење
проследено со код на статусот на.
Па 200 во ред е сè што работел надвор.
Тука е вашата содржина.
Својата содржина ќе го следат.
И тогаш тоа ќе ти кажам каков вид на содржината и други работи исто така.
>> Статус кодови, постојат неколку важни оние што треба да знаете.
200 ред е како златна сè е.
Се работи.
403 Забранетиот.
Ова веројатно сте виделе ако сте ја заборавиле да chmod нешто правилно.
Тоа значи дека немате дозвола да
пристап до таа на серверот.
Тоа е како да, не, не можете да го видите.
404 значи дека нешто не постои.
Не е пронајден.
Веројатно сте виделе дека многу.
>> 500 Внатрешна грешка на серверот е обично како нешто не беше во ред на страната
на серверот.
Па кога ќе се имплементира pset7, ако сте имале PHP грешки, можете да
всушност, оди на страницата и да видат целиот куп на PHP грешка нешта.
Но, тоа не нормално се случи, бидејќи веб-страниците навистина не би сакал да
ви кажам зошто нивниот веб-сајт е скршен.
Тие ќе веројатно само се врати 500 Внатрешна грешка на серверот.
>> А потоа, тука е 418 јас сум чајник.
Има цела приказна за зошто тоа е нешто.
Но, можете да прочитате за тоа на свој време.
Постојат еден куп на други статусни кодови премногу.
Но овие се оние што треба да знаете.
Па ајде да зборуваме за HTML.
HTML, се сеќавам, не е програмски јазик.
Тоа е маркап јазик.
Тоа значи дека тој го опишува содржината.
Тоа ти го кажува она документот HTML изгледа сакале или не она што изгледа како
но тоа како е структурирана.
>> Па тоа го дефинира структурата и семантиката на веб страници.
Тоа е како, ова е став.
Ова е подредена листа.
Ова е како дел од мојата страница.
Тука е насловот.
Тоа го прави работи како што.
Тоа не стил кој било од тоа, затоа што тоа е она што го правите во CSS.
И тоа изгледа како серија на вгнездени тагови.
Така да се користи еден пример на навистина основни HTML страница, имаш DOCTYPE
декларација до таму.
>> Овој DOCTYPE декларација е велејќи, ние сме со користење HTML5.
Тогаш го имате голема HTML таг.
Таа содржи глава и тело.
Внатре во главата, ќе имаат наслов.
Тоа е она што се случува во насловот лента на вашиот интернет пребарувач.
Имаме линк ознака што врски во надворешен стил лист.
А потоа имаме скрипта која повлекува од надворешен JavaScript, како и.
>> А потоа внатре нашето тело е всушност она што добива прикажани на оваа страница.
Имаме став, а потоа сликата во тој став.
Оваа една е слика на мачиња.
Забележите дека сликата таг самата затвора.
Така, наместо на отворањето со слика а потоа прави уште еден / на сликата, можете
само треба оваа мала коса црта тука, што се затвора.
И сликата таг, исто така, има овој клуч вредноста на атрибутот наречен алт.
Тоа е алтернативен текст кој што се случува кога ќе лебдат над неа.
>> Повеќето HTML елементи имаат некои клучни вредност работи кои можете да го даде, разни
прилагодување.
Да.
>> ПУБЛИКАТА: [нечујни].
>> ANGELA ЛИ: Па, па тоа е атрибут на етикетата.
Значи, ако сте биле со користење на веб, можете да направи изберете image.getAttribute.
А потоа можете да пребарувате за добие ALT атрибут.
И тоа ќе ви даде мачиња.
Ако се сеќавате форми во HTML, влез елементи ќе имаат име атрибути.
И тоа е она што PHP се користи за испраќање барања кога е поднесено форма.
>> Публика: Дали ќе се спомене нешто за тоа како ако користите kittens.jpg или
нешто што има недостасува датотеки, папки или други датотеки?
>> ANGELA ЛИ: Да.
Значи ова е она што се нарекува релативна пат, бидејќи јас не давам
ќе ја целосната патека.
Ова е како кога во C ако не fopen некои датотеки, ако fopen hi.txt, дека
hi.txt се очекува да биде во истата директориум, освен ако не го даде повеќе
сложен пат.
>> ПУБЛИКАТА: Значи можете да наведете кој фолдер [нечујни]?
>> ANGELA ЛИ: Да.
И може да се погледне нагоре како да го направите тоа.
Но, ако јас сакав да се добие kittens.jpg надвор на главниот директориум, јас би го направил
.. / Kittens.jpg.
Да.
Жал.
Да.
О човек, го заборавив прашање.
Она што беше прашањето?
Ох, прашањето беше е, kittens.jpg се очекува да биде во истиот директориум?
И во овој случај, тоа е.
Но вие исто така може да го даде одреден пат така што тоа не мора да биде.
Добар?
>> CSS.
Значи, CSS, како HTML, не е програмски јазик.
CSS е само една серија на стил правила.
Таа се залага за Cascading Style Sheets.
И ќе ја користи во комбинација со HTML и стил страници.
Па така постојат три начини можете да го вклучиш.
Еден начин можете да го направите тоа е во главата дел од вашиот HTML, можете само
отвори стил таг а потоа се држи некои CSS правила во таму.
Тоа е прилично добро.
Да.
>> Публика: Може ли да се стави оние стил тагови меѓу нив, нека
да речеме, на телото и / тело.
А потоа ќе биде стајлинг само во телото.
>> ANGELA ЛИ: Вие би можеле да.
Тоа ќе работат.
Но вие не треба, затоа што стил е вид на метаподатоци кои треба да одат во
главата на вашиот документ.
Тело навистина треба да содржи само она што е, всушност, ќе
појавиш на вашата страница.
>> ПУБЛИКАТА: Значи сакаш стави стил во вашата глава да стил на
целиот веб страница, нели?
>> ANGELA ЛИ: Да.
Па стави стил тука, овие правила CSS ќе важи за целата страница врз основа на
нивните селектори.
Па подобар начин да го направите тоа е наместо да се има стил таг во вашата глава,
имате овој линк за да надворешен стил лист како што ви покажа во
претходниот пример.
Што тоа не е се обидува и се наоѓа на поднесе style.css а потоа повлекува тоа
и користи дека како стилови за оваа страница.
И вашиот style.css би само да изгледа вака.
Тоа само ќе биде еден куп на CSS.
>> И конечно, тука е уште еден начин можете може да вклучуваат CSS, која навистина
не треба да некогаш стори.
Тоа е повик РЕГИСТРАЦИЈА стил.
И така сите HTML елемент може, исто така, земе стил атрибут.
И тогаш во тој стил атрибут, можете да го даде CSS правила.
Значи во овој случај, без оглед div јас сум дефинирање токму тука, тоа се случува да
имаат црна позадина и бела боја текстот.
Но вие не треба да го направите ова, затоа што она што тоа не е тоа става вашиот стил
во внатрешноста на вашиот HTML.
>> И знам дека ние сме биле зборува за HTML е структура и CSS е стил.
Ако го направите ова, се меша заедно.
И тоа не е многу чиста.
Па не го правам тоа.
Користење на пример на CSS, таму горе, ние само одберете телото на HTML
документарен филм.
И ние сме како, сè е ќе биде Стрип Sans.
Јас, исто така не се препорачува за тоа.
Но вие можете да го направите тоа.
>> Второто правило, токму тука, тоа се случува за да изберете елемент на
страница со проект главната.
Значи она што HTML елемент, реков проект = Главни, јас ќе одам да им даде дека
20-пиксели маргина и да ги усогласат сè, целиот текст, во центарот.
Последното нешто што го избира од страна на CSS класа.
Значи било кој елемент на страница, која Дадов делот класа, јас ќе одам да се направи тоа
боја на позадина на светло сина.
Да.
Тоа е се што имаме.
Прашање?
>> Публика: Што значи hashtag пред главната направам?
>> ANGELA ЛИ: Прашањето е, она што го прави хаштагот пред главната Дали?
Во овој случај, на хаш во CSS значи изберете од проект.
Значи, ако имав некои HTML елемент, како divID = главната, оваа CSS правило избира
нешто со проект главната.
И слично, рокот во предниот дел на секција е да изберете од CSS класа или
изберете од HTML класа.
>> Публика: Зошто има има пред 6 во боја на позадината?
>> ANGELA ЛИ: Да.
Значи, прашањето е, зошто е таму хаш пред 6?
Ова е различно од тоа хаш.
Ова значи дека ти си даваат хексадецимално боја.
Па хексадецимален бои, ова е само претставува боја.
И се сеќавате RGB тројки, кога ти го направи криминолошки науки pset?
Ова е слично.
Првите две цифри претставуваат колку црвена е во боја.
Вторите два претставуваат колку зелена.
И третиот претставува колку сини.
И хаш е ова се случува да претставуваат боја.
>> Па нешто од 0, 0, 0, 0, 0, 0 до F, F, F, F, F, F е правилен.
Тоа е некој валиден боја што може да бидат прикажани од страна на вашиот интернет пребарувач.
Прашање?
>> Публика: Што е разликата помеѓу користење од страна на проект и со класа?
>> ANGELA ЛИ: Прашањето е она што е разликата помеѓу
користење од страна на проект и класа?
Можеш да имаш само еден елемент во една HTML документ кој има дадено проект.
Па само една работа на мојата страница е дозволено да имаат проект главната.
Така да ја користите за ова е насловот.
Ова е навигација.
Ова е подножјето.
Класите се различни, затоа што може применуваат класи на што повеќе HTML елементи
како сакате.
>> Така на пример, јас не класа секција, бидејќи таму е веројатно повеќе од еден
делот на мојата страница.
Сте само дозволено да имаат што повеќе елементите на страната со истиот
класа, но само една со одреден проект.
>> ПУБЛИКАТА: Значи точка претставува класа?
>> ANGELA ЛИ: Да.
А точка претставува класа.
Кул.
Тоа е се што имам, момци.
Ви благодарам.
>> [Аплауз]
>> ZAMYLA Чан: Здраво, сите.
Јас сум Zamyla.
Одам да се покриваат PHP, MVC, и SQL денес.
Голем дел од материјалот што ќе бидам покривање ќе биде доста
право надвор од pset7.
Во ред е.
Значи она што е PHP?
PHP се залага за PHP Хипертекст Препроцесори.
Така што, само по себе, е рекурзивен Името, кое е прилично кул.
PHP е сервер-side scripting јазик, и тоа обезбедува заднинската
така и логичките основи на нашата веб страница.
>> Па Ангела зборуваше многу за HTML и CSS која ќе го направи структурата
на веб страната.
Но што ако сакате да се смени содржината динамички или ако тоа варира
врз основа на корисникот или одредени услови?
Тоа е каде што PHP влегува внатре
Сега, обично, PHP може да потрае неколку помалку линии за спроведување на истото
во C. Тоа е затоа што PHP се справува со меморијата управување за програмер,
што е спротивно на нас да мора да Примерок бесплатно, такви работи.
>> Но, бидејќи PHP е извршителот јазик, обично, тоа би можело да се изврши
малку побавно од C, која е составена јазик.
Затоа што ние сме се движат програмирање јазици, ајде да погледнеме како
синтакса ќе се разликуваат.
Ајде да бидеме многу внимателни да не се се збунети со тоа.
Па со PHP синтакса, дали сте вградување на вашиот PHP внатрешноста на HTML
датотека или во рамките на. php фајл себе, треба да приложи кодот на отворено
PHP и затворени PHP тагови како следува, како на екранот.
>> Променливи во PHP.
Секој променлива ќе започне со долари знак проследено со името на
вашата променлива.
Сега, променливи во PHP се лабаво отчукува, што значи дека не треба
да се укаже на тоа каков тип на податоци е кога ќе го прогласи.
Сепак, ова не значи дека тие немаат никакви видови на сите.
Значи, ако јас декларирате променлива и само го поставите тоа е еднаква на 1, а потоа Изјавувам
друга променлива, го постави еднаква на "1" , а потоа уште еден 1,0, добро,
во зависност од видот на еднаквост оператори јас го користам, ако сакам да се споредат
во сите видови, потоа тие ќе бидат еднакви.
Но ако сакам да бидете сигурни дека видови се еднакви, PHP сеуште може да направи
дека, иако ние не укажуваат на каков тип е кога ние
Првиот се направи датотека.
>> Сега, во PHP, иако ние сме префрлување во текот на програмирање
јазици од C, ние сеуште имаме сигурен ако состојба, исто како и оваа.
Ние се уште имаме додека петелки, само вака, каде што ќе ги ставите во вашиот
состојба, а потоа Телото на јамка.
А потоа ние исто така имаме за телефонска линија, кои обично изгледа вака.
Значи, ако сакав да iterate во текот на сите девет psets и да ги достават и повик
функција submitPset, тогаш можам да го направите тоа тука, што вие момци имаат сите
направено од страна на оваа точка.
Алал да му е, патем.
>> За камерата, луѓето рече, ви благодарам.
Сега, ако не сакате само да ја користите оваа за телефонска линија, тогаш PHP, всушност, исто така,
има нешта наречени foreach петелки.
Значи, ако имав низа од цели броеви, 0 до 8, се чуваат во низата psets,
тогаш јас би можеле да имаат foreach циклусот што iterates над секој број во psets.
И тогаш би можел да се јавите на истиот функционираат осум пати,
онака како што беше порано.
Па ова за секој циклус е убаво, бидејќи вие не мора да се ако не знаете
точната должината на низата што ќе се, а потоа со користење на овој foreach циклусот
ќе се грижи за тоа за вас.
>> Па сум направил psets како низа.
Да ги погледнеме на тоа.
Низи во PHP се обично исто како оние кои имавме во C, каде
можете да прогласи низа.
И тука, можам да се изјаснам како празна низа а потоа се изгради динамички со користење на
индекси, како цели броеви.
Така индекс 0, јас ќе одам да се сместат цел број наречен 1.
На индекс 1 на мојата листа, јас ќе одам за чување на вредноста 2.
Како и во третиот индекс, но вториот број, јас ќе одам да
чување на број 12.
>> Сега, ова е парична казна во тој работи работи добро.
Но велат дека тоа е важно за мене она што секој индекс држи.
За мене, индексот 0 значи како многу мачки имам.
А индексот 1 значи како многу бувови имам.
А следниот значи колку кучиња.
Па, тогаш тоа да се каже дека, наместо на морале да се сеќавам 0 однесува на
мачки и 1 до бувови, можам да користам асоцијативни низи, што значи дека
наместо на цели броеви како мојот индекси, Јас всушност може да се користат стрингови.
>> Значи ова е доста корисна.
И сте во основа, само замени цели броеви со жици.
И таму имате асоцијативна низа.
Да.
>> Публика: Дали постои причина зошто има црта за вториот
дел, бидејќи мојата листа има низа.
>> ZAMYLA CHAN: Прашањето беше, е постои причина зошто таму е
истакне меѓу моите и листа?
Бр.
Тоа е само колку сум именување мојата променлива.
>> ПУБЛИКАТА: На првите линија, тоа е еден збор.
>> ZAMYLA CHAN: Мојот извинување.
Јас ќе го поправам тоа.
Да.
Тие треба да бидат исти името на променливата.
Добар улов.
OK.
Па ајде да се движат за да стринг конкатенација.
Ако сакав да се земе две жици, тогаш можам да ги CONCATENATE
со операторот точка.
Па ако имам Мило како прво име и Банана како презиме, тогаш
надоврзување со операторот точка и тогаш ставање на просторот помеѓу
ќе се направи стринг кој содржи Мило Банана, за што јас тогаш може да се ехо или,
Наместо тоа, испечатите.
>> Говорејќи на ехо, ајде да разговараме за неколку корисни -
Упс.
Жал ми е.
Неколку корисни PHP функции.
Значи имаме -
технички тешкотии.
Една секунда.
Јас го испрати.
PowerPoint проблеми.
И ние сме назад со PHP функции.
>> Значи имаме потреба функција, каде што ако помине во датотека, тука е само
пример за датотека која Јас може да помине внатре
Тогаш тоа ќе вклучуваат кодот PHP од таа датотека дека јас укажуваат.
И тоа ќе се оцени дека внатре
Тогаш ние исто така имаат ехо, која е паралелно со printf.
Излез е паралелен да се скрши, кој излегува на блок од
код кој сте внатре
А потоа празни проверува дали дадена променлива е како нула или нула или
она што се изедначува со се празни.
Да.
>> ПУБЛИКАТА: За низа сплет точка операторот еден, во PHP, е дека
исти како и во вклучите Javascript каде што тоа е со користење дот за конкатенација значи плус?
Значи за целосно име и презиме, може да имаат долар се регистрирате прво + и потоа + трае?
>> ZAMYLA Чан: Да.
Значи, прашањето беше дали во PHP ние можете да го користите истиот стринг конкатенација
како и во вклучите Javascript со предности.
И Јосиф ќе навлегувам во тоа подоцна.
Мислам дека тој има слајд на тоа.
Всушност, тоа е различно.
Така во JavaScript, треба да користите плус да CONCATENATE жици.
А во PHP, ќе мора да користете оператор точка.
Па тие се различни.
>> OK.
Па сега дека ние сме опфатени сите овој PHP, каде што се врши
навистина дојде во рака?
Па, тоа доаѓа во рака кога ќе може да се комбинираат со нашите HTML.
Па нашите PHP ќе ни даде моќ да промените HTML содржина на страницата, пред
нејзините вчитување.
Па врз основа на различни услови, обично специфичниот корисник тоа е
ме, ние може да се прикаже различни информации.
Линда, дали имате некое прашање?
>> ПУБЛИКАТА: Можете ли да CONCATENATE цел број, исто така,?
>> ZAMYLA Чан: Да, можеш.
Значи, прашањето беше дали можете CONCATENATE броеви или други
variable.s сега, ние се движи кон MVC, кој е парадигма што се користеа во
pset7 и многу веб дизајнери користат за организирање на код во датотека
во нивниот веб-сајт.
М стои за модел.
И во основа, модел датотеки ќе се справи со интеракции со базата на податоци.
Прикажи фајлови, тие се однесуваат на естетиката на веб-сајтот.
И контролор рачки барања на корисникот, парсира
податоци, врши и други логика.
>> Во pset7, ние се комбинираат модел и контролорот.
А ние само ги повика контролери и ги стави во јавниот именик.
И преглед на датотеки, ние ги користат како Шаблони во директориумот со шаблони.
Па овој дијаграм тука, исто така, претставува тоа ист вид на поделба со
модел и контролорот во пурпурно тука на левата и
поглед на правото.
Значи ова е шематски дека некои од вас може да се види на работното време или
дијаграми кои бевме цртање како што се пронајдат вашиот pset.
>> Значи тука, во даден контролор, модел контролор, имаме функции
кои се однесуваат на доведување во прашање на SQL база на податоци, извршување PHP логика.
Можеби ќе се погледне нагоре акции во Yahoo!
Финансиите.
Или можеби, вие само ќе провери за да види дали корисникот го поднел
формираат веќе пред да имаат посети вашата страница.
А потоа ќе направат форма овде.
По барањето било поднесено таа форма од страна на корисникот, акцијата, која беше
наведени во HTML таг форма на ќе укажуваат на страницата кој
се враќа дека податоците да.
>> Па сите тие информации би било испратен назад во вашиот контролер.
Тогаш веројатно ќе се направи малку повеќе логика на тоа и можеби изврши неколку
повеќе прашања во SQL база на податоци и потоа, конечно, излезе со убаво
спакувани збир на информации кои што би помине во во некои други дефиниција
кои покажуваа таа информација.
Сега, како да ние всушност пакет таа информација до?
Па, имаме функција наречена Рендерирање која беше во functions.php датотека во
pset7, каде ќе помине во името на датотека, на име на дефиниција.
>> И тогаш исто така се помине во асоцијативна низа.
И така што асоцијативна низа претставува различни информации
кој сакате да го помине внатре
Сега, она што се случува да биде постојана во овие примери е дека клучевите или,
Наместо тоа, клучевите од асоцијативни низи, тие се она што се случува да биде
очекува да биде константно со дефиниција, бидејќи тоа го знае тоа треба
нешто што се нарекува порака или наречен име.
А потоа работи на право, вистинските вредности, така што во овој случај, кој е
добро момче и Мило, тие се случува да биде вредностите кои се менуваат
дека контролорот менува секој пат или врз основа на одредени услови и
ќе помине дека внатре
>> Па тука во шаблони, можеме да видиме дека ние се користи HTML специјални карактери,
кои само во основа значи дека ние сакаме за да го добиете пер стринг кој го
корисникот стави внатре
И ние сакаме да се замени порака во таму.
Па тогаш кога ние всушност ја видите датотеката, специфични
информации е донесен внатре
Имајте на ум дека клучот како прават дела е дека клучевите на асоцијативниот
низи, оние стане променлива имиња тука.
И така вредностите на тој клуч во асоцијативна низа тогаш станува
вредноста на променлива.
>> Сега, ајде да се движат за да SQL.
Таа се залага за Структурно Јазик за пребарување.
И така ова е само програмирање јазик наменета
за управување со бази на податоци.
И дојде во удобен за нас во нашите pset7 финансии веб-сајт.
Во суштина, тоа е само лесен начин да се следење и управување со предмети и табели
и да ги поврзе едни со други.
Сега, мислам на вашиот SQL база на податоци во основа како датотека Excel, можеби,
со повеќе јазичиња листови.
>> Па може да има повеќе табели, можеби, кои се поврзани една со друга.
И многу како Excel, имаме многу функционалноста дека го сакаме.
На пример, ние може да избере одредени редови.
Ние можеме да вметнете информации.
Ние може да се ажурираат редови.
И ние исто така може да го избришете нешта.
>> SQL Избери дела со избирање редови или ред на наведената колони од
база на податоци кои одговараат на одреден критериуми кои укажуваат.
Па овде кога ќе видам select * from волшебници, каде куќа = Ravenclaw, тогаш
Јас сум изборот *, што значи јас сум избирање секој колона со тоа, што
ред од волшебници маса, но само ако куќата колона еднаква Ravenclaw.
Сега, ова е чиста или SQL.
Па ако отидов во phpMyAdmin, кој е специфичниот начин кои ние ги користиме да управуваат со
нашите SQL бази на податоци, тогаш би можел да се вметне дека во веб phpMyAdmin.
И дека ќе се изврши.
>> Но ние всушност сакате да го направите дека на страна PHP.
Па, како го правиме тоа?
Па, ние ги користиме на пребарување функција, која основа извршува дека SQL пребарување.
Користите?
како случаеви, може да се помине во одредени вредности на нашата стринг кој ние
сакате да се замени.
Па можеби јас сум чување различни вредности во curr_house, кои
претставува сегашна куќа дека ќе одам преку.
За да можам да го положат дека во како случаеви со прашалник.
А потоа јас во основа ќе го изврши Истото како што го направив порано, освен
сега, јас сум во PHP.
>> И барањето ќе се врати асоцијативна низа.
И јас одам да го чувате во редови.
Сега, пребарување секогаш може да пропадне.
Можеби SQL упит не може да се изврши бидејќи на табелата не постои.
Или можеби, во колоната не постои.
Нешто тргнало наопаку.
Па, во тој случај, ќе сакате да бидете сигурни дека ќе провери дали
пребарување врати лажна.
И тоа е со користење на тројниот еднакво операција таму.
>> И тогаш јас се извинувам, што е уште CS50 функција, поминува во пораката.
И ако се погледне во извини, сето тоа навистина не е направила apology.php.
Да.
>> Публика: Може ли да се објасни она што ѕвезда прави помеѓу одберете и од?
>> ZAMYLA Чан: Да, апсолутно.
Па ѕвездата помеѓу одберете и од значи дека сакам да го изберете целата
целиот ред од мојата маса.
Јас би можеле да го посочи изберете име, година, куќата.
И јас само ќе се добијат овие три колумни во мојата маса.
Но ако кажам одберете *, потоа јас ќе се добие сè што во таа колона.
Тогаш јас ќе одам да одите во задниот прв план.
>> ПУБЛИКАТА: Значи ова е уште во SQL, нели?
Дали е ова пребарување или ова е PHP?
>> ZAMYLA CHAN: Ние сме во барањето.
Па ова е во PHP.
Значи со користење на PHP функцијата за пребарување, ние сме извршување на SQL query.
>> Публика: Дали е ништо во SQL со мали букви, како да изберете
или волшебници или куќа?
>> ZAMYLA Чан: Дали е ништо во SQL мали букви?
Јас верувам дека е така, да.
Верувам дека Одберете и од и каде се со мали букви.
Не?
>> Роб BOWDEN: Значи, тоа е токму спротивното.
Колоната имиња и масата средства, сите од нив се со мали букви.
Но, секој од клучните MySQL зборови, како Одберете, и каде, оние кои не се
мали букви.
OK.
Па спротивното од она што реков.
Така што сите на MySQL клучни зборови -
изберете од, каде што - оние не се со мали букви.
Но, сè друго е.
OK.
Вие во фронт.
>> Публика: Ако сум $ редови во однос на повеќе од еден ред, дали тоа значи е
само станува асоцијативна низа?
>> ZAMYLA Чан: Значи, прашањето беше дали редови има повеќе од еден ред во тоа, не
тоа да стане асоцијативна низа?
Па тоа е низа на асоцијативниот низи веќе.
Па дури и ако има само еден ред врати, тогаш ќе треба да се оди на
индекс 0 од тој резултат.
И тогаш ќе го имаат тоа првиот ред.
Да, Белинда?
>> Публика: Кога користите ===, дали е ова само пример?
Или постојат други?
>> ZAMYLA Чан: Значи во овој случај, === е споредба низ типови.
Жал. === Е споредба што го споредува типови.
А потоа == споредува низ сите видови.
>> Публика: Можете ли да објасните што редови е во оваа ситуација?
Е тоа ред на податоци?
>> ZAMYLA CHAN: Во следниот слајд, јас сум ќе се објасни она редови е.
Па ако не ти пречи држи исклучување на тоа.
А потоа можете во грб?
>> ПУБЛИКАТА: За функции како пребарување, направат и се извини [нечујни]?
>> ZAMYLA CHAN: Прашањето е дали овие функции - на прашањето, се извинувам,
и ја даде -
се одржуваат низ PHP.
Овие се оние кои CS50 напиша за pset7.
И Џеј?
>> Публика: Кога ви треба да се каже $ _SESSION, Е дека само за лични карти?
Или може да ви се рече дека овде?
>> ZAMYLA Чан: Значи, прашањето е, кога ние ги користиме $ _SESSION, тоа беше специфична
глобалната променлива, дека ние сме користење.
Тука оваа променлива ќе да бидат локални на нашата функција.
Па ние сме само прогласување нова променлива.
>> Публика: Како се извини спроведува?
>> ZAMYLA CHAN: Прашањето беше, како се извинувам спроведува?
И мислам дека ова е всушност прилично добра практика за вас момци да одат во
на functions.php секција и се погледне на извини и да видиме како може да имаат
направи го тоа сами.
Па јас може да го оставиме тоа за вас, но само велат дека ако се погледне во извини,
тогаш е потребно пораката која што поднесени се извини, а потоа
прави таа порака.
Повеќе прашања?
Го сакам прашања.
Па ги задржиме доаѓаат.
>> ПУБЛИКАТА: [нечујни]
ехо или да ги печатите таму?
>> ZAMYLA CHAN: Прашањето беше, не може само ние да се стави
ехо или да ги печатите таму.
Така што би го направиле нешто малку поинаква.
Што би се печатени пребарување не успеа во тоа -
добро, токму сега, ние сме всушност во нашата контролер.
Па ние не, всушност треба HTML постави тука.
Извини преку давање apologize.php всушност води до apology.php.
OK.
>> Па сега, ајде да одат за да се одговори на прашање од порано за тоа што
навистина е редови.
Па, барањето ќе се врати низа на редови.
И секој ред е претставена од страна на асоцијативна низа.
Значи, ако јас сум извршува некои SQL пребарување и Сум се чуваат резултатот во редови, а потоа
користење на foreach циклусот, тогаш низата име е првиот таму - редови.
А потоа јас ќе одам да се јавите секој ред таму $ ред.
>> Па процесирањето над тоа, јас потоа може да пристап до дадената ред името колона,
година колона, и куќа колона.
Имајте на ум дека јас не би биле во можност да го направите тоа со редови, бидејќи редови индекс
име не постои.
Редови е само низа од асоцијативни низи.
Па имате два степени.
Откако ќе имаат низа на редови, мора да навлегувам во тоа.
А потоа можете да пристапите до колони.
Дали кои го прават тоа јасно?
Да, пред?
>> ПУБЛИКАТА: [нечујни] отворите загради за [нечујни]?
>> ZAMYLA Чан: Извинете ме?
>> Публика: отворена голема заграда.
>> ZAMYLA CHAN: Овие тука?
Тоа е што ми дозволивте да се вклучат таа променлива.
Да.
>> Публика: Кога ќе се печати, дали сте печатење на HTML код?
>> ZAMYLA Чан: Да.
Кога ќе печати, овој овде е внатре мојата дефиниција сега, па
мојот поглед на MVC метод.
Па јас сум печатење во HTML.
>> Публика: Значи, ако отидовме во инвеститорот алатки после водење ова, ние би можеле да
кои, всушност, во кодот?
>> ZAMYLA Чан: Тоа е одлична прашање, да.
Па ако отиде во инвеститорот алатки во Firefox со користење на светулка или
Хром, тогаш да, можете да види специфичните HTML.
Така што не ќе покаже $ ред ["name"].
Тоа ќе покаже кое име е со тоа, што ред.
>> Публика: Само општ проблем, она што се tr и td дефинирани како?
Зошто би ние [нечујни]?
>> ZAMYLA CHAN: Табела ред tr, маса, тогаш ТД колона.
OK.
>> Публика: Да, тоа е табела на податоци.
>> ZAMYLA CHAN: Табела на податоци.
Да.
>> ПУБЛИКАТА: Тоа е ред, во која ред се третира како колоната?
>> ZAMYLA CHAN: Извини.
Можете да го повторите тоа?
>> Публика: Како би ја визуелизира редови?
>> ZAMYLA Чан: Како би ја визуелизира редови во каков вид на начин?
Дали сте зборуваме за овие редови тука или tr редови?
>> Публика: реда.
>> ZAMYLA CHAN: Овие редови тука?
Би се визуелизира ова како Јас изврши ми пребарување.
И таа вели, во ред, имам или 0 до n износот на редови кои се совпаѓаат со критериумите
дека сте имале достапен.
Па имам некои бројот на редови.
Па редови, $ редови, продавници секоја еден од оние редови во низа.
Па дури и ако тоа е само еден од нив, тоа е уште низа на редови кои се поклопат.
>> Па тогаш, на пример, тоа е слични на кога ќе Земени
кешот од корисниците.
И критериумите имаше каде ID еднаква на сесијата проект.
Постојат навистина само еден ред кои би можеле да одговараат на тоа.
Но сепак редови само што се врати еден ред.
Па ќе мора да одат на редови, индекс 0, индексот на кешот за
всушност стигнете до вашата кешот.
>> Публика: Дали е функција за печатење во ехо истото?
>> ZAMYLA Чан: Да.
Да.
Печати ехо на истиот.
>> Публика: Дали foreach циклусот на Единствениот начин да се индексира во редови?
>> ZAMYLA CHAN: Дали е foreach циклусот единствениот начин на кој можете да
iterate преку редови?
Бр.
Исто така можете да го користите за телефонска линија, под услов дека знаете должина
на низа на спорот.
>> Публика: Може ли да го пристап користење ред како [нечујни]?
>> ZAMYLA Чан: Па не можете да имате пристап до него само со користење ред ако немаат
foreach јамка под услов не се изјасниле ред.
Да.
Да, во бело.
>> Публика: Па што tr и td направам?
>> ZAMYLA CHAN: Значи tr и ТД се HTML тагови.
tr укажува на почетокот на табелата.
И секој ТД укажува на нова табела на податоци колона.
>> ПУБЛИКАТА: За визуелна на она ред е како, замислете на SQL, како
тие имаат по ред.
[Нечујни].
>> ZAMYLA Чан: Да.
Тоа е голема точка.
Може да се визуелизира редови како само како во табела Excel, само
листата на редови.
OK.
Во ред е.
Па сега дека ние сме поминале над изберете, ако не постојат никакви други прашања, ние ќе
поминат врз внесување.
Значи, ако сакав да вметнете во некои маса и да внесете одредени колона
вредности, би можел да си го вметнете во Ravenclaw во 7 година.
Но понекогаш може да има дупликат вредности, како што видовме во pset7 кога ние
беа ажурирање нашето портфолио.
>> Значи во овој случај, ние сакаме да го користите на Дупликат клучот ажурирање, така што ние не
чување на повеќе редови со истата вредност, туку надградба на тоа.
Тогаш ние всушност имаат ажурирање, која не е внесување.
Тоа е само надградба, каде што се ажурира во одредена маса со даден
критериуми, а потоа, конечно, избришете, кој не е многу слична работа.
>> Публика: Може ли накратко одиме во текот на дупликат клучот?
>> ZAMYLA Чан: Да.
Во суштина тука, имам INSERT INTO gringotts, е, galleons, овие вредности.
Но проект, веројатно, е уникатен клуч вредност се постави во MySQL табела.
Значи, ако јас веќе тој проект се постави, тогаш не можам да ја внесе нов ред.
Значи, ако тоа не постои веќе, тогаш морам да го ажурирате.
Во средината во бело.
>> ПУБЛИКАТА: Значи вметнете, ажурирање, бришење, и изберете, се оние сите достапни
локално [нечујни]?
>> ZAMYLA CHAN: Значи вметнете, ажурирање, бришење и
изберете сите SQL queries.
Па кога сте со користење на SQL, ќе имаат оние кои се достапни.
>> ПУБЛИКАТА: Назад кон минатото квизови -
имаше прашање кои се занимаваат со ако сте имале маса и сакаше да
вметнете тест резултатите во една и ќе го вметнете Вашето име, па тоа нема да ве
[Нечујни] тест резултат на вашиот пријател.
Како ќе го стори тоа со вметнување?
>> ZAMYLA Чан: Значи, прашањето беше за претходна среднорочен прашање.
Јас не сум свесен за кои еден е во право сега.
Па можеби потоа, ако сакате да излезе и да покаже мене, тогаш можам
сигурно ви даде совети.
Но, зборувајќи на вметнување работи, како земајќи нечија резултат кога ќе
не треба, ајде да зборуваме за SQL инјекција напади.
Па SQL инјекција напад е во суштина каде што некој ги зема
предностите на ниска безбедноста на начин на кој ќе се одвиваат во податоците.
>> Значи тука, исто како и во CS50 финансии, кога ќе се најавите, ние може да влезе во
корисничко име во формуларот за најава, првиот текст, и
потоа внесете во лозинка.
Можеби нашите PHP код може да изгледа нешто како ова, каде што $ корисничко име
е пост-податоци корисничко име и лозинка е пост-податоци лозинка.
А потоа ние едноставно ја извршиме нашата пребарување, да речеме, Добро, добро, нашите барањето ќе
изберете од нашите корисници, каде што корисничкото име е на
оној дека тие се поднесе.
И лозинка е лозинка, што значи дека лозинките се совпаѓаат.
>> Сега, што ако наместо всушност поднесување вистински лозинка, како
12.345 и Сомневајќи се во бода во која се вели лозинка и се обидува да се пробие на нивните
сметка, што ако, наместо тие поднеле ова.
Тие би можеле да напишете во можеби погоди во лозинка.
А потоа тие ќе завршат Цитат потоа внеси или 1 = 1.
Тоа би темпо директно во SQL пребарување да изгледа нешто како ова.
Изберете од корисници каде корисничко име = Цевчиња и лозинка
еднакво крин или 1 = 1.
>> Значи или лозинката има да биде точна или 1 = 1,
кој е секогаш точно.
Значи во овој случај, во основа, корисникот може да ги искористат предностите на овој и само се логираат
себе во и hack сметка нечија.
Па тоа е причината зошто сакаме да се избегне некој мора да го направите тоа.
Но, за среќа, барањето функција од страна на преминува во местата за чување, ќе се
се грижи за тоа за вас.
Исто така, никогаш нема најчесто сакаат за да всушност ги достави лозинки
себе.
Тоа е причината зошто ние hashed или енкриптирани нив во CS50 финансии.
>> Публика: Минатото квиз зборуваше за MySQL бегство жици.
Ние мора да се грижите за тоа?
>> ZAMYLA Чан: Тоа е добро прашање.
На MySQL бегство жици е дефинитивно функција која се користи во нашите пребарување.
Но дефинитивно се погледне во тоа.
Јас би рекол дека е фер игра да знаете дека ќе треба да се јавите дека
функционираат на конец.
Да, Белинда?
>> Публика: Како знаеш, кога тоа е единечен наводник или двојни наводници?
И, исто така, се чувствувам како во предавање ќе нешто за што не има
на [нечујни] или нешто или на Вториот сингл понуда на крајот.
Мислам дека тој посочи во предавање кое си требал да има апостроф 1
и тогаш не треба апострофи или нешто слично.
>> ПУБЛИКАТА: [нечујни].
>> Публика: Работата е последната една Цитат таму во таа втората кутија
не треба да биде таму.
[Нечујни]
Затоа што кога ќе се земе дека последен сингл цитирам надвор и одговара на овие за содржина
каде лозинка е, ако немаш што пребарување, има еден цитат на
крајот веќе.
Сакате да го користите дека една понуда како оној кој се соочува со еден
[Нечујни].
Значи она што е, всушност, во тој текст кутија не треба да го имаат тоа.
>> ZAMYLA CHAN: Ќе го промени тоа.
OK.
Ако не постојат било какви прашања, тогаш ќе помине над неа, на Џозеф да се зборува
за да го вклучите Javascript, итн.
>> [Аплауз]
>> JOSEPH ONG: Па ние се работи малку зад себе.
Значи, ако имате да ја напуштат, тоа е во ред.
Но, ние бараме да одржите вашиот главите надолу ако сте во средината, па можете
не го блокира камерата и ќе се користат задниот излез, ако имате да.
Јас сум Џозеф на патот.
Здраво.
Тест, тест.
Дан, тоа што Добар?
Кул.
>> Па на видео, исто така, ќе бидат објавени на интернет, за оние кои
мора да ја напушти сега.
Непријатно.
OK.
Па квиз преглед.
Ова е една мачка.
Сега, да го вклучите Javascript, која можеби не е како aww за некои од вас момци.
OK.
Значи тоа е првиот, се потсетиме од Zamyla.
Се сеќавам дека PHP е работи на сервер.
И многу пати, вие момци напиша петелки во PHP за печатење на HTML, нели?
Па еднаш дека кодот се извршува, што HTML излез што ќе испечатите
добива испратен до корисникот.
И еднаш што се случува, не повеќе PHP може да да се кандидира, ако ја вчитате истата страница, на
Курсот, кој reexecutes на PHP.
Но штом ќе испечатите дека HTML, вие не може да оди никаде.
>> Така што HTML е испратен во текот на корисникот, кој е пребарувач овде, каде што
Мило е со користење на компјутер.
И толку добро, постојат неколку работи Откако ќе се испрати HTML на корисникот.
Понекогаш сакаме да се направи нешто како кога ќе кликнете на нешто, сакаме
алармирање кутии за да pop-up, оние видови на интеракции, како кога ќе притиснете на
клуч, кога ќе кликнете нешто на страница, сакам нешто да се случи.
Добро, вие не може да reexecute PHP кодот еднаш дека HTML е поставена.
Па, како го правиш ова?
>> Ние се воведе нов јазик наречен JavaScript, која работи во прелистувачот
кој ви овозможува да се прават работите во HTML откако ќе го добиете
ги од серверот.
И ова е причината зошто ние го клиентска страна јавите програмски јазик.
Таа работи на вашиот компјутер -
на клиентот.
Било какви прашања во врска со тоа досега?
Таа парадигма има смисла за народот?
OK.
Добро.
Во ред е.
Па првото нешто е да се напомене е да го вклучите Javascript не е PHP.
>> Тие имаат некои различни синтакса, кои ќе одат во.
И тие имаат многу различни намени.
JavaScript, повторно, за вашиот пребарувач, за клиентот.
Сервер работи некаде на некој друг компјутер, кој испраќа информации
за вас, точно?
Па ако бараме од вас да се напише PHP код на испит прашање, не го пишувам
Го вклучите Javascript-и обратно.
Вие само ќе изгуби поени, и тоа нема да биде во право.
>> Па ајде стигнете во некој синтакса разлики -
JavaScript на левата и PHP на правото.
Првото нешто што ќе забележите со JavaScript, ние декларираат променливи со
на var клучни зборови -
V-A-R. PHP се користи на знакот за долар, како Zamyla дискутирано и порано.
Ако сакате да ја прогласи асоцијативна низа, можеме да видиме на познати синтакса на
на десната страна со PHP.
На левата страна, наместо го користите кадрава загради.
А потоа вашите клучеви се на левата страна.
Тогаш имате дебелото црево.
И тогаш го имате вредности што сакате.
>> Значи ова е како би го сториле тоа во PHP на десната страна со тоа втор
линија која започнува во Мило.
А тоа е како ќе го направи тоа за левата страна во JavaScript, ако сакате
она што ние го нарекуваме објектот.
И предмети во вклучите Javascript-се само асоцијативни низи.
Значи, ако сакате да пристапите области, PHP да ја користите оваа заградата синтакса.
И на овој начин, можете да преназначаване Овој Сопственички поле, за да Лорен.
>> Па, во JavaScript, ако некој сака да пристапите поле и менуваат, можете да
користете точка синтакса.
Исто така можете да го користите заградата синтакса.
Но вие не може да ги користат точка синтакса во PHP.
Тоа нема да функционира.
Се работи само во PHP.
И, конечно, да печати работи на конзола, можете да користите console.log, која
вие момци користи многу во pset8.
Можете да console.log тоа.
>> Ако сакате да се печати низа во PHP, мора да се користат печати r.
И на десната страна, ќе видите јас хаш низа сплет таму.
Некој праша порано.
Јас користам еден плус во JavaScript.
Ако сакам да CONCATENATE нешто во PHP, јас го користам точка.
Овие се различни.
Ако сте пишување PHP код, не користете плус.
Ако сте пишување вклучите Javascript- код, не го пишувам точка.
Тоа ќе биде во ред.
И ќе биде тажен.
>> Па синтакса разлики.
Знаете вашата синтакса, бидејќи ако треба да пишува прашање и да го користите синтакса
од погрешен јазик, таа нема да работи.
И тоа ќе биде во ред.
Па ајде да зборуваме за некои контрола проток разлики, како да користите
јамки во секоја од нив.
Zamyla преминале од десната страна.
Работи на десната страна треба да биде запознаен.
Да ги погледнеме на на левата страна.
>> Кога ќе го користите за n јамка во JavaScript, Вашиот јамка променлива, var i таму,
јамки низ клучевите на низата.
Така што гледате име, куќа, и улога.
Ако јас сум console.log, да се добие име, куќа, и улога.
Тоа се клучевите.
Во JavaScript, на foreach циклусот оди во текот на вредности од оваа низа.
Така ќе забележите дека тие се двете i.
Но тука на страна на PHP, отпечатоци надвор Мило, CS50, и маскота.
Тоа се вредности во PHP.
>> Значи овие се како овие две се различни во различни јазици.
Значи, ако сте со користење на foreach јамка, не се претпостави дека
ви дава клучеви.
И ако сте со користење на за n јамка, не претпостави дека ви дава вредности.
Дали ова има смисла досега?
На следниот слајд ќе ви покаже како можете да пристапите на спротивната во
секој од нив.
>> Па, ако имате клуч во вклучите Javascript- и сакате вредноста надвор,
можете само индекс во низа со тоа.
Па Мило на јас ќе ти добие она што сакате - на вредности.
Има оваа различни синтакса во PHP.
Ако навистина сакате да го знам тоа, јас не дека ние сме му го покажа на вас сеуште.
Но, ако сте заинтересирани, можете да го користите оваа дополнителна синтакса на десната
страна кои, всушност, ќе ви овозможи да се добие клучеви во PHP кога сте со користење на
foreach циклусот.
Па само малку trivia ако сте заинтересирани.
>> Па тоа е само за да се демонстрира разликите помеѓу овие две рунди.
Не ги измеша кога сте програмирање прашање.
Било какви прашања во врска со тоа.
Кул.
Во ред е.
Го вклучите Javascript-објекти.
Зборував за нив.
Тие се како асоцијативни низи.
Едно нешто би сакал да се напомене тука е тоа што вредност во асоцијативна
низа може да биде ништо во JavaScript.
>> Тоа дури може да биде во функција, како таму.
Имам функција која е вредноста на клучот.
И ако сакам да се јавам таа функција, Јас само пристап до кората.
А потоа ја ставив на загради после тоа.
И дека работи.
Па било какви прашања?
Не?
OK.
Добро.
JavaScript, како PHP, е лабаво отчукува.
Што значи тоа?
>> Тоа го прави да типови.
Но кога ќе прогласат го вклучите Javascript- променлива, велиш var i.
Ти не го каже.
Тоа не е работа.
Вие само велат дека тоа е променлива.
А потоа го вклучите Javascript-ќе се справи со видови под хауба за вас.
Можеме слободно да конвертирате помеѓу видови поради ова.
Па јас започнува како голем број во овој случај.
И тогаш имам стринг.
И јас го додадете i за тоа.
И јас го распореди назад во i.
>> Па на првата линија, i е број.
На втората линија, јас сега станува конецот после правам прераспоредување.
И тука, јас сум само надоврзување тој број кон стринг.
Така што гледате дека иако бев цел број во првиот дел, тоа е еден вид
на како да се конвертира во низа и потоа се додава
врз кои здраво стринг.
И така тоа е она што сакам да кажам од страна на лабава пишување.
Тоа е тоа што конвертирате помеѓу видови многу лесно.
И тоа не фрлаат предупредувања на тебе како C прави.
>> Па јас сега содржи здраво 123 на стрингот.
Следната.
Ние исто така може слободно спореди помеѓу видовите.
Значи, ако сте само користење ==, многу како во PHP, JavaScript
прави нешто слично.
Стрингот 123 е иста како и бројот 123 кога користите двојно еднакви.
Кога се користи трокреветни еднаквите, исто така, сака да бидете сигурни дека
тип е иста.
Така, бидејќи тоа е стринг, а тоа е голем број, иако тие се двете
123, кога ќе го користите трокреветни еднакво, ќе добиете лажни.
Во двојно еднаква на случај, ќе добиете точно, затоа двојно изнесува не го прави тоа
се грижат за тип.
Трокреветни еднаквите се грижи за тип.
Прашања?
OK.
>> И уште нешто во врска со JavaScript е опсегот е вид на глобалната освен ако не сте
во функција.
И тоа функционира на ист начин во PHP, всушност.
Па ајде да одиме преку овој пример.
Јас седнав до 999.
А потоа одам во тоа за јамка.
Значи, ако јас сум печатење јас во овој за јамка, очекувам 0, 1, 2, 3, 4.
Стигнам до i = 4.
Тоа јас го наголемува сега до 5 на на крајот на за јамка.
А потоа го скрши надвор од циклусот, бидејќи тоа не ги исполнува
условува повеќе.
>> Што мислите дека следната console.log отпечатоци од?
Значи тоа е она што би го направил во C. Во C, затоа што ако имаш како var i надвор
и имаш var i внатре во јамка, како за јамка, а потоа тоа го прави така што
тоа е scoped дека двете Јас се различни.
Во JavaScript, тоа само ќе се третираат како на истиот i.
Јас се 5, бидејќи тоа е вредност после тоа излезе надвор од јамка.
Па оние што се на иста i.
Дали тоа има смисла?
>> Па, тоа го прави смисла од го вклучите Javascript гледна точка.
Но исто парадигма не прави носат во текот на В Тие имаат
различни опсегот правила.
Да.
>> ПУБЛИКАТА: [нечујни]
надвор од функција [нечујни]?
>> JOSEPH ONG: Значи надвор кои функционираат?
Па јас ќе дојдеме до тоа во само една секунда.
Па ние го нарекуваме foo (i).
Ова поминува јас во foo, наголемува него, а потоа го најавува.
Па тоа беше 5.
Значи станува 6.
Но, она што јас зборувам за е дека јас во таа функција.
Затоа што тоа е параметар, тоа е scoped да таа функција.
Така еднаш бев всушност се излезе од таа функција, тоа е сега се случува да одам
назад кон стариот јас.
Дека јас само scoped бидејќи тоа е во функција.
И ние имаме обемот и функции.
Но, ние не треба обем надвор на функции во JavaScript.
Дали тоа има смисла?
Да.
Прашање.
>> ПУБЛИКАТА: Ист [нечујни]?
>> JOSEPH ONG: Значи је.
Во PHP, тоа е истиот тип на работа.
Има мало суптилност всушност.
Но може да ме прашате за дека по преглед.
Вие навистина не треба да знаете дека суптилност за квизот.
За сите намерите и целите, како променливи, глобалната и PHP, освен ако
тие се во функција, исто работа во JavaScript.
Да.
>> ПУБЛИКАТА: Зошто е ова дозволено во Вклучите Javascript-и нема каде на друго место?
>> JOSEPH ONG: Значи, зошто е тоа дозволено во JavaScript и не во C?
Тоа е само оној кој дојде со Го вклучите Javascript-одлучи дека ова е во ред во
Го вклучите Javascript-.
Па тоа е само како програмски јазик Конвенција како би рекле.
Да.
>> Публика: Па зошто оди 6-5?
>> JOSEPH ONG: Значи таа отиде 6-5, бидејќи кога јас поминав во foo, дека
Јас внатрешноста на foo е сега scoped да foo, бидејќи обемот постои во функции во
Го вклучите Javascript-.
Но, штом еднаш ќе излезам од тука, бидејќи тоа беше scoped на функцијата, јас сум само
користење на регуларни i кој беше внатре остатокот на контрола на проток.
Смисла?
Може ли да се преселат на?
Во ред е.
Кул.
>> Прифаќањето на оваа е објекти се пренесуваат по референца.
Знаете како кога ќе помине низа во C можете да
всушност менувате низата?
Тоа е истото во JavaScript.
Ако јас помине објект, во овој случај, јас помина Мило во оваа catify функција.
Мило почнува.
Неговото име е Мило банана.
Јас помине тој објект во функција затоа што тоа е објект, асоцијативна
низа во JavaScript.
>> Кога ќе се изврши операција во таа функција, тоа ќе
всушност промена на објектот.
Значи ова само ќе се случи за објекти во JavaScript, исто како што се случува
за низи внатрешноста на име C. Значи на Milo всушност, ќе стане мачка сега.
Дали тоа има смисла?
Значи ова работи само за објекти.
Објекти се донесени од страна на референцата.
Да.
>> Публика: Значи ти си велејќи дека за разлика од променливата i.
>> JOSEPH ONG: Да.
Кој променлива бев само голем број, нели?
Тоа е како во C кога ќе го положат цел број еден, тоа го прави копија.
И кога ќе помине низа, тоа всушност менува вистинските низа во
В Истото се случува со Вклучите во овој случај.
Во ред е.
И следниот, Мило е тажен затоа тој е сега една мачка.
Тоа беше всушност Мило по некои посета на ветеринар.
>> Така како ние да го користите вклучите Javascript- во веб-страница?
Можеме да го вклучат.
Ова е HTML код со лента тагови.
Па морам лента тагови таму.
А потоа ја ставив некои го вклучите Javascript- кодот во рамките на сценариото тагови.
А потоа го извршува ова.
Кога јас само го прават тоа како овој, тоа е наречен РЕГИСТРАЦИЈА вклучите Javascript-.
Тоа е вид на неуредна, затоа што JavaScript е всушност во HTML.
>> А подобар начин да го направите ова, многу поубав, е да се напише вашиот JavaScript во
надворешен фајл, а потоа се обезбеди сценариото таг со извор.
И ова ќе одат на таа вклучите Javascript-датотека и прочитајте го вклучите Javascript-кодот од
таа датотека наместо тоа.
И на овој начин, вие не мора многу Го вклучите Javascript-на почетокот на вашиот
HTML датотека, што го прави тоа навистина неуредна.
Можете само да го стави некаде на друго место.
И тогаш тоа ќе го читаат од таму.
Дали тоа има смисла?
>> Поставување прашања.
Во конкретниов случај, сценариото е пред телото.
Па кога ќе се изврши тоа, нема ништо во телото уште.
Можеби ова ќе се направи малку повеќе смисла, кога јас ја прикажете следниот дел.
Во овој случај, сценариото доаѓа по div.
Така всушност се појавува div на првата страница.
Токму тука во овој мал црвен круг, ќе видите се појавува текстот.
А потоа на алармирање се појавува.
>> Во првиот случај, бидејќи сценариото беше пред div, на
алармирање се појавува во прв план.
А потоа div појавува по ја отфрлите кутија.
Па извршувањето важно.
Па ние ќе се задржи ова на ум.
Ова ќе биде важно во малку.
OK.
Толку добро, како да се почека до целата страница е преполн тогаш пред да
изврши некој код?
Ние ќе дојдеме во овој малку малку подоцна премногу.
Но само продолжи оваа поставеност прашања во умот кога ние
дојде до друг слајд.
>> Па ние да се ДОМ сега.
И она што е ДОМ?
Значи, ако се погледне на HTML код, тоа е само еден куп на текстот на екранот.
Па како не го вклучите Javascript-се знае дека ова е HTML елемент?
Значи ние треба да имаат некои меморија застапеност на овој
структура што го имаме.
И секогаш кога имаме оваа меморија застапеност во JavaScript, ние го нарекуваме
дека ДОМ.
И тоа е само начинот на кој луѓето одлучија дека ние треба да претставува овој
HTML структура како.
>> И она што го прави ова ДОМ изгледа?
Па, во меморијата застапеност, ние ја искористам оваа текстот.
И ние ја претвори во меморијата застапеност.
Значи ова е HTML.
Па ние прво да дознаете што секој DOM-стебло има документ.
Тоа изгледа како дрво.
И документот содржи HTML ознака, всушност се
внатрешноста на оваа сега.
HTML таг има две деца.
Таа има глава.
Дека главата, ако се погледне на вовлекување таму на тоа како е структурирана
меѓу блиски тагови, главата има дете.
Детето е насловот.
Токму така.
>> Сега, имаме тело дете.
И тогаш тоа тело има дете наречен семејство.
И дека семејството има три деца -
Најстарата, средината и најмладите.
Така што треба да знаете како да се подготви дијаграм вака кога бараме од вас како
да се подготви дијаграм кога даваме ви го HTML на левата страна.
Знаете како да се произведе DOM-стебло.
И во внатрешноста на овие работи, има само некој текст, што сум претставен
малку кутии.
>> Дали ова ДОМ дрво структура направи смисла и она ДОМ е?
Значи она што го прави стр штанд за?
Овде, на стр таму во таа ознака претставува
став таг во HTML.
Па можете да го погледот.
Но, тоа само значи дека некои простор за текст.
И има некои стандардно CSS стил, затоа што тоа е став таг.
Но навистина не се грижат за тој дел премногу.
Само знам дека е случаеви за некој текст.
Да.
Прашање?
Да.
>> Публика: Вие само споменати CSS.
Хаш семејството и хаш сите нешта е во основа
претставуваат лични карти во CSS?
>> JOSEPH ONG: Да, точно.
Јас ќе добиете на она што овие хашови значи во секунда.
Кога Ангела заврши над CSS, таа зборуваше за CSS селектори.
Овие се CSS селектори кои таа беше зборува.
Да, Роб?
>> Роб BOWDEN: Јас, исто така, сакаше да коментира дека ДОМ внатрешноста на титулата таг
е исто така текстот јазол.
>> JOSEPH ONG: Право.
Па внатрешноста на титулата таг, Имам некој текст ДОМ.
Значи, навистина, овој наслов треба да има како мала кутија доаѓа надвор од неа, како и.
Но, тоа не е навистина важно, премногу во овој случај.
Ние навистина не се грижат за текст јазли, како што ние ги нарекуваме, премногу.
Добро, што правиме.
Очигледно, тоа го правиме.
И јас ќе го поправам тоа кога Јас го испратите повторно.
Дали тоа има смисла?
>> Па, како да се работи со ДОМ?
Секогаш кога ќе се справи со ДОМ во JavaScript, постојат два чекори.
Изберете ДОМ елемент.
А потоа ќе се прават работите на него.
Значи во овој случај, апстрактно, јас сум избрани средината елемент.
А потоа еден пример на вршење на работи да тоа ќе биде промена на текстот.
Кои се користат да биде на Боб.
Сега, она што го направив за да тоа беше Ја променив Боб да Мило во овој случај.
>> Па, како да ние всушност го направите ова?
Како го правиме на избирање?
И како го правиме на прави нешта да нешто еднаш сме го земе?
Па, начинот на кој вие момци го научиле во оваа класа е со користење на нешто што
наречен jQuery.
Значи она што е jQuery?
jQuery е библиотека која го прави Го вклучите Javascript-полесно да се пишува.
Па некој го зеде време и напиша jQuery.
>> jQuery е всушност напишан во JavaScript.
А потоа, бидејќи тие го направи ова, ние сега имаат целиот куп на функции кои
можеме да го користиме кои го прават нашите живее навистина лесно.
Значи она што се некои од работи го прави тоа?
Тоа го прави изборот елементи полесно.
Тоа го прави промена на HTML, додавање на класи полесно.
Тоа го прави Ајакс полесно.
Ние ќе дојдеме до дека во една секунда.
>> И тоа е аналогно на C библиотеки.
Така да вклучуваат string.h, ќе добиете strlen.
Ќе добиете strcpy, сите од овие работи.
Кога ќе го вклучите jQuery, можете да се добие убав начини за да изберете елементи за да се промени
работи, и така натаму.
Ќе добиете дополнителна функционалност која Го вклучите Javascript-не ви даде.
Па jQuery не е да го вклучите Javascript.
jQuery е библиотека која е напишано во Го вклучите Javascript-што го прави го вклучите Javascript-
полесно да се пишува.
>> Па jQuery не е програмски јазик.
Но го вклучите Javascript-е.
направи.
Сигурни дека ќе добиете на вашиот терминологија право.
Било какви прашања?
Да.
Дали е тоа прашање?
Во ред е.
Па, како да го користите jQuery?
Добро, кога сте пишување на некои JavaScript код и може да вклучи
jQuery на врвот на вашата датотека како скрипта датотека, можете да користите на знакот за долар
сега за да добиете пристап до jQuery.
И ова е различно од на знакот за долар во PHP.
>> Тоа е истиот симбол што тип на вашата тастатура.
Но тие значат многу различни нешта.
Знакот за долар во PHP значи дека оваа е како јас декларирате променлива.
Во JavaScript, кога сте вклучени jQuery, таа се залага за jQuery.
Па задржи дека во умот.
Па како може да се селектира ДОМ елементи?
Па, кога ќе го направи тоа грдото го вклучите Javascript- начин, можете да пристапите до
документира глобалната променлива.
И тогаш ќе го добиете елемент од проект семејство.
Ова е навистина долга и разточен и не многу убаво.
>> Или можете да ги добиете сите елементи кои се P таг.
Која работи премногу во JavaScript.
Но никогаш не сме навистина покажа можете синтаксата премногу.
Она што ние покажа дека си jQuery.
Така што целиот селектор таму дека беше изразено во JavaScript само добива
кондензирана на овој многу убаво долар потпишат hashtag семејство.
И $ p, само каде што тоа е како тоа.
Ако сакате да изберете сите p тагови во внатрешноста на семејството, ние се стави простор
помеѓу двете.
И сега, ние ги добиете сите p тагови внатре во семејството.
>> И изгледа познато?
Па, Ангела зборуваше за CSS селектори.
Дај ми една секунда.
И така со цел да изберете елемент, само користење на истото како што
би направиле со CSS селектор.
Ако се стави хаш пред од него, го избира од страна на проект.
А точка избира по класи.
Ако само има нешто без хашови или точки, тоа го избира овие тагови.
Прашања.
Да?
>> Публика: Кога ние ги користиме точка во нашата HTML, е дека не jQuery?
>> JOSEPH ONG: точка во нашите HTML е да го вклучите Javascript работа.
Тоа не е jQuery работа.
Начинот на кој вие момци го научиле со jQuery е да го користите. HTML.
И тогаш ќе го донесе она што HTML кодот е и ќе биде.
Па јас ќе дојдеме до тоа во само втор всушност.
Така како ние да направи нешто за да се елемент еднаш ние сме го одбрани?
Па тоа е пример за изборот на елемент.
Па сега, ние сакаме да го работи на него.
>> Значи во овој случај, да се навратам на претходниот слајд.
Тоа беше Боб порано.
И јас сакам да го промени тоа внатре HTML да Мило.
Па јас го нарекувам HTML функција од елементот.
Дека HTML функција е метод на елемент.
И тогаш јас го даде она што Сакам HTML да биде.
И тоа само го заменува она што е внатре на таа ознака со она што јас го даде.
Да.
Прашање?
>> Публика: hashtag се користи за само jQuery.
[Нечујни]
ние не ќе го користи тоа.
>> JOSEPH ONG: Да, точно.
Но, не грижете се премногу за чиста вклучите Javascript-.
Јас само сакам вие момци да се фокусира на тоа како можете ќе го стори тоа со jQuery, бидејќи
тоа ќе биде важно дел на квизот.
Во право.
Токму така.
Па ќе видите дека hashtag, така што одговара да изберете елемент со
лична средината поради тоа hashtag.
Hashtag значи проект.
И овој елемент има проект на средината.
Значи тоа е елемент ние избираме.
>> ПУБЛИКАТА: [нечујни].
знакот за долар hashtag [нечујни]?
>> JOSEPH ONG: Значи бр.
Прашањето е можете да го користите. Вредност.
И. Вредност работи само на елементи кои се влезови.
Во jQuery, тоа ќе биде . Вал, не. Вредност.
Па јас ќе дојдеме до еден мал пример дека покажува сето тоа во комбинација
во втор.
Но мислам дека ова служи малку програмка Логично е да се луѓе досега.
Сакате да го смените HTML, јавете се на HTML метод.
Да.
>> Публика: Можете ли да објасните методот повторно?
>> JOSEPH ONG: Значи метод е само функција која припаѓа на една, во овој
случај, една од овие ДОМ елементи, затоа што те гледам јас
избрани елемент прво.
Всушност, дозволете ми да го користите глувчето.
Јас избрани елемент во прв план.
А потоа се јавив овој HTML функција која ја имаа.
И поради оваа функција му припаѓа на ова нешто, ние го нарекуваме метод.
Тоа е само фенси име за него.
Кажам дека повторно.
Значи се сеќавам, ние избрани елементот сега.
И ние го стави во внатрешноста на елемент променлива.
Точно?
>> Па кога ќе сакате да го смените HTML на внатре, затоа што тоа беше Боб пред тоа,
сакате да се смени текст на Мило.
Па ние го нарекуваме HTML.
И ние го кажам она што на HTML во внатрешноста тој елемент треба да биде сега.
И затоа таа се менува во Мило, бидејќи јас ја даде Мило.
>> ПУБЛИКАТА: Значи тие си работат заедно.
[Нечујни]
>> JOSEPH ONG: Да, да.
Тие си работат заедно.
Па еден од нив го избира елемент прво.
А вториот не нешто на него.
Да.
>> ПУБЛИКАТА: [нечујни].
Ако овој метод е различен од во HTML имате метод еднакви вистински.
>> JOSEPH ONG: Да.
Кој е различен метод.
И ние може да ги покрие дека во само една секунда кога ќе го добиеме на пример.
Сакам да бидете сигурни дека ние се забрза бидејќи ние сме работи надвор од времето.
Но ние сме се кандидира начин со текот на времето сега.
OK.
Кул.
Значи, ако сакате да додадете класа, има исто така додаток класа метод.
Ова е само еден пример на она што можете да го направите со jQuery.
Дека само додава класа.
>> Ако сакате да го отстраните, можете да се јавите отстрани.
Тоа е само уште една работа што можете да направите.
Толку повеќе примери на она што можете да направите.
Па можам само да го стави во врвот вака?
Најмладиот отстрани.
Ако јас само се изврши дека го вклучите Javascript-на врвот на мојата датотека, која ќе функционира?
Во право.
Бидејќи средината сеуште не постои.
Значи ова не е оди на работа.
Извршување ред.
Тоа оди до врвот во прв план.
Што?
>> Публика: Најмлад сеуште не постои?
>> JOSEPH ONG: Да.
Најмладиот уште не постои.
Токму така.
>> Публика: Вие рековте средината.
>> JOSEPH ONG: Извини.
Најмладиот уште не постои.
И друга работа е што не треба вклучени на jQuery
поднесе побара скрипта src.
Така што нема да работат.
Всушност, јас не го стори тоа во следниот слајд, кое е
би требало да се утврдат дека било.
Но начинот на кој го правиме ова е да го вклучите Javascript е управувано настан.
Значи она што го правиме е ние ги користиме настан управувачот за да се случи ова.
И така јас изберете го документот постави прв план.
Велам, во ред, кога документот е подготвени, дозволете ми да извршувате функција.
Па тоа е се што синтакса средства.
>> Јас избрани документот.
Сега, кога документот е подготвени, се кандидира на функцијата.
И така овде кога документот е подготвени, што значи дека сите HTML има
натоварени, тогаш јас се кандидира на функцијата која се отстранува тој елемент.
И така сега, кога јас ја извршите оваа функција дека јас помина во подготвена, јас сум
гарантира дека сите HTML на страница се случува да постои во прв план.
Да.
Прашање?
>> Публика: Што е случај клучни зборови во рамките на функцијата?
>> JOSEPH ONG: Значи тој настан клучен збор во функција е само параметар кој
добива предадена на функција за секој случај.
Тоа е само нешто што ќе добиете бесплатно.
Кога ќе се користи клучот ракувачи во pset8, тој настан би можел да ти кажам, за
пример, кој клуч ќе притисне на.
Во овој случај, за подготвени настан, тоа е, всушност, не супер корисни.
Но за клучните надолу настан, тоа е повеќе корисни, затоа што сте се да се знае кој
Клучни сте притиснати од пристапот кон клучните код исклучи дека настанот објект.
Точно?
Дали тоа има смисла?
OK.
Да.
Прашање?
>> ПУБЛИКАТА: Значи може да се стави на скрипта таг пониски надолу?
>> JOSEPH ONG: Значи је.
Може да се стави на сценариото таг пониски надолу.
Но, тогаш тоа само станува навистина неуредна.
И ние сакаме да се централизира сите на нашите код на едно место.
И тоа ќе ни овозможи да го направи тоа.
Се сеќавам порано реков, тука е поубав начин да се осигура дека елементите се
на оваа страница пред да се изврши код?
И ова е само убав начин ќе се постигне тоа.
>> ПУБЛИКАТА: [нечујни].
>> JOSEPH ONG: Да.
Се уште ќе треба да се, нели?
Бидејќи се сеќавам, вклучени поднесе на врвот на страната.
Па затоа се случува да се изврши пред да ќе стигнете до дното на оваа страница.
OK.
Така што исто така може да додадете различни тип на настан управувачот.
Оваа една само процеси кликне.
Кога ќе кликнете на најмладите, а потоа тоа ќе pop-up со предупредување.
Ова е само поинаков тип на настан.
Што е спротивно на готовс настан, сега користете кликнете настан кога ќе примите
кликне на елементот.
>> И така во овој случај, се сеќавам, на клик управувачот е во прилог на најмладите.
Значи тоа се случува само кога Јас кликнете на најмладите.
И во другиот, подготвени настан беше спроведен на документот.
Па тоа го чека документот да биде подготвен.
Смисла?
Мислам дека може да се движат натаму.
Да.
Прашање?
>> ПУБЛИКАТА: [нечујни].
во овој случај треба да користите [нечујни].
>> JOSEPH ONG: О, да, затоа што во овој случај, морам да чекам за најмладите
елемент да се појави на екранот прва пред да може да се закачите на клик управувачот за да се
, која е причината зошто го ставив внатре на документ подготвен.
OK.
И следната, така што ова е голем пример за како ќе се комбинираат сè.
Ова е само форма валидација пример сте виделе во предавање.
Па се земе тоа, чекор по чекор како ќе поминат низ ова.
И тоа ќе биде сосема во ред.
Само го читаат од врвот до дното.
>> Имам форма на дното.
Кога документот е подготвен, јас прикачите поднесе управувачот на форма, како што
кога ќе ги достават форма, да се добие вредностите во секоја од овие влезови.
И јас се провери дали тоа е празно.
Ако тоа е празно, ќе се вратам лажни, бидејќи Не сакам да ги достават форма,
бидејќи форма е во ред.
Ако лозинката е празно или тоа е помалку од осум карактери, јас не ги достават
форма, бидејќи тоа е, исто така, не е во ред.
И враќање лажни само спречува форма од поднесување и
одат на нова страница.
>> И се надевам дека ова има смисла.
Мислам дека вие момци треба да прошетка низ овој код чекор по чекор за своја.
И штом еднаш ќе се разбере она што одберете елементи и направи нешто за да го
всушност подразбира, ова ќе направи многу смисла за вас.
Да?
>> Публика: Што значи име = корисничко име значи?
>> JOSEPH ONG: Значи име = корисничко име и име = лозинката само значи да се погледне на
атрибут на она што сте изборот.
И тогаш тоа треба да се совпаѓаат.
Значи одиме во регистрацијата.
А потоа ќе се разгледаат сите влезови и регистрација.
А потоа ние го изберат оној каде што името атрибут е еднакво на корисничко име.
Така што првиот селектор само избира корисничко име влез.
И дека вториот селектор само избира лозинка, бидејќи тие имаат
нивното име атрибути постави како што тие би требало да биде.
Прашање?
>> ПУБЛИКАТА: На поднесување, како не на долниот дел реши горниот дел?
>> JOSEPH ONG: Значи тоа е затоа што на настанот управувачот.
Па ние сме чекајќи ги достават настан кој добива отпуштен од форма.
И тоа е сè што е поднесе.
Зошто јас го нарекувам достават до таму?
Таа вели дека, кога се поднесува форма, Јас добие поднесе настан.
Па дозволете ми да го пресретнат дека и потоа ја извршите оваа код наместо тоа.
Да?
>> ПУБЛИКАТА: Зошто имате да имаат функција настан?
Зошто да не може да ви само [нечујни]?
>> JOSEPH ONG: Бидејќи во JavaScript, мора да се декларираат функции.
Тоа е само како тоа функционира во JavaScript.
Мора да се каже што се случува за да извршувате функција.
Па ти си тоа го кажувам дека ти си очекувајќи функција тука, наместо на
само големите загради.
>> Публика: А функција е она што следува?
>> JOSEPH ONG: Да.
Функцијата е она што е внатре на тркалезните загради по
таа функција клучен збор.
Да?
>> ПУБЛИКАТА: [нечујни].
>> JOSEPH ONG: За поднесе?
>> ПУБЛИКАТА: Не, за функцијата без настанот.
>> JOSEPH ONG: Да.
Значи без настанот, можете да го имаат тоа.
Ако не треба настанот, тогаш само може да го изостави.
Но, ако го направите, тогаш ќе само да го стави таму.
Да.
Брзи прашање?
>> ПУБЛИКАТА: [нечујни].
>> JOSEPH ONG: Да.
Затоа што она што ви треба да се направи, document.ready само вели чека за сите
HTML кодот на страницата да се вчита во прв план.
И обично, сакате вашиот елементи во место, пред да ја стартувате која било код.
Во ред е.
Ние мора да се добие во Ајакс.
Ние немаме многу време.
Па добрите и лошите страни.
JavaScript е полесно обид пишуваат со jQuery.
Но jQuery е вид на бавно.
>> Тоа е како PHP е побавно од C, затоа што тоа е толкува.
И jQuery е малку побавно од JavaScript, бидејќи тоа го прави многу
работите под хаубата.
И така, ако сте со користење на веб, тоа е само малку побавно од
JavaScript, иако тоа ви дава убав елеганција.
И, конечно, Ајакс.
Досега со Ајакс, не сте виделе Ајакс во однос на pset7 сепак, бидејќи
кога ќе го направите, ќе ги достават форма да го цитирам.
Се вчитува нова страница.
Па ќе го добиете овој голем бел блесок на оваа страница додека таа
втората страница товари, точно?
>> Тоа би било навистина убаво ако не имаат овој флеш.
Како што се Фејсбук, ако само дојдете до на дното, се додава нова содржина
без освежување на целата страница.
Па нешто како ова ќе биде убаво.
Ова е JavaScript код на левата страна.
Вие добие она што е внатре на тој влез.
Ќе го добиете акции информации од Yahoo!
А потоа ќе се направи голема стринг кој вели, во ред, ова е пораката што сакам
да се покаже на екранот.
А потоа ќе се стави на таа порака во внатрешноста на некои HTML елемент кој добива
прикажани на екранот.
>> Па тоа е се што се случува овде.
Значи, во основа, бидејќи тоа е за сите Вклучите Javascript-и не треба да се кандидира
повеќе PHP, тоа ќе бидете сигурни дека дека страницата не освежи.
Значи ова е само една апстрактна идеја дека јас велам овде за сега.
Апстрактен идеја е дека ако го направи тоа сите во JavaScript, немаат
страница освежи.
Но како да всушност го направите ова?
>> Па, всушност, ајде да зборуваме за проблем со овој прв.
А проблем е во JavaScript, извршување е синхронизирана.
Па ќе мора да почека за еден линија да заврши пред да
изврши на следната линија.
И што ако јас одам во текот на Yahoo!, и нивните сервери се навистина бавно, и
таа ги зема три секунди за да дај ми врати дека акциите инфо?
Кога ќе се погоди таа цена линија, ако извршување е синхронизиран, исто како што не
Стандардно, што е само случува да направите е да Вашиот прелистувач ќе го одложи за
три секунди.
И вие нема да бидете во можност да го стори ништо додека таа добива податоците.
Тоа се случува да бидат замрзнати.
>> И тоа е лошо.
Вие не сакате корисникот да имаат замрзнати веб-страница.
Точно?
Тоа е само лош.
Сите се согласуваат?
Ако сте во прелистувањето на Фејсбук и замрзнува и не можете да направите ништо,
се навистина фрустрирани.
Значи решението е правиме нешто асинхрони наместо тоа.
Значи сето ова асинхрони работа вели дека е, јас ќе одам да прашам ова
URL за некои податоци.
А потоа јас ќе одам да продолжувам да одам.
Јас сум само ќе го задржи извршувањето што код, кој беше после тоа.
>> И тогаш кога податоците е подготвена, тогаш јас ќе го обработи.
Тоа е се што се кажува.
>> ПУБЛИКАТА: Ајакс само прави кодот асинхрони?
>> JOSEPH ONG: Тоа е асинхрони начин на преземање на податоци.
Така првото нешто за Ајакс е тоа ми овозможува да се добијат податоци
од надворешен веб-сајт.
А втората работа е тоа го прави сигурни дека мојата страница не се одложи додека сум
преземање на податоците.
Тоа е асинхрони дел од неа.
Поради тоа што заминува некаде на друго место, затоа велам јас продолжувам да одам додека ја
тоа е преземање на податоците, што го прави асинхрони.
Продолжувам извршување.
>> Така да тоа асинхрони идеја во умот.
И јас ќе ви покажам што разликата е.
Синхрони верзија се наоѓа на левата страна.
Асинхрони верзија е на десната страна.
Се погледне на броеви за да ја видите кои чекори одговараат на она што
извршува на секоја линија.
Таму, на алармирање се појавува во прв план.
Бидејќи добивање акции информации од Yahoo!
зема три секунди, прегради за три секунди.
И тогаш тоа предупредува цена по оние три секунди.
>> Па сега, кој алармирање емисии во тоа време -
три секунди внатре
И тогаш тоа предупредува од после тоа.
Па тоа само оди чекор по чекор.
Тоа е како што вие момци ќе го прифати, точно?
Со асинхрони извршување, ве извести во прв план.
Тогаш ќе одам на оваа URL-то.
И ви кажам, јас одам да се само прашувајте за податоци.
А потоа јас ќе одам да процесот подоцна.
Така што веднаш ги извршува следната линија откако ќе го направат тој
асинхрони барање.
>> Па 0,001 секунди, ќе видите алармирање Здраво.
Изврши таа функција, предупредување чао.
И бидејќи јас даде ветување дека јас ќе ги обработува податоците подоцна, што
се случува е дека кога податоците се враќа три секунди подоцна, тогаш јас ја стартувате таа
функција што имам таму.
Да?
>> Публика: Може ли да наведете или се разјасни што Ајакс значи?
>> JOSEPH ONG: Значи Ајакс е начин дека ако јас треба податоци кога сум на веб-сајт и јас
не сакаат да се освежи страница, а потоа Ја користам оваа технологија наречена Ајакс.
Што во суштина само значи, оди донеси податоци од друг веб-сајт.
И направете го тоа на начин на кој само не го одложи мојата веб-страница.
>> Публика: Така е тоа вродено дел од JavaScript или jQuery?
>> JOSEPH ONG: Значи некој напишал начин да се направи ова во JavaScript одамна.
Во еден момент, таа не постои.
И така некој измислен оваа техника да им овозможи на луѓето да бараат овие податоци
во оваа мода.
И тие напиша некои работи да го стори тоа за вас.
И jQuery само ви дава оваа многу убав начин да го направи тоа
со овој $. добие функција.
прашања?
Можам да одговори на прашања за Ајакс потоа премногу.
Јас ќе бидам тука.
>> Па тоа нека ни пренесам податоци без освежите страницата.
И тоа нека ни го прават тоа во асинхрони начин што
не замрзне страница.
Премногу долго, не си го прочитал, ако тоа објаснување беше премногу долго за вас.
Значи, конечно, крос-сајт Скриптирање напади.
Ние го виде тоа со Zamyla.
Ако во мојата база на податоци некој има ова име, која е оваа скрипта таг, и јас
има некои код на мојата страница која отпечатоци надвор имињата на луѓето по ред, или јас ќе треба
некои JavaScript код кој внесува ова име во страница,
она што HTML добива произведени?
Па, јас печати од HTML таг.
Јас печатење на сите овие тагови.
>> Стигнам до делот каде што јас сум за печатење со другарките.
Јас печати Лорен надвор.
Го испечатите Мило надвор.
А потоа моето име во базата на податоци е скрипта пост
unflattering статус на Фејсбук.
Бидејќи јас вметнува ова во страница поради тоа што изгледа како JavaScript, кога
оваа страница добива испратен до корисникот, станува погубен како го вклучите Javascript-.
И така тоа е она што ние го нарекуваме крос-сајт скриптирање напади.
Некој го става злонамерни информации во вашата база на податоци кои би можеле да одговараат на
некои дополнителни стринг или некои го вклучите Javascript-стринг.
>> И кога станува отпечатени на страница во оваа мода, тогаш што
се случува е дека лош код добива извршува дека јас не планираат
за тоа да се извршуваат.
И тоа е се крос-сајт скриптирање напад е.
И начинот на кој ви се околу ова е како Zamyla рече.
Вие само заврши работите во HTML специјални карактери.
И ова HTML специјални карактери е PHP функција која ќе се спречи овој вид
на работа од случување со тебе ако имате малициозен
стринг во вашата база на податоци.
Тоа само го бега, така што тоа не го прави се толкува како HTML.
Тоа ја заменува малку загради со она што ние го нарекуваме лица.
И отидовме во текот на овој во предавање премногу.
Па мислам дека вие момци треба да имаат добро разбирање за тоа.
Прашања?
Да.
>> Публика: Па, како би на [нечујни]?
>> JOSEPH ONG: Кажи го тоа повторно.
>> Публика: Како би монитор -
>> JOSEPH ONG: Право.
Па имате нешто што вели, кога Јас се регистрирате, тип во мое име.
Јас само напишете во тоа поле, моето име е stript пост непријатен Фејсбук
статус блиски сценариото таг.
И дека само добива се стави во база на податоци, бидејќи не можам да кажам некој
во светот не имаат име со левата стрелка во неа или
Зборот скрипта во неа.
Што воопшто не се направи смисла.
Па јас само треба да бидете сигурни дека јас дезинфенкцирам нешто пред да го печати
до страницата.
>> ПУБЛИКАТА: Значи HTML специјални картички спречува скрипта тагови?
>> JOSEPH ONG: Да.
Па тоа не ги спречува сценариото тагови.
Тоа само ги прави сигурни дека скрипта тагови не се
толкува како HTML или -
Да.
Тоа само доаѓа до како што што всушност е.
Во ред е.
Така што беше разгледување квиз.
Кул.
>> [Аплауз]