[Powered by Google Translate] [Εβδομάδα 8, Συνέχεια]
[David J. Malan] [Πανεπιστήμιο του Χάρβαρντ]
[Αυτό είναι CS50.] [CS50.TV]
>> Αυτό είναι CS50, έτσι αυτό είναι το τέλος της εβδομάδας 8 εδώ.
Βεβαίως είχαμε και ένα κομμάτι από ένα τυφώνα νωρίτερα αυτή την εβδομάδα,
έτσι τώρα είναι πραγματικά ακριβώς εσείς και εγώ σε αυτή την αίθουσα διαλέξεων,
αλλά σήμερα θα συνεχίσουμε τη συζήτησή μας σχετικά με την PHP
και για web προγραμματισμό γενικότερα, και έχουμε εισαγάγει επίσης την ιδέα
των βάσεων δεδομένων, ιδιαίτερα για ένα θέμα που ονομάζεται MySQL, η οποία είναι αρκετά δημοφιλής αυτές τις μέρες,
σε μεγάλο βαθμό, λόγω της κλιμάκωσης της, καθώς και επειδή είναι του ελεύθερου και ανοικτού κώδικα.
>> Αλλά πρώτα, μια ματιά όπου αφήσαμε τελευταία φορά.
Υπενθυμίζουμε ότι ψάχναμε στις διάφορες Frosh παραδείγματα ΔΥ,
και αυτή ήταν η φρικτή μορφή που ήρθα με περίπου 15 + χρόνια πριν
ώστε να έχουν οι μαθητές στο μητρώο πανεπιστημιούπολη για το καινούριο εντός των τειχών σπορ
χωρίς να χρειάζεται να οδοιπορικό πια σε όλη την αυλή για να Wigglesworth
να σύρετε ένα φυσικό κομμάτι χαρτί κάτω από πόρτα κάποιου επόπτη.
Αντί περάσαμε τα πάντα σε απευθείας σύνδεση, αλλά να το κάνουμε αυτό χρειάζεται να κάνουν χρήση
από λίγες τεχνολογίες, έτσι ώστε ένα, χρειαζόμασταν HTML, Hypertext Markup Language,
η οποία είναι και πάλι αυτή η γλώσσα σήμανσης με την οποία κάνετε ιστοσελίδες δομικά.
>> Χρησιμοποιώντας ένα κομμάτι του CSS αυτές τις μέρες, επικαλυπτόμενα φύλλα στυλ,
σύμφωνα με την οποία χρησιμοποιούμε stylizations της ιστοσελίδας χρησιμοποιώντας μια ελαφρώς διαφορετική σύνταξη,
ενώ η HTML ήταν όλα σχετικά με τη δομή τους.
Πρέπει επίσης να εισαγάγει μια γλώσσα προγραμματισμού web.
Σε αυτή την περίπτωση, θα χρησιμοποιήσουμε PHP, PHP και πρόκειται να επιτρέψει σε μας
σε δυναμικά περιεχόμενο εξόδου, καθώς και προγραμματικές κάνει πράγματα, όπως
αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου, όπως ήταν η περίπτωση στο σημείωμα που άφησε την τελευταία εβδομάδα.
>> Υπενθυμίζουμε ότι ο κώδικας για αυτό ήταν σε 2 μέρη.
Ένα, είχαμε froshims3.php,
και αυτό ήταν σε μεγάλο βαθμό σήμανσης με μια φόρμα HTML στο εσωτερικό του,
ένα μικροσκοπικό κομμάτι του CSS μέχρι εδώ στα χαρακτηριστικά στυλ
έτσι ώστε η ίδια η φόρμα θα πρέπει να επικεντρώνεται στη σελίδα, αλλά πέρα ​​από αυτό
είχαμε κάποιες εκπρόσωπος εισόδους μορφή, ένα πεδίο κειμένου, ένα πλαίσιο ελέγχου,
κάποια ραδιόφωνο κουμπιά, ένα μενού επιλογής, και ένα κουμπί submit.
Και μέσω αυτής της φόρμας, θα υποβληθεί σε ένα αρχείο που ονομάζεται προφανώς register3.php,
το οποίο η ίδια κοίταξε λίγο κάτι σαν αυτό.
Τώρα, το μεγαλύτερο μέρος του κώδικα σε register3.php, ανάκληση, ήταν όλα σχετικά με e-mail.
Το έκανε λίγο την επικύρωση του εντύπου που υποβλήθηκε για να βεβαιωθείτε ότι
ότι οι τομείς που όντως πραγματοποιήθηκαν και ότι αναμενόταν.
Στη συνέχεια καλέσαμε κάποια PHP λειτουργίες χρησιμοποιώντας ελαφρώς νέα σύνταξη,
ακόμα κι αν αυτό είναι δανεισμένο από C.
>> Ο εν λόγω φορέας βέλος μας επιτρέπει να κάνουν χρήση του κάτι που ονομάζεται αντικειμενοστραφούς προγραμματισμού.
Δεν θα υπεισέλθω σε ότι σε κάθε λεπτομέρεια εδώ, αλλά ξέρω για τώρα
Είναι ένας τρόπος με λειτουργίες που σχετίζονται με τα αντικείμενα,
που είναι ένας ειδικός τύπος της δομής, όπως είδαμε σε C.
Αλλά για τώρα, μόλις λάβει την πίστη ότι αυτή είναι η σωστή σύνταξη για χρήση
όταν χρησιμοποιείτε μια βιβλιοθήκη σαν αυτή βιβλιοθήκη PHPMailer.
Και στη συνέχεια, μέχρι το τέλος αυτού του αρχείου είχαμε δημιουργείται δυναμικά ένα e-mail
που έστειλα στο λογαριασμό μου jharvard@cs50.net
από το λογαριασμό μου jharvard@cs50.net,
και ενημερώσαμε τον χρήστη κατά συνέπεια, ότι είχαν εγγραφεί για αυτό το άθλημα.
Αυτό είναι λίγο πολύ αυτό το Frosh ΔΥ ιστοσελίδα έκανε όλα αυτά τα χρόνια
όταν αυτό εφαρμόζεται, χορηγείται, σε μια διαφορετική γλώσσα,
αλλά ίσως σας δείχνει τη δύναμη που έχετε
τώρα που μπορείτε να εκφραστείτε όχι μόνο μέσω προγραμματισμού
σε ένα χαμηλό επίπεδο σε μια γλώσσα όπως η C, αλλά σε ένα πολύ υψηλότερο επίπεδο
με αυτές τις πολύ πραγματικές εφαρμογές όπως το ηλεκτρονικό ταχυδρομείο για να λύσει πραγματικά
κάποια προβλήματα του πραγματικού κόσμου.
>> Τώρα, βέβαια, αν μπορώ να χρησιμοποιήσω αυτό το σενάριο να δημιουργήσει κάποια
e-mail δυναμικά από jharvard@cs50.net, το οποίο είναι πράγματι ένα λογαριασμό
ότι έχω πρόσβαση, δεν είναι αρκετά προσεκτικοί για να στείλετε
ταχυδρομήσετε μόνο από τους λογαριασμούς που είναι πραγματικά δικό σας,
μήπως μπορείτε να πάρετε τα πράγματα σε λίγο ζεστό νερό στη ζωή.
Με αυτόν εν λόγω, ας τώρα μετάβαση στην επίλυση ενός εντελώς διαφορετικό πρόβλημα,
ότι διατηρούν τα κράτη.
Τώρα, τι ακριβώς σημαίνει αυτό;
HTTP, αυτό το Hypertext Transfer Protocol,
Είναι πραγματικά ένας άπατρις πρωτόκολλο, και αυτό σημαίνει ότι
όταν σηκώσει κάτι όπως το Google.com και στη συνέχεια πατήστε enter
συνήθως browser σας έχει κάποιο είδος της νηματουργίας εικονίδιο ότι τότε
αποτελέσματα σε κάποια ιστοσελίδα να κατεβάσει,
και στη συνέχεια, αυτό το μικρό εικονίδιο σταματήσει να γυρίζει, και που πράγματι προτείνει
HTTP ότι έχει ολοκληρώσει κάποιο είδος της σύνδεσης με το διακομιστή και αυτό είναι όλο.
HTTP είναι ανιθαγενείς, υπό την έννοια ότι δεν διατηρεί
μια μόνιμη σύνδεση με το διακομιστή με τον ίδιο τρόπο δεν Skype
ή GChat κάνει επειδή με HTTP
η υπόθεση είναι ότι από τη στιγμή που έχετε απέφερε μια ιστοσελίδα που είναι αυτό.
>> Τώρα, στην πραγματικότητα, αυτές τις μέρες σε ιστοσελίδες όπως το Facebook και το Google Maps
και το Twitter και σαν να υπάρχει μια πολύ πιο δυναμική την οποία
ακόμη και μετά από αυτό το εικονίδιο σταματήσει να γυρίζει μπορείτε στην πραγματικότητα να πάρει περισσότερες αναβαθμίσεις
από το διακομιστή, πιο tweets, περισσότερο ενημερώσεις κατάστασης στο Facebook και τα παρόμοια.
Αλλά ακόμη και που χρησιμοποιεί μια τεχνική που θα μιλήσουμε για σε μια εβδομάδα ή δύο
γνωστή ως Ajax χρησιμοποιώντας μια γλώσσα που ονομάζεται JavaScript,
αλλά στο τέλος της ημέρας, HTTP εξακολουθεί να είναι απάτριδες.
Και όμως, αν θέλετε να θυμάστε κάπως τα πράγματα για κάποιον χρήστη
ακόμη και αφού έχουν αποσυνδεθεί από το διακομιστή σας
PHP δεν σας προσφέρουν ένα μέσο για να γίνει αυτό
επειδή, όπως είδαμε τελευταία φορά, η PHP έχει μια σειρά από superglobals,
και μια superglobal είναι, πάλι, ένα ειδικό καθολική μεταβλητή
Αυτός είναι ο παραδοθεί σε σας από τον web server και PHP από μόνη της.
>> Δεν χρειάζεται να κάνετε τίποτα για να θέσει αξίες σε αυτό,
και μεταξύ των superglobals που έχουμε δει μέχρι στιγμής είναι να πάρει και μετά,
η οποία είναι όπου τα πεδία φόρμας που αυτόματα για σας,
καθώς και ένα ζευγάρι των άλλων ότι δεν έχουμε δει ακόμη.
Μέσα από $ _SERVER είναι μερικές ειδικές μεταβλητές που σχετίζονται με το ίδιο το διακομιστή.
Ποια είναι η διεύθυνση IP, το πρωτόκολλο αυτό, HTTP ή HTTPS δεν χρησιμοποιείτε,
ποια μέθοδο αίτημα δεν χρησιμοποιείτε και τα παρόμοια, οπότε δεν υπάρχει κάποια ενδιαφέρουσα,
ζουμερά λεπτομέρειες σχετικά με το διακομιστή, και στην πραγματικότητα, ο χρήστης εκεί, καθώς και.
Υπάρχει $ _COOKIE, η οποία είναι όταν αυτά τα πράγματα που ονομάζονται cookies αποθηκεύονται.
Εμείς δεν θα περνούν το χρόνο τους για τα μπισκότα σήμερα,
αλλά ξέρω για τώρα ότι ένα cookie είναι μόνο ένα μικρό κομμάτι των πληροφοριών
ότι ένας web server μπορεί να φυτέψει σε ένα πρόγραμμα περιήγησης στο Web
και με τη σειρά της μνήμης RAM ή σκληρό δίσκο του υπολογιστή του χρήστη
για την αποθήκευση πληροφοριών σχετικά με ένα χρήστη, για παράδειγμα, το όνομα χρήστη τους
έτσι ώστε να μην χρειάζεται να το πληκτρολογήσετε κάθε φορά που συνδέεστε σε κάποια ή
μοναδικό αριθμό ή κωδικό αναγνώρισης για αυτόν τον χρήστη
έτσι ώστε να μην χρειάζεται να τους ταλαιπωρούν με τα ίδια είδη των ερωτήσεων σχετικά με
προτιμήσεις στο μέλλον, αλλά οι περισσότεροι από τόκους
τώρα είναι $ _SESSION.
>> Αυτό superglobal, η οποία, όπως και οι άλλοι, παραδίδεται σε εσάς αυτόματα από την PHP
όταν είστε γραπτώς PHP που βασίζονται ιστοσελίδες
μπορεί να αποθηκεύσει οτιδήποτε θέλετε, χορδές, ακέραιοι,
κυμαινόμενο σημεία, αξίες, πίνακες, αντικείμενα,
πραγματικά τίποτα που θέλετε, και σας επιτρέπει να το αποθηκεύσετε με τέτοιο τρόπο
ότι ακόμη και αν ο χρήστης που επισκέπτεται τώρα και τότε
έρχεται πίσω από ένα λεπτό τώρα ή 5 λεπτά από τώρα, γιατί
παίρνουν το χρόνο τους κάνοντας κλικ πριν από κάποια άλλη σύνδεση
PHP θα εξασφαλίσει ότι ό, τι βάζετε στο εν λόγω συνεδρίαση superglobal
μερικά λεπτά ή 5 λεπτά πριν θα είναι ακόμα εκεί, όταν οι αποδόσεις των χρηστών.
Και κάτω από την κουκούλα superglobal αυτό υλοποιείται μέσω των
αυτά τα πράγματα τα λεγόμενα cookies, αλλά για τώρα, είναι απλά μια αφηρημένη
το οποίο είναι το είδος της προγραμματικής ισοδύναμο του ένα καλάθι αγορών.
Ό, τι, ο προγραμματιστής, να θέσει σε ότι
superglobal associative array θα υπάρχει κάποια σειρά από λεπτά αργότερα
μέχρι να το διαγράψετε ή μέχρι ο χρήστης να κλείσει του ή της περιήγησης εντελώς.
>> Ας ρίξουμε μια ματιά σε ένα παράδειγμα για το πώς αυτό το πράγμα είναι στην πραγματικότητα χρησιμοποιείται.
Στο μεταξύ counter.php κομμάτια σημερινή κώδικα
έχουμε την ακόλουθη γραμμή.
Στην αρχή αυτού του αρχείου έχουμε ένα μάτσο μπλε παρατηρήσεις, οι οποίες χωρίς ενδιαφέρον για τώρα.
Όμως, στη γραμμή 13 έχουμε μια νέα γραμμή,
session_start, και αυτό κάνει πραγματικότητα ακριβώς αυτό που λέει.
Ξεκινά συνεδρίες.
Σας δίνει τη δυνατότητα να χρησιμοποιεί το εν λόγω μεγάλο superglobal $ _SESSION, και είναι τόσο απλό.
Τώρα, αν θα προχωρήσουμε να εξετάσουμε στη γραμμή 16, ας προσπαθήσουμε να καταλάβουμε τι είναι αυτό ιστοσελίδα πρόκειται να κάνει.
Αν (isset ($ _SESSION ["μετρητή"]), τότε προχωρήστε
και κατάστημα στο μετρητή μεταβλητή, πεζά μετρητή,
$ _SESSION ["Μετρητή"].
Αυτό φαίνεται να κηρύσσει μια τοπική μεταβλητή που ονομάζεται μετρητής
στο εσωτερικό του οποίου είναι βάζοντας ένα αντίγραφο του ό, τι είναι μέσα από την superglobal
που ονομάζεται σύνοδος στη θέση "μετρητή".
Αλλιώς, προφανώς, αυτή η μικρή τοπική μεταβλητή μετρητή, αρχικοποιείται σε 0.
>> Στη συνέχεια, όμως λίγες γραμμές αργότερα σε 26 ειδοποίηση ότι το αντίγραφο της συνόδου του μετρητή,
κλειδί του, έχει ένα νέο καθορισμένη τιμή η οποία είναι η παρούσα αξία της συν 1.
Εν ολίγοις, αυτό το αρχείο φαίνεται να είναι ενημέρωση
ένα μετρητή που είναι αποθηκευμένο στο εσωτερικό της συνόδου superglobal
με προσαύξηση αυτή κατά 1, αλλά διατηρεί πρώτα ένα αντίγραφο της προηγούμενης τιμής
από την αποθήκευσή του σε μια τοπική μεταβλητή που ονομάζεται $ μετρητή,
και στη συνέχεια, εδώ κάτω να δούμε τι απομένει.
Αποδεικνύεται ότι είναι λίγο πολύ απλά HTML.
Στο κάτω μέρος της σελίδας βλέπουμε στη γραμμή 37 που έχουν επισκεφθεί αυτό το site
μετρητής πολλές φορές, έτσι υπάρχει ένα ζευγάρι ενδιαφέροντα χαρακτηριστικά εδώ.
Ένα, αυτό είναι σαφώς μια μεταβλητή, αλλά αυτό δεν αρκεί απλά να θέσει
$ Μετρητή στο σώμα του HTML σας, γιατί φυσικά
αν είναι μόνο εκεί, ανάμεσα HTML PHP σας πρόκειται να υποθέσουμε ότι είναι απλά HTML.
Μπορείτε κυριολεκτικά θέλουν $ αντίθετη προς εκτύπωση στην οθόνη.
>> Αλλά αντ 'αυτού με τη ρίψη σε λειτουργία PHP
με αυτό το κομμάτι της σύνταξης μπορούμε να εισάγουμε δυναμικά μια τιμή εδώ
πολύ παρόμοια στο πνεύμα με αυτό που κάναμε την τελευταία φορά με
εισαγωγή τιμών σε χορδές.
Στην πραγματικότητα, αυτό είναι μόνο μια σημείωση στενογραφίας για να πούμε κάτι τέτοιο κυριολεκτικά,
εκτύπωσης ($ counter) ή ακόμη και κάτι σαν printf (% s, σε αντίθεση),
ή ακόμα, όπως μπορεί να έχετε δει σε απευθείας σύνδεση ή σε βιβλία,
υπάρχει μια συνάρτηση σε PHP που ονομάζεται ηχώ
η οποία κάνει το ίδιο πράγμα, και όλα αυτά είναι απλά πλέον ασθμαίνων τρόπους
του λέγοντας <? =.
Σε αυτή την περίπτωση ένα δεν χρειάζεται να θέσει
η PHP λέξη μετά το ερωτηματικό.
Αυτό είναι σημειογραφία στενογραφία για, και πάλι, αυτό που μόλις είδαμε πριν από λίγο
η οποία απηχεί κάποια αξία.
>> Ας δούμε τι το τελικό αποτέλεσμα αυτού είναι στην πραγματικότητα.
Επιτρέψτε μου να πάει πάνω σε counter.php αρχείο μας,
και θα δούμε ότι ο David έκανε μόνο ένα λάθος με το παιχνίδι με τον κώδικα εκεί.
Ας πάμε λύση ό, τι μπάχαλο,
και το σφάλμα φαίνεται να είναι εκεί, πάει, στη γραμμή 37.
Σύμφωνα με την αρχή αυτής της σελίδας Έχω επισκεφθεί αυτό το χώρο 0 φορές.
Λοιπόν, ας προχωρήσουμε τώρα, και στην κορυφή του προγράμματος περιήγησης κάντε κλικ στο
reload εικονίδιο, και κάντε κλικ στο κουμπί reload,
και τώρα έχω επισκεφθεί το site 1 φορά, 2, 3, 4, 5, 6, 7, 8.
Και πράγματι, αν κοιτάξουμε την πηγή αυτής της σελίδας η πραγματική του πηγαίου κώδικα αλλάζει,
και παρατηρήστε την παντελή απουσία οποιασδήποτε PHP, και αυτό γιατί
PHP κώδικας ερμηνεύεται αξιολογείται ή διακομιστή,
και έτσι αυτό σημαίνει ότι η έξοδος από την PHP script, είναι αυτό που τελικά αποστέλλονται στο πρόγραμμα περιήγησης,
η οποία στην περίπτωση αυτή είναι μερικές πρώτες HTML και μερικές πρώτες κείμενο.
Τι συμβαίνει εδώ;
>> Λοιπόν, με σχετικά λίγες γραμμές κώδικα, είμαι σε θέση να αποθηκεύσει
επίμονα κατά τη διάρκεια αρκετών δευτερολέπτων, ή εάν περιμέναμε αρκετό καιρό,
λεπτά, ακόμα και ώρες, κάποια τιμή σε ένα τρόπο που καθιστά HTTP
stateful φαίνεται σαν να έχουμε διατηρούνται
αυτή η σύνδεση με το διακομιστή, και αυτό είναι ακριβώς ό, τι θυμόμαστε μου είπε την τελευταία φορά,
αλλά στην πραγματικότητα υπάρχει ένα σωρό πολυπλοκότητα συμβαίνει κάτω από την κουκούλα
που αφορούν τα cookies που είναι PHP που επιτρέπει να μου δώσει αυτή την ψευδαίσθηση
αυτού καλάθι αγορών-όπως το χαρακτηριστικό γνώρισμα.
Προς το παρόν, ένα ασήμαντο παράδειγμα όπου είμαστε απλώς αποθηκεύσει έναν ακέραιο,
αλλά αυτό το χαρακτηριστικό θα έρθει πίσω να είναι μεγάλης αξίας
όταν αρχίσουμε να μιλάμε για πιο σύνθετα έργα,
μεταξύ των οποίων και το πρόβλημα που 7.
Αυτό είναι πολύ τελευταίο πρόβλημα που σας σε CS50.
Το ξέρω, είναι τόσο λυπηρό, αλλά αυτό που θα βρείτε είναι ότι θα πάμε να συνάψουν
αυτό το μέρος του εξαμήνου από τη μετάβαση στην πραγματικότητα
από το πλαίσιο του Γ σίγουρα στο πλαίσιο της PHP
αλλά ενώ χρησιμοποιώντας μερικά από τα ίδια βασικά
έχουμε μιλήσει για αρκετό καιρό.
>> Ο στόχος με PSET 7 είναι να εφαρμόσει CS50 Οικονομικών,
η οποία είναι η δική σας έκδοση του Yahoo ή το Google Finance Οικονομικών
ή ακόμα και Etrade.com σύμφωνα με την οποία έχετε τη δυνατότητα να
κοιτάζω προς τα πάνω οι τιμές των μετοχών για συγκεκριμένα σύμβολα, αλλά ακόμη περισσότερο από ότι
έχετε τη δυνατότητα να «αγοράσουν» και «πουλήσει» τα αποθέματα
που διαπραγματεύονται σε διάφορα χρηματιστήρια, διότι, όπως αυτή αρχική σελίδα
προτείνει εδώ, το οποίο είναι πραγματικά ο βαθμός στον οποίο έχουμε αρχίσει
το σύνολο πρόβλημα για σας, έχετε μια φόρμα σύνδεσης που ζητάει ένα όνομα χρήστη και έναν κωδικό πρόσβασης.
Έχει ένα κουμπί submit, αλλά στη συνέχεια, όπως θα δούμε τελικά,
δεν υπάρχει τίποτα πραγματικά συμβαίνει κάτω από την κουκούλα, γιατί ακόμη
παραμένει για να εφαρμόσει τη δυνατότητα να εγγραφείτε νέους χρήστες,
η δυνατότητα να αγοράσουν μετοχές, να πωλήσει τα αποθέματα,
για να δούμε πραγματικά τις τρέχουσες τιμές των μετοχών.
>> Και πράγματι, αυτό θα είναι το πραγματικό κόσμο όσο το δυνατόν επειδή κάναμε
περιλαμβάνει ένα κομμάτι του κώδικα που θα σας επιτρέψει με μια ενιαία λειτουργία
να διερευνούν το Yahoo Finance, η οποία κάνει θαυμάσια δεδομένα διατίθενται δωρεάν
για την αναζήτηση των τιμών των μετοχών με βάση το σύμβολο της μετοχής ή ticker σύμβολο,
και μπορείτε να πάρετε πίσω την τρέχουσα τιμή της μετοχής της ημέρας.
Τα δεδομένα που είστε πραγματικά να δει σε αυτό το συγκεκριμένο PSET θα είναι
σχετικά με το πραγματικό κόσμο, όπως μπορεί να πάρει, ώστε να είστε πραγματικά διασυνδέεται
με πραγματικό παγκόσμιων αποθεμάτων, οι πραγματικές τιμές κόσμο,
και θα δούμε πόσα χρήματα μπορείτε να κάνετε ίσως
κατά τη διάρκεια των επόμενων ημερών να παίζει με το δικό του σύνολο πρόβλημά σας.
>> Αλλά ας πρώτα να ορίσετε το στάδιο για το πώς να σχεδιάσουν κάτι που είναι σίγουρα πιο περίπλοκο
από counter.php, αυτό είναι πιο περίπλοκη από ό, τι οποιοδήποτε από τα παραδείγματα Frosh ΔΥ μέχρι στιγμής,
και ας προσπαθήσουμε να εισαγάγει μερικά παραδείγματα εδώ που μας επιτρέπουν
τόσο για PSET 7 και ίσως για τον τελικό έργο σας αν το κάνετε web-based κάτι
για να κρατήσει τον κωδικό σας καλά οργανωμένη, για να κρατήσει τον εαυτό σας υγιής,
και να κάνουμε ένα βήμα προς τη συνεργασία, είτε σε τελικό σχέδιο του CS50
ή πέρα ​​αν συνεχίσουν να προγραμματίσετε κάτι στο μέλλον.
Υπάρχει αυτή η γενική παράδειγμα σχεδιασμού
στην επιστήμη των υπολογιστών και στην ανάπτυξη λογισμικού γενικότερα
γνωστή ως MVC, μοντέλο θέα ελεγκτή,
και αυτό είναι μια ανόητη ακρωνύμιο που περιγράφει μια πολύ ωραία ιδέα,
η οποία είναι ο διαχωρισμός των διαφόρων πτυχών του προγράμματος,
Ειδικότερα η διατήρηση χωριστών τη λογική ή την επιχειρηματική λογική μιας ιστοσελίδας
έτσι ώστε οτιδήποτε που περιλαμβάνει τα πράγματα όπως
καλώντας λειτουργίες και διερευνούν τις βάσεις δεδομένων και τα παρόμοια
Δεν συμβαίνει μεταξύ σας HTML
αλλά μάλλον σε ξεχωριστά αρχεία, και πράγματι, δεν υπάρχει αυτό το αρχείο
συνήθως ότι έχετε καλέσει ο ελεγκτής
αυτό είναι πραγματικά οι εγκέφαλοι πίσω από την πράξη, και θα δούμε ένα παράδειγμα
από αυτό σε μια στιγμή.
>> Υπάρχει ένα μοντέλο το οποίο κώδικα προγραμματισμού
που κάνει την ομιλία σε βάσεις δεδομένων σας, ότι οι συνομιλίες για το Yahoo Finance και τα παρόμοια,
και στη συνέχεια υπάρχει το V στο MVC, οι απόψεις,
όλα τα πράγματα που είναι σχετικές με την αισθητική, τα αρχεία που περιέχουν στην πραγματικότητα
HTML, CSS ίσως σας και τα παρόμοια.
Η ιδέα εδώ, όπως υποδηλώνει η εικόνα αυτή, είναι ότι ο ελεγκτής
είναι το αρχείο, όπως θα δούμε σύντομα και όπως θα δείτε σε ιδιαίτερα PSET 7,
ότι ο κόσμος μιλά για προγράμματα περιήγησης στο Web μέσω τους.
Αυτό είναι το αρχείο που παίρνει επισκέφθηκε στο δημόσιο Διαδίκτυο,
αλλά ο ελεγκτής να μιλά δυνητικά ένα μοντέλο,
η οποία είναι ένα ή περισσότερα άλλα αρχεία που περιέχουν κώδικα που σχετίζονται με τα δεδομένα,
κώδικα που σχετίζονται με βάσεις δεδομένων και τα παρόμοια, και στη συνέχεια να μιλά
ο ελεγκτής ένα ή περισσότερα άλλα γνωστά ως αρχεία απόψεων,
που είναι η αισθητική της ιστοσελίδας, τα πρότυπα του είδους,
ότι θα μπορούσε να λάβει κάποια δεδομένα ως είσοδο, αλλά στο τέλος της ημέρας
η μόνη λογική μέσα από μια άποψη θα πρέπει να είναι η παροχή των δεδομένων αυτών,
επανάληψη σε βρόχο και πραγματικά φτύσιμο από κάποια
HTML με βάση τους απόδοση ή ακόμη και κάτι σαν ένα PDF.
>> Τι είναι ωραίο για το MVC είναι ότι μπορείτε να έχετε διαφορετικές απόψεις
με βάση τον τύπο της συσκευής, με βάση τον τύπο της μορφής αρχείου που πραγματικά
θέλουμε να δείξουμε στον χρήστη.
Ας ρίξουμε μια ματιά σε μερικά σταδιακά όλο και πιο πολύπλοκες και καλά σχεδιασμένα παραδείγματα
ξεκινώντας πρώτα με την έκδοση 0 εδώ.
Επιτρέψτε μου να πάμε μπροστά και να ανοίξει το MVC κατάλογο μας σήμερα
ένα αρχείο με όνομα index.php στον κατάλογο 0.
Παρατηρήστε αυτό είναι μια εξαιρετικά απλή και πολύ underwhelming ιστοσελίδα
αυτό είναι το είδος της έκδοση 0 της αρχικής σελίδας για CS50,
και παρατηρήστε πώς έχουμε μια σύνδεση με διαλέξεις, έχουμε μια σύνδεση με ύλης,
και αν ακολουθήσετε το σύνδεσμο για να διαλέξεις ειδοποίηση ότι η διεύθυνση URL
επάνω στην κορυφή πρόκειται να αλλάξει στο lectures.php.
Αν στη συνέχεια, ακολουθήστε το link για να εβδομάδα 1 ειδοποίηση ότι οι αλλαγές URL για week1.php.
Φαίνεται να υπάρχει μια αρκετά απλή ιεραρχική δομή εδώ.
>> Ας ρίξουμε μια γρήγορη ματιά κάτω από την κουκούλα στο πώς αυτό είναι που αναφέρονται,
και πράγματι, αν κοιτάζω index.php είναι αρκετά απλή.
Στην πραγματικότητα, ακόμα κι αν αυτό που ονομάζεται ένα αρχείο PHP δεν υπάρχει πραγματικό κώδικα προγραμματισμού.
Υπάρχει ένα σχόλιο που έγραψα εδώ σε PHP ακριβώς έτσι ο χρήστης δεν καταλήγουν να βλέπουν αυτό.
Φυσικά, όπως και πριν, κάτι που είναι στο μεταξύ ετικέτες PHP
ερμηνεύεται παίρνει, ακόμα κι αν είναι ένα σχόλιο και να ερμηνεύσει ένα σχόλιο
Σημαίνει απλώς να το πετάξετε στο τέλος της ημέρας και όχι στην πραγματικότητα
στείλετε στο πρόγραμμα περιήγησης, έτσι ώστε τα πάντα εδώ είναι μόνο αισθητική.
Αν ανοίξει ομοίως lectures.php αυτό είναι πολύ απλά ένα σκληρό κωδικοποιημένο αρχείο.
Συμβαίνει να λέγεται κάτι. Php,
αλλά είναι πραγματικά ακριβώς. html, και week1.php, week2.php
ομοίως είναι ακριβώς σήμανσης, έτσι υπάρχει μια δέσμη των ελλείψεων αυτού του σχεδιασμού.
Ένας, είναι ένα τεράστιο ποσό του copy / paste.
Ακόμα κι αν το μόνο πράγμα που αλλάζει μεταξύ αυτών των αρχείων είναι η μη διατεταγμένη λίστα,
οι ετικέτες li, ωστόσο έχω ακόμη έγγραφο τύπο, HTML, το κεφάλι,
τίτλο, κοντά σώμα, κοντά HTML και περισσότερο
σε κάθε αρχείο, πράγμα που σημαίνει ότι αν ποτέ θέλουν να αναδιαρθρώσουν
αυτή την ιστοσελίδα ή το restylize έχω να πάω και να αλλάξετε
όλα αυτά τα αρχεία χειροκίνητα ή με κάποια μαζική βρείτε και να αντικαταστήσετε.
>> Ας κάνουμε ένα βήμα προς μια πιο έξυπνη, πιο σκέψης του σχεδιασμού στην έκδοση 1 εδώ
όπου σύμφωνα με το μου διάβασα ότι έχουμε συμπεριλάβει, έτσι ώστε να μπορείτε να παίξετε μαζί με
οι πιο χαλαρό στο σπίτι ειδοποίηση ότι έχουμε εδώ
περίληψη των αρχείων στην έκδοση 1 του παρόντος site,
και φαίνεται ότι έχω λάβει από τον εαυτό μου να συνυπολογίσει
κάποια κοινή κώδικα, header.php και footer.php.
Λοιπόν, ας ρίξουμε μια ματιά στο τι είναι μέσα στην πρώτη από αυτές.
Header.php φαίνεται οικείο,
αλλά παρατηρήσετε πού να πάρει αποκοπεί;
Αμέσως μετά την γραμμή 19, έτσι ώστε να είναι τα πάντα που ήταν κοινό
από το index.php αρχεία, lectures.php,
week1 και week2.php από το προηγούμενο παράδειγμα.
Αυτό που έκανα ήταν αντίγραφο και πάντα περικοπή που ήταν κοινό σε όλα αυτά τα αρχεία,
το βάζουμε σε ένα ξεχωριστό αρχείο κεφαλίδας, και ομοίως σε footer.php
δεν έχω εφαρμόσει την ίδια αρχή σύμφωνα με την οποία οι μόνες ενδιαφέρουσες γραμμές
footer.php σε αυτά τα δύο, κοντά σώμα και κοντά HTML.
>> Αλλά τι σημαίνει αυτό τώρα είναι ότι στη νέα έκδοση
του index.php ειδοποίηση πόσο απλό μπορεί να πάρει.
Σύμφωνοι, λίγο πιο αινιγματικά αναζητούν, λίγο λιγότερο διαισθητική
να ακολουθήσει πάνω προς τα κάτω, αλλά ο Θεός μου, όλα αυτά τα πλεονασμού έχει πλέον φύγει.
Ζητούμε τη χρήση PHP λειτουργία κυριολεκτικά ονομάζεται απαιτούν επάνω στην κορυφή,
το οποίο είναι πολύ θυμίζει, θυμάμαι, από το C # include μηχανισμό.
Ζητούμε header.php στην κορυφή.
Ζητούμε footer.php στο κάτω μέρος, και το μόνο πράγμα που είναι διαφορετικό
ή ειδικές για αυτό το αρχείο είναι το περιεχόμενο που είναι γραφτό να είναι μοναδικό σε αυτό.
Αν και εγώ θα πάω σε, ας πούμε, lectures.php, η ίδια αρχή ισχύει.
Και πάλι, μερικά σχόλια επάνω στην κορυφή, αλλά τότε θα απαιτούν κεφαλίδα, υποσέλιδο απαιτούν,
και στο μεταξύ είναι μόνο το περιεχόμενο που πραγματικά αλλάξει.
Και αν ψάξαμε στο εβδομάδα 1 Εβδομάδα 2 και θα βλέπαμε
ότι η ίδια αρχή είχε εφαρμοσθεί εκεί.
Λοιπόν, δεν είμαστε αρκετά γίνει εκεί.
>> Ας ρίξουμε μια ματιά στην έκδοση 2, η οποία έχει παρόμοια δομή,
παρατηρήσετε αλλά τώρα έχω εισαχθεί κάτι άλλο.
Στη γραμμή 10 που έχω εισαχθεί helpers.php,
το οποίο περιέχει προφανώς βοηθητικές λειτουργίες.
Μια λειτουργία βοηθού είναι γενικά ένα σχετικά σύντομο συνάρτηση
που γράφω για να σας βοηθήσει σε διάφορα μέρη,
και ας δούμε τι υπάρχει στο εσωτερικό της helpers.php.
Σε αυτή την περίπτωση, φαίνεται σαν να έχει 2 λειτουργίες.
Ανάκληση από την άλλη μέρα με το παράδειγμα μας κύβο
μπορείτε να ορίσετε τις δικές σας λειτουργίες σε PHP, και ό, τι έχω κάνει είναι τώρα έχω
καθορισμένες λειτουργίες που ονομάζεται καθιστούν υποσέλιδο και να καταστήσει κεφαλίδα,
των οποίων η πρώτη λαμβάνει μία παράμετρο που ονομάζεται δεδομένων,
του οποίου η προεπιλεγμένη τιμή είναι μια κενή σειρά, όπως προτείνεται εκεί,
και μπορούμε να γράψουμε πραγματικά αυτό ακόμα πιο συνοπτικά στην τελευταία έκδοση του PHP
λέγοντας ανοικτή αγκύλη, κλειστή αγκύλη.
Αυτό σημαίνει ότι μια κενή σειρά μεγέθους 0, αλλά παρ 'όλα αυτά μια σειρά.
>> Αυτή η λειτουργία απόσπασμα είναι ένα μικρό ειδικό σε ότι
αυτό που κάνει είναι να παίρνει ως όρισμα ένα associative array
που έχει 0 ή περισσότερα ζεύγη κλειδιών αξία, και αν έχετε ένα κλειδί από foo
και η τιμή του μπαρ η λειτουργία απόσπασμα
δημιουργεί μια κατάσταση στην οποία τώρα, όπως της γραμμής 11,
έχετε μια τοπική μεταβλητή που ονομάζεται $ foo των οποίων η αξία είναι το μπαρ.
Και αν είχατε περισσότερα πλήκτρα και τις αξίες του πίνακα δεδομένων,
παρομοίως θα μπορούν να εξάγονται μέσα στην τοπική εμβέλεια
ή όνομα χώρου, έτσι ώστε και footer.php
η ίδια ιδέα εδώ κάτω, έτσι ώστε header.php
έχουν πρόσβαση σε αυτές τις μεταβλητές.
Στην πραγματικότητα, επιτρέψτε μου να ανοίξει και πάλι header.php
και να επιστήσει την προσοχή σε ό, τι τώρα μοιάζει σε αυτή την έκδοση.
>> Αντί κωδικοποίηση σκληρά CS50 ως τίτλο για κάθε σελίδα
παρατηρήσετε το δυναμισμό που είναι δυνατό τώρα.
Στη γραμμή 5 είμαι επαναλαμβάνοντας μια μεταβλητή τίτλο,
αλλά πρώτα είμαι περνώντας ότι η μεταβλητή τίτλο σε μια λειτουργία που ονομάζεται υπάρχει τίποτα άλλο.
Ένα ηλίθιο όνομα για μια λειτουργία, αρκεί να είναι, αλλά το κάνει πραγματικά αυτό που λέει.
Εξασφαλίζει ότι υπάρχουν ειδικοί χαρακτήρες
στη σειρά που είναι ήδη περάσει σε δραπέτευσε είναι σωστά HTML.
Αυτό είναι στην πραγματικότητα ένας τρόπος για να αποφευχθεί κάτι που ονομάζεται ένα σταυρό επίθεση site scripting
σύμφωνα με την οποία κάποιος μπορεί να κακόβουλα ή λάθος
εισφέρει τη δική τους HTML στην ιστοσελίδα σας
με επικόλληση σε κάποια μορφή, για παράδειγμα,
κάτι που δεν περίμενα ήταν αρκετά, ιδιαίτερα JavaScript κώδικα,
όπως θα μιλήσουμε για σε μια εβδομάδα ή δύο χρόνια.
>> Αυτό τώρα header.php, είναι μια άποψη
με την έννοια ότι επιτρέπει σε σας για να δείτε τα περιεχόμενα αισθητικά από κάποιο σύνολο δεδομένων.
Αλλά πιο συγκεκριμένα, είναι ένα πρότυπο.
Αυτό είναι ένα είδος σχέδιο τώρα από ό, τι θέλουμε η επικεφαλίδα της κάθε σελίδας για να μοιάσει,
αλλά υπάρχει κάποια δυναμική στο ότι θέλουμε ο τίτλος να εισαχθεί δυναμικά
με βάση την μεταβλητή επικεφαλίδι
που εξήχθη όταν καλέσαμε, και πάλι,
η λειτουργία κεφαλίδας render.
Τώρα, αν κοιτάξαμε υποσέλιδο καθιστούν, υπάρχει πραγματικά δεν είναι πολύ χρήση αυτού του δικαιώματος τώρα
επειδή σε footer.php δεν υπάρχει απολύτως δυναμισμό.
Θα μπορούσαν να υπάρχουν, αλλά αυτή τη στιγμή είναι ένα σκληρό κωδικοποιημένο κατάλογο των 2 ετικέτες,
αλλά η ίδια ιδέα εφαρμόζεται, έτσι ώστε πράγματι υποδεικνύει γιατί
δεν θα χάνετε χρόνο με κεφαλιά καθιστούν και καθιστούν υποσέλιδο λειτουργία;
Επιτρέψτε μου να πάω αντίθετα τώρα στην έκδοση 3,
και στην έκδοση 3 σε βοηθούς, αποφάσισα να απλοποιήσει ακόμη περισσότερο.
>> Επιτρέψτε μου να έχουν μια λειτουργία render.
Επιτρέψτε μου να έχουν πάρει ένα άλλο επιχείρημα, αυτή τη φορά ονομάζεται πρότυπο,
το οποίο προορίζεται να είναι το όνομα ενός προτύπου,
και στη συνέχεια θα ενώσετε. presumptuously php με την αξία της μεταβλητής,
και στη συνέχεια, αν υπάρχει foo.php, bar.php ή header.php και footer.php,
τότε είμαι πρόκειται να πάει μπροστά και να εξαγάγετε τα μεταβλητά δεδομένα
και στη συνέχεια να απαιτήσει αυτό το μονοπάτι.
Με άλλα λόγια, να χρησιμοποιήσετε αυτό τώρα, αν έχω ανοίξει index.php
παρατηρήσετε ότι δεν τους λέω κεφαλίδα καθιστούν πια.
Απλά καλέστε καθιστούν, αλλά έχω περάσει σε μια χρηματιστηριακή αξία της κεφαλίδας
να καταστήσει σαφές πρότυπο που εγώ πραγματικά θέλετε να φορτώσετε.
>> Στη συνέχεια, εδώ παρατηρήσετε τι κάνω.
Είμαι περνώντας σε ένα δυναμικά κλειδί του τίτλου,
η αξία των CS50, και αυτό πάρα πολύ, όπως είδαμε πριν,
θα μπορούσε να γίνει πιο σύντομη στην τελευταία έκδοση του PHP
όπου μπορεί να αντικαταστήσει τη λειτουργία πίνακα με αγκύλες,
που προτείνω είναι ακόμη πιο ευανάγνωστο και σίγουρα
λίγο πιο εύκολο να πληκτρολογήσετε.
Και βέβαια, με την κλήση καθιστούν υποσέλιδο στο κάτω μέρος,
δεν ενοχλεί περνώντας σε ένα δεύτερο επιχείρημα καθόλου, δεν associative array,
γιατί δεν υπάρχει τίποτα δυναμική στο εσωτερικό του υποσέλιδου.
Είναι μερικά μόνο από κοντά για ετικέτες HTML.
Καλό, είμαστε λήψη μέτρων προς την κατεύθυνση πραγματικά καθαρισμού πράγματα εδώ,
αλλά επιτρέψτε μου να ανοίξει 2 τελικό παραδείγματα.
Αυτό και μόνο, αριθμός 4, ειδοποίηση ότι έχω κάνει μια συνειδητή απόφαση τώρα
Προς βελτίωση μετά το προηγούμενο παράδειγμα με τελικά χρησιμοποιώντας κάποια ιεραρχία για αρχεία μου.
>> Παρατηρήστε ότι στην παρούσα περίληψη, σε αυτό μου να διαβάσω, έχω εισήγαγε
περιλαμβάνει ένα κατάλογο και ένα κατάλογο προτύπων
το περιεχόμενο του οποίου πρόκειται να είναι τα πράγματα που θέλετε να συμπεριλάβετε
και τα πρότυπα που θέλω να καταστήσει, αντίστοιχα.
Αυτό είναι πραγματικά μου είναι πρωκτού και προσπαθεί να κρατήσει τα πράγματα τακτοποιημένα,
διατηρεί τα σχετικά αρχεία μαζί, αλλά το τελικό αποτέλεσμα
είναι ότι έχουμε τώρα μια ελαφρώς τακτοποιών εγκατάσταση, αλλά πρέπει να θυμόμαστε τώρα
σε, για παράδειγμα, index.php
όταν χρειαζόμαστε το αρχείο helpers.php
πρέπει να απαιτούν τώρα μέσω includes / helpers.php
αντί να λέμε απλώς helpers.php επειδή τώρα είναι πραγματικά σε ένα υποκατάλογο.
Τώρα, ως ένα μέρος, θα δείτε σε αυτά τα παραδείγματα και κάποιες άλλες
λειτουργίες, όπως απαιτούν, απαιτούν μια φορά.
Υπάρχει πράγματι μια λειτουργία που ονομάζεται περιλαμβάνουν το ίδιο, και όλα έχουν ελαφρώς διαφορετική συμπεριφορά.
Εδώ λέω να απαιτήσει μια φορά να κάνουν σούπερ σαφές ότι θέλω μόνο εκείνους
βοηθοί που περιλαμβάνονται στο έργο μου φορά.
Αλλά αν είμαι προσεκτικός και αν είμαι πραγματικά να σκεφτόμαστε με τη λογική μου σωστά
θα πρέπει να αρκεί απλά πάρα πολύ να πω απαιτούν επάνω στην κορυφή
εφ 'όσον εγώ δεν απαιτούν κατά λάθος το ίδιο αρχείο αλλού.
Στην πραγματικότητα, αυτό είναι ένα ελαφρώς πιο αποτελεσματικό τρόπο αντιμετώπισης των πραγμάτων στη συνέχεια, χρησιμοποιώντας
απαιτούν μία φορά, γι 'αυτό θα το τακτοποιήσει κάτω ακριβώς απαιτούν.
>> Ας πάρουμε ένα βήμα παραπέρα.
Αυτό το τελευταίο παράδειγμα τώρα, έκδοση 5, έχει μια ακόμα πιο καθαρή ιεραρχία των φακέλων.
Παρατηρήστε τι έχω κάνει εδώ ανά το διαβάσει μου σε αυτή την τελική έκδοση
Είναι τώρα έχω HTML κατάλογο μου, που είχα όλο αυτό το διάστημα,
αλλά στο εσωτερικό του υπάρχει τώρα μόνο index.php, lectures.php,
week1.php και week2.php.
Ο κατάλογος περιλαμβάνει τώρα ζει μαζί με την HTML κατάλογο,
έτσι στο ίδιο επίπεδο σαν αδέρφια, να το πω έτσι.
Έτσι κάνει το φάκελο προτύπων.
Το κλειδί εδώ είναι takeaway που έχω εισαχθεί λίγο περισσότερη δομή,
αλλά το βασικό χαρακτηριστικό είναι ότι τώρα μόνο τα αρχεία
που πρέπει να είναι προσβάσιμη ιστοσελίδα, δημόσια προσπελάσιμη
από μια διεύθυνση URL για το δημόσιο Διαδίκτυο είναι σε μορφή HTML κατάλογο μου.
>> Εν τω μεταξύ, άλλα αρχεία, helpers.php, footer.php,
header.php, που είναι αναμφισβήτητα ίσως πιο ευαίσθητο,
βοηθοί ίσως έχει στην πραγματικότητα κάποια ονόματα χρηστών και κωδικούς πρόσβασης ή κάποια πνευματική
ιδιοκτησία του ορυχείου, λειτουργεί πραγματικά δεν θέλουν τον κόσμο να δει, ακόμη και αν κατά λάθος.
Είναι καλή πρακτική να κρατήσει έξω από το δημόσιο κατάλογο HTML
όλα τα αρχεία που οι ίδιοι δεν πρέπει να είναι δημόσιες.
Το μόνο που έχετε να κάνετε σε αυτή την περίπτωση κατά την εξέταση, για παράδειγμα,
index.php αρχείο του καταλόγου της HTML,
παρατηρήσετε εμείς απλά πρέπει να είναι λίγο πιο προσεκτικοί όταν απαιτείται
ή απαιτούν μια φορά αυτό το αρχείο.
Θα πρέπει πρώτα να κάνετε .. για να μεταβείτε στο αρχικό κατάλογο,
τότε μην / includes / helpers.php
να βουτήξει πίσω για να πάρει το αρχείο που με νοιάζει.
>> Οποιεσδήποτε ερωτήσεις, στη συνέχεια για MVC
ή αυτή η σχετικά απλή ενσάρκωση αυτής;
Και επιτρέψτε μου να κάνω σαφές ότι επικεντρωθήκαμε αρκετά για το
V εδώ, τις απόψεις και το factoring από αυτά τα πρότυπα.
Εμείς δεν έχουμε διακρίνονται πραγματικά από Μ Ε ακριβώς ακόμα.
Στην πραγματικότητα, υπάρχει πραγματικά δεν είναι εδώ Μ, και ακόμη μας C,
ελεγκτή, δεν κάνει πραγματικά όλα αυτά πολύ, αλλά θα πάρει πολύ περισσότερο
εξοικειωμένοι με τις δύο από αυτές τις 2 γράμματα από το MVC,
ή μάλλον, θα έχετε πολύ πιο εξοικειωμένοι με την C
MVC για το σύνολο πρόβλημα 7, έτσι υπάρχει περισσότερο από ότι στον ορίζοντα.
Ερωτήσεις;
Δεν υπάρχει πραγματικά κανένας εδώ.
>> Εντάξει, ας προχωρήσουμε τώρα στο δεύτερο και τελευταίο θέμα για σήμερα.
Αυτή είναι η εισαγωγή μιας βάσης δεδομένων.
Μέχρι αυτό το σημείο είχαμε μερικά τρόπους για την αποθήκευση δεδομένων.
Έχουμε χρησιμοποιούνται μεταβλητές.
Επιστροφή στην Γ αρχείο μας, I / O συζήτηση που άρχισε να χρησιμοποιεί αρχεία κειμένου
και τη χρήση αρχείων, όπως fprintf, και τότε ακόμη που ξεκίνησε
μιλάμε για αρχεία CSV λίγο, τιμές διαχωρισμένες με κόμμα,
έτσι όλα αυτά μας επέτρεψε να έχουμε δεδομένα που είναι αποθηκευμένα
είτε μη-σταθερά ή επίμονα.
Αλλά ακόμα και CSVS δεν είναι πραγματικά ευνοϊκό για αναζήτηση
και την εισαγωγή και διαγραφή.
Είναι πραγματικά ακριβώς ένα ηλίθιο αρχείο κειμένου διαχωρίζονται με κόμματα
ανά γραμμή με γραμμή με γραμμή, οπότε αν θέλετε να
αναζητήσετε το αρχείο το καλύτερο που μπορείτε να κάνετε είναι πραγματικά γραμμική αναζήτηση.
Θα πρέπει να ξεκινήσουμε από την αρχή του αρχείου, διαβάστε το όλο θέμα σε,
και να αναζητήσει κάποια αξία των τόκων.
Αν θέλετε να εισάγετε σε αυτό που έχετε να κάνετε το ίδιο πράγμα,
επανάληψη από πάνω και την εισαγωγή σε ένα συγκεκριμένο τόπο,
και στην πραγματικότητα, θα πρέπει να κάνετε όλα τα ψάχνοντας τον εαυτό σας λογική.
>> Δεν μπορείτε να κάνετε έξυπνες μοτίβο που ταιριάζουν σε ένα αρχείο CSV αν εσείς οι ίδιοι γράφουν τον κώδικα.
Δεν μπορείτε να κάνετε διήθηση από ένα αρχείο CSV
εκτός και αν εσείς οι ίδιοι γράφουν τον κώδικα.
Δεν θα ήταν ωραίο αν κάποιος άλλος βάλει σε όλες τις προσπάθειες
πραγματικά να κάνει την αναζήτηση και εύκολη εισαγωγή εύκολη
και τη διαγραφή και την ενημέρωση και ούτω καθεξής;
Αυτό είναι ακριβώς ό, τι είναι μια βάση δεδομένων.
SQL, Structured Query Language, είναι μια ακόμη γλώσσα
ότι είμαστε εδώ σήμερα την εισαγωγή, αλλά αυτό είναι πάρα πολύ αρκετά προσιτές,
και τι είμαστε πραγματικά πρόκειται να κάνετε είναι απλά να κόβω από αυτό μερικά από τα πιο βασικά
χαρακτηριστικά, έτσι ώστε για PSET 7, και αν το κάνετε web-based κάτι,
τελικό σχέδιο σας, έχετε τη δυνατότητα να εκφράσουν τον εαυτό σας
από άποψη ερωτήματα δεδομένων.
Έχετε τη δυνατότητα να αποθηκεύσετε ένα λίγο ή πολύ τα δεδομένα
σε μια πολύ πιο δομημένο τρόπο που θα στο τέλος της ημέρας
κάνουν τη ζωή σας πιο εύκολη, διότι με τον SQL μπορείτε να εκφραστείτε
πολύ μεγαλύτερη ακρίβεια, πολύ πιο μεθοδικά ώστε να
πάρει πίσω κάποιο υποσύνολο των δεδομένων από ένα μεγαλύτερο σώμα των δεδομένων.
>> Μπορείτε να σκεφτείτε μια βάση δεδομένων, στην περίπτωση αυτή, μια βάση δεδομένων SQL, πραγματικά, όπως το Excel
Αριθμοί ή όπου είναι ένα υπολογιστικό φύλλο,
ή ίσως πολλαπλά υπολογιστικά φύλλα, και ένα υπολογιστικό φύλλο, φυσικά,
έχει γραμμές και στήλες, και αυτό γιατί
SQL βάσεις δεδομένων είναι σχεσιακές, σχεσιακή, με την έννοια
που αποθηκεύουν τα δεδομένα όσον αφορά αυτούς τους πίνακες,
γραμμές και στήλες.
Είναι υψηλότερη απόδοση από ό, τι κάτι σαν ένα υπολογιστικό φύλλο,
και ένα φύλλο προορίζεται να χρησιμοποιηθεί από έναν άνθρωπο.
Μια βάση δεδομένων προορίζεται να χρησιμοποιηθεί από έναν προγραμματιστή
κατά τη σύνταξη κώδικα, οπότε η ενσάρκωση μιας βάσης δεδομένων
πρόκειται να είναι είτε γραμμή εντολών.
>> Μια από τις πιο δημοφιλείς σχεσιακές βάσεις δεδομένων είναι εκεί έξω, και πάλι, MySQL,
η οποία είναι θαυμάσια ελεύθερο, πολύ υψηλές επιδόσεις, και αυτό είναι που
Facebook χρησιμοποιείται από πολύ νωρίς και σε κάποιο βαθμό ακόμη και σήμερα
για να αποθηκεύσετε πολλά στοιχεία του, και θα δούμε σε μια στιγμή
ότι χρησιμοποιώντας σχετικώς απλές εντολές
μπορούμε να επιλέξουμε δεδομένων, εισαγωγή δεδομένων, ενημέρωση των δεδομένων,
διαγράψετε τα δεδομένα και τα παρόμοια, αλλά ευτυχώς, υπάρχει μια πιο φιλική προς το χρήστη διεπαφή
από ό, τι απλά πληκτρολογώντας σε ένα μαύρο και άσπρο ερώτηση εδώ.
Θα χρησιμοποιήσουμε για PSET 7 και πέρα ​​ένα δωρεάν εργαλείο που ονομάζεται phpMyAdmin.
Το όνομα είναι τυχαίο.
Το εργαλείο που συμβαίνει να εφαρμοστούν σε PHP,
αλλά αυτό είναι ουσιαστικά άνευ σημασίας.
Τι είναι χρήσιμο για το phpMyAdmin είναι ότι είναι μια web-based χρησιμότητα.
Έχουμε το προ-εγκατεστημένο στη συσκευή για σας,
και με αυτό μπορείτε να δημιουργήσετε πίνακες σε μια βάση δεδομένων,
μπορείτε να εισάγετε δεδομένα, να διαγράψετε τα δεδομένα, και γενικά δείτε
τα δεδομένα σας σε ένα αρκετά φιλικό προς το χρήστη περιβάλλον.
Οι χρήστες σας δεν πρόκειται να χρησιμοποιήσετε το phpMyAdmin.
>> Αυτό είναι πραγματικά ακριβώς μια διοικητική ή προγραμματιστή εργαλείο
με την οποία για να δείτε και να σακί γύρω από τα δεδομένα σας και να καταλάβω πώς να το δομήσει,
μοιάζει πολύ με τον εαυτό σας να χρησιμοποιήσετε το Excel ή αριθμών,
αλλά αυτό πρόκειται να είναι ένας πολύ καλός τρόπος για οπτικοποίηση τι συμβαίνει κάτω από την κουκούλα
ώστε να μπορείτε να επικεντρωθεί στην επίλυση προβλημάτων ενδιαφέρον και όχι τόσο
σχετικά με τις απόκρυφες εντολές.
Ας ρίξουμε μια ματιά σε ένα παράδειγμα των δεδομένων που μπορούν να αποθηκευτούν tabularly
σε μια σχεσιακή βάση δεδομένων.
Εδώ είναι ένα τέτοιο παράδειγμα.
Τώρα, δυστυχώς, phpMyAdmin έσφαλε στην πλευρά του ρίχνει πάρα πολλές λέξεις
γραφικά και σε σας, αλλά αν ακονίσετε το μόνο για το
ID στήλη, η στήλη το όνομα χρήστη και το hash στήλη,
αυτό είναι ουσιαστικά ένα λογιστικό φύλλο, αλλά αυτό συμβαίνει να είναι ένα απόσπασμα
από έναν εσωτερικό πίνακα της συσκευής
χρησιμοποιώντας ένα αρχείο που σας παρέχουμε με το σύνολο πρόβλημα 7.
>> Ειδικότερα, σας δίνουμε ένα αρχείο που αντιπροσωπεύει
πίνακα του χρήστη, έτσι, ένα υπολογιστικό φύλλο που περιέχει τους χρήστες με 3 στήλες,
ένα από τα οποία είναι ένα μοναδικό αναγνωριστικό που ξεκινούν από 1 και να αυξάνεται στη συνέχεια.
Η δεύτερη στήλη είναι ένα όνομα χρήστη, και όσοι από εσάς έκανε Hacker,
η έκδοση Hacker για PSET 2, μπορεί να αναγνωρίσει μερικά από αυτά τα ονόματα χρηστών τουλάχιστον.
Στη δεξιά πλευρά είναι κωδικοί πρόσβασης, αλλά δεν είναι κυριολεκτική κωδικούς πρόσβασης.
Είναι hashes τους, έτσι ώστε να αποδεικνύεται
ότι η αποθήκευση κωδικών πρόσβασης σε μια βάση δεδομένων είναι μια πραγματικά κακή ιδέα.
Έχετε διαβάσει όλα τα πιθανώς σε κάποιο σημείο του κάποια ιστοσελίδα
ή κάποιου βάση δεδομένων της εταιρείας είναι σε κίνδυνο, και τότε θα πρέπει να
αλλάξετε τον κωδικό πρόσβασής σας, θα πρέπει να λάβουν τις επιστροφές για τα πράγματα
επειδή κάποιος κακός πραγματικά έσπασε υπόψη σας, ως αποτέλεσμα.
>> Αποθήκευση κωδικών πρόσβασης σε μορφή απλού κειμένου, χωρίς κρυπτογράφηση σε μια βάση δεδομένων
είναι εντελώς γαϊδούρινος, και ακόμη είναι πολύ διασκεδαστικό
τότε για να διαβάσετε για μερικές πολύ γνωστές εταιρείες
μερικές φορές στον Τύπο είναι σε κίνδυνο βάσεις δεδομένων των οποίων,
και το μέρος δεν είναι αστείο, αλλά το γεγονός ότι περιέχουν οι βάσεις δεδομένων χωρίς κρυπτογράφηση
κωδικοί πρόσβασης είναι γελοίο επειδή κυριολεκτικά με μία γραμμή κώδικα
που μπορεί να προστατεύσει από τη συγκεκριμένη απειλή, και αυτό είναι ό, τι έχουμε κάνει εδώ.
Ακόμη και για μας λίγο ψεύτικο CS50 έκδοση Οικονομικών
είμαστε κρυπτογράφηση κωδικών πρόσβασης μόνο για το καλό μέτρο, και το γεγονός ότι
όλα αυτά τα κωδικούς πρόσβασης ξεκινούν με $ 1 $ είναι απλά μια σύμβαση.
That σημαίνει απλώς ότι είναι κρυπτογραφημένο ή πραγματικά κατακερματίζεται,
που είναι σαν μια λειτουργία κρυπτογράφησης μονόδρομη
σύμφωνα με την οποία δεν μπορείτε να αντιστρέφουν τις συνέπειες του με κάτι που ονομάζεται MD5.
>> Το γεγονός ότι είναι 50 μετά από αυτό σημαίνει ότι μια τιμή άλατος
της 50 χρησιμοποιήθηκε για hashing όλους αυτούς τους κωδικούς πρόσβασης εκτός από μία.
Mine, βέβαια, όπως μπορείτε να δείτε εκεί, HA,
ήταν χρησιμοποιώντας ένα διαφορετικό άλας, έτσι ώστε όσοι από εσάς πήρε λίγο σκόνταψε επάνω
ίσως σε Hacker 2, που μπορεί να ήταν το αποτέλεσμα του ότι χρησιμοποίησε μας
ένα διαφορετικό hash από τους άλλους, επειδή ο κωδικός μου είναι στην πραγματικότητα το ίδιο
ως κάποιον άλλο χρήστη εκεί.
Στην πραγματικότητα, εάν έχετε περιμένει όλες αυτές οι εβδομάδες για να μάθετε
τι αυτοί οι κωδικοί πρόσβασης ήταν εδώ ήταν οι κωδικοί πρόσβασης που έχουν προσβληθεί
να σπάσει στην έκδοση Hacker του συνόλου πρόβλημα 2, έτσι ώστε κανένας πάρα πολύ δύσκολο.
Στην πραγματικότητα, το Malan ήταν η ίδια όπως jharvard,
αλλά αν πάμε πίσω φαίνονταν διαφορετικά.
>> Έμφαση στην jharvard σε βαθύ κόκκινο χρώμα, επειδή παστώθηκαν με διαφορετικό τρόπο.
Ο αλγόριθμος διαταραγμένο με τέτοιο τρόπο ώστε το
hash αξία, η κρυπτογραφημένη τιμή φαίνεται λίγο διαφορετικό
επειδή οι είσοδοι ήταν ελαφρώς διαφορετικές, αλλά ο κωδικός πρόσβασης κάτω από την κουκούλα
ήταν ακόμα τελικά βυσσινί.
Τώρα, ποιος νοιάζεται γι 'αυτό;
Λοιπόν, σας εξοπλίζουμε με τους χρήστες του δείγματος, τα ονόματα των χρηστών του δείγματος
και hashes των κωδικών τους, έτσι ώστε να έχετε πραγματικά ορισμένα
πελάτες για CS50 Οικονομικών, όταν ξεκινάτε για πρώτη πάρει από το έδαφος με τον κωδικό σας.
Θα πρέπει να εφαρμόσουν περισσότερους πίνακες στο εσωτερικό της MySQL, μέσα από τη βάση δεδομένων.
Θα πρέπει να δημιουργήσουμε περισσότερες υπολογιστικά φύλλα, αποτελεσματικά, αλλά αποφασίσαμε να σας δώσουμε αυτό το ένα
για να ξεκινήσετε, και θα δείτε ότι το σύνολο προδιαγραφές πρόβλημα
βόλτες σας μέσα από τη διαδικασία της εισαγωγής αυτού του πίνακα
και επίσης εξηγεί τι μερικά από τα χαρακτηριστικά είναι,
και θα δείτε επίσης ότι σας παρέχουμε με τον κωδικό
για να χειριστεί την κατακερματισμού ή την κρυπτογράφηση των κωδικών αυτών,
έτσι ώστε να μην χρειάζεται να ανησυχείτε πάρα πολύ για το τι MD5 ή τα παρόμοια είναι πραγματικά όλα τα σχετικά.
>> Έτσι, SQL, δομημένη γλώσσα ερωτημάτων.
Αυτό είναι, πολύ απλά, η γλώσσα είμαστε έτοιμοι να αρχίσετε να χρησιμοποιείτε το PSET 7
και ίσως πέρα ​​να ζητήσει τα δεδομένα από κάποια βάση δεδομένων.
Τα δεδομένα, και πάλι, αποθηκεύονται σε αυτές tabularly σχεσιακές πίνακες, οι στήλες και γραμμές,
αλλά χρησιμοποιώντας κάποια σχετικά απλή σύνταξη, όπως διαγραφή,
εισάγουν, να επικαιροποιούν και να επιλέξετε να κάνουμε ακριβώς αυτό.
Μπορούμε να διαγράψετε από τη βάση δεδομένων, εισαγωγή,
ενημέρωση δεδομένων, καθώς και επιλεγμένα, δηλαδή, ανάκτηση δεδομένων από τη βάση δεδομένων.
Πώς μπορούμε να το κάνουμε αυτό;
Επιτρέψτε μου να προχωρήσει στη συσκευή.
Επιτρέψτε μου να σηκώσει http://localhost,
η οποία, και πάλι, είναι ο τοπικός ίδια η συσκευή.
Αυτό είναι το προεπιλεγμένο ψευδώνυμό του.
Και επιτρέψτε μου να πάω στο / phpmyadmin.
Αυτό συμβαίνει να είναι μια ειδική διεύθυνση URL ότι η συσκευή είναι προρυθμισμένη για να κατανοήσουμε
αυτό ζητά αμέσως με ένα όνομα χρήστη και έναν κωδικό πρόσβασης.
>> Ως συνήθως, θα πάω να πληκτρολογήσετε jharvard και βυσσινί,
αλλά συνειδητοποιούν ότι αυτό είναι το λογαριασμό διαχειριστή στον υπολογιστή.
Είναι απλά μια σύμπτωση ότι υπάρχει επίσης ένα jharvard εγγραφεί για CS50 Οικονομικών.
Jharvard, βυσσινί, δώστε μου δίνει το user interface που είδαμε
μια γεύση από μια στιγμή πριν, και είναι λίγο συντριπτική κατά την πρώτη,
αλλά να είστε σίγουροι, δεν πρόκειται ποτέ να πρέπει να κάνετε κλικ τις περισσότερες από τις συνδέσεις σε αυτό το εργαλείο.
Θα καταλήξετε με ένα μικρό υποσύνολο που είναι εξαιρετικά χρήσιμο,
η πρώτη από τις οποίες είναι βάσεις δεδομένων μέχρι εδώ.
Αν πάω μέχρι βάσεις δεδομένων, παρατηρούμε ότι είμαι ζητηθεί να δημιουργήσετε μια βάση δεδομένων.
Αυτό είναι σαν τη δημιουργία ενός νέου αρχείου Excel, αποτελεσματικά.
Πάω να πάει μπροστά και να καλέσει αυτή την διάλεξη, και είμαι απλώς πρόκειται να αγνοήσει το πεδίο εκεί, αντιπαραβολή.
Έχει να κάνει με την αναπαράσταση των δεδομένων σε αυτό,
και πάω να δημιουργήσει κλικ, και τώρα παρατηρώ όπως έχω αφήσει να πάει από τη δημιουργία
στην αριστερή πλευρά όπου λέει κανένα βάσεις δεδομένων
Θα δούμε σύντομα τη βάση δεδομένων διάλεξη.
>> Αν τώρα κλικ στην αριστερή πλευρά, η βάση δεδομένων διάλεξη,
παρατηρήσετε τις καρτέλες μου αλλάξει λίγο.
Έχω δομή, SQL, εξαγωγή, εισαγωγή και κάποια άλλα πράγματα.
Δομή είναι λίγο πολύ κενό.
Δεν υπάρχουν πίνακες που βρέθηκαν στη βάση δεδομένων, όπως λέει εδώ,
έτσι ας δημιουργήσουμε έναν πίνακα, και ας προχωρήσουμε και να δημιουργήσουμε έναν πίνακα
όπως φοιτητές, και πόσες στήλες θέλουμε;
Ας κρατήσουμε αυτό το απλό, και ας ρεκόρ για κάθε μαθητή
ένας αριθμός ταυτότητας, το όνομα και μια διεύθυνση ηλεκτρονικού ταχυδρομείου.
>> Θα κρατήσουμε απλό, όπως ότι, έτσι 3 στήλες, πάμε.
Η μορφή που βλέπετε εδώ είναι τώρα λίγο ακατάστατη και συντριπτική,
αλλά εμείς απλά πρέπει να περάσει μέσα από αυτό ανά σειρά, έτσι ώστε πολύ γρήγορα ας δώσει
η πρώτη στήλη σε αυτή τη βάση δεδομένων το όνομα της ταυτότητας για το μοναδικό αναγνωριστικό.
Θα είναι ένας ακέραιος. Μπορώ να αγνοήσει πραγματικά μήκος και αξίες.
Μια int πρόκειται να είναι 32 bit δεν έχει σημασία τι πληκτρολογείτε εκεί, οπότε ας το αφήσετε κενό.
Προεπιλεγμένη τιμή, θα μπορούσα να κάνω είναι μηδενική, όπως ορίζεται.
Πάω να το αφήσουμε μόνο του. Ας μην ανησυχούν για τις προκαθορισμένες τιμές.
Ας μετακινηθείτε πάνω από εδώ προς τα δεξιά, χαρακτηριστικά.
Αυτό είναι ενδιαφέρον.
Ας πάμε μπροστά και κάπως αυθαίρετα να πω ότι πρέπει να είναι αναγνωριστικά ανυπόγραφο.
Ας μη χάνουμε κανένα αρνητικούς αριθμούς.
>> Πάμε 0 - 4000000000, ή να δώσει,
και στη συνέχεια, ας μην αγγίζετε κανένα από αυτούς τους τομείς ακριβώς ακόμα εκεί,
αλλά στη συνέχεια, επιτρέψτε μου να πληκτρολογήσετε το όνομα εδώ κάτω,
και στη συνέχεια το άλλο ήταν e-mail, έτσι ώστε η σύλληψη είναι e-mail
και το όνομα, προφανώς δεν είναι ακέραιοι, οπότε ας αλλάξουμε αυτά σε ένα διαφορετικό πεδίο.
Βγάζει varchar, μεταβλητού μήκους char,
Είναι σαν ένα string σε μια βάση δεδομένων SQL
αλλά ένα μεταβλητό μήκος, και πραγματικά πρέπει να πω εκ των προτέρων την
μέγιστο μήκος του string, έτσι Πάω να κάπως αυθαίρετα
με σύμβαση τύπου 255 χαρακτήρες.
Θα μπορούσα να πω συνολικά 32. Θα μπορούσα να πω 1.000.
Μπορείτε είδος του πρέπει να αποφασίσει για τον εαυτό σας με βάση δημογραφικά στοιχεία σας τι είναι
το όνομα του μαθητή μακρύτερη και να πάει με αυτόν τον αριθμό ή ένα λίγο μεγαλύτερο,
αλλά τι είναι ωραίο για ένα varchar είναι ότι δεν πρόκειται να τα απόβλητα
255 byte στο όνομα του κάθε μαθητή.
Αν είναι DAVID δεν πρόκειται να χρησιμοποιήσετε ένα σύνολο 255 byte,
αλλά αυτό είναι ένα άνω όριο, έτσι θα πάω με 255 μόνο με σύμβαση,
αλλά θα μπορούσαμε να συζητήσουμε ότι για να είναι κάποιος χαμηλότερη τιμή, καθώς και για τη διεύθυνση ηλεκτρονικού ταχυδρομείου
ακριβώς για να είναι συνεπής 255, αλλά και πάλι, θα μπορούσαμε να έχουμε την ίδια συζήτηση.
Αλλά Πάω να κάνω κάτι άλλο εδώ στη δεξιά πλευρά.
>> Τι είναι ισχυρή για μια βάση δεδομένων είναι ότι μπορεί να κάνει πολλά από την άρση βαρών
ή σύνθετη εργασία για σας.
Συγκεκριμένα, εγώ πραγματικά δεν με νοιάζει τι είναι οι αριθμοί ταυτότητας των φοιτητών μου.
Είναι ακριβώς σημαίνει να είναι ένα μοναδικό αναγνωριστικό σε μια βάση δεδομένων
έτσι έχω μια 32-bit αναπαράσταση σύντομη αυτού του φοιτητή
έτσι ώστε να έχω κάποιο τρόπο μοναδικά εντοπισμό τους
ώστε να αποφεύγεται 2 Davids, για παράδειγμα, σε μια τάξη.
Στην πραγματικότητα, Πάω να επιλέξετε αυτό το πλαίσιο AI, αύξηση αυτοκινήτων,
έτσι ώστε η βάση δεδομένων, MySQL, υπολογίζει
τι ID πρόσφατα εισαχθεί κάθε μαθητή θα είναι.
Δεν χρειάζεται καν να ενδιαφέρεται γι 'αυτό το κωδικό μου,
και είμαι επίσης πρόκειται να επιλέξουν κάτι κάτω από το μενού του δείκτη.
Ο δείκτης πέσει κάτω εδώ έχει πρωταρχική, μοναδική,
δείκτη και πλήρες κείμενο.
Μπορείτε να μαντέψετε τι ίσως ένα ζευγάρι από αυτά τα πράγματα είναι,
αλλά βγάζει σε σχεσιακές βάσεις δεδομένων
που ο προγραμματιστής ή ο διαχειριστής της βάσης δεδομένων για να πάρει προληπτικά
δίνουν συμβουλές για τη βάση δεδομένων ως προς το ποια πεδία
σε έναν πίνακα είναι λίγο ειδική.
>> Για παράδειγμα, στην περίπτωση αυτή Πάω να πω ότι η ταυτότητα
πρόκειται να είναι ένα πρωτεύον ευρετήριο, αλλιώς γνωστή ως πρωτεύον κλειδί.
Αυτό σημαίνει εξ ορισμού ότι είναι πλέον ταυτότητα
θα προσδιορίσει μοναδικά μαθητές σε αυτόν τον πίνακα.
Δεν φοιτητής θα έχει την ίδια ταυτότητα, γιατί είμαι επιβάλλει αυτόν τον περιορισμό ή το δείκτη.
Επιπλέον, αυτό που πρόκειται να κάνει για μένα είναι ότι πρόκειται να πει
MySQL ότι είναι ιδιαίτερη ταυτότητα.
Με νοιάζει ιδιαίτερα για ταυτότητα, έτσι ώστε να προχωρήσει και να κάνει μαγικά φανταχτερό δομή των δεδομένων σας,
δημιουργήσει κάποιο είδος δέντρου.
Συνήθως είναι κάτι που ονομάζεται το Β-δέντρο, το οποίο εμείς δεν εξετάσουμε εβδομάδες πριν,
αλλά αυτό είναι μια άλλη τέτοια δομή δεδομένων παρόμοια στο πνεύμα με τα δυαδικά δέντρα
και ότι προσπαθεί κοιτάξαμε, αλλά πρόκειται να πω
στη βάση δεδομένων στον τομέα αυτό είναι τόσο σημαντικό το γεγονός ότι εγώ κατά πάσα πιθανότητα
θέλουν να είναι σε θέση να ψάξει για αυτό, να προχωρήσει και να δημιουργήσει κάποια φανταχτερή
δομή δεδομένων στη μνήμη για να επιταχύνει αναζητήσεις έτσι ώστε ιδανικά
ότι είναι σταθερό χρόνο ή τουλάχιστον όσο πιο κοντά σε αυτό όσο το δυνατόν
έτσι ώστε να μην περιέλθει σε γραμμική αναζήτηση, η οποία δεν πρόκειται να είναι
το πιο υψηλές επιδόσεις προσέγγιση.
Αντίθετα, διεύθυνση ηλεκτρονικού ταχυδρομείου θα μπορούσε να έχει ένα πρωτεύον κλειδί.
>> Στη θεωρία, τη διεύθυνση ηλεκτρονικού ταχυδρομείου του καθενός είναι μοναδική, εκτός και αν είστε μοιράζονται κάποιο λογαριασμό,
αλλά είναι γενικά δεν είναι καλό να χρησιμοποιήσετε κάτι σαν ένα string
ως πρωτεύον κλειδί, γιατί αν ο σκοπός της ζωής είναι να προσδιορίσει επακριβώς
σειρές στον πίνακα δεν υπάρχει κανένας λόγος να χρησιμοποιήσει 255 bytes μέγιστη
να προσδιορίσει μοναδικά κάποιος αν μπορείτε να πάρετε μακριά με μόλις 4 bytes
ή 32-bit int.
Σε γενικές γραμμές, ένα πρωτεύον κλειδί πρέπει να είναι σύντομη και περιεκτική
και ιδανικά κάτι σαν έναν ακέραιο αριθμό ή ένα μεγάλο int, η οποία συμβαίνει να είναι 64 bits.
Αλλά μια διεύθυνση ηλεκτρονικού ταχυδρομείου θα πρέπει να είναι μοναδικό, και ένα από τα χαρακτηριστικά της βάσης δεδομένων είναι πολύ
είναι να τονίσει τη μοναδικότητα για μένα.
Με την επιλογή μοναδικό εδώ δίπλα στο e-mail, ακόμα και αν η ίδια e-mail
κυλάει έξω από την οθόνη, λέω στη βάση δεδομένων
Δεν με εμπιστεύονται.
Μην επιτρέψτε μου να εισάγετε στη βάση δεδομένων
την ίδια διεύθυνση ηλεκτρονικού ταχυδρομείου δύο φορές, ακόμη και αν είμαι ηλίθιος και δεν είμαι
πολύ καλή με ifs μου και άλλο ifs και πραγματικό κώδικα PHP
και εγώ λάθος επιτρέπουν στο χρήστη να εγγραφείτε με μια υπάρχουσα διεύθυνση email
η βάση δεδομένων είναι ένα ακόμη επίπεδο της άμυνας για την ορθότητα
να εξασφαλίσει ότι οι διπλές διεύθυνση ηλεκτρονικού ταχυδρομείου δεν καταλήγουν στο τραπέζι.
>> Τώρα, αντίθετα, για όνομα που πιθανώς δεν θέλετε να κάνετε αυτό το μοναδικό
γιατί τότε θα μπορούσε να υπάρξει ποτέ να είναι 2 ή 2 Davids Mike Smiths, για παράδειγμα,
στη βάση δεδομένων σας, έτσι ώστε το ένα απλά θα αφήσει μόνο του.
Πάω να πάει μπροστά και να σώσει κάντε κλικ στο κάτω δεξιά,
και ό, τι φαίνεται καλό, αλλά παρατηρήσετε εδώ
αυτό είναι ένα μέρος που για την ώρα δεν θα ξοδεύουν πάρα πολύ χρόνο για
γιατί η σύνταξη είναι ένα μικρό συγκρότημα, και δεν έχουμε να δημιουργήσουμε πίνακες
όλα αυτά συχνά, αλλά το ίδιο SQL είναι μια γλώσσα,
η σύνταξη για την οποία είναι ακριβώς εδώ που έχω υπογράμμισε.
Τι κάνει το phpMyAdmin είναι πραγματικά δημιουργεί μια web-based GUI για εσάς
με την οποία μπορείτε να εξοικονομήσετε χρόνο και δεν χρειάζεται να πληκτρολογήσετε με μη αυτόματο τρόπο από
ένα αρκετά μεγάλο ερώτημα SQL σαν αυτό.
>> Με άλλα λόγια, εάν θέλετε να δημιουργήσετε χειροκίνητα τον πίνακα αυτό,
είτε σε αυτό το μαύρο και άσπρο εντολών ή ακόμη και σε phpMyAdmin
χρησιμοποιώντας αυτή την άλλη καρτέλα, αυτή η καρτέλα SQL, όπου μπορείτε να πληκτρολογήσετε σε οποιαδήποτε ερωτήματα SQL
θέλετε, ειλικρινά, αυτό θα είχε πάρει μου ένα λεπτό
να θυμάστε πραγματικά το σύνολο της σύνταξης, και ακόμα και τότε εγώ κατά πάσα πιθανότητα θα έχουν
κάνει κάποια λάθη, έτσι ώστε αυτό το εργαλείο είναι χρήσιμο για τέτοια πράγματα, και αυτό είναι επίσης διδακτικό.
Μπορείτε να αρχίσετε να συμπεράνουμε ποια είναι η σύνταξη είναι
μόνο από το ωραίο χρώμα κωδικοποίησης ότι το phpMyAdmin είναι η προσθήκη
για την οπτική άνεση μας.
Αλλά τώρα ας κάνουμε αυτό αντ 'αυτού.
Επιτρέψτε μου να μεταβείτε στην καρτέλα ένθετο στην κορυφή, και επιτρέψτε μου να πάω μπροστά και τοποθετήστε για παράδειγμα
ένα αναγνωριστικό του ας πούμε-στην πραγματικότητα δεν με νοιάζει.
Είναι πρόκειται να αυτόματη αύξηση. Πάω να αφήσει τη συμφωνία με βάση αυτό.
Αλλά θα είμαι Δαβίδ, και e-mail μου θα πρέπει να είναι malan@harvard.edu.
>> Ας προχωρήσουμε εδώ και να θέσει σε Mike Smith ως ένα άλλο.
Θα δώσω στον εαυτό μου ένα επώνυμο, καθώς και,
και θα έχουμε να τον smith@example.com,
και στη συνέχεια, όπου μπορώ να πάω το επόμενο βήμα;
Λοιπόν, αυτό μοιάζει με go είναι το κουμπί για να κάνετε κλικ, και voila.
Παρατηρήστε τις εισαχθεί κορυφή 2 σειρές.
Αυτό είναι το πραγματικό ερώτημα SQL.
Αυτό είναι το εργαλείο phpMyAdmin εκτελούνται για μένα,
αλλά το τελικό αποτέλεσμα, ειδοποίηση, αν εγώ τώρα πάω στην καρτέλα αναζήτησης,
είναι να δούμε 2 σειρές σε αυτόν τον πίνακα, που θυμίζει πολύ αισθητικά
του πίνακα που είδαμε νωρίτερα για τους χρήστες μας από PSET 7,
ένας εκ των οποίων είναι ο David Malan, ένας εκ των οποίων είναι τώρα ο Mike Smith.
Αλλά ακριβώς για να είναι σαφής, δεν χρειάζεται να χρησιμοποιήσετε το phpMyAdmin,
και πράγματι, πρόκειται να σύντομα να γράψετε κώδικα για PSET 7
που αυτοματοποιεί τη διαδικασία της προσθήκης γραμμών, διαγραφή γραμμών, ενημέρωση σειρές και τα παρόμοια,
οπότε επιτρέψτε μου αντί να πάω στην καρτέλα SQL εδώ
και πληκτρολογήστε επιλέξτε * από τους μαθητές όπου
email = "malan@harvard.edu."
>> Με άλλα λόγια, ας υποθέσουμε ότι τώρα έχετε
κάποια μορφή HTML, και πληκτρολογεί ο χρήστης σε διεύθυνση ηλεκτρονικού ταχυδρομείου τους, μεταξύ άλλων τομέων,
και ο στόχος είναι τώρα σε PHP στο πίσω άκρο κώδικα
για να δούμε πραγματικά τις άλλες λεπτομέρειες του συγκεκριμένου χρήστη.
Ποιο είναι το πλήρες όνομά σας; Ποιος είναι ο αριθμός ταυτότητας σας;
Θα μπορούσατε να γράψετε ένα ερώτημα SQL σαν αυτό, επιλέξτε * από τους φοιτητές
όπου email = "malan@harvard.edu."
Και αν εγώ πάω στη συνέχεια κάντε κλικ, παρατηρούμε ότι θα πρέπει, και μάλιστα εγώ, να πάρει πίσω μόνο μία γραμμή.
Mike έχει παραλειφθεί από αυτό το σύνολο αποτέλεσμα, καθώς η συλλογή των σειρών
γενικά ονομάζεται, γιατί δεν έχουν την ίδια διεύθυνση ηλεκτρονικού ταχυδρομείου με μένα.
>> Τώρα, πάλι, εδώ για PSET 7 θα χρησιμοποιήσετε το phpMyAdmin ως διοικητικό εργαλείο
και ένα παιδαγωγικό εργαλείο για να μάθετε τον τρόπο σας
όλο τον κόσμο της SQL, αλλά στο τέλος της ημέρας
θα πάμε να γράφει αυτά τα ερωτήματα μέσα από πραγματικό κώδικα PHP,
και έτσι μείνετε συντονισμένοι στο πέρασμα του Zamyla ιδίως
όπου θα πάρετε μια περιοδεία του κώδικα διανομής για το σύνολο πρόβλημα
όπου θα έχουμε δεδομένη όχι μόνο την αισθητική για τη σελίδα σύνδεσης
και το ωραίο σέξι λογότυπο που λέει CS50 Οικονομικών, αλλά έχουμε δώσει, επίσης,
μια δέσμη των λειτουργιών που θα κάνουν τη ζωή σας λίγο πιο εύκολη.
Έχουμε γράψει επίσης μέρος της PSET για σας,
η είσοδος μέρος αυτού κυρίως, για να σας δώσει μια αίσθηση του αντιπροσωπευτικού σχεδιασμού
η οποία χρησιμοποιεί στην πραγματικότητα έναν ελεγκτή, για παράδειγμα, index.php,
login.php και τα παρόμοια, και τότε θα δείτε το PSET έχει επίσης έναν κατάλογο προτύπων
που έχει όλες τις απόψεις σας, όλα από την αισθητική.
Και έτσι η συνολική ροή εργασίας σε PSET 7 θα είναι ότι
χρήστες σας επισκέπτονται έναν ελεγκτή μέσω ενός URL σε ένα πρόγραμμα περιήγησης.
Αυτό ελεγκτής περιέχει PHP κώδικα που έγραψε, και στο εσωτερικό του PHP κώδικα σας
μπορεί να μερικές γραμμές του SQL ένθετη μεταξύ των διπλών εισαγωγικών
και να περάσει σε μια λειτουργία που ονομάζεται γράψαμε ερώτημα
που θα σας βοηθήσουν να μιλήσουμε με τη βάση δεδομένων χωρίς τη χρήση κάτι σαν
ένα διοικητικό εργαλείο, όπως το phpMyAdmin.
>> Θα είστε σε θέση να γράψετε SQL σε κώδικα PHP
και να πάρετε πίσω μια σειρά από PHP στο σύνολο των αποτελεσμάτων,
από τις σειρές που ταιριάζουν στην πραγματικότητα αυτό το ερώτημα.
Και ομοίως, θα είστε σε θέση να κάνετε ένθετα ή διαγράφει
ή ενημερώσεις ή τα παρόμοια, η σύνταξη του οποίου είναι αρκετά παρόμοια,
και θα δείτε από ορισμένες αναφορές σε απευθείας σύνδεση, από τον κώδικα της διανομής
και από το ίδιο το πακέτο PSET ακριβώς πώς να πάει για να κάνει αυτό.
Συνειδητοποιήστε τελικά είμαστε πραγματικά το ξύσιμο μόνο την επιφάνεια του SQL
και της MySQL, αλλά η ισχύς του είναι πραγματικά ότι σας απαλλάσσει
να επικεντρωθεί στα προβλήματα που θέλετε να λύσει, οι περιπτώσεις χρήσης που θέλουν να εφαρμόσουν
χωρίς να χρειάζεται να ανησυχείτε τόσο πολύ, τουλάχιστον αρχικά,
σχετικά με το πού και πώς μπορείτε να αποθηκεύσετε και να αναζητήσετε τη βάση δεδομένων σας,
και αυτό είναι κυριολεκτικά όπου του ίδιου του Facebook πήρε την έναρξή του
χρησιμοποιώντας MySQL και στη συνέχεια, χρησιμοποιώντας περισσότερους servers MySQL και στη συνέχεια περισσότερους servers MySQL
πριν από καιρό έως ότου τότε έπρεπε να αρχίσουμε να σκεφτόμαστε πραγματικά σκληρά για το πώς να
αποθήκευσης δεδομένων, πώς να αποθηκεύουν τα πράγματα ακόμη πιο αποτελεσματικά,
έτσι ακόμα κι αν θα πάρουμε ως δεδομένο το γεγονός ότι οι δείκτες και μοναδικούς περιορισμούς
και ούτω καθεξής μόνο δουλειά υπάρχει μια πολύ ενδιαφέρουσα συζήτηση
ότι αυτό μπορεί όλα να οδηγήσει τελικά, έτσι ώστε να συνειδητοποιήσουμε ότι είμαστε το ξύσιμο μόνο την επιφάνεια
από ό, τι θα μπορούσε τελικά για εσάς ή τα έργα σας γίνει αρκετά ένα κομμάτι των μεγάλων δεδομένων.
>> Με αυτόν εν λόγω, ας τελειώσει εδώ, και θα σας δούμε την επόμενη εβδομάδα.
[CS50.TV]