[Powered by Google Translate] [Week 8, Vervolg] [David J. Malan] [Harvard University] [Dit is CS50.] [CS50.TV] Dit is CS50, dus dit is het einde van week 8 hier. We hadden natuurlijk een beetje een orkaan eerder deze week, dus nu is het eigenlijk alleen maar jij en ik in deze zaal, maar vandaag blijven we ons gesprek over PHP en over web programmeren meer in het algemeen, en we introduceren ook het idee van databases, in het bijzonder een zogenaamde MySQL, dat is heel populair deze dagen, voor een groot deel vanwege de schaalbaarheid en omdat de vrij en open source. Maar eerst een blik op waar we gebleven vorige keer. Bedenk dat we kijken naar de verschillende Frosh IM's voorbeelden, en dit was de afschuwelijke vorm die ik kwam met een aantal 15 + jaar geleden om studenten op de campus register voor eerstejaars intramurale sport hebben zonder echt te hoeven tocht meer over het erf naar Wigglesworth een fysieke stuk papier onder de deur een aantal Proctor's schuiven. In plaats daarvan zijn we verhuisd alles online, maar om te doen dat we nodig hadden om gebruik te maken van een paar technologieën, zodat een, we moesten HTML, Hypertext Markup Language, dat is ook dit opmaaktaal waarmee u webpagina's structureel. Met behulp van een beetje CSS deze dagen, cascading style sheets, waarbij we gebruik maken van stileringen van de webpagina met behulp van een iets andere syntax, terwijl de HTML was alles over de structuur ervan. We moeten ook een web-programmeertaal te introduceren. In dit geval, zullen we gebruik maken van PHP en PHP zal ons in staat stellen om dynamisch vermogen zowel inhoudelijk als doen programmatische zaken als het verzenden van e-mails, zoals het geval was op het briefje we vertrokken vorige week. Bedenk dat de code voor dit was in 2 delen. Een, hadden we froshims3.php, en dit was grotendeels opmaak met een HTML-formulier binnenkant van het, een klein beetje CSS hier in de stijl attributen zodat het formulier zelf zou worden gecentreerd op de pagina, maar verder dan dat we hadden een aantal representatieve vorm ingangen, een tekstveld, een checkbox, sommige keuzerondjes, een select menu, en een submit knop. En via dit formulier, we voorgelegd aan een bestand dat blijkbaar heette register3.php, die zelf zag er een beetje iets als dit. Nu, de meeste van de code in register3.php, recall, was alles over e-mail. Het deed een beetje validatie van het formulier dat werd ingediend om ervoor te zorgen dat de velden waren eigenlijk op voorwaarde dat werd verwacht. Dan hebben we wel een aantal PHP-functies met behulp van een beetje nieuwe syntax, ook al is het geleend van C. Deze pijl exploitant stelt ons in staat om gebruik te maken van een zogenaamde object-georiënteerd programmeren. We zullen niet ingaan in detail hier, maar weet voor nu het is een manier van het hebben van functies gekoppeld aan objecten, die zijn een speciaal type van structuur, zoals we zagen in C. Maar voor nu, gewoon op het geloof dat dit de juiste syntax te gebruiken bij het gebruik van een bibliotheek als deze PHPMailer bibliotheek. En dan aan het eind van dit bestand hadden we dynamisch gegenereerde een e-mail die werd verstuurd naar mijn jharvard@cs50.net rekening van mijn jharvard@cs50.net account, en we geïnformeerd dat de gebruiker dan ook dat zij zijn ingeschreven voor deze sport. Dat is zo ongeveer wat de Frosh IM's site heeft al die jaren geleden toen ik het uitgevoerd, verleend, in een andere taal, maar het toont je misschien wel de kracht die je hebt nu dat je jezelf kunt uitdrukken, niet alleen programmatisch op een laag niveau in een taal zoals C maar op een veel hoger niveau met deze zeer echte wereld toepassingen zoals e-mail om daadwerkelijk op te lossen echte wereld problemen. Nu, natuurlijk, hoewel ik dit script gebruiken om een ​​aantal te genereren e-mails dynamisch uit jharvard@cs50.net, die inderdaad een account dat ik toegang tot heb, wees heel voorzichtig met het verzenden mail alleen van accounts die eigenlijk uw eigen, opdat dingen krijg je in een beetje heet water in het leven. Met dat gezegd, laten we nu de overgang naar het oplossen van een ander probleem helemaal, dat het behouden staten. Nu, dit betekent wat eigenlijk? HTTP, deze hypertext transfer protocol, is eigenlijk een staatloze protocol, en wat dit betekent is dat als je omhoog trekken iets als Google.com en druk op enter meestal uw browser heeft een soort van spinnen pictogram dat dan resultaten in sommige webpagina wordt gedownload, en dan dat kleine icoon niet langer ronddraait, en dat is inderdaad suggereert dat HTTP heeft afgerond een soort van verbinding met de server en dat is het. HTTP is stateless in de zin dat het niet te handhaven een persistente verbinding naar de server op dezelfde manier Skype doet of Gchat doet, want met HTTP de veronderstelling is dat als je eenmaal hebt een webpagina dat is het opgehaald. Nu, in werkelijkheid deze dagen op sites als Facebook en Google Maps en Twitter en dergelijke er is veel meer dynamiek, waarbij zelfs na die icoon niet langer ronddraait kun je in feite meer updates van de server, meer tweets, meer status-updates op Facebook en dergelijke. Maar zelfs dat is met behulp van een techniek die we over praten in een week of twee bekend als Ajax met een JavaScript taal genaamd, maar aan het eind van de dag, HTTP nog stateless. En toch, als je wilt een of andere manier herinneren dingen over een door de gebruiker zelfs nadat ze losgekoppeld van uw server PHP doet veroorloven u een middel om dit te doen omdat, zoals we zagen vorige keer, PHP heeft een aantal superglobals, en een superglobal is, nogmaals, een speciale globale variabele dat is overhandigd door de webserver en PHP zelf. Je hoeft niets te doen om de waarden in te doen, en onder de superglobals we hebben tot nu toe gezien zijn GET en POST, dat is waar formuliervelden worden automatisch voor u, evenals een paar anderen die we nog niet hebben gezien. Binnenkant van $ _SERVER zijn enkele speciale variabelen met betrekking tot de server zelf. Wat is het IP-adres, welk protocol, HTTP of HTTPS heeft u gebruikt, Wat de aanvraag methode heb je gebruikt en dergelijke, dus er is een aantal interessante, sappige details over de server, en in feite de gebruiker daar ook. Er is $ _COOKIE, dat is waar deze dingen wel cookies worden opgeslagen. We zullen geen tijd over cookies zichzelf vandaag de dag, maar weet nu dat een cookie is slechts een klein stukje informatie die een webserver kunt de plant op een web browser en op zijn beurt de RAM of haar computer de harde schijf het opslaan van informatie over een gebruiker, bijvoorbeeld de gebruiker zijn naam zodat ze niet hoeven te typen elke keer dat ze inloggen of sommige uniek nummer of identificatienummer voor dat de gebruiker zodat u niet hoeft te pesten met dezelfde soort vragen over voorkeuren in de toekomst, maar de meeste plaats op dit moment is $ _SESSION. Dit superglobal, die net als de anderen, wordt overhandigd automatisch door PHP als je het schrijven van PHP gebaseerde websites kunt opslaan wat je maar wilt, strings, integers, Floating Points, waarden, arrays, objecten, echt alles wat je wilt, en het u toestaat om het op te slaan op een zodanige wijze dat zelfs als de gebruiker zo nu en dan komt terug een minuut vanaf nu of 5 minuten vanaf nu, omdat zij nemen hun tijd voordat u op andere banden PHP zal ervoor zorgen dat wat je in die sessie superglobal een minuut of 5 minuten geleden zal er nog zijn als de gebruiker terugkeert. En onder de motorkap dit superglobal wordt uitgevoerd door middel van die dingen geroepen koekjes, maar voor nu, het is gewoon een abstractie waarbij het is een soort van de programmatische equivalent van een winkelwagentje. Wat je ook, de programmeur, zet in dat superglobal associatieve array zal er een bepaald aantal minuten later totdat u deze verwijdert of totdat de gebruiker stopt met zijn of haar browser helemaal. Laten we eens een kijkje nemen op een voorbeeld van hoe dit ding daadwerkelijk wordt gebruikt. In counter.php in stukken van vandaag van code hebben we de volgende regel. Aan het begin van dit bestand hebben we een heleboel blauwe opmerkingen, die zijn oninteressant voor nu. Maar in lijn 13 hebben we een nieuwe lijn, session_start, en dat daadwerkelijk doet precies wat het zegt. Begint sessies. Hiermee kunt u gebruik maken van die grote superglobal $ _SESSION, en het is zo simpel als dat. Nu, als we gaan kijken naar lijn 16, laten we proberen om erachter te komen wat deze webpagina gaat doen. If (isset ($ _SESSION ["counter"]), dan ga je gang en op te slaan in de teller variabele, kleine toonbank, $ _SESSION ["Teller"]. Dit lijkt te worden waarbij een lokale variabele genaamd teller binnenkant waarvan het is waardoor een kopie van wat binnenkant van de superglobal riep sessie op de locatie "teller". Else, blijkbaar, deze kleine lokale variabele teller, wordt geïnitialiseerd op 0. Maar dan een paar regels later in 26 bericht dat de sessie kopie van de teller, de belangrijkste, heeft een nieuwe waarde toegewezen die is de huidige waarde plus 1. In het kort, dit bestand lijkt te updaten een teller die binnen is opgeslagen van de sessie superglobal door het verhogen van het door 1, maar behoudt eerst een kopie van de vorige waarde door te slaan in een lokale variabele met de naam $ teller, en dan naar beneden hier laten we eens kijken wat er overblijft. Het blijkt dat het vrijwel alleen HTML. Aan de onderkant van deze pagina zien we in regel 37 dat ik deze site bezocht teller aantal keren, dus er is hier een paar interessante eigenschappen. One, dit is duidelijk een variabele, maar het is niet voldoende om zomaar $ Teller in het lichaam van uw HTML-want natuurlijk als het er gewoon onder uw HTML PHP gaat ervan uit dat het gewoon HTML. Je letterlijk wilt $ teller worden afgedrukt op het scherm. Maar in plaats van te laten vallen in PHP-modus met dit stukje syntax kunnen we dynamisch hier plaatst u een waarde zeer vergelijkbaar in de geest van wat we de vorige keer met het plaatsen van waarden in strings. In feite is dit gewoon een verkorte schrijfwijze voor te zeggen iets als dit letterlijk, print ($ teller) of zelfs zoiets als printf (% s, teller), of zelfs, zoals je misschien al gezien online of in leerboeken, er is een functie in PHP genaamd echo die doet hetzelfde, en al die zijn gewoon langer adem manieren te zeggen