SAM LEVATICH: Benvido ao sección para esta semana. Non son Andi. Andi caeu enfermo o día de hoxe, e eu foron tipo de chamada no último minuto para asumir. É estación de gripe, polo que asegúrese de que están quedando limpo, lavar as mans, e alimentación saudable para que ti, tamén, non están acamado. Pero sen máis delongas, imos comezar. Hoxe, nós estamos indo falar sobre PHP un pouco como bit-- PHP refire ao HTML, como refírese a CSS, e algunha da tea cousas que fixo na última asignación. Imos falar un pouco sobre SQL e como pode traballar con bases de datos, que é un compoñente moi clave de I definir 8-- P axustou 7. P axustou 7. E entón imos falar un pouco pouco sobre como controladores de vista traballar e por que isto é unha filosofía detrás dalgúns páxinas web modernos e un deseño diferente. Practicamente unha morea de tipo de aplicacións e pode enviar aplicacións Está a utilizar este modelo, framework controlador de vista, que estará usando en I axuste 7, entón eu vou falar un pouco sobre por que se fixo popular, por que é importante e agradable. E entón eu vou finalmente pasar algúns consellos combate P axustou 7. E se temos tempo sobrando ao final, podemos realmente facer algunha en que traballar en conxunto. Entón, PHP. De feito, pode notar isto-- realmente non ten que mergullar ele-- pero P axustou 6 tivo algún PHP código que estaba acontecendo. E por que o PHP é un C-like lingua, PHP, a diferenza de HTML e CSS, é unha linguaxe de programación, Considerando HTML e CSS son estáticos. Son linguaxes de marcado que lidan con estilo e deseño visual. PHP é o negocio real. PHP ten loops, ten conditions-- todo isto que é divertido sobre C. Ten algunhas cousas que son un pouco pouco mellor que C, o que imos ver, pero creo que o xeito máis doado de falar sobre o PHP é só para mergullo. Entón, eu estou indo a ir á dereita no IDE neste momento. O primeiro que imos facer é realmente ollar un pouco nalgúns dos Código PHP que estaba en I axustou 6. Así, a forma que nós facemos isso-- antes, o xeito que estabamos correndo servidor para o aparello era que teriamos que type-- utilizar a súa posta en marcha ou a aplicación do equipo de server.c entrando directorio e funcionando server.c tanto con ningunha arguments-- tan só chamalo na servidor local, que é o que probablemente fixo a maior parte do tempo-- e, a continuación, alimentando- un con directory-- que para usar como a súa raíz onde o sitio vai executar, basicamente. Esta semana a I axuste 7, como grande como o noso código para server.c é que hai persoas que xa teñen escrito estas cousas finas sobre a CS50 que ter un pouco máis funcionalidade, un programa de servidor que é capaz de xestionar algo máis dos meandros que imos ver tanto en I axustou 7 e P set 8. E a forma que se inicia o servidor é só escribindo "apache50." E antes de facer calquera cousa, quere asegurarse de Apache 50 non é xa en execución, xa que é na miña máquina, que eu fixen para proba-lo. E fai iso chamando apache50. Parar, e vai ver que está parando o servidor web, se pode ollar alí na parte inferior da ventá do terminal. E despois é só para comezar, estamos vai chamar, "apache50 comezar." E entón nós imos para alimento-lo un directorio. Agora, porque queremos mirar nalgunhas das P axustou 6 código que tiñamos aplicado, realmente copiado un pouco do P axuste 6 código na miña propia cartafol, que se pode ver na parte esquerda alí. É chamado de "SECTION8" en maiúsculas porque eu estou tan animado a ser transmitido en directo hoxe. Entón, se nós funcionan este, que debería todos traballan moi eficaz. Ela di, OK, noso sitio é agora dispoñible na páxina do IDE, basicamente, que é o que estaba usando exactamente como era o P definir 7-- P axustou 6. Todos os meus índices son un índice de hoxe. Así, podemos ir aquel dirección, se se lembra, só premendo neste pequeno botón na esquina superior dereita. E vai lembrar este código, que aconteceu cando foi para hello.php. E o que o código está deseñado para facer é cando escribiu un nome aqui-- se di Sam porque esa é a miña nome-- e premo Say Hello, cando fomos á seguinte páxina, nome que foi suposta ser exhibida. El dicía: "Ola, Sam" ou "Ola", o que quere que nome poñer nel, aínda que fomos a unha enteiramente nova páxina web. E este é o tipo de cousas que o PHP pode facer por ti. PHP é capaz de transmitir datos entre dúas páxinas web. Esta é unha páxina totalmente diferente. Podes ver o título é "Ola" aquí. En realidade, eles teñen mesmo título, pero eu prometo que son diferentes web páxinas, se miramos a fonte. E pode pasar os datos que se introducido neste campo de texto, envialo á seguinte A páxina que está a ser chamado, e, a continuación, de datos que é capaz de estar alí na súa forma actual. Agora aínda non aplicaron este nós mesmos, o que é o que nós imos facer agora para especie obter un sabor de como PHP funciona, pero a idea fundamental é que pode PHP-- tipo de pensar niso como unha función. Algo que o PHP pode deixalo Non é que pode levar parámetros que entra nunha páxina HTML mediante o uso de PHP e formas, e pode pasar os parámetros como á seguinte páxina que leva. Neste caso, nós estamos levando a esta A páxina co botón "Diga Ola". Pero, por agora, realmente excluído algúns dos que o código no hello.php que estaba en execución que foi, de feito, mostrando o "Ola, mundo "ou" Ola, Sam "ou "Ola," o que quere que era só de entrada. Entón, por agora, estamos vai facer iso, basicamente. Nós imos recrear iso e tamén engadir máis algunhas funcionalidades, facer un pouco máis con el, ver PHP é realmente capaz. Entón, primeiro, imos falar sobre este ficheiro, hello.php. Entón, se nós zoom nun bit-- pouco e agora estou tipo de tentar percorrer todo o xeito circundar-- alí imos nós. Verá que se chama ola.php, pero a sintaxe de que mira como un ficheiro HTML. Isto é porque o PHP real neste ficheiro é prendido entre todos estes question mark-bloques acento circunflexo. Todo aquí considérase código PHP. E vai entender que cando eu fixen un comentario, vai ver o familiar dúas barras. E se se lembra, en HTML, se eu escribir un comentario, parece algo máis preto tanto, que é un comentario HTML. Entón, realmente todo entre estes dous corchetes agora é código PHP, que reflicte-se no feito que este pequeno símbolo de comentario é transformado nun comentario. Así, cada vez que escribir código PHP, mesmo se non hai ningún código HTML fóra del, está sempre será pechado nestes corchetes con puntos de interrogación. Pode tipo de pensar como todo isso-- do código que corría nos seus programas C foi pechado nun int main, baleiro, chaveta, rizado declaración final cinta. E podes ver claves en PHP tamén, pero este é o tipo de como o principal método de PHP. Entón, agora, como é que imos facer algo en PHP? Agora, PHP é unha programación linguaxe que é moi parecida C, pero opera na web. Entón, unha cousa que vai immediately-- un das primeiras cousas que realmente fixo C foi impreso material para fóra, non? Así, en C que fixemos cunha función printf. Demos-lle unha corda, probablemente cunha nova liña, e, despois, pechado cun punto e coma. Así, a forma que nós estamos indo a facelo en PHP-- porque non é moi printf. É un pouco de sintaxe distinta. O xeito que imprimir as cousas en PHP é que dicimos, "echo Ola" ou "eco" calquera palabra. E iso ten o efecto de facer printf cunha corda, "Ola". E engade a nova liña para el. Entón, imos agora facer sure-- Vou reducir novo un pouco bit-- imos asegurarse de que que o código funciona porque non podería ben ser un erro neste código que teremos que facer fronte. Entón, o servidor xa está en execución. Entón, se nós rolar para atrás ata o fondo, si, o servidor aínda está en execución. Entón, se nós só tocar neste dereito pouco aqui-- welcome-- debemos get-- grande. Aínda estamos tendo a familiar "Diga Ola" diálogo, pero cando escribir "ola," veremos que o texto "Ola" era de feito impreso, que é exactamente como que esperabamos porque ecoam en PHP é como unha instrución printf. Entón, de volta ao código, como en I axustou 6 fixen o código de distribución que son proporcionados facer que o PHP saída a cousa que ingresaran na pantalla anterior? E a sorte de examinar por que isto ocorre, estamos indo para entrar en index.html, que é o arquivo orixinal, o arquivo que aparece na pantalla co botón "Diga Ola". Entender que hai todas as cousas clásicas vimos esperar HTML tales como isto, estas etiquetas pechado no ángulo entre parénteses, como PHP pero sen os puntos de interrogación, o que indica unha cousa especial para HTML. Temos título, que é "Ola". E vai entender que, como vimos, o título é "Ola" en ambos os casos. Imos cambiar este "dicir" só para que poden distinguirse nos onde estamos. Pero temos un corpo. E, a continuación, a parte interesante, o bit que aparece no HTML, é este elemento de formulario. E entón temos un formulario. E esa é a clave. Esta é o xeito no que estamos a traballar con PHP. O parámetro da acción formulario di que hello.php é o que nós estamos indo a enviar os valores nos este formulario para. Este é o lugar onde estamos pasando os parámetros, por así dicir. Vai notar algo aquí é que o método é "comezar". Hai dous primario métodos polos que será estar usando PHP para pasar datos entre as páxinas web websites--, rather-- nesta asignación. E estes métodos son "get" e "post". Hai algunhas sutís diferenzas entre GET e POST que chegaremos into-- nós vai "incorporarse" en, se quere. Pero, para todos os intentos e propósitos, GET e POST ambos son só formas que pasar parámetros cun pouco diferentes execucións. De momento, imos usar get porque obter foi o que foi orixinalmente usado no arquivo PHP de I axustou 6. E, de feito, se somos e ollar antes de que editei calquera outra cousa, Eu vou dicir unha ola a-- cal é o seu nome? Audiencia: Elliot. SAM LEVATICH: Oh, meu Deus. Non sei como se escribe isto. Podería deletrear isto por min? Audiencias: E-L-G-I-S-T. SAM LEVATICH: I-S-T? Audiencia: É. SAM LEVATICH: Perfect. Aceptar. Eu creo que eu sabía como deletrear isto. Sentímolo por iso. Pero se dicimos "Diga Ola", que non é non aparecerá na pantalla aínda porque modificamos o código un pouco. Pero se nós "Diga Ola" - OK, entón "Ola" é aquí. Pero se tomamos un máis preto mirar para o propio URL, veremos que termina con hello.php? name = Elliot. Entón, esa é unha forma de comunicación á seguinte páxina web os parámetros que pasamos. Dixemos name = Elliot. E iso é, finalmente, como P axustou 6 acceder a variable que pasamos en a través do formulario. E iso é algo que é peculiar a unha petición get. A solicitude get fai que os parámetros coñecido na URL do sitio web. E vai lembrar, tamén, P en que axuste 6 tivo que escribir unha función que lidaba co feito que esta cadea de consulta podería existir despois dun ficheiro. Non podería ser un signo de interrogación seguido por basicamente calquera número de caracteres. E iso é o que está a suceder aquí. E a razón que tivo de analizar este na súa posta en marcha de server.c en I axuste 6 é así que podería dicir o código PHP que name = Elliot. Vostede necesario para poder analizar o que fóra do URL para que o arquivo PHP en cuestión sabía o que estaba lidando. Polo tanto, esperamos que isto dá a motivación para server.c agora que estamos seguindo adiante fóra de C co PHP. Entón imos realmente centrar o acceso ao cousas pasada a través dunha solicitude get agora neste punto. Eu estou indo a salvar este. Non cambia nada. Parece que temos un campo de entrada. Estamos definindo unhas propiedades, como podemos facer un HTML. Estas son cousas simples. Non necesitamos deles. Pero temos autocomplete fóra, que basicamente says-- vostede sabe, cando escribe cousas dentro da tea, ás veces, intenta encher ese para ti. Entón, é unha cousa agradable. Queremos desactiva-lo para esta finalidade. Esa foi unha decisión CS50. Así, podemos eliminar que, se quixésemos. O enfoque automático só fura o cursor na forma dereita no inicio. Unha vez máis, non é moi importante. Pero name = "name" - é un pouco complicado, porque o seu nome e nome. Pero poderíamos mudar este a outra cousa. E, de feito, iso é o que imos facer agora. Imos dicir "persoa", que é unha especie de nome Se unha persoa é definido polo seu nome. Entón imos pechar este, reabrir a nosa web desde o noso servidor aínda está en execución Apache 50, e imos dicir, Ola, aquí está Elliot novo. Por que non? Ola. E se somos até aquí, imos ver a continuación, en vez name = Elliot, el di que persoa = Elliot. E iso é un resultado directo do feito que só cambiou name = "persoa". Así, nun elemento de entrada de un formulario HTML, o campo de nome é o identificador para o parámetro que está a ser pasado. É como se está creando unha función "engadir", que tivo dous enteiros e dixo int ae int b. Iso sería un nome, e se quería outra forma, que podemos facer só copiando e pegar, entón teriamos nome b. Entón, agora imos ter dous parámetros que está a ser pasada a través chegar ao seguinte website-- seguinte páxina web, hello.php. E podemos realmente ver que de novo se queres. Esta é o xeito máis doado de xestionar o código web no IDE, basicamente. Iniciar o servidor, obtelo en execución e, a continuación, cada vez que facer algúns cambios, só preto o ficheiro só para ser seguro. Preme o botón de volta é un pouco complicado porque pode cargar unha versión anterior versión, non o máis actualizado. E entón simplemente prema no seu botón de novo, pop dereita up-- oh, e agora hai dúas formas. E por iso, se nós digitamos algo en cada um-- "Hirshhorn Jason," para instance-- nós dicir Hola. Miramos para os nosos parámetros. Parece que temos, como espera, a = Jason eb = Hirshhorn, que representa os dous parámetros que pasados ​​para esa función. Entón agora imos realmente comezar a implementar esta funcionalidade que tiña en I axustou 6. Entón, agora estamos só facendo eco Ola. E iso non é moi útil. Queremos ecoar algunha variable que foi pasado para nós. E sabemos o nome desta variable. Temos un e temos b. Así poderiamos escoller para ecoar calquera. Pero como podemos acceder a ela? Así, hai certas variables globais en PHP. E eu vou escribir los en observacións aquí. Os dous máis importantes son get e publicar os nosos propósitos agora. Estas son as matrices ou, Tecnicamente, os dicionarios onde nosas variables que estamos pasando á seguinte páxina web en directo. E pronto veremos como usalos. Outro breve nota sobre o código PHP e algunhas particularidades do ele-- en C, para declarar unha variable ou usar variables, primeiro tiña que declaralo los. E o que tiña que facer cando declarouse dicir int a carbón ou b. Tiña que declarar tipo de estes variables antes de creou. PHP-- non precisa facer nada diso. PHP non pedir o tipo de variable. E a forma que crear un variable-- vez que dicir int, char, string-- que é realmente char *, coma nós sabe-- en vez de facer todo de que, porque todo é do mesmo tipo, typeless, podemos só usa un personaxe, que é o sinal de dólar. E vai ver que xa está aparecendo up, pequenas cousas autocomplete. E está dicindo que _GET e _POST son dúas opcións que eu teño dispoñible para min. Algunhas desas outras cousas son outras variables globais en PHP que estará usando máis o curso de I axustou 7. De momento imos concentrarse en Get e POST. Pero esta é unha útil cousa que o IDE fai onde xa que escribiu en que o sinal de dólar, que vai comezar a cubrir as variábeis globais ou variables que xa definido. Entón, se quería para definir unha variable chamada "cadea" pode só configure-lo igual a "ola". E é basicamente tan sinxelo coma iso. E entón poderíamos facer algo así como "echo $ string." O IDE estará botando uns erros se eu estou facendo nada de malo, polo que espera que eu estou facendo todo certo. Pero erros sempre xorden. Outra cousa complicada sobre PHP é que non está compilado. Así, con programas en C, faría a rutina diaria de-- basicamente faría para edicións seu código, a garda-lo, e, a continuación, faría facelo, onde foi make o paso que chama o compilador, clang, para facer o seu código, este texto ficheiro, nun ficheiro executable. PHP é C-like, pero é executado on the fly polo seu navegador. Polo tanto, non hai maneira de saber. Fai xogaría os erros votos, non? Sería como, non declarou esta variable antes de usalo. Fixo todo isto malo segfault stuff--, segfault, todo ese tipo de diversión veces que veu con make. PHP é unha arma de dobre fío porque non vai obter estes erros, pero iso tamén significa que non vai saber realmente o que hai de malo co seu programa se pode executa-lo e el non está funcionando. Pero o depurador de salientar algunhas espero votos pequenas cousas sintaticamente que pode resolver. Entón, agora, se somos máis a-- dicir, imos pechar esta. Reabrir. E estamos de volta para aquí. Entón, temos unha variable e unha variable b. E estes non acabará importa. Imos chamalos h e g por ningunha razón particular. E nós dicir Hola. Agora parece que a nosa cadea "ola" é de feito a impresión. Creamos unha variable chamada "cadea", define-igual a "ola". Teña en conta que nós non temos que facer malloc ou facer un array de caracteres. En PHP, porque as variables son typeless, unha cadea é o mesmo que para un char todos os efectos. Este podería ser "ola". Este podería ser só o personaxe k. Este pode ser un número 1. E non importa. PHP non se preocupan o tipo da súa variable. Ou, se importa. El lle importa cando se trata e facer as cousas con el, pero non lle importa en a etapa de declaración. E, así como pode en C, pode declarar cordas na pila como este aínda dicindo "pila" é un pouco pouco de un equívoco potencial cando estamos a falar sobre PHP. Pero non hai que preocuparse con iso. Entón, nós temos o noso cadea "ola", e que o eco cadea. Entón, agora temos discutido variables. Entón, agora necesitamos falar get e publicar e executar o último que é necesario para realmente obter esta de volta para a función do P axustou 6. Entón, agora somos ecoando a corda, pero nós teñen estas variables GET e POST. E porque estamos usando O método GET, el Parece natural que a nosa variable que estamos interesados ​​en, tanto a e b, será situado na matriz ou dicionario, tecnicamente chegar. Entón, se nos montes obter como este co seu groups-- eu preme entrar e non lle gustou ele-- pero aquí temos obter. E así que comezar xa existe. Así, podemos xa comezar a acceder algúns dos elementos de get. Se comezamos esta sintaxe para arrays en PHP é moi C-like. Temos os nosos dous corchetes. Entón, se nós dicimos entrar nun normais array, poderiamos acceder o índice de orde cero, o primeiro índice. PHP é o índice cero. Poderiamos dicir cero, un, dois-- cousas como esta. E eu veño dicindo que obter é tecnicamente un dicionario. Entón, o que está facendo PHP baixo o capó, que é un pouco máis agradable do que C, é que xa está a darlle algún funcionalidade dicionario, que é realmente táboas de hash, ou intenta, supostamente. Ou, tecnicamente, podería ser un intento ben. Pero o PHP está a aplicar unha táboa hash, que forma un dicionario eficaz. E polo que sabemos o nome da nosa variable, non? El está a ser pasado en a cadea de consulta polo PHP. Temos a = h eb = g, onde eb son os nomes das variables. Así, a forma que podemos acceder ao valor que se corresponde coa tecla no noso dicionario é só dicindo _GET_GET ["a"]. Polo tanto, agora temos _GET ["a"]. E se nós só substituír dentro noso eco, se ecoar _GET_GET ["a"] - e veremos se o depurador lanza posibles erros sobre isto-- imos gardar iso e pechar isto. Abrilo. Entón, nós estamos só facendo un dereito agora, para b non debe importar. "ela" e "el" - "hum". "ela" e "hum". Soa ben. E é impreso "ela," que é unha tolemia. Pero iso é o que estaba a suceder na P axustou 6. Basicamente, o que P axustou 6 foi doing-- echo Ola, nome-- onde tivo un nome da variable e iso só pide para insire nese anaco de texto. Houbo tamén algunha Código adicional onde que incluía instrucións if, que podemos facer agora. Podemos dicir que existe, o que é unha función dentro do PHP, _GET Co subliñado, "nome" - que é basicamente dicindo: "o nome fose cuberto", porque Poderiamos simplemente premendo no botón para enviar o formulario sen escribir nada neste campo. E nós implicados que, na nosa claves amigables. Podemos ter unha declaración de outra persoa. E iso é todo dentro do ángulo de PHP soporte, signo de interrogación, soporte de ángulo, se quere. E agora imos ver se funciona. Eu sigo esperando por el para depuración e crap fóra de min, basicamente, pero aínda non ten. Quizais vai agora porque eu falei sobre. Yup. Fixo, en realidade. Entón, nada aparecendo. Isto é debido a algo mal que escribín no código PHP. E eu mencionen a depuración é complicado porque en PHP, nós non recompila-lo de antemán eo compilador non era como, aquí é onde os seus erros son. Pero o que podemos facer é-- facer a xente se lembran como mirar para o diferente rede solicita que PHP-- ou que sitios enviar? [? Malin?] Fixo isto charla unha ou dúas veces. Vostede recorda onde atoparemos os débitos diferentes e 200 OKs, todos os códigos que son enviados mediante HTTP desde a páxina web a páxina web? Alguén se lembra onde imos facelo? Audiencia: Page Source. SAM LEVATICH: fonte de páxina. Exactamente. Se acceda a páxina Source-- perfecto. Entón Orixe Páxina tira para arriba o inspector. E eu estou usando o Safari. Unha morea de ti, probablemente, estar usando o Chrome ou Firefox. Pero mentres está en calquera browser-- moderna e Sinto-se libre para seguir xunto, se queres. Podes escribir ata este código ou basta ollar dentro do conxunto P 6 directorio para algún material similar. hello.php é o que somos actualmente traballando emular. Polo tanto, hai unha variedade de guías. Podemos ollar para todos os recursos. Podemos ver o código fonte. Entón parece que non fixo obter corpo pasado ao final. El atopou un erro en PHP e deixou de cargar a páxina web enteira. Nós nin sequera ter un fin tag para HTML ou calquera cousa. E se miramos para a rede, podemos ver que estamos a ser enviado un pedido. Este é o dominio. Este é o enderezo. É un documento. Estamos a usar o método GET. E é vermello. Ou, estaba vermello cando non estaba seleccionando-o. ¿Como desmarcada-la? Ben, era vermello. Déixeme refrescar. Non é. Agora é vermello. Polo tanto, é vermello, o que significa el fallou, o que é malo. Entón, imos examinar por que o fixo falla. Entón, todo o que o código fonte da páxina pode basicamente, dicir que é o seu lugar non funcionou, o que xa podemos ver. Así, idealmente, non habería ser un instrumento máis útil. E hai algunhas extensións do navegador que permiten que depurar PHP pero nós non estamos indo a estar escribindo unha tonelada de PHP, polo que pode ser só o mellor a ollar a través do seu código con coidado e só asegurarse de que non está facendo outra cousa. Entón, imos ver se o formato deste if é onde está o problema. Quero cargar isto ata aquí de volta. Ola ola. Polo tanto, hai un problema alí. Así, para sintaxe correcta de PHP, PHP vai para ser C-like en que vai ver loops. Vai ver as declaracións. Vai ver todos eses amigos que familiarizarse con ao longo deste semestre CS50. Pero a mellor forma de descubrir como facer algo en PHP é buscar en Google ou mirar para algúns exemplos de código PHP porque sabe que a funcionalidade. Vostede sabe o que pode ver co programa. Pode facer un loop. Pode facer un loop cantas veces quixer. Pode facer un loop en todos tipo de formas diferentes. Pode crear funcións. Pode crear funcións que chamar outras funcións, funcións que chaman a si mesmos. E ten nomes para estes conceptos. Ten recursividade, lazos, se, outros fluxos de control. E por iso Google é o seu mellor amigo. Mesmo dicir, "PHP declaración "e alí vou ser toneladas de artigos con respostas a outras persoas que tiveron preguntas semellantes a ti, que están só comezando a fóra con PHP e está curioso sobre unha cousa sintaxe. Porque temos o luxo de ser capaz de ollar para o código en conxunto P 6, realmente puxa-lo para arriba e ver que OK, aquí está algo interesante. Entón, iso é o que realmente parecía en I axustou 6. Entón, se nós pasamos por iso, vemos que temos ten varios destes pouco Bits de punto de interrogación PHP-like. E non hai chaves. Hai dous puntos. E hai rizado cintas en PHP, pero iso é un formato e un xeito de fazê- PHP que funciona ben con HTML porque como vai ver, estamos pechando off estes PHP bits-- o elses eo IFS e todos que-- e despois estamos intercalando HTML dentro deles mentres aínda tras o fluxo de control establecido polo PHP. Entón, eu estou indo só para rápida camiña a través deste porque é unha morea de mesma conceptos que estabamos facendo antes. Temos se non é baleiro, parénteses, _GET_GET ["name"]. Isto é todo o mesmo. Estamos a usar o dicionario que _GET PHP envía solicitude de formas, porque son os parámetros de acción, eo método é comezar. E, a continuación, que remata que. O colon é un significante só para facelo a declaración se avalía a true. É como unha chaveta. E, de feito, é unha chaveta noutras linguaxes como Python, que pode atopar se só facelo no seu proxecto final. E entón esta liña, Ola. Entón temos esa cousa estraña. Temos máis soportes. Non hai ningunha HTTP há-- ou PHP, desculpe. Pero hai un sinal de igual. E entón temos unha función, htmlspecialchars (_GEThtmlspecialchars (_GET ["nome"]). Isto é como unha especie de máis versión avanzada do eco. Como se tivésemos ecoar como unha forma para imprimir as cousas en PHP. Esta é unha función que é definido que o PHP enfrontará un pouco máis desagradable personaxes e valores de bytes que podería pasalo. É sempre máis seguro para usar isto. Pero echo ha facer o traballo moi ben se non somos xestionar calquera cousa moi desagradable. E así, este ten o mesmo efecto basicamente este material entre o tema marcas é valorado polo PHP. htmlspecialchars retorna un HTML agradable valor impreso de _GET_GET ["nome"], é dicir, todo o que escribiu no formulario. E entón el vai dicir Hola, espazo coma, e despois diso. Esa cousa toda entre os corchetes será substituído por calquera que sexa htmlspecialchars pon para fóra. Entón, iso é basicamente semellante para o que estamos facendo. E nós temos unha declaración de outra cousa que é Ola mundo, o que ten sentido. Entón agora imos voltar para o noso código e ver exactly-- oh. Dixo existe, que non está unha cousa que queriamos facer. Queriamos dicir non baleiro. E polo que debe traballar un pouco pouco mellor, non _GET_GET baleiro ["name"]. E iso chaveta xogos que chaveta. Temos as nosas chaves aquí. echo Ola _GET ["name"]. A ver se funciona un pouco mellor. Aínda estamos executando noso servidor. Ola Jason. Ola Jason. E funcionou esta vez. E entón iso é unha proba que pode, en efecto, utilizar as claves que coñecer e amar en código PHP HTML. O código para PHP proporcionada vostede en pset 6-- pset 6-- ofrece outro tipo de facendo o mesmo. Polo tanto, agora temos o poder. Temos a funcionalidade para aplicar o código PHP que vimos no pset 6 por nós mesmos, basicamente. Antes de seguir adiante, o que son algúns dos preguntas que ten neste momento? Si [inaudível]. Audiencia: Entón, na súa versión en pset6, cando executalo, hai un espazo. E podo ver onde o espazo é despois da coma. [Inaudível] de inicio o soporte aberto. Como incorporar o espazo en do xeito que escribiu os seus propios códigos? COLUMNA: Esta é unha boa pregunta. E entón imos descubrir iso. Entón esta é unha pregunta moi boa e un que non considerou. Pero imos facelo xuntos. Entón, primeiro de todo, o que Estou facendo eco é cando nós só ecoam Ola, Ola xera. Se nós eco agora este entrar nun separado liña, imos examinar o que pasa. Polo tanto, prema isto. Nós mantemo-nos dicir, oi Jason. Entón, de novo, non temos ese espazo. E iso porque, en PHP, cando temos eco, non importa cantas spaces-- nope, non o V-- non importa cantos espazos que poñemos no aqui-- agora que cargar de novo, ola Jason. Si, mira, todos aqueles espazos fun comido up. E iso é algo que a función de eco fai. Entón, para coidar ese espazo, e esta é unha das razóns por que non use echo e usa htmlspecialchars vez. Estou curioso para saber o que sería acontecería se fixésemos iso onde un espazo pechado nunha cadea. Eu honestamente non sei que ocorrerá cando fago iso. Entón este é un camiño. Esa é unha forma de coidar dela. Se enrolar o espazo en unha cadea, entón o espazo será a saída así por eco. O máis seguro que facer é facer htmlspecialchars. Iso é sempre a aposta segura. Pero agora temos unha forma de facer con eco, no seu caso. E dun xeito semellante, podemos echo novas liñas, todo tipo de cousas que está familiarizado facendo en PHP. Calquera outra persoa, o que é máis preguntas que outras persoas teñen Actualmente sobre PHP? Se a xente mostrouse un pouco tarde, Estou feliz para estar despois de un pouco e falar sobre algunhas das o principio. E tamén está todo emitida en directo, e arquivados, o que é unha tolemia. En calquera caso, entón agora imos facer algunha cousas máis avanzadas con PHP. E unha das cousas máis adiantadas vostede aparecen no C foi para loops. E PHP ten un máis poderoso para circuíto chamado loop foreach. E parece que isto-- para cada baleiro como en branco, chaves, facer as cousas. Polo tanto, este é basicamente un acceso directo. Mira, o loop for como un construción sintáctica foi creado en C e en conxunto linguaxe e cousas así. Idealizado en C, precisamente, como unha abreviación para unha morea de tipos de loops que a xente ían ver. Como cando escribiu un loop, non era moitas veces un paso de inicio executado ao comezo, un condición na que o loop sería stop-- e esa é a característica isto é só un loop while, ou un tempo que ten exactamente só que feature-- e, a continuación, un paso incrementação no fin. E así que adoita atopar-se escribir código como o seguinte. Eu estou indo a borrar un pouco iso. Pero se estamos interactuar a través caracteres nunha matriz, por exemplo, como temos teño unha matriz de caracteres. Sentímolo para traer de volta C. Sei, penso que estaba feito. Pero é só para o fin de aprender PHP, eu prometer. Entón, se ten un str de char de lonxitude 8, e imos din que se Hellooo cun nulo da dereita. Gran, entón esta é a nosa secuencia. E, despois, tivo un loop. Temos int i é igual a 0. E queremos saír cando str i non é igual igual a nulo, porque saír cando é igual a null. E entón o que facemos en cada i ++ punto no loop for. Facer algo con str i. Así, a fórmula de base foi, tivemos esa matriz que quería tratar como elementos separados. Pero o que tiñamos que facer é que tivemos que basicamente crear un enteiro separado variable que estaba contando a ser cada xa que fomos a través do lazo. E entón teriamos que entón chamar strstr [i] cando o que realmente quería facer é só ir personaxe polo carácter, non? Non queremos para incrementar un enteiro e, a continuación, usar este enteiro para acceder cada personaxe individualmente. Nós realmente queremos carácter por carácter. E así, para cada forma intelixente calcula que para nós. Se temos unha matriz, que podemos declarar en PHP apenas-- como se nós temos unha variable chamado, imos chamalo de matriz. Os milagres de ningunha entrada, é así como calquera outra variable. É só unha matriz. E nós temos un pouco [inaudível] como 1, 2, 3, só unha especie de matriz inicializar. É OK, non gusta do meu foreach. Pero se realmente foreach-- Eu escriba que algo malo. Hai dous xeitos de facer un loop foreach. Hai a sintaxe eo como sintaxe. E nós imos facer sintaxe en primeiro lugar, non como. Ese é o meu erro. Entón, nun foreach en array, eco nun. E PHP está berrando con me por algún motivo. É atopar un inesperado en en algo, que é un pouco de un problema. Pero imos descubrir por que isto ocorre nun momento. Entón, non me gusta diso. Imos tentar usar o como. El prefire a sintaxe é como parece. Entón imos facer matriz foreach como nun. Así, unha pequena explicación do que pasou é a sintaxe é como dizendo-- ben en primeiro lugar, imos ollar para o que se trata impresa. Entón abrimos noso IDE. Imos aquí. Nós dicimos: Ola Jason. E fixo 123, que foron os contidos da matriz que creamos enriba. Entón mergullo neste loop foreach, temos unha matriz variable chamada o cal é unha disposición de tres números. E entón nós estamos facendo foreach array como nun, eco nun. E iso é máis intuitivo que un para lop. Estamos dicindo, o tratamento de cada un dos as cousas na matriz como NUN, Quero que me dea un. E iso é o que está facendo. PHP é o cálculo que cando di matriz foreach, e está lidando con unha matriz, o que vai querer repetir son os personaxes desa matriz, é o ints desa matriz, son os elementos desta matriz. E iso está permitindo que almacenar estas variables como, nun e nun continuación, pode saída inmediatamente en vez de dicir, Eu teño unha variable chamada i, e entón eu quero saída strstr [i]. E así que nos permite facer cousas legais. Como basicamente non temos para crear estas variables como i do e facer todo este material incrementação no fin. PHP coida de todo isto para ti. Entón agora imos falar sobre como foreach el se aplica ao noso dicionario _GET. Entón, imos comentar iso rapidamente. Polo tanto, temos a nosa matriz _GET. Temos esa variable. E ten algunhas cousas nel. Agora, só temos unha variable sendo pasado para el, que é nome. Pero se prema Intro, agora podemos ter dúas variables. Podemos ter nome e idade, por exemplo, se queremos chegar a idade e tamén o nome dunha persoa, curiosamente. Entón agora _GET será un dicionario con dous elementos, con dous pares de valores clave. E a primeira key-- vou escribir ata un regalo na tarxeta tamén. Temos o noso dicionario é _GET. Sentímolo, é un pouco difícil de ver. Pero dentro do noso dicionario temos nome, que será algo que nos é dada. E nós imos ter idade, que é tamén vai ser algo que nos é dada. E esta é a totalidade do noso dicionario. Entón, ten dous elementos na mesma. E iso porque foreach lazos son intelixentes, nós podería pensar, e correctamente podería pensar que foreach posible percorrer este dicionario, imprimindo os valores dada polo nome e idade. Entón imos realmente facer exactamente isto. Imos construír un loop foreach. E nós imos facer para _GET como. E nós imos facer o seguinte. Entón imos ver que pasa si digitamos só palabra, e despois dicir palabra eco. Tamén imos a ecoar unha nova liña só para facelo un pouco máis claro, Qué está a pasar. Entón imos ver. Non está me dando algún erro. E nós imos pechar esta. No noso sitio web, vai estar facendo unha morea de que, ao longo da pset7. Así, dicimos meu nome é Sam. Miña idade é 45. Non é. Pero imprime, como se esperaba, Sam 45. E así vai entender que o loop foreach fez-- aquí, imos volver ao que polo que é ata no board-- chegamos _GET como palabra. E había catro cousas en _GET. Pero el só impresos dúas cousas. foreach, sendo o seu auto intelixencia, asumiu que o que realmente queriamos foi valores, non as chaves. Pero hai un xeito que poderiamos imprimir as chaves, así como, se quixésemos. Se quixésemos ver o que tamén estas variables foron chamados, hai un xeito que pode acceder a esta ben. E o xeito de clasificar de facelo, polo que podemos dicir, imos realmente dividídelo en pares de valores clave. Entón imos ver que pasa agora. Polo tanto, temos a clave. Temos valor. Temos outro novo liña para facilitar a lectura. E imos ver que pasa cando facemos iso agora. Non sei cantos anos é Jason. Jason de 15. Polo tanto, temos nome Jason, de 15 anos. Entón, nós fomos capaces de acceder a clave e pares de valores deste dicionario só dicindo como puntos clave para o valor. E iso é unha sintáctica foreach pouco azucre que permite acceda as cousas no dicionario. Polo tanto, esperamos que este tipo de enfatiza a potencia do loop foreach. Pode moi ben xogar calquera cousa que parece iterable, como calquera cousa que teña múltiple elementos como un array, como un dictionary-- estes son dous principais cousas que estará traballando con tanto na vida e na pset 7. Entón podes xogar este material para el, e só pode descubrir o que quere facer con el. Só pode dicir: OK, eu vou ir estas cousas aos datos que foi pasado para min. E iso é algo que é vai estar usando unha morea de en pset 7. Eu estou indo a desprazamento rápido abaixo só para ver onde estou. A xente ten preguntas neste punto? Preguntas en todo? Si? Audiencia: Entón, coa chave e valor, podería nomealo de calquera outra cousa e continuaría a traballar? COLUMNA: Oops. Guau, eu apaguei totalmente toda a liña. Great work. Entón, a a. Chave e valor é só unha convención. É útil. Podería obter un proxecto puntos, pode que algúns puntos de estilo para facelo, porque realmente transmite a intención. Pero nós dicimos unha Yarp. Audiencia: Non ten que cambiar nada no ficheiro HTML a fin de reflectir iso? COLUMNA: Nin un pouco. Audiencia: E só sabe que por mor da iguala maior than-- COLUMNA: Si. Audiencia: indicador --que que that's-- COLUMNA: Si. Isto é unha sintaxe foreach pero si. Audiencia: Non hai tipos. Así que se quería idade para ser só un número? Existe unha forma de facelo? COLUMNA: Existen formas de comprobar que variables obedecer a determinados tipos. Entón PHP pide un pouco máis de vostede porque non hai tipos en. Algunhas formas pide menos. En certo xeito pide máis. Porque se ten só algo nunha variable, non ten idea de que tipo é. Pero se vostede é intelixente sobre as variables que atribúe tipos de e para asegurarse de que funciona soamente return-- vostede quere funcións para volver só un tipo de valor para que pode basicamente espera que a variable que volver a partir dunha función será do tipo Que pensas que vai ser, basicamente. Pero hai algúns métodos polo que se pode comprobar. Eu non me lembro a eles fóra do cumio da miña cabeza. Estou esperando por el para estar azul. isint? isstr? Existen métodos construído en PHP que pode comprobar o tipo de variables para ti. Pero se asignar variables intelixentemente, non debe ten que facelo moi en pset 7. Pero hai aqueles métodos. E iso é algo que está na propia linguaxe. E eu non me lembro a sintaxe necesitas. Poderiamos incluso procuralo. Pero o tempo é de esencia. Alguén máis ten ten máis algunha dúbida? Si. Audiencia: Teño só unha. Entón mencionar o método GET, pero non mencionar o método POST. Será que estamos volvendo para iso? COLUMNA: Si, nós imos volver a iso. Isto é o que eu estaba a buscar para o meu teléfono, que agora quedou durmido, pero eu vou atopalo. Só ten que ter seguro que se loita todas as notas PHP. Si, non hai ningunha versión de depuración. Si, temos máis algunhas cousas que queremos facer agora, neste momento. Entón, falando POST, que mencionar, a única diferenza entre GET e POST é lembre que cando miramos neste URL e vimos, oh, é igual a un nome e idade igual Yarp está ben no URL alí para nós. POST é un pouco máis reservado coa súa pasaxe de información. Polo tanto, se non quere que un usuario a saber, por exemplo, non quería que o nome de usuario eo contrasinal da persoa Actualmente sesión para ser exhibido en a URL, que é unha cousa razoable non querer na URL, porque alguén pode velo. Conectarse a alguén a unha páxina, non queren que a súa URL grudado alí, porque iso ía permitir que a xente para acceder só co pegar dunha URL en vez realmente cubrir un formulario. POST é un pouco máis reservado. E as únicas cousas que nós imos ter que cambiar son a rede, o cambio de obter para enviar mensaxes. E, a continuación, no interior do HTTP, no canto de acceder ao _GET matriz, nós estamos indo a acceder ao _POST array. E nós imos entender que, se abrimos este novo de novo, Jason declina lentamente na idade. nome Jason, de 14 anos. O mesmo aparece. Pero imos ao URL e estas variables non están alí. E a forma que POST passes-- polo que Lembre como mirar para a fonte dunha páxina. Nós imos para a rede. Nós actualizar. E iso é algo que POST lle vai dar avisos sobre. Pode ver unha caixa, un texto caixa como esta no seu navegador. Está seguro de que quere para enviar un formulario de novo? POST é o que está enviando estas formas. Porque, basicamente, se enviou o seu información tarxeta de crédito para alguén, que non vai aparecer na URL. Isto vai ser unha proposta POST. Entón, cando actualizar a páxina, é reenviar esta proposta post. Entón, agora queremos enviar o formar de novo, porque non vai para crear as compras duplicadas. E nós imos entender que aquí abaixo, o método que estamos usando é POST. E, de feito, descargar bytes. Trasladou 401 deles. Programa de fermosos pequenos. Pero non hai ningún lugar que vemos os valores que se están pasados. As páxinas web poden ver a si mesmos, pero nós, como usuarios non son capaces de ver, a menos que vostede é un hacker. Se vostede é un hacker bo, pode ollar. Se sabe o básico formato HTML, os valores fará a coñecer nas páxinas. Vai ser capaz de ver. Os valores van estar alí, son só un pouco menos evidente para ti de acceso, basicamente. Temos máis preguntas sobre Get, POST antes-- o que imos facer a continuación é realmente ollar para un código que está dando en pset 7, falar como usa algúns destes conceptos, e falar do as cousas que está indo ter que facer un pouco no pset 7. Máis preguntas antes diso? Máis preguntas que vostedes teñen? Gran. Todo ben, imos ollar un pouco de pset 7, sen dúbida que é todo máis animado. Quero dicir, iso é algo que David pasa por un pouco. Pero teremos tres directorios no parte superior, así como un ficheiro de configuración. Isto é para bases de datos, o que nós imos falar en preto de cinco minutos. Inclúe, nunca ten buscar neste directorio se non quere, pero é bo para sei que hai todo tipo de axudantes. Helpers é como funcións votos. E entón temos de configuración, que define algunhas cousas. Existen algunhas funcións que ten CS50 escrito que están en auxiliar e de configuración. E algúns dos que PHP xa sae en arquivos vai facer unha chea de máis sorte traballo de perna de obtuso para ti. Como se entramos en público login.php, que é o que móstrase á dereita cando entra en pset 7. Imos ver o que hai este esixir declaración. E iso como unha especie de afiada inclúen, hashtag inclúen se é dunha xeración máis nova. Pero isto basicamente di que eu teño acceso a todas as funcións en config.php. E podería ter un requiren para todo tipo de outras cousas. configuración realmente require axudantes. Así, sempre que teña que configuración, tamén é incluíndo ou esixindo axudantes tamén. Entón, que lle dá acceso a todos os funcións legais que imos usar, cousas como renderse. Vou realmente para aliviar esta un pouco para abaixo. Así, a función entón estamos indo a pé a través de pouco antes de pasar para SQL algo bit é a función login.php, só porque usa algúns dos temas que acabamos de falar en PHP. Ve o primeiro é que $ _SERVER. Esta é outra variable global que vai estar lidando. É como _GET e _POST, pero o que servidor contén é que pode deixalo se o método de solicitude foi un GET ou un POST. Como anteriormente o que estabamos facendo é só no noso código que escribiu, estabamos só cambiando o para ser GET e POST dependendo do que o HTML ten. Pero hai páxinas que se poden acceder con ambos os tipos de solicitudes. E pode querer facer cousas distintas dependendo do tipo de solicitude, así como tamén en forma. Así, pode comprobar que a solicitude método a través de claves que acceden, mediante o uso dunha clave e conseguir o valor de algo no dicionario _SERVER. Entón, iso é outra mundial como variable _GET e _POST. De ser GET, queremos facer o formulario de rexistro. Renderización é unha función que, basicamente, só colócase o HTML apropiado e pasa algúns parámetros. Este título é un parámetro que é usado na exhibición, curiosamente, o título da páxina en pregunta, a cousa aquí enriba, ou dicir Hola no noso exemplo anterior. Agora temos unha cousa diferente. Else se é POST, nós facer algunhas outras cousas. Estamos a usar este método baleiro. Non é existir, el está baleiro. E vimos antes, PHP ten unha boa cantidade de construído en métodos que se hai David will-- son métodos que son útiles para ti, eles van ser alertados para ti na camiña por que David dá a visión xeral comezando, e tamén pezas de votos Zamyla. Ela está de volta todos. Todos podemos regozijar. desculparse é unha función apropiadamente chamado que basicamente só imprime algunhas mensaxes de erro, CS50 porque é moi educado. E agora isto, este é un pouco complicado, porque iso é onde estamos consultando a base de datos. Agora non falamos bases de datos. E nós estamos indo a próxima cinco minutos máis ou menos, como máximo. Pero esta é unha función CS50 que escribiu para obter unha mesa, basicamente, a partir de unha base de datos que estamos a traballar con o pset 7. Eu son moi malo co meu indexación hoxe cero. Pero si, é 7. Entón consulta vai voltar un matriz, é basicamente o bit de chave. E por isto non teñen dixitación, para liñas é un array de arrays. Porque cando estamos a pensar en unha mesa, o que nós imos facer é, como aprendeu na Serie de exercicios como o xogo de 15, de todos os xeitos onde tiña que usar unha matriz dobre, nós basicamente ter variedade de outros matrices fai unha táboa. E ten liñas e columnas. E entón podes acceder a eles como [0] [1], comeza a [0] [1]. Cousas básicas como esta. Entón, o que estamos facendo aquí nesta función, estamos pedindo a base de datos se o usuario é intentando entrar, que será enviado a través do método POST. Imos ver o que estamos a recibir o nome de usuario de _POST. Van enviar, o usuario ou, enviará un valor a través dun formulario mediante POST porque é o nome de usuario e contrasinal cousas. Estamos comprobando o nome de usuario a ver, é tanto sobre a mesa? Porque, se un usuario está facendo sesión en, a continuación, o seu nome de usuario debe ser almacenada na táboa de os usuarios que existen para este sitio. Entón, basicamente, o usuario está na base de datos, consulta vai voltar esta liña, que é unha matriz. Pero a parte complicada é que mesmo se a matriz dobre é de só unha liña, aínda que sexa un unha liña array-- como ten basically-- se ten un tamaño dunha matriz que está seguro outra matriz, está realmente lidando con unha columna. Senón que é tratada como unha matriz dobre. E é aí onde as veces poden ser complicado, porque temos liñas aquí. Nosa variable é liñas. E entón nós estamos creando unha nova variable chamada liña e define-la igual a a primeira liña de filas. E vai entender que o comentario di que é a primeira e única liña. Entón que é o complicado parte onde agora funciona pode devolver matrices moi facilmente. Non hai mallocs. Vostede non vai ver mallocs. Entón non vai ver os fallos seg. Pero funcións aínda estará pasando en torno de matrices e de datos en grupos. E ten que ter coidado co que exactamente súas funcións retornarán. E aínda que sexa un columna como esta, consultar aínda está indo para volver unha matriz de parella. Así, para que o acceso column-- ou pode pensar en todo isto como invertida xa que estamos a falar de liñas. Pero, para acceder a unha liña que, non pode simplemente dicir liñas. Aínda que sexa unha liña, ten que non rowsrows [0] para eliminar este tipo de pouco exterior da matriz e ten só a súa unha liña. Facer algunhas outras cousas. Hai unha función chamado password_verify que comprobar a contrasinal que foi posta. E entón vemos outro mundial variable aquí, _SESSION. Basicamente id da sesión é como manter o control de se alguén está rexistrado ou non. Entón, agora con login.php, estamos logar un usuario. Entón, o que queremos facer é que queremos dicir o id da sesión é igual á liña id, que só ten sentido porque cada liña terá un ID diferente número como parte da táboa. Nós imos entrar nun SQL segundo, polo que, se nada diso Parece un pouco como blah, entón todo será esclarecido. Pero imos definir o id igual a cousa axeitada, rexistrar o usuario en. Desculpas se algo sae mal. E iso é logins propósito en vida como profesor Malan diría. Así que foi login.php. E unha morea de código PHP que escribir en pset 7, que será un pouco. Non esqueza chmod para os permisos correspondentes. Haberá un pouco sobre que, no inicio da especificación. Pero o PHP que é escrita será facendo cousas que é semellante a esta. Vai ser acceso a algunhas cousas que se dan a vostede no variables globais PHP que está lidando coa actual usuario rexistrado, se existe temos solicitudes foron enviados a esta páxina, cousas distintas así. E tamén será potencialmente iterado liñas desta cousa. Nunha función, consulta diferente non volver esa matriz dobre. E, se hai máis dun filas en que, Se hai é-- si, se hai son máis dunha liña en que, el ha ser unha mesa. E pode querer facer unha iteración a través das liñas de esa matriz usando o loop foreach que describimos. Entón, se fai foreach nun dobre array, cal será o word-- aquí, En realidade, eu vou escribilo. Vou escribir rápido aquí. Se temos un foreach de liñas como liña, cal é o tipo de liña? Alguén sabe? Vostede entendeu? Entón liñas é unha matriz de parella. Entón, o que é foreach vai inferir que queremos a partir desa matriz dobre se estamos interactuar sobre iso? Podemos asumir que basicamente que vai ser ou elementos, ou filas ou columnas, basicamente. E así nós, liñas e columnas pode tratar como o mesmo. Basicamente o que o loop foreach vai que facer é que vai voltar as liñas. liña será de tipo de liña, Tendo en conta que as liñas é unha matriz de parella. Entón, se dá foreach unha matriz dobre, é non vai facer unha iteración máis dun nivel profundo. Que é basicamente para dicir se hai son oito células nesta mesa-- 1,2, 3 4, 5, 6, 7, o 8-- loop foreach non é vai pasar por cada unha destas células. Que o loop foreach fará foi ha pasar por esta liña, darlle toda esta liña. E entón el vai pasar por esa liña. Por iso, só repite un nivel de profundidade. Se engade un nested loop foreach, entón pode tratar cada liña retornada desde liñas, fai liña foreach como elemento, imos dicir. E entón podes ecoar o elemento. Entón esta é unha breve pouco de reciclaxe sobre como pode estar usando foreach lazos no contexto de consulta. Hai algunha pregunta sobre PHP? Calquera cousa antes de nós pasar falar SQL ea diversión de base de datos? Sentirse ben? Sentirse ben. Todo ben. Imos pasar ao seu PowerPoint, que probablemente perder. SQL, Yay. As persoas que están na miña sección tipicamente vai saber que subtítulos de siglas son sempre só as primeiras palabras Creo que xogo que algorithm-- que siglas. Non é un algoritmo. Entón, é unha base de datos SQL. É unha linguaxe que traballa con bases de datos. E todos os bancos de datos son é táboas, polo menos na forma SQL que os representa. Outra forma de pensar sobre bases de datos é bases de datos son un conxunto de claves e valores basicamente. Podes pensar en unha base de datos como un dicionario e tamén como unha mesa. Basicamente, é un xeito de asociar datos diferentes con outros datos, moitas veces a través de liñas e columnas. E esa é a forma que é SQL funciona mellor. Polo tanto, este é un exemplo dunha táboa. Teño algúns exemplos de persoas na miña sección, que Non tiven tempo para cambiar. Pero temos cousas como ID, nome, superpotencia, e cidade natal. Non sei onde calquera é desde a miña sección, entón eu só vou asumir todo o mundo é de Nova York Cidade porque eu teño unha alta estatística probabilidade de estar correcta. SQL levará automaticamente coidar da columna ID para ti. Se introduce unha nova liña nunha base de datos SQL, será incrementado que Número de identificación e só basicamente estar como cinco nomes, superpotencia, cidade natal, quenquera para o fin do referido cadro. Entón ID é unha columna que non ten que se preocupar. Pero, como no caso de login.php, cando estaban a recibir a identificación da sesión dunha táboa e usando só ID, ID é unha forma de identificar de forma exclusiva un elemento de unha base de datos. Entón, se tivemos dous Sams, ambos CS50 que ensinou, e de que ambos eran de Milwaukee, estes serían aínda ten números de identificación distintos e, así, ser distinguida no contexto da mesa. Entón é iso que SQL está lidando con, traballando con no back-end. Agora ben, estes son os catro comandos que vai ter para o traballo con SQL. E eu xoguei a todos nun foto. Pero nós imos pasar por todos eles individualmente. O primeiro mando é Update, que fai o que podería esperar. Digamos que teña algúns datos en a táboa que está fóra de data. Como se está mantendo a par de nomes de persoas e as idades, se alguén é idade aumenta, a continuación, vai querer entrar e actualizar idade só desa persoa. Para un exemplo que funciona co noso primeiro mesa-- non te preocupes sobre a escrita de todo estes comandos á vez. Pero se ten actualización para abaixo, que vai ser bo para esa parte, porque nós imos voltar á mesa. Entón, se nós voltar á mesa, imos dicir algo que pasou Foi houbo un terremoto ou unha liña de falla que dividir directamente través de Nova York. E nós queriamos para actualizar todos que viviu en Nova York. Todos eles tiveron que pasar á Pensilvania. Isto non é unha cidade natal. Todos eles tiveron que pasar a New Haven. Alí imos nós. Entón, todo o mundo en Nova York móvese para New Haven. E entón iso é algo que é editando tres rexistros nesta táboa. Pero en SQL, pode facer que en só un comunicado. Entón imos voltar a actualizar. Déixeme rapidamente borrar esta tarxeta de novo. Cando estamos a falar actualización, existen algunhas partes da sintaxe que son fundamentais. Ben, toda a sintaxe é a clave. Pero o material en verde é opcional. Están obrigados a branco, nomes predefinidos como. E a luz azul son cousas que varían segundo a táboa. Entón é iso que está a suceder con o esquema de cores aquí, alí enriba. Polo tanto, se queremos actualizar só as liñas das persoas que viven en Nova York, Entón, o que nós fariamos si dixésemos actualización? Entón mesa é onde poñemos o nome da nosa mesa. Nós só dicir o nome da nosa mesa é a mesa un. Por iso, queremos actualizar a táboa un. E queremos set-- o que queremos para definir? Ben, quero dicir, PHP así column-- trata liñas como identificadores únicos. E, a continuación, son columnas os diferentes campos destes elementos da base de datos. Así, o primeiro elemento de base de datos ten un nome de Sam, superpotencia do CS50, e unha cidade de Milwaukee. Entón, se nós o referido conxunto, imos ollar para os parámetros de novo ese conxunto toma. Temos columna é igual ao valor. Por iso, queremos dicir que algúns column-- que lembrar é un field-- queremos ver unha campo igual a algo novo. Entón, se nós só dixo actualización táboa 1, establecer o nome igual Elliot. Obteña algunhas persoas da nova sección no esta. Pero se nós só fixo unha actualización da táboa definir o nome igual Elliot, o que sería a mirada táboa como despois diso? A xente ten algunha idea? Si. Audiencia: Todo en que liña converteríase Elliot. COLUMNA: Todo en que liña? Audiencia: Na primeira liña. COLUMNA: Na primeira liña? Por que a primeira liña? Non quero coller ti. Audiencia: Quizais todo en toda a mesa? COLUMNA: Todo en a táboa enteira, si. E iso é certo Eu porque-- estaba só axudar un pouco há-- porque omitimos cláusula opcional WHERE. Se non ten o ONDE cláusula, o que esta orde fará é que vou traballar con cada soa liña na táboa. O nome de todo o mundo facer Elliott basicamente Elliot, que é moi feliz. Ou Yanni, un dos dous. Pero o nome de todo o mundo vai cambiar. Entón, o xeito no usamos o ONDE clause-- e iso se aplica a todo wheres que están en cada un dos estas cousas diferentes. Entón, vai entender que SET ten columna de valor igual. E o mesmo acontece con Where. Pero estes son diferentes tipo de declaracións. Entón, a columna é igual ao valor en SET está misión. Como estamos dicindo que queremos para definir o nome igual a Elliot. Pero nas cláusulas WHERE, estas son declaracións de igualdade. Entón, imos dicir que só quería cambiar o nome da persoa a Elliot se o seu nome era Ryan, imos dicir. Así, cando dicimos ONDE nome é igual a Ryan, que faría con éxito único cambio o nome-- sería só cambiar o campo de nome nas filas onde o campo de nome coincide co Ryan. Entón, se tivésemos varias persoas chamado Ryan, todos os seus nomes cambiaría para Elliot. Isto é semellante ao exemplo se dunha liña de falla divide Nova York e todo o mundo ten que moverse para New Haven, o xeito que pudermos facelo nunha instrución é ACTUALIZACIÓN table1 SET cidade natal = New Haven onde cidade natal é igual a Nova York. Este é o poder de a instrución Update. Podemos seleccionar calquera número de liñas mediante afirmacións verdadeiras sobre os campos nesas liñas. Non podemos dicir set Actualización table1 name = Elliot ONDE liña = 1, agás que podemos se dicimos ID = 1. Entón, nós estamos indo a ser traballando con igualdade de campos, a igualdade de columnas. Pero usando o campo ID é unha forma de seleccionar liñas individuais, especialmente, porque o campo ID é un exclusivo identificador nunha base de datos SQL. Así como actualizar unha fileira, ID é igual a 1. Actualizar liña dous, só cambiar este número de identificación. Pero o poder do Where é que pode actualizar as cousas a base do que o seu valores actuais de certas cousas son. Si Elliot? Audiencia: E se queres a-- de novo, iso é outra cuestión. Pero a miña primeira pregunta foi: onde isto está a suceder? Onde estou a actualizar esta? É este un código PHP? COLUMNA: Onde actualizar, si. Imos falar sobre onde todo isto acontece especie de unha vez imos en todos os comandos. Pero o que ten que sabemos agora é basicamente que a base de datos SQL existe como algo para acceder pola consulta función, que define CS50. Polo tanto, se usa a función de consulta, podes acceder a esta táboa. Entón estará enviando estes comandos para súa mesa en arquivos PHP a través da función de consulta. Tamén pode xogar coa súa táboa directamente. E esa é a mellor forma de probar eses tipos de ordes. E nós imos pasar por exactamente como facelo en só un pouco. Entón, iso é o comando Update. E o resto dos comandos vai ser unha especie de semellante, traballar en cousas semellantes. O INSERT INTO é, probablemente, o máis diferente de UPDATE. Vou deixar isto para alí só un pouco e traballar aquí. Entón INSERT INTO, podes ver aínda que a táboa é o mesmo. Quere inserir. A capitalización, SQL é caso insensible. Entón non ten que capitalizar estas cousas. Por convención, as palabras en branco son capitalizados. Pero eu tamén codificados por cores deles. A única razón que capitalizar aqueles cando está digitando- é só para enfatizar os que son constantes. E así que podes ollar para a capitalización ou o feito de que eu colorase los de forma diferente. Entón temos INSERT INTO, imos facer table1 novo. Isto é todo nunha liña. Eu só estou separándose o por as distintas declaracións. Non te preocupes co feito de que table1 foi parar na segunda liña. Entón, nós queremos facer un INSERT INTO Table1 algúns valores. E vai notar a opcional bit, o que eu vou chegar a un segundo. Entón temos values. Entón, digamos que queremos engadir Andi para a nosa mesa, porque perdemos Andi. Andi está enfermo. Entón, imos engadir Andi á nosa mesa. Lembre que o número de identificación actualízase automaticamente. Entón, os únicos campos nós se preocupe son nome, superpotencia, e cidade natal. E así, o xeito que nós facemos que, mirando para a nosa sintaxe, é que temos só teño un paréntesis, con comas valores separados, cada un dos cales é un valor. Entón, se nós quería introducir Andi na nosa mesa, todo o que temos que facer é Andi dereita. O que hai de superpotencia da Andi, persoas na sección de Andi? Ela gusta de voo, ou gusta velocidade, ou algo así. O que xa temos alí enriba? Temos CS50, voo, velocidade e forza. Audiencia: A viaxe no tempo. Speak: A viaxe no tempo, incrible. Entón temos Andi, tempo viaxes, ea súa cidade natal. Esa é unha pregunta moi boa. Nova York, a menos que alguén sabe. Todo o mundo é de Nova York é o lección a tirar de hoxe. Polo tanto, esta declaración sería inserir, como unha quinta liña, co tempo de viaxe superpotencia e unha cidade de Nova York. Pero o campo opcional é basicamente unha forma para especificar exactamente cales columnas quere introducir as cousas en. O xeito que nós estamos facendo isto agora, Andi, curso do tempo, Nova York, vai na orde exacta do noso nome mesa--, superpotencia, cidade natal. E se quería facer algo diferente do que iso, como dicir que non sabía superpotencia de alguén, como como eu non sabía de Andi superpotencia no inicio. Entón todo o que eu sabía era o seu nome ea súa cidade natal. O que eu podería facer é que puiden fazer-- vou borrar iso rápido. Quero actualizar só as columnas. E é aí onde o opcional lista columna entra en xogo. Eu só quero actualizar nome e cidade natal. E entón eu vou dicir values. Vou facer Andi e Nova York. Se eu tivese omitido da lista de columnas e acaba de facer estas dúas cousas, onde ía Nova York ir? A columna que faría New York Cidade foron colocados? A xente ten algunha idea? Superpotencia, exactamente. Entón, iso vai só ir en orde. E xa que atinxe o fin do lista, el só vai deixar de encher as cousas en. E os valores que se ve en todas as columnas só será NULL. Entón porque especificamos nome e cidade natal, imos ter ID 5, nomear Andi, superpotencia NULL. Entón superpotencia é un valor non iniciado. Non vai necesariamente chegar a Valgrind mesmos erros se tentar e acceder a ela. Todo vai ser moi ben zerado fóra, porque NULL é un valor en SQL. Isto é unha constante. E, a continuación, cidade natal será Nova York. Entón ese é o comando INSERT INTO. Antes de pasarmos, hai dous comandos. A xente ten dúbidas sobre Update, sobre INSERT INTO, uns SQL xeralmente antes de avanzarmos para os nosos anacos finais? As persoas se senten ben, xenial. Amoo. Entón imos falar sobre SELECT. Indo gabia Actualización aquí. E elección será moi semellante. O obxectivo do SELECT, O propósito de SELECT na vida é darlle unha morea de columnas que satisfaga determinadas condicións. E cando digo satisfacer certas condicións, súa mente pode inmediatamente volver para aquela cláusula WHERE que xurdiu en Update. E esa cláusula é exactamente alí SELECT. Se non poñer o ONDE cláusula e dicimos SELECT nome, hometown-- escrito que un pouco wrong-- nome, cidade natal FROM table1. Se nós só dicir que, o que escolla vai dar é que é vai darnos unha double-- unha mesa, en vez. Unha matriz dobre si estamos pensando en PHP sentidos. Pero el só vai dar-nos unha dobre conxunto de dúas nome columns--, e cidade natal. E ha ignorar ID. E ha ignorar superpotencia. E vai só darnos cada soa liña do dito marco. Entón, se nós só inserido Andi, teremos Andi. E nós imos ter o orixinal catro. No caso de que xa foron actualizados, que ser reflectida, etcétera, etcétera. Polo tanto, este é porque non utilizar a cláusula WHERE. Pero podemos usalo exactamente da igual que usan en Update. Se nós só queremos unha táboa dos nomes e super poderes de persoas vivindo en Nova York, podemos realizar unha instrución como SELECT nome, superpower-- Eu só vou deixar isso-- DE table1 ONDE cidade natal = Nova York. Entón, iso vai amosar que pode estar totalmente diferentes columnas, e logo poñer as columnas que non está mesmo quedando atrás na cláusula WHERE. Non queren o cidade natal de todos. Pero queremos que o nome e a superpotencia de persoas cuxa cidade natal é Nova York. Entón, iso é algo que nós pode facer co ONDE cláusula é que podemos xestionar columnas que non necesariamente queren de volta. Do mesmo xeito como Update, podemos tratar con columnas que non necesariamente quere actualizar. Podemos actualizar a cidade de todos que o nome é Sam, por exemplo. Podemos actualizar a cidade de todo aquel cuxo número de identificación é 2. Entón, só tes que actualizar o cidade da segunda liña onde non hai que xestionar necesaria a pregunta común. E eliminar é, como era de esperar, DELETE FROM table1. E entón temos outra cláusula WHERE. Así, podemos dicir Where ID = 1. Eliminar a primeira liña. E DELETE sempre eliminar unha liña, ou que vai eliminar un número de liñas. DELETE FROM táboa WHERE cidade natal = Nova York ha borrar todos en Nova York. Isto é, se houbo unha praga tráxico súbita e só quería eliminar todos da mesa que viviu nunha determinada cidade que foi alcanzado por unha praga. Que se poidan descansar en paz. Estes son os catro comandos SQL que vai ter usar. Pode non ter usalos todos. Pero estes son os catro CS50 que espera para ser cómodo con entrar tanto cuestionario 1 e tamén pset7 e pset8. Hai só que a táboa de novo. Neste, superpotencia de Roy ten foi actualizado para feixes de láser, que é un exemplo que eu non uso. Non sei cal deles Roy prefire, pero forza. Roy ten unha superpotencia de forza. Katherine non facelo hoxe. Isto é lamentable. Pero ela ten super-velocidade. Ben que foi PHP. Antes de falar sobre MVC, fai Alguén ten dúbidas sobre PHP? Agora SQL, PHP ou de súpeto ten chegar a unha pregunta sobre PHP? Gran. Todo ben, nós está todo definido axiña. Entón, falando un pouco preto de vista modelo controladores, imos voltar a algúns do material en pset7. Entón, o que vista de modelo controlador é-- eu non son indo para salvar as miñas modificacións para acceder porque eu totalmente masacrados-lo. Pero, basicamente, temos dous cousas separadas suceder. Temos un público directorio que contén o código que será executado e as páxinas web que serán visitados. E tamén temos este directorio visualizacións. E vistas contén modelos. Isto é o que a función render-- vimos a renda función nun monte de código PHP CS50 que xa escribiu para ti, que ten en certos parámetros. Que este código está facendo é o que vai en vista, que son conxuntos de como código HTML pre-escritura, e é a inserción de valores en determinados lugares. Isto é como cando entrar CS50 Finanzas, o mesmo cabeceira é en cada páxina. O mesmo é rodapé de cada páxina. Isto é porque a forma que é facer os traballos que vai corrixir automaticamente nese cabeceira e espectador que pode atopar en vista. Nós, en realidade, pode poñerse en cabeceira, e mire, é un ficheiro HTML cunha cabeza. Ten algunhas follas de estilo. Non precisa ollar para CSS para pset7 se non quere. Pero pode modificar Los se quere, facer seu Finanzas ollar un pouco diferente. Ten algúns PHP en a cabeceira un pouco para ver se hai un título diferente debe poñer neste cabeceira. Pero só algúns outros scripts, e ligazóns, e outras cousas. Cabeza termina, corpo comeza, e oops, temos este estraño pouco efecto. E hai unha div, así como unha especie sen forma de elemento que ten unha idea do medio. E entón cando vemos rodapé, temos o fin dunha div. Temos un fondo, que é onde o texto do pé é. Fin da div, fin do corpo, fin do HTML. Entón, o que é a renda facendo é facer é unha especie de remendos cabeceira, un diferente arquivo PHP que conterá as cousas que reais vai ver como o cadro de saldos se está a mercar ou vender accións. E entón el vai engadir ao pé. E a vista do modelo controlador idea é que nós quere separar como as cousas parecen partir do código. É queremos separar a interface e se o servidor, onde a interface é as cousas que o usuario ve o Niza visuals-- HTML, CSS, cousas así, imaxes, etcétera. E o motor é PHP. Este é o código que escribe. Este é o lugar onde o código facendo operacións reais. Isto é, cando está engadindo un stock a súa mesa, cando está a mercar e venda, que é motor. E podemos, como viu, incluíndo PHP directamente en HTML. Entón, o que poderiamos ter feito para esta asignación é só tivo un ficheiro HTML para cada páxina, como login. E entón nesa páxina, pode tivo un enorme bloque de código PHP, incluíndo todo de que o código esta páxina especificamente sería necesario. E entón poderíamos ter feito isto para a carteira. Poderiamos ter feito todas as compras e vender dentro das páxinas individuais. Senón porque estamos renderización separado, desde onde estamos escribindo o motor código, podemos facilmente cambiar o xeito no que as cousas parecen sen cambiando a cada ficheiro único. Facemos cousas como pode engadir unha nova div ao fondo de-- Ola eu modifiquei o rodapé. Pode só facer cousas así. Pero tamén, pode cambiar todo o esquema visual sen afectar o que é indo no motor. E pode cambiar a motor enteiro e aínda telo ollar só como facía antes. Este É a idea de controlador de vista do modelo. E é realmente un paradigma imposto nalgunhas das linguaxes de programación pode querer usar para proxectos finais. Se fai o desenvolvemento IOS, eles teñen puntos de vista, que é o que ve no iPhone, e entón o servidor como como unha cousa separada. Pode pensar un pouco. Hai unha morea de binarios en ciencia da computación, que é divertido, porque todo é en binario. Non planear iso. Isto foi un xogo de palabras non intencional. Si, non trocadilhos. Pero, como ficheiros .h e arquivos .c, hai unha gran cantidade de separación das cousas que quizais non sexa necesario. Así, podemos só editar os arquivos h, ou alguén pode só ver un ficheiro.h e saber exactamente as funcións que están no C ficheiro sen necesariamente saber súa implementación. Esta idea de compoñentes de separación que dependen uns dos outros pero pode clasificar de acceder a un ao outro a través de diferentes canles, paso de variables, só inclúen declaracións, cousas así, este principio axuda a crear aplicacións que pode ser máis facilmente editado por varias persoas, pode ser máis facilmente modificado ou alteracións a grande escala, e son máis fáciles de depurar nunha serie de formas. Moi rápido, eu teño algunhas suxestións para pset7, que eu vou facer pantalla completa para que non só mirando para as-- tippee punta punta. Non hai que moitas consellos. Pero eu mencionen PHP é difícil de depurar. Dobres e triples verificalo. Se o código non é só aparecendo na páxina, pode ser un erro de PHP, desculpe. Nunca ten que mirar para CSS se non quere. Pero unha vez que está acabado, pode ser unha boa cousa pouco de diversión para simplemente entrar e xogar cos parámetros CSS. CSS e HTML son un exemplo dun modelo cousa vista controlador de estilo tamén, non? Podería ter marcas de estilo no interior de elementos HTML. Pero se tipo de terceirização-los a CSS, son máis fáciles de editar, and play coa volta, e divertirse con. Trata CS50 helper funciona como caixas negras. Non é preciso saber exactamente o que está facendo encaixe, pero confiar nel para sempre facer o ben cousa dependendo do que pasalo, cousas como esta. E eu recomendado acompañando paso a paso de David, pasar por todos os material, non só os todos, pero o que realmente pode tratar esas caixas como negro. Non vai a estes funcións de procura de erros. E saudar o regreso do noso Overlord Zamyla. Gran. Hai algunha pregunta finais antes que tipo de ir para o día? Eu aínda estou vivo? Gran. Persoas Livestream Ola. Gran. Hai máis preguntas? Non? E entón eu creo que somos bo para ir hoxe. Vou ir por aquí un pouco despois, se as persoas tiñan dúbidas tiñan medo de preguntar sobre o córrego. Pero, se non, teña un bo día.