[Powered by Google Translate] [Minggu 8, Lanjutan] [David J. Malan] [Harvard University] [Ini adalah CS50.] [CS50.TV] Ini adalah CS50, jadi ini adalah akhir dari Minggu 8 di sini. Kami tentu memiliki sedikit badai awal pekan ini, jadi sekarang itu benar-benar hanya kau dan aku di ruang kuliah, tapi hari ini kita melanjutkan pembicaraan kita tentang PHP dan tentang pemrograman web lebih umum, dan kami juga memperkenalkan ide database, terutama satu disebut MySQL, yang cukup populer hari ini, sebagian besar karena dari skalabilitas serta karena yang menjadi sumber bebas dan terbuka. Tapi pertama-tama, melihat di mana kami tinggalkan terakhir kali. Ingatlah bahwa kita cari di IM beberapa contoh Frosh, dan ini adalah bentuk mengerikan yang saya datang dengan beberapa 15 + tahun yang lalu dalam rangka untuk memiliki mahasiswa di kampus mendaftar untuk olahraga mahasiswa intramural tanpa benar-benar harus perjalanan lagi melintasi halaman untuk Wigglesworth untuk geser sepotong fisik kertas di bawah pintu beberapa pengawas itu. Sebaliknya kami pindah segalanya secara online, tetapi untuk melakukan itu kita perlu memanfaatkan dari beberapa teknologi, jadi satu, kami membutuhkan HTML, hypertext markup language, yang sekali lagi merupakan bahasa markup dengan yang Anda membuat halaman web secara struktural. Menggunakan sedikit CSS hari ini, cascading style sheets, dimana kita menggunakan stilisasi dari halaman web menggunakan sintaks yang sedikit berbeda, sedangkan HTML adalah semua tentang struktur daripadanya. Kita juga perlu untuk memperkenalkan bahasa pemrograman web. Dalam kasus ini, kita akan menggunakan PHP, dan PHP akan memungkinkan kita konten keluaran dinamis serta melakukan hal-hal seperti program mengirim email, seperti yang terjadi pada catatan kami meninggalkan pekan lalu. Ingat bahwa kode untuk ini adalah dalam 2 bagian. Satu, kami memiliki froshims3.php, dan ini adalah sebagian besar markup dengan bentuk HTML di dalamnya, sedikit kecil CSS di sini dalam gaya atribut sehingga bentuk itu sendiri akan berpusat pada halaman, tapi di luar itu kami memiliki beberapa masukan bentuk representatif, kolom teks, kotak centang, beberapa tombol radio, menu pilih, dan tombol kirim. Dan melalui formulir ini, kami ajukan ke sebuah file yang ternyata disebut register3.php, yang itu sendiri tampak sedikit sesuatu seperti ini. Sekarang, sebagian besar kode di register3.php, ingat, itu semua tentang email. Itu sedikit validasi dari bentuk yang diajukan untuk memastikan bahwa bidang yang benar-benar memberikan yang diharapkan. Kemudian kami disebut beberapa fungsi PHP menggunakan sedikit sintaks baru, meskipun itu dipinjam dari C. Ini Operator panah memungkinkan kita untuk menggunakan sesuatu yang disebut pemrograman berorientasi obyek. Kami tidak akan masuk ke bahwa dalam setiap rinci di sini, tapi tahu untuk saat ini itu adalah cara memiliki fungsi yang terkait dengan benda-benda, yang merupakan jenis khusus dari struktur, seperti yang kita lihat di C. Tapi untuk saat ini, hanya mengambil pada iman bahwa ini adalah sintaks yang benar untuk menggunakan ketika menggunakan perpustakaan seperti ini perpustakaan PHPMailer. Dan kemudian pada akhir file ini kita telah dihasilkan secara dinamis email yang harus dikirim ke akun saya jharvard@cs50.net dari rekening jharvard@cs50.net saya, dan kami diberitahu pengguna sesuai bahwa mereka telah terdaftar untuk olahraga ini. Itu cukup banyak apa situs Frosh IM melakukan bertahun-tahun yang lalu ketika saya menerapkannya, diberikan, dalam bahasa yang berbeda, tapi itu menunjukkan Anda mungkin kekuatan yang Anda miliki sekarang Anda dapat mengekspresikan diri tidak hanya pemrograman pada tingkat yang rendah dalam bahasa seperti C tetapi pada tingkat yang lebih tinggi dengan aplikasi dunia yang sangat nyata seperti email untuk benar-benar memecahkan beberapa masalah dunia nyata. Sekarang, tentu saja, meskipun saya menggunakan script ini untuk menghasilkan beberapa email dinamis dari jharvard@cs50.net, yang memang account bahwa saya memiliki akses ke, jangan sangat berhati-hati untuk mengirim mengirimkan hanya dari account yang benar-benar Anda sendiri, supaya hal membuat Anda dalam sedikit air panas dalam kehidupan. Dengan mengatakan bahwa, mari kita sekarang transisi untuk memecahkan masalah yang berbeda sama sekali, bahwa negara mempertahankan. Sekarang, apa ini benar-benar berarti? HTTP, protokol transfer hypertext ini, sebenarnya adalah protokol stateless, dan apa artinya ini adalah bahwa ketika Anda menarik sesuatu seperti Google.com dan kemudian tekan enter Biasanya browser Anda memiliki beberapa jenis ikon berputar yang kemudian Hasil dalam beberapa halaman web yang didownload, dan kemudian bahwa ikon kecil berhenti berputar, dan bahwa memang menunjukkan bahwa HTTP telah menyelesaikan beberapa jenis koneksi ke server dan hanya itu. HTTP adalah stateless dalam arti bahwa ia tidak memelihara koneksi secara persistent ke server di Skype cara yang sama tidak atau GChat tidak karena dengan HTTP asumsi adalah bahwa sekali Anda sudah mengambil sebuah halaman web itu saja. Sekarang, pada kenyataannya hari ini di situs seperti Facebook dan Google Maps dan Twitter dan sejenisnya ada dinamika lebih banyak dimana bahkan setelah ikon yang berhenti berputar Anda sebenarnya bisa mendapatkan update lebih dari server, more tweets, update status di Facebook lebih dan sejenisnya. Tetapi bahkan yang menggunakan teknik yang akan kita bicarakan dalam satu atau dua minggu dikenal sebagai Ajax menggunakan bahasa yang disebut JavaScript, tapi pada akhir hari, HTTP masih berkewarganegaraan. Namun jika Anda ingin entah bagaimana mengingat hal-hal tentang user bahkan setelah mereka telah terputus dari server Anda PHP tidak mampu Anda sarana untuk melakukan hal ini karena, seperti yang kita lihat terakhir kali, PHP memiliki sejumlah superglobals, dan superglobal adalah, sekali lagi, variabel global khusus yang diberikan kepada Anda oleh server web dan oleh PHP itu sendiri. Anda tidak perlu melakukan apapun untuk menempatkan nilai-nilai di dalamnya, dan di antara superglobals kita lihat sejauh ini adalah mendapatkan dan posting, yang mana kolom formulir diletakkan secara otomatis untuk Anda, serta beberapa orang lain yang kita belum melihat belum. Dalam $ _SERVER adalah beberapa variabel khusus yang berhubungan dengan server itu sendiri. Apa alamat IP, apa protokol, HTTP atau HTTPS yang Anda gunakan, apa metode permintaan yang Anda gunakan dan sejenisnya, jadi ada beberapa yang menarik, berair rincian tentang server, dan pada kenyataannya, pengguna di sana juga. Ada $ _COOKIE, yang mana hal-hal yang disebut cookie disimpan. Kami tidak akan menghabiskan waktu pada cookies sendiri hari ini, tapi tahu sekarang bahwa cookie hanyalah sepotong kecil informasi bahwa server web dapat menanam pada browser web dan pada gilirannya RAM atau hard drive komputer-nya untuk menyimpan informasi tentang pengguna, misalnya, nama pengguna mereka sehingga mereka tidak perlu mengetik setiap kali mereka masuk atau beberapa unik nomor atau pengidentifikasi untuk pengguna yang sehingga Anda tidak perlu mengganggu mereka dengan jenis yang sama pertanyaan tentang preferensi di masa depan, namun yang paling menarik sekarang adalah $ _SESSION. Ini superglobal, yang, seperti yang lain, diserahkan kepada Anda secara otomatis oleh PHP ketika Anda sedang menulis PHP berbasis website dapat menyimpan apa pun yang Anda inginkan, string, integer, floating point, nilai-nilai, array, objek, benar-benar apa pun yang Anda inginkan, dan memungkinkan Anda untuk menyimpannya dalam sedemikian rupa bahwa bahkan jika pengguna mengunjungi Anda sekarang dan kemudian datang kembali satu menit dari sekarang atau 5 menit dari sekarang karena mereka mengambil waktu mereka sebelum mengklik beberapa link lainnya PHP akan memastikan bahwa apa pun yang Anda dimasukkan ke dalam sesi superglobal beberapa menit menit atau 5 lalu masih akan berada di sana ketika kembali pengguna. Dan di bawah kap superglobal ini dilakukan dengan cara hal-hal yang disebut cookie, tetapi untuk sekarang, itu hanya sebuah abstraksi dimana itu semacam program setara dari keranjang belanja. Apa pun yang Anda, programmer, dimasukkan ke dalam array asosiatif superglobal akan ada beberapa jumlah menit kemudian sampai Anda menghapusnya atau sampai pengguna berhenti peramban nya sama sekali. Mari kita lihat sebuah contoh bagaimana hal ini benar-benar digunakan. Dalam counter.php antara potongan saat ini kode kita memiliki baris berikut. Pada awal file ini kita memiliki banyak komentar biru, yang menarik untuk saat ini. Tapi di baris 13 kita memiliki baris baru, session_start, dan yang benar-benar melakukan persis apa yang dikatakannya. Dimulai sesi. Hal ini memungkinkan Anda untuk menggunakan superglobal besar $ _SESSION, dan itu sesederhana itu. Sekarang, jika kita melanjutkan untuk melihat baris 16, mari kita coba untuk mencari tahu apa halaman web yang akan dilakukan. If (isset ($ _SESSION ["kontra"]) kemudian pergi ke depan dan simpan dalam variabel counter, counter kecil, $ _SESSION ["Kontra"]. Hal ini tampaknya akan mendeklarasikan sebuah variabel lokal yang disebut kontra yang di dalamnya itu menempatkan salinan apa saja yang dalam dari superglobal disebut sesi di lokasi "kontra." Lain, rupanya, ini variabel counter kecil lokal, diinisialisasi ke 0. Tapi kemudian beberapa baris kemudian pada 26 pemberitahuan bahwa salinan sesi counter, kuncinya, memiliki ditugaskan nilai baru yang merupakan nilai saat ini ditambah 1. Singkatnya, file ini tampaknya akan memperbarui counter yang disimpan dalam dari superglobal sesi dengan incrementing dengan 1, tetapi pertama kali mempertahankan salinan dari nilai sebelumnya dengan menyimpan dalam sebuah variabel lokal yang disebut $ counter, dan kemudian turun di sini mari kita lihat apa yang tersisa. Ternyata itu cukup banyak hanya HTML. Di bagian bawah halaman ini kita lihat di baris 37 yang saya telah mengunjungi situs ini Jumlah counter kali, jadi ada beberapa fitur yang menarik di sini. Satu, ini jelas variabel, tetapi tidak cukup untuk hanya menempatkan $ Counter di tubuh HTML Anda karena tentu saja apakah itu hanya ada di kalangan PHP HTML Anda akan berasumsi bahwa hanya HTML. Anda benar-benar ingin $ counter yang akan dicetak di layar. Tapi bukannya dengan menjatuhkan ke mode PHP dengan ini bagian dari sintaks kita dinamis dapat memasukkan nilai di sini sangat mirip dalam semangat untuk apa yang kami lakukan terakhir kali dengan memasukkan nilai-nilai ke string. Pada kenyataannya, ini hanyalah sebuah notasi singkat untuk mengatakan sesuatu seperti ini secara harfiah, print ($ counter) atau bahkan sesuatu seperti printf (% s, counter), atau bahkan, karena Anda mungkin telah melihat secara online atau di buku-buku pelajaran, ada fungsi di PHP disebut gema yang melakukan hal yang sama, dan semua dari mereka adalah cara hanya lebih lama tele mengatakan <=.? Dalam hal ini yang Anda tidak perlu menempatkan PHP kata setelah tanda tanya. Ini adalah notasi singkat untuk, sekali lagi, apa yang kita hanya melihat beberapa saat yang lalu yang bergema beberapa nilai. Mari kita lihat apa hasil akhir dari ini sebenarnya. Biarkan aku pergi lebih ke dalam file counter.php kami, dan kita akan melihat bahwa David hanya membuat kesalahan dengan bermain dengan kode di sana. Mari kita memperbaiki apa pun kacau, dan kesalahan tampaknya berada di sana, pergi, on line 37. Menurut bagian atas halaman ini saya telah mengunjungi situs ini 0 kali. Nah, mari kita pergi ke depan sekarang, dan di bagian atas browser klik pada ulang ikon, dan saya klik ulang, dan sekarang saya sudah mengunjungi situs 1 kali, 2, 3, 4, 5, 6, 7, 8. Dan memang, jika kita melihat sumber halaman ini kode sumber yang sebenarnya berubah, dan perhatikan adanya lengkap PHP apapun, dan itu karena Kode PHP dievaluasi atau ditafsirkan sisi server, dan sehingga berarti bahwa output dari script PHP adalah apa yang akhirnya dikirim ke browser, yang dalam hal ini adalah beberapa HTML mentah dan beberapa teks baku. Apa yang terjadi di sini? Nah, dengan garis relatif sedikit kode saya bisa menyimpan terus-menerus selama beberapa detik, atau jika kita menunggu cukup lama, menit, bahkan jam, beberapa nilai dengan cara yang membuat HTTP tampak stateful seolah-olah kita telah ditahan ini koneksi ke server, dan itu hanya mengingat apa yang saya katakan terakhir kali, tetapi dalam kenyataannya ada sejumlah besar kompleksitas terjadi di bawah tenda melibatkan cookie yang memungkinkan PHP untuk memberikan ilusi ini ini keranjang belanja-seperti fitur. Untuk saat ini, contoh sepele di mana kami hanya menyimpan integer, namun fitur yang akan datang kembali untuk menjadi nilai yang besar ketika kita mulai berbicara tentang proyek yang lebih kompleks, di antaranya masalah set 7. Ini adalah masalah Anda yang terakhir diatur dalam CS50. Aku tahu, itu sangat menyedihkan, tapi apa yang akan Anda temukan adalah bahwa kita akan menyimpulkan ini bagian dari semester dengan benar-benar transisi dari konteks C tentu dengan konteks PHP tapi sementara menggunakan beberapa dasar-dasar yang sama kita bicarakan untuk beberapa waktu. Tujuan dengan pset 7 adalah untuk menerapkan CS50 Keuangan, yang merupakan versi Anda sendiri dari Yahoo Finance atau Google Finance atau bahkan Etrade.com dimana Anda memiliki kemampuan untuk mencari harga saham untuk simbol yang diberikan, tapi bahkan lebih dari itu Anda memiliki kemampuan untuk "membeli" dan "menjual" saham yang diperdagangkan di bursa efek berbagai sebab seperti ini home page di sini menunjukkan, yang benar-benar sejauh mana kita sudah mulai sejumlah masalah bagi Anda, Anda memiliki form login yang meminta nama pengguna dan password. Ini memiliki tombol kirim, tapi setelah itu, seperti yang kita akhirnya akan melihat, tidak ada yang benar-benar terjadi di bawah kap namun karena tetap bagi Anda untuk menerapkan kemampuan untuk mendaftarkan pengguna baru, kemampuan untuk membeli saham, untuk menjual saham, untuk benar-benar mencari harga saham saat ini. Dan memang, ini akan menjadi seperti dunia nyata mungkin karena kita lakukan termasuk sedikit kode yang akan memungkinkan Anda dengan fungsi tunggal untuk query Yahoo Finance, yang luar biasa membuat data gratis yang tersedia untuk mencari harga saham berdasarkan simbol saham atau simbol ticker, dan Anda mendapatkan kembali harga saham saat hari. Data yang Anda benar-benar melihat dalam pset tertentu akan sekitar sebagai dunia nyata karena bisa mendapatkan sehingga Anda benar-benar interfacing dengan saham dunia nyata, harga dunia nyata, dan kita akan melihat berapa banyak uang yang Anda dapat membuat mungkin selama beberapa hari berikutnya bermain dengan sejumlah masalah Anda sendiri. Tapi mari kita pertama kali mengatur panggung untuk bagaimana merancang sesuatu yang tentu lebih rumit dibandingkan counter.php, itu lebih rumit daripada contoh IM Frosh sejauh ini, dan mari kita mencoba untuk memperkenalkan paradigma beberapa di sini yang memungkinkan kita baik untuk pset 7 dan mungkin untuk proyek akhir Anda jika Anda melakukan sesuatu yang didasarkan web untuk menjaga kode Anda terorganisir dengan baik, untuk menjaga diri waras, dan untuk mengambil langkah menuju berkolaborasi, baik dalam tugas akhir ini CS50 atau di luar jika Anda terus memprogram sesuatu di masa depan. Ada paradigma desain umum dalam ilmu komputer dan dalam pengembangan perangkat lunak lebih umum dikenal sebagai MVC, model view controller, dan ini adalah singkatan konyol yang menggambarkan ide yang sangat bagus, yang merupakan pemisahan dari aspek yang berbeda dari sebuah program, khusus menjaga memisahkan logika atau logika bisnis dari sebuah situs web sehingga apa pun yang melibatkan hal-hal seperti memanggil fungsi dan query database dan sejenisnya terjadi bukan antara HTML Anda melainkan dalam file terpisah, dan memang, ada satu file ini biasanya yang sudah Anda panggil controller itu benar-benar otak di balik operasi, dan kita akan melihat contoh ini hanya dalam beberapa saat. Ada sebuah model yang pemrograman kode yang melakukan berbicara dengan database Anda, yang berbicara ke Yahoo Finance dan sejenisnya, dan kemudian ada V di MVC, pandangan, semua barang-barang yang berkaitan dengan estetika, file yang sebenarnya mengandung HTML, CSS mungkin Anda dan sejenisnya. Idenya di sini, karena gambar ini menunjukkan, adalah bahwa controller adalah file, seperti yang kita akan segera melihat dan seperti yang Anda terutama akan melihat di pset 7, bahwa dunia berbicara kepada melalui browser web mereka. Itu adalah file yang akan dikunjungi di internet publik, tapi controller berbicara kepada berpotensi model, yang merupakan salah satu atau lebih file lain yang berisi kode yang berhubungan dengan data, kode yang terkait dengan database dan sejenisnya, dan kemudian berbicara kepada controller satu atau lebih file lain yang dikenal sebagai pandangan, yang merupakan estetika dari suatu halaman web, template macam, yang mungkin mengambil beberapa data sebagai masukan, tapi pada akhir hari satu-satunya logika dalam pandangan harus render data, iterasi loop dan benar-benar menyemburkan beberapa HTML berbasis rendition daripadanya atau bahkan sesuatu seperti PDF. Apa yang baik tentang MVC adalah bahwa Anda dapat memiliki pandangan yang berbeda berdasarkan jenis perangkat, berdasarkan pada jenis format file yang Anda benar-benar ingin menunjukkan kepada pengguna. Mari kita lihat beberapa contoh semakin lebih kompleks dan dirancang dengan baik beberapa dengan memulai pertama dengan versi 0 di sini. Biarkan aku pergi ke depan dan membuka di direktori MVC kami hari ini file bernama index.php dalam direktori 0. Perhatikan ini adalah situs yang sederhana dan sangat underwhelming Super itu semacam versi 0 dari homepage untuk CS50, dan perhatikan bagaimana kita memiliki link ke Kuliah, kami memiliki link ke Silabus, dan jika saya mengikuti link ke pemberitahuan Kuliah bahwa URL bagian atas akan berubah menjadi lectures.php. Jika saya kemudian ikuti link ke Minggu 1 pemberitahuan bahwa perubahan URL untuk week1.php. Sepertinya ada struktur hirarkis yang cukup sederhana di sini. Mari kita lihat di bawah kap di bagaimana hal ini ditata, dan memang, jika saya melihat index.php itu cukup sederhana. Pada kenyataannya, meskipun saya disebut ini file PHP ada kode pemrograman yang sebenarnya. Ada komentar yang saya tulis di sini di PHP hanya jadi pengguna tidak berakhir melihatnya. Tentu saja, seperti sebelumnya, apa yang ada di antara tag PHP akan ditafsirkan, bahkan jika itu komentar, dan untuk menginterpretasikan komentar berarti hanya untuk membuangnya di akhir hari dan tidak benar-benar mengirimkannya ke browser, jadi semuanya di sini hanya estetika. Jika saya membuka lectures.php sama ini juga hanya sebuah file kode keras. Hal ini terjadi untuk disebut sesuatu. Php, tapi itu benar-benar hanya. html, dan week1.php, week2.php sama hanya markup, sehingga ada sekelompok kekurangan dari desain ini. Satu, itu sejumlah besar copy / paste. Meskipun satu-satunya hal yang berubah di antara file-file ini adalah daftar unordered, tag li, saya tetap memiliki tipe doc, HTML, kepala, judul, tubuh dekat, dekat HTML dan lebih dalam setiap file tunggal, yang berarti bahwa jika saya pernah ingin merestrukturisasi ini halaman web atau restylize itu aku harus masuk dan mengubah semua file secara manual atau dengan beberapa besar mencari dan mengganti. Mari kita mengambil langkah menuju desain lebih cerdas, lebih lama berpikir dalam versi 1 di sini dimana sesuai saya baca bahwa kami telah disertakan sehingga Anda dapat bermain bersama dengan ini lebih santai dalam waktu rumah yang kita miliki di sini ringkasan dari file dalam versi 1 dari situs ini, dan tampaknya bahwa saya telah mengambil itu atas diri untuk faktor luar beberapa kode umum, header.php dan footer.php. Nah, mari kita lihat apa yang ada di dalam pertama mereka. Header.php tampak akrab, tapi perhatikan mana itu bisa dipotong? Tepat setelah baris 19, jadi itu semua yang umum dari file index.php, lectures.php, week1 dan week2.php dari contoh sebelumnya. Apa yang saya lakukan adalah copy dan segala cut yang umum untuk semua file, memasukkannya ke dalam sebuah file header yang terpisah, dan juga di footer.php aku menerapkan prinsip yang sama dimana hanya menarik garis di footer.php adalah tubuh ini, dua dekat dan HTML dekat. Tapi apa ini berarti sekarang adalah bahwa dalam versi baru pemberitahuan index.php berapa banyak sederhana itu bisa mendapatkan. Memang, sedikit lebih samar mencari, sedikit kurang intuitif untuk mengikuti atas ke bawah, tapi Allahku, semua redundansi yang sekarang hilang. Kami memerlukan menggunakan fungsi PHP harfiah disebut membutuhkan sampai atas, yang sangat mengingatkan, ingat, dari C # include mekanisme. Kami memerlukan header.php di bagian atas. Kami memerlukan footer.php di bagian bawah, dan satu-satunya yang berbeda atau khusus tentang file ini adalah konten yang dimaksudkan untuk menjadi unik untuk itu. Jika saya kemudian masuk ke dalam, katakanlah, lectures.php, prinsip yang sama berlaku. Sekali lagi, beberapa komentar di bagian atas, tapi kemudian saya memerlukan header, footer membutuhkan, dan di antara itu hanya konten yang benar-benar berubah. Dan jika kita melihat ke Minggu 1 Minggu 2 dan kita akan melihat bahwa prinsip yang sama telah diterapkan di sana. Nah, kita tidak cukup dilakukan di sana. Mari kita lihat versi 2, yang memiliki struktur yang sama, tapi perhatikan sekarang aku sudah memperkenalkan sesuatu yang lain. Sejalan 10 Saya sudah diperkenalkan helpers.php, yang tampaknya mengandung fungsi pembantu. Sebuah fungsi pembantu umumnya fungsi yang relatif singkat bahwa Anda menulis untuk membantu Anda keluar di berbagai tempat, dan mari kita lihat apa yang ada dalam helpers.php. Dalam kasus ini, sepertinya memiliki 2 fungsi. Ingat dari hari lainnya dengan contoh kubus kami Anda dapat mendefinisikan fungsi Anda sendiri dalam PHP, dan apa yang saya lakukan sekarang adalah saya sudah fungsi didefinisikan disebut membuat footer dan membuat header, yang pertama mengambil parameter yang disebut data, nilai default yang adalah array kosong, seperti yang disarankan di sana, dan kita benar-benar bisa menulis ini bahkan lebih ringkas dalam versi terbaru dari PHP dengan mengatakan braket persegi terbuka, tertutup braket persegi. Itu berarti array kosong ukuran 0 tetapi tetap array. Fungsi Ekstrak sedikit khusus dalam apa yang dilakukannya adalah dibutuhkan sebagai argumen array asosiatif yang memiliki 0 atau lebih pasangan nilai kunci, dan jika Anda memiliki kunci foo dan nilai bar fungsi ekstrak menciptakan situasi di mana sekarang, pada baris 11, Anda memiliki variabel lokal bernama $ foo yang nilainya bar. Dan jika Anda memiliki kunci lebih dan nilai-nilai dalam array data, sama akan mereka diekstraksi ke dalam lingkup lokal atau ruang nama sehingga footer.php dan ide yang sama di sini, sehingga header.php memiliki akses ke variabel tersebut. Bahkan, biarkan aku membuka lagi header.php dan menarik perhatian sekarang apa yang tampak seperti di versi ini. Daripada hard coding CS50 sebagai judul untuk setiap halaman melihat dinamika yang mungkin sekarang. Sejalan 5 Saya bergema variabel judul, tapi pertama-tama saya melewati variabel judul untuk fungsi yang disebut htmlspecialchars. Sebuah nama bodoh untuk fungsi, selama itu, tapi itu benar-benar melakukan apa yang dikatakannya. Ini memastikan bahwa setiap karakter khusus dalam string yang telah disahkan pada benar lolos HTML. Ini sebenarnya adalah cara untuk menghindari sesuatu yang disebut serangan scripting lintas situs dimana seseorang bisa jahat atau sengaja menyuntikkan HTML mereka sendiri ke situs web Anda dengan menyisipkan ke dalam beberapa bentuk, misalnya, sesuatu yang Anda tidak cukup mengharapkan, terutama kode JavaScript, seperti yang akan kita bicarakan dalam seminggu atau waktu dua itu. Ini header.php sekarang, itu pandangan dalam arti bahwa hal itu memungkinkan Anda untuk melihat estetis isi dari beberapa kumpulan data. Tapi yang lebih spesifik, itu template. Ini adalah semacam cetak biru sekarang dari apa yang kita inginkan header dari setiap halaman untuk terlihat seperti, tapi ada beberapa dinamika dalam bahwa kita ingin judul untuk secara dinamis dimasukkan berdasarkan variabel judul yang diekstrak ketika kita dipanggil, lagi, fungsi render header. Sekarang, jika kita melihat footer render, sebenarnya ada tidak banyak menggunakan itu sekarang karena di footer.php ada dinamika apapun. Mungkin ada, tetapi pada saat itu adalah daftar kode keras dari 2 tag, tapi ide yang sama berlaku, sehingga yang benar-benar menunjukkan mengapa Apakah kita buang waktu memiliki header render dan fungsi render footer? Biarkan aku pergi bukan sekarang ke versi 3, dan dalam versi 3 di pembantu saya memutuskan untuk menyederhanakan bahkan lebih. Biarkan aku memiliki satu fungsi render. Biarkan aku memilikinya mengambil argumen lain, kali ini disebut template, yang dimaksudkan untuk menjadi nama template, dan kemudian saya akan menggabungkan terlalu berani php untuk nilai yang variabel., dan kemudian jika ada foo.php, bar.php atau header.php dan footer.php, maka aku akan pergi ke depan dan ekstrak data variabel dan kemudian memerlukan jalan itu. Dengan kata lain, untuk menggunakan ini sekarang, jika saya membuka index.php perhatikan bahwa saya tidak menyebut sundulan render lagi. Aku hanya memanggil render, tapi saya lulus dalam nilai dikutip dari header untuk membuat jelas template yang saya benar-benar ingin memuat. Kemudian di sini melihat apa yang saya lakukan. Saya lewat di dinamis kunci dari judul, nilai CS50, dan ini juga, seperti yang kita lihat sebelumnya, bisa dibuat lebih ringkas dalam versi terbaru dari PHP di mana saya bisa menggantikan fungsi array dengan tanda kurung siku, yang saya usulkan adalah lebih mudah dibaca dan tentu sedikit lebih mudah untuk mengetik. Dan tentu saja, dengan panggilan render footer di bagian bawah, kita tidak repot-repot lewat di suatu argumen kedua sama sekali, tidak ada array asosiatif, karena tidak ada di dalam dinamis footer itu. Ini hanya beberapa tag dekat untuk HTML. Baik, kita mengambil langkah-langkah menuju benar-benar membersihkan semuanya di sini, tapi biarkan aku membuka 2 contoh akhir. Ini satu, nomor 4, perhatikan bahwa saya telah membuat keputusan sadar sekarang untuk memperbaiki contoh sebelumnya dengan menggunakan hirarki akhirnya beberapa file saya. Perhatikan bahwa dalam ringkasan ini, dalam hal ini saya membaca, saya sudah diperkenalkan yang termasuk direktori dan direktori template Isi yang akan menjadi hal-hal yang saya ingin memasukkan dan template yang saya ingin membuat masing-masing. Ini benar-benar saya menjadi anal dan mencoba untuk menjaga hal-hal rapi, menyimpan file-file terkait bersama-sama, tetapi hasil akhirnya adalah bahwa kita sekarang memiliki setup yang sedikit lebih rapi, tapi kita harus ingat sekarang dalam, misalnya, index.php ketika kita membutuhkan berkas helpers.php kita harus sekarang memerlukan via includes / helpers.php bukan hanya mengatakan helpers.php karena sekarang itu sebenarnya dalam sub direktori. Sekarang, sebagai samping, Anda akan melihat dalam contoh dan beberapa orang lain fungsi seperti membutuhkan, membutuhkan sekali. Ada sebenarnya fungsi itu sendiri disebut meliputi, dan mereka semua memiliki perilaku yang sedikit berbeda. Di sini saya katakan membutuhkan sekali untuk membuat super jelas bahwa saya hanya ingin orang-orang pembantu termasuk dalam proyek saya sekali. Tapi kalau aku berhati-hati dan jika aku benar-benar berpikir melalui logika saya benar itu harus cukup juga hanya untuk mengatakan membutuhkan sampai atas asalkan saya sendiri tidak sengaja mengharuskan file yang sama di tempat lain. Pada kenyataannya, ini adalah cara yang lebih efisien dalam melakukan sesuatu kemudian menggunakan membutuhkan sekali, jadi saya akan memotongnya menjadi hanya membutuhkan. Mari kita mengambil satu langkah lebih jauh. Contoh terakhir ini sekarang, versi 5, memiliki hirarki folder bahkan lebih bersih. Perhatikan apa yang saya lakukan di sini per saya baca dalam versi final sekarang saya memiliki direktori HTML saya, yang saya punya selama ini, namun dalam sana sekarang hanya index.php, lectures.php, week1.php dan week2.php. Termasuk direktori sekarang tinggal bersama dari direktori HTML, sehingga pada tingkat yang sama seperti saudara kandung, sehingga untuk berbicara. Begitu pula folder template. Takeaway kunci di sini adalah saya telah memperkenalkan struktur sedikit lebih, tetapi fitur utama sekarang adalah bahwa hanya file yang perlu web diakses, publik dialamatkan oleh URL di internet publik dalam direktori HTML saya. Sementara itu, file lainnya, helpers.php, footer.php, header.php, yang bisa dibilang mungkin lebih sensitif, mungkin pembantu sebenarnya memiliki nama pengguna dan password beberapa atau beberapa intelektual milik saya, fungsi aku benar-benar tidak ingin dunia untuk melihat, bahkan jika tidak sengaja. Ini praktik yang baik untuk menjaga keluar dari direktori HTML publik setiap file yang tidak perlu diri menjadi publik. Semua harus Anda lakukan dalam hal ini ketika melihat, misalnya, direktori HTML file index.php, perhatikan kita hanya harus sedikit lebih berhati-hati saat membutuhkan atau memerlukan sekali file ini. Saya harus terlebih dahulu lakukan .. untuk pergi ke direktori induk, kemudian melakukan / includes / helpers.php menyelam kembali ke dalam untuk mendapatkan file yang saya peduli. Setiap pertanyaan kemudian pada MVC atau inkarnasi ini relatif sederhana daripadanya? Dan biarkan aku membuat jelas bahwa kita fokus cukup sedikit di V di sini, pandangan dan anjak keluar dari template ini. Kami sudah tidak benar-benar dibedakan M dari C dulu. Bahkan, ada benar-benar ada di sini M, dan bahkan C kami, controller, tidak benar-benar melakukan semua yang banyak, tetapi Anda akan mendapatkan lebih banyak akrab dengan kedua dari mereka 2 surat dari MVC, atau lebih tepatnya, Anda akan mendapatkan jauh lebih akrab dengan C di MVC untuk mengatur, masalah 7 jadi ada lebih dari itu di cakrawala. Pertanyaan? Sebenarnya tidak ada seorang pun di sini. Oke, mari kita sekarang beralih ke topik kedua dan terakhir untuk hari ini. Itu adalah pengenalan database. Sampai titik ini kita sudah memiliki beberapa cara untuk menyimpan data. Kami telah menggunakan variabel. Kembali dalam file C kami, I / O diskusi kami mulai menggunakan file teks dan menggunakan file seperti fprintf, dan kemudian kita bahkan mulai berbicara tentang CSV file sedikit, nilai dipisahkan koma, sehingga semua ini memungkinkan kita untuk memiliki data yang tersimpan baik non-terus-menerus atau persisten. Tetapi bahkan CSVs tidak benar-benar kondusif untuk mencari dan memasukkan dan menghapus. Ini benar-benar hanya sebuah file teks bodoh dipisahkan oleh koma baris demi baris demi baris demi baris, jadi jika Anda ingin mencari file yang terbaik yang dapat Anda lakukan benar-benar adalah pencarian linear. Anda harus mulai di bagian atas file, membaca semuanya dalam, dan mencari beberapa nilai bunga. Jika Anda ingin memasukkan ke dalamnya Anda harus melakukan hal yang sama, iterasi di atasnya dan memasukkan di tempat tertentu, dan pada kenyataannya, Anda harus melakukan semua logika mencari sendiri. Anda tidak bisa melakukan pola pintar pencocokan pada file CSV kecuali Anda sendiri menulis kode. Anda tidak dapat melakukan filtrasi dari file CSV kecuali Anda sendiri menulis kode. Bukankah lebih baik jika orang lain dimasukkan ke dalam semua upaya untuk benar-benar membuat pencarian mudah dan penyisipan mudah dan penghapusan dan memperbarui dan sebagainya? Itulah yang database adalah. SQL, bahasa query terstruktur, belum bahasa lain bahwa kita memperkenalkan di sini hari ini, tapi ini juga cukup diakses, dan apa yang kita benar-benar akan lakukan hanya memetik dari itu beberapa yang paling menonjol karakteristik sehingga untuk pset 7, dan jika Anda melakukan sesuatu yang didasarkan web, tugas akhir Anda, Anda memiliki kemampuan untuk mengekspresikan diri dalam hal permintaan data. Anda memiliki kemampuan untuk menyimpan sedikit atau banyak data dalam cara yang jauh lebih terstruktur yang akan pada akhir hari membuat hidup Anda lebih mudah karena dengan SQL Anda dapat mengekspresikan diri lebih tepatnya, jauh lebih metodis untuk mendapatkan kembali beberapa subset dari data dari corpus yang lebih besar dari data. Anda dapat memikirkan database, dalam hal ini, sebuah database SQL, benar-benar seperti Excel Bilangan atau di mana itu spreadsheet, atau mungkin beberapa spreadsheet, dan spreadsheet, tentu saja, memiliki baris dan kolom, dan itu karena Database SQL relasional, relasional dalam arti bahwa mereka menyimpan data dalam hal ini tabel, baris dan kolom. Mereka berkinerja tinggi daripada sesuatu seperti spreadsheet, dan spreadsheet dimaksudkan untuk digunakan oleh manusia. Sebuah database dimaksudkan untuk digunakan oleh programmer menulis kode menentangnya, sehingga inkarnasi database akan menjadi salah satu baris perintah. Salah satu database relasional yang paling populer di luar sana, sekali lagi, MySQL, yang luar biasa bebas, berkinerja sangat tinggi, dan ini adalah apa yang Facebook digunakan sangat awal dan sampai batas tertentu masih hari ini untuk menyimpan banyak data, dan kita akan lihat sebentar lagi yang menggunakan perintah yang relatif sederhana kita dapat memilih data, data insert, update data, menghapus data dan sejenisnya, tapi untungnya, ada antarmuka yang lebih user-friendly dari sekedar mengetik di prompt hitam dan putih di sini. Kami akan gunakan untuk pset 7 dan seterusnya perangkat gratis yang disebut phpMyAdmin. Nama ini kebetulan. Alat ini terjadi untuk diterapkan di PHP, tapi itu tidak relevan fundamental. Apa yang berguna tentang phpMyAdmin adalah bahwa itu adalah utilitas berbasis web. Kami telah pra-instal dalam alat untuk Anda, dan dengan itu Anda dapat membuat tabel dalam database, Anda dapat memasukkan data, menghapus data, dan umumnya melihat Anda data dalam lingkungan yang cukup user-friendly. Pengguna Anda tidak akan menggunakan phpMyAdmin. Ini benar-benar hanya alat administratif atau pengembang yang dapat digunakan untuk melihat dan melihat-data Anda dan mencari tahu bagaimana struktur itu, seperti Anda sendiri mungkin menggunakan Excel atau Numbers, tapi itu akan menjadi cara yang bagus untuk memvisualisasikan apa yang terjadi di bawah tenda sehingga Anda dapat fokus pada pemecahan masalah yang menarik dan tidak begitu banyak pada perintah misterius. Mari kita lihat contoh data yang akan disimpan tabularly dalam database relasional. Berikut ini salah satu contohnya. Sekarang, sayangnya, phpMyAdmin keliru di sisi dari cara melempar terlalu banyak kata dan grafis pada Anda, tetapi jika Anda mengasah dalam hanya pada ID kolom, kolom nama pengguna, dan kolom hash, ini efektif spreadsheet, tetapi hal itu terjadi menjadi potongan dari meja di dalam alat menggunakan file yang kami menyediakan Anda dengan sejumlah masalah dalam 7. Secara khusus, kami memberikan Anda sebuah file yang mewakili pengguna meja, sehingga spreadsheet yang berisi pengguna dengan 3 kolom, salah satunya adalah ID unik mulai dari 1 dan menjadi bertambah setelahnya. Kolom kedua adalah nama pengguna, dan anda yang melakukan Hacker, edisi Hacker untuk pset 2, mungkin mengenali beberapa dari nama-nama pengguna setidaknya. Di sisi kanan adalah password, tapi mereka tidak password literal. Mereka hash daripadanya, jadi ternyata yang menyimpan password dalam database adalah ide yang sangat buruk. Kalian semua mungkin membaca di beberapa titik beberapa website atau database beberapa perusahaan terganggu, dan kemudian Anda harus mengubah sandi Anda, Anda perlu untuk mendapatkan pengembalian uang pada hal-hal karena beberapa orang jahat justru masuk ke akun Anda sebagai hasilnya. Menyimpan password dalam teks yang jelas, tidak terenkripsi dalam database benar-benar bodoh, namun itu sangat lucu kemudian membaca tentang beberapa perusahaan yang sangat terkenal kadang-kadang dalam pers database yang terganggu, dan bagian yang tidak lucu, tapi fakta bahwa database mengandung terenkripsi password konyol karena secara harfiah dengan satu baris kode Anda dapat melindungi terhadap bahwa ancaman tertentu, dan itulah yang kami lakukan di sini. Bahkan untuk palsu sedikit versi kita CS50 Keuangan kami mengenkripsi password hanya untuk mengukur baik, dan fakta bahwa semua password mulai dengan $ 1 $ hanyalah konvensi. Itu hanya berarti mereka dienkripsi atau benar-benar hashed, yang seperti fungsi enkripsi satu arah dimana Anda tidak dapat membalikkan efek dengan sesuatu yang disebut MD5. Fakta bahwa 50 adalah setelah itu berarti bahwa nilai garam dari 50 digunakan untuk hashing semua password kecuali satu. Tambang, tentu saja, seperti yang Anda lihat di sana, HA, adalah menggunakan garam yang berbeda, sehingga Anda yang mendapat sedikit tersandung mungkin di Hacker 2, yang mungkin telah hasil dari memiliki kami digunakan hash yang berbeda dari yang lain karena password saya sebenarnya sama karena beberapa pengguna lainnya di sana. Bahkan, jika Anda sudah menunggu berminggu-minggu untuk mengetahui apa yang ada di sini adalah password password yang Anda ditantang retak dalam edisi Hacker set, jadi tidak ada masalah 2 terlalu rumit. Bahkan, ini Malan adalah sama dengan jharvard, tetapi jika kita kembali mereka tampak berbeda. Fokus pada jharvard di merah karena mereka asin berbeda. Algoritma ini terganggu dengan cara yang hash value, nilai dienkripsi terlihat sedikit berbeda karena input yang sedikit berbeda, tetapi password bawah tenda masih akhirnya merah. Sekarang, siapa yang peduli tentang hal ini? Nah, kami menyediakan Anda dengan pengguna sampel, sampel nama pengguna dan hash password mereka sehingga Anda benar-benar memiliki beberapa pelanggan untuk CS50 Keuangan saat pertama kali turun tanah dengan kode Anda. Anda harus menerapkan lebih tabel dalam MySQL, dalam database. Anda harus membuat spreadsheet lebih, efektif, tapi kami memutuskan untuk memberikan yang satu ini untuk Anda mulai, dan Anda akan melihat bahwa masalah spesifikasi set menuntun Anda melalui proses mengimpor tabel ini dan juga menjelaskan apa beberapa karakteristik, dan Anda juga akan melihat bahwa kami menyediakan Anda dengan kode untuk menangani hashing atau enkripsi password tersebut, sehingga Anda tidak perlu khawatir terlalu banyak tentang apa MD5 atau sejenisnya sebenarnya semua tentang. Jadi, SQL, bahasa query terstruktur. Hal ini, cukup sederhana, bahasa yang kita akan mulai menggunakan di pset 7 dan mungkin di luar untuk meminta data dari database beberapa. Data tersebut, sekali lagi, disimpan tabularly dalam tabel relasional, kolom, dan baris, tetapi menggunakan beberapa sintaks yang relatif sederhana seperti menghapus, insert, update dan pilih bisa kita melakukan hal itu. Kita dapat menghapus dari database, insert, update data, serta pilih, yaitu, mengambil data dari database. Bagaimana kita melakukan hal ini? Biarkan aku pergi ke depan ke dalam alat. Biarkan saya berhenti http://localhost, yang, sekali lagi, adalah alat lokal itu sendiri. Itulah julukan default. Dan biarkan aku pergi ke / phpmyadmin. Hal ini terjadi menjadi URL khusus yang alat telah dikonfigurasikan untuk memahami yang segera meminta saya untuk nama pengguna dan kata sandi. Seperti biasa, aku akan mengetik jharvard dan merah, tapi menyadari bahwa adalah account administrator pada komputer. Ini hanya kebetulan bahwa ada juga jharvard terdaftar untuk CS50 Keuangan. Jharvard, merah, enter memberi saya user interface yang kita lihat sekilas beberapa saat yang lalu, dan itu sedikit berlebihan pada awalnya, tapi yakinlah, Anda tidak akan pernah harus klik sebagian besar link di alat ini. Anda akan berakhir dengan menggunakan subset kecil yang super membantu, yang pertama adalah database di sini. Jika saya pergi ke database, perhatikan bahwa aku diminta untuk membuat database. Ini seperti membuat file Excel yang baru, efektif. Aku akan pergi ke depan dan memanggil kuliah ini, dan aku hanya akan mengabaikan lapangan ada, pemeriksaan. Itu ada hubungannya dengan representasi data di dalamnya, dan aku akan membuat klik, dan sekarang perhatikan saat aku melepaskan menciptakan di sisi kiri di mana ia mengatakan tidak ada database Saya harus segera melihat database kuliah. Jika saya sekarang klik di sisi kiri, database kuliah, perhatikan tab saya mengubah sedikit. Aku punya struktur, SQL, ekspor, impor, dan beberapa hal lainnya. Struktur cukup banyak kosong. Tidak ada tabel ditemukan dalam database, seperti dikatakan di sini, jadi mari kita membuat tabel, dan mari kita pergi ke depan dan membuat tabel seperti siswa, dan berapa banyak kolom yang kita inginkan? Mari kita menjaga ini sederhana, dan mari kita catatan untuk setiap siswa nomor ID, nama, dan alamat email. Kami akan tetap sederhana seperti itu, jadi 3 kolom, pergi. Bentuk yang Anda lihat di sini sekarang menjadi sedikit berantakan dan luar biasa, tapi kita hanya perlu pergi melalui itu baris demi baris, sehingga benar-benar cepat mari kita berikan kolom pertama dalam database nama ID untuk identifikasi unik. Ini akan menjadi integer. Aku benar-benar dapat mengabaikan panjang dan nilai-nilai. Int akan menjadi 32 bit tidak peduli apa yang Anda ketik di sana, jadi mari kita biarkan kosong. Nilai default, saya bisa membuatnya nol, sebagaimana didefinisikan. Aku akan meninggalkan itu saja. Mari kita tidak khawatir tentang nilai-nilai default. Mari kita gulir ke sini untuk itu, atribut yang tepat. Ini menarik. Mari kita pergi ke depan dan agak sewenang-wenang mengatakan bahwa ID harus unsigned. Jangan buang-buang angka negatif. Ayo 0-4000000000, memberi atau mengambil, dan kemudian mari kita tidak menyentuh salah satu bidang dulu di sana, tapi kemudian membiarkan saya ketik nama di sini, dan kemudian yang lain adalah email, sehingga hasil tangkapan email dan nama, jelas tidak bilangan bulat, jadi mari kita mengubah ini untuk bidang yang berbeda. Ternyata varchar, char panjang variabel, seperti string dalam database SQL tapi panjang variabel, dan Anda benar-benar harus mengatakan itu di muka panjang maksimum string, jadi aku akan agak sewenang-wenang menurut jenis konvensi 255 karakter. Aku benar-benar bisa mengatakan 32. Saya bisa mengatakan 1.000. Anda jenis kebutuhan untuk memutuskan untuk diri sendiri berdasarkan demografi Anda apa yang siswa terpanjang nama dan pergi dengan nomor atau sedikit lebih besar, tapi apa yang bagus tentang varchar itu tidak akan menyia-nyiakan 255 byte pada nama setiap siswa. Jika itu DAVID itu tidak akan menggunakan 255 byte secara keseluruhan, tapi itu merupakan batas atas, jadi saya akan pergi dengan 255 hanya dengan konvensi, tapi kita bisa berdebat bahwa ada beberapa nilai yang lebih rendah, dan untuk alamat email hanya untuk konsisten 255, tapi sekali lagi, kita bisa memiliki perdebatan yang sama. Tapi aku akan melakukan satu hal lain di sini di sisi kanan. Apa kuat tentang database adalah bahwa hal itu dapat melakukan banyak angkat berat atau kompleks bekerja untuk Anda. Secara khusus, saya benar-benar tidak peduli apa yang nomor ID murid-Ku. Ini hanya dimaksudkan untuk menjadi pengenal unik dalam database jadi saya memiliki representasi 32-bit singkat dari siswa yang sehingga saya memiliki beberapa cara unik mengidentifikasi mereka jangan ada menjadi 2 Davids, misalnya, dalam satu kelas. Bahkan, aku akan memeriksa kotak AI, kenaikan otomatis, sehingga database, MySQL, keluar angka apa ID setiap siswa baru dimasukkan ini akan menjadi. Aku bahkan tidak harus peduli tentang hal itu dalam kode saya, dan aku juga akan memilih sesuatu di bawah menu indeks. Indeks drop-down di sini telah primer, unik, indeks dan teks lengkap. Anda mungkin bisa menebak apa yang beberapa hal-hal ini, tapi ternyata dalam database relasional Anda programmer atau administrator database bisa preemptively memberikan petunjuk ke database seperti apa bidang dalam sebuah tabel yang sedikit khusus. Misalnya, dalam hal ini saya akan mengatakan bahwa ID akan menjadi indeks utama, atau dikenal sebagai primary key. Apa ini berarti menurut definisi adalah ID yang selanjutnya unik akan mengidentifikasi siswa dalam tabel ini. Tidak ada siswa akan memiliki ID yang sama karena aku memaksakan ini kendala atau indeks ini. Selain itu, apa ini akan lakukan untuk saya adalah itu akan memberitahu MySQL bahwa ID adalah khusus. Saya peduli terutama tentang ID, jadi lanjutkan dan melakukan sihir mewah data struktur itu, membangun beberapa jenis pohon. Biasanya sesuatu yang disebut B-pohon, yang kita tidak melihat pada minggu lalu, tapi itu struktur data lain seperti semangat yang sama dengan pohon biner dan mencoba bahwa kita melihat, tapi itu akan mengatakan ke database bidang ini sangat penting bahwa saya mungkin ingin dapat mencari di atasnya, pergi ke depan dan membangun mewah beberapa struktur data dalam memori untuk mempercepat pencarian, sehingga idealnya mereka waktu yang konstan atau setidaknya dekat dengan yang mungkin sehingga tidak berpindah ke pencarian linear, yang tidak akan paling tinggi melakukan pendekatan. Sebaliknya, alamat email bisa menjadi kunci utama. Secara teori, alamat email setiap orang adalah unik, kecuali Anda berbagi akun tertentu, tapi itu umumnya tidak baik untuk menggunakan sesuatu seperti string sebagai primary key karena jika tujuannya dalam hidup adalah untuk secara unik mengidentifikasi baris dalam tabel Anda tidak ada alasan untuk menggunakan 255 byte maksimal untuk secara unik mengidentifikasi seseorang jika Anda bisa lolos dengan hanya 4 byte atau int 32-bit. Secara umum, primary key harus pendek dan ringkas dan idealnya sesuatu seperti integer atau int besar, yang kebetulan 64 bit. Namun alamat email harus unik, dan salah satu fitur dari database terlalu adalah untuk menegakkan keunikan bagi saya. Dengan memilih unik di sini di samping email, meskipun email itu sendiri adalah menggulir dari layar, aku mengatakan ke database tidak percaya padaku. Jangan biarkan aku masukkan ke dalam database alamat yang sama email dua kali, bahkan jika aku idiot dan saya tidak sangat baik dengan ifs saya dan ifs lain dan kode PHP yang sebenarnya dan aku sengaja membiarkan pengguna mendaftar dengan alamat email yang ada database adalah satu lagi tingkat pertahanan untuk ketepatan untuk memastikan bahwa alamat email duplikat tidak berakhir di meja. Sekarang, sebaliknya, untuk nama Anda mungkin tidak ingin membuat yang unik karena kemudian tidak pernah bisa 2 Davids atau 2 Mike Smiths, misalnya, dalam database Anda, sehingga satu kami hanya akan pergi sendirian. Aku akan pergi ke depan dan klik save di kanan bawah, dan semuanya terlihat baik, tetapi perhatikan di sini ini adalah bagian yang untuk saat ini kita tidak akan menghabiskan terlalu banyak waktu pada karena sintaks yang sedikit rumit, dan kita tidak perlu membuat tabel semua yang sering, tetapi SQL sendiri adalah bahasa, sintaks yang benar di sini bahwa saya telah disorot. Apa yang benar-benar phpMyAdmin itu menciptakan GUI berbasis web untuk Anda dengan mana Anda dapat menghemat waktu dan tidak perlu secara manual mengetikkan query SQL yang cukup panjang seperti itu. Dengan kata lain, jika Anda ingin secara manual membuat tabel ini, baik pada saat itu phpMyAdmin cepat atau bahkan dalam warna hitam dan putih dengan menggunakan tab lainnya, ini tab SQL di mana Anda dapat mengetikkan pertanyaan SQL Anda inginkan, terus terang, ini akan diambil saya satu menit untuk benar-benar mengingat sintaks seluruh, dan bahkan maka saya mungkin akan membuat beberapa kesalahan ketik, sehingga alat ini berguna untuk hal-hal seperti itu, dan itu juga instruktif. Anda dapat mulai menyimpulkan apa sintaks hanya dengan warna yang bagus pengkodean phpMyAdmin yang menambahkan untuk kenyamanan visual kita. Tapi sekarang mari kita lakukan ini sebagai gantinya. Biarkan aku pergi ke tab insert di atas, dan biarkan aku pergi ke depan dan masukkan misalnya ID dari katakanlah-Sebenarnya saya tidak peduli. Ini akan kenaikan otomatis. Aku akan membiarkan kesepakatan database dengan ini. Tapi aku akan Daud, dan email saya harus malan@harvard.edu. Mari kita pergi ke depan di sini dan dimasukkan ke dalam Mike Smith sebagai satu lagi. Aku akan memberi diriku nama terakhir juga, dan kita akan minta dia menjadi smith@example.com, dan kemudian mana saya pergi selanjutnya? Nah, sepertinya pergi adalah tombol untuk klik, dan voila. Perhatikan pada 2 baris atas dimasukkan. Ini adalah query SQL yang sebenarnya. Itulah alat phpMyAdmin dieksekusi untuk saya, tetapi hasil akhirnya, pemberitahuan, jika saya sekarang pergi ke tab browsing, adalah untuk melihat 2 baris dalam tabel ini, sangat mengingatkan estetis dari meja kita lihat sebelumnya bagi pengguna kami dari pset 7, salah satunya adalah David Malan, salah satunya sekarang adalah Mike Smith. Tapi hanya harus jelas, saya tidak perlu menggunakan phpMyAdmin, dan memang, Anda akan segera dapat menulis kode untuk pset 7 yang mengotomatisasi proses penambahan baris, menghapus baris, memperbarui baris dan sejenisnya, jadi biar bukannya pergi ke tab SQL di sini dan ketik * pilih dari mana siswa email = "malan@harvard.edu." Dengan kata lain misalkan sekarang Anda memiliki beberapa bentuk HTML, dan jenis pengguna dalam alamat email mereka, antara bidang lainnya, dan tujuannya sekarang adalah di PHP pada kode back end untuk benar-benar mencari detail lain yang pengguna. Apa nama lengkap Anda? Berapa nomor ID Anda? Anda bisa menulis query SQL seperti ini, pilih * dari siswa mana email = "malan@harvard.edu." Dan jika saya kemudian klik pergi, perhatikan bahwa saya harus, dan memang aku, kembali hanya satu baris. Mike dihilangkan dari hasil ini ditetapkan, sebagai koleksi baris umumnya disebut, karena ia tidak memiliki alamat email yang sama seperti saya. Sekarang, sekali lagi, di sini untuk pset 7 Anda akan menggunakan phpMyAdmin sebagai alat administrasi dan alat pedagogis untuk belajar jalan di seluruh dunia SQL, tapi pada akhir hari Anda akan menulis pertanyaan ini dalam kode PHP yang sebenarnya, dan begitu menantikan langkah-langkah dalam Zamyla pada khususnya di mana Anda akan mendapatkan tur kode distribusi untuk sejumlah masalah di mana kami telah memberikan Anda tidak hanya estetika untuk halaman login dan logo seksi bagus yang mengatakan CS50 Keuangan, tapi kami juga telah memberi Anda sekelompok fungsi yang akan membuat hidup Anda sedikit lebih mudah. Kami juga telah menulis bagian dari pset untuk Anda, bagian login pada khususnya, untuk memberikan rasa desain yang representatif yang benar-benar menggunakan controller, misalnya, index.php, login.php dan sejenisnya, dan kemudian Anda akan melihat pset juga memiliki direktori template yang memiliki semua pandangan Anda, semua estetika. Dan sehingga alur kerja secara keseluruhan di pset 7 akan menjadi yang pengguna Anda mengunjungi controller melalui URL di browser. Bahwa pengendali berisi kode PHP yang Anda tulis, dan di dalam kode PHP Anda mungkin beberapa baris SQL bersarang di antara tanda kutip ganda dan diteruskan ke fungsi kami menulis permintaan disebut yang akan membantu Anda berbicara ke database tanpa menggunakan sesuatu seperti alat administrasi seperti phpMyAdmin. Anda akan dapat menulis pernyataan SQL dalam kode PHP dan mendapatkan kembali array PHP hasil set, dari baris yang benar-benar cocok dengan permintaan itu. Dan sama akan Anda dapat melakukan menyisipkan atau menghapus atau update atau sejenisnya, sintaks yang cukup mirip, dan Anda akan melihat dari beberapa referensi online, dari kode distribusi dan dari pset pak sendiri persis bagaimana untuk pergi tentang melakukan hal itu. Sadarilah pada akhirnya kita benar-benar hanya menggaruk permukaan SQL dan MySQL, tapi kekuatan itu benar-benar adalah bahwa hal itu akan membebaskan Anda untuk fokus pada masalah yang Anda ingin memecahkan, kasus penggunaan Anda ingin menerapkan tanpa harus khawatir cukup banyak, setidaknya sejak dini, tentang di mana dan bagaimana untuk menyimpan dan mencari database Anda, dan ini secara harfiah di mana Facebook sendiri punya yang mulai menggunakan MySQL dan kemudian menggunakan lebih server MySQL dan kemudian lebih MySQL server tak lama sampai mereka kemudian harus benar-benar mulai berpikir keras tentang bagaimana menyimpan data, bagaimana untuk menyimpan hal-hal bahkan lebih efisien, jadi meskipun kami akan mengambil untuk diberikan fakta bahwa indeks dan kendala yang unik dan sebagainya hanya bekerja ada percakapan yang sangat menarik bahwa ini semua dapat akhirnya menyebabkan, sehingga menyadari bahwa kita hanya menggaruk permukaan dari apa yang akhirnya bisa untuk Anda atau proyek Anda menjadi sangat sedikit data yang besar. Dengan mengatakan bahwa, mari kita berakhir di sini, dan kami akan melihat Anda minggu depan. [CS50.TV]