[Παίζει μουσική] David J. Malan: Εντάξει. Καλώς ήρθατε και πάλι. Αυτό είναι CS50. Αυτό είναι το τέλος της εβδομάδας 8. Και όπως ξέρετε, έχουμε αρκετά τακτικές ώρες γραφείου σε λίγες από τις αίθουσες φαγητού, συμπεριλαμβανομένων Annenberg. Και μερικές από την ομάδα ευγενικά πήρε μερικές φωτογραφίες τον τελευταίο καιρό. Και προς τιμήν του Απόκριες, σκεφτήκαμε μοιράζονται ένα που μάλλον μας έπιασαν από έκπληξη εδώ στο Annenberg Hall μόνο η άλλη το βράδυ. Συμμαθητή σας Ιακώβ που θέτει για Αυτή η φωτογραφία, αλλά ήταν πιο διασκεδαστικό Ήταν στο Facebook, η συνακόλουθη συνομιλία που συνέβη αργότερα. Πρώτη θέση του σε απάντηση με τη φωτογραφία του ήταν αυτό. Λίγα λεπτά αργότερα, ο ίδιος αποφάσισε σε ένα επάνω τον εαυτό του με αυτό. Πήγε στην συνέχεια να πάμε σε αυτό, και, στη συνέχεια, ακόμη πιο διασκεδαστικά είναι όταν η μαμά του στο chimed. Και στη συνέχεια, τελικά, φαίνεται ότι αυτό ήταν απλά ένα θαυμάσιο τέχνασμα για ένα παίζουν ότι συμβαίνει. Έτσι, αν θα θέλατε για να δείτε τον Ιακώβ και άλλοι, μεταξύ των οποίων και η Cynthia Meng, ο οποίος είναι πίσω από τις σκηνές του προσωπικού ζώνης CS50, το κεφάλι σε αυτή τη διεύθυνση URL και αυτό το παιχνίδι εδώ. Έτσι, χωρίς άλλη καθυστέρηση, σήμερα συνεχιστεί αυτή η ματιά στο web προγραμματισμό, και η πραγματική δημιουργία προγραμμάτων που δεν τρέχει σε γραμμή εντολών σας, αλλά αντί να τρέχει μέσα από ένα πρόγραμμα περιήγησης. Προφανώς τώρα, ή πολύ σύντομα, θα πάμε να είναι στη μέση της εφαρμογής το δικό σας web server, ο οποίος είναι διαφορετικό από το web προγραμματισμό. Ο web server σε pset6 είναι όλα σχετικά με γράφοντας το λογισμικό που ξέρει πώς να πάρει Αιτήσεις HTTP από ένα πρόγραμμα περιήγησης, ή ακόμα και από εσάς, ένας άνθρωπος, με ένα πρόγραμμα που ονομάζεται Telnet, και στη συνέχεια να απαντήσει στα αιτήματα αυτά, είτε με φτύνει έξω ένα αρχείο HTML, ή jpeg, gif ή ένα, ή ακόμα και ένα .php αρχείο. Αλλά με έναν web server, δεν είναι υποτίθεται ότι μόλις ανοίξετε ένα αρχείο PHP, κάτι που τελειώνει σε .php, και Στη συνέχεια φτύσει τα περιεχόμενα. Θα έπρεπε να κάνει ό, τι σε αυτό το αρχείο για πρώτη φορά; Έτσι για να μιλήσει. Δεν θα συγκεντρώνουν, είπαμε τη Δευτέρα, αλλά rather-- Έτσι, το ερμηνεύσει. PHP είναι μια ερμηνευμένη γλώσσα, και έτσι ένα από τα βασικά χαρακτηριστικά στην ιστοσελίδα σας server, αν εφαρμοστεί από εμάς, Είναι αυτή η δυνατότητα για τον web server σας να παρατηρήσετε, oh. Αυτό είναι ένα αρχείο που τελειώνει σε .php. Επιτρέψτε μου όχι μόνο να το στείλετε στο χρηστών, όπως είναι στατικό περιεχόμενο, αλλά επιτρέψτε μου να το διαβάσει γραμμή από γραμμή, αριστερά προς τα δεξιά, και να την ερμηνεύσει. Και να το κάνουμε, ώστε να παιδιά ουσιαστικά θα punt σε ένα πρόγραμμα στη συσκευή, και σε πολλά συστήματα ηλεκτρονικών υπολογιστών, ακριβώς ονομάζεται PHP. Αυτό είναι το όνομα της PHP της δική διερμηνέα γλώσσας. Έτσι, εκείνο το κομμάτι που εφαρμόζουμε για σας, και ό, τι έχει απομείνει για εσάς, τελικά, είναι ένας αριθμός τεμαχίων, μεταξύ των οποίων υλοποιεί υποστήριξη για στατικό περιεχόμενο. Αλλά τώρα, και με πρόβλημα που επτά, είστε πρόκειται να ξεκινήσει τη μετάβαση σε στην πραγματικότητα γράφοντας τον κώδικα PHP ότι παίρνει ερμηνεύεται μιλώντας σε ένα πίσω άκρο βάση δεδομένων που αποθηκεύει πληροφορίες. Ας κατανοήσουμε καλύτερα πρώτα ένα ζευγάρι από αυτά τα superglobals και ακριβώς πόση δύναμη σας να πάρει έξω από το κουτί για ελεύθερη με μια γλώσσα όπως η PHP. Πράγματα που δεν έχουν να εφαρμόσει τον εαυτό σας. Έτσι, είδαμε τη Δευτέρα $ _GET, το οποίο είναι ένα superglobal, το οποίο απέχει μόλις PHP μιλούν για μια παγκόσμια μεταβλητή μπορείτε να έχετε πρόσβαση οπουδήποτε. Και τι είναι μέσα από $ _GET; Τι είναι μέσα από αυτό superglobal ότι βλέπουμε; Σίγουρα στατιστικά σε τουλάχιστον ένα άτομο ξέρει. Τι είναι μέσα από $ _GET; Ναι; ΚΟΙΝΟ: Είναι οι μεταβλητές βάζετε στο query string. David J. Malan: Τέλεια. Είναι οι μεταβλητές που βάλει στο query string. Έτσι, σε παλαιότερες παράδειγμα μας reimplementing Google όταν είχαμε μια διεύθυνση URL, και στη συνέχεια, ερωτηματικό, η οποία οριοθετεί την έναρξη του HTTP παράμετροι, τότε είχαμε q ίση κάτι, όπως και Q είναι ίσο με τις γάτες, τι θα πάει αυτόματα στο εσωτερικό των $ _GET σούπερ παγκόσμια για εσάς, λόγω της PHP, είναι ένα κλειδί του Q, και της αξίας αυτών των γατών. Με άλλα λόγια, $ _GET και όλα Αυτά τα πράγματα είναι συνειρμική συστοιχίες, hash πίνακες του είδους, ότι κατάστημα κλειδιών και τιμών. Τώρα, πίσω στο pset5, η χασίς πίνακας μπορεί να έχουν θέσει σε εφαρμογή, ή η προσπάθειά σας θα μπορούσε να έχουν υλοποιηθεί, πραγματικά Ήταν ουσιαστικά μια συνειρμική συστοιχία, μια δομή δεδομένων σύμφωνα με την οποία μπορείτε να συνδέσετε πλήκτρα με αξίες. Αλλά σε pset5, οι τιμές ήταν ασήμαντο. Η τιμή ήταν ουσιαστικά αληθείς ή ψευδείς. Είναι η λέξη στο λεξικό; Έτσι, όταν κατακερματίζεται μια λέξη όπως η Apple για να δούμε αν η Apple είναι στο λεξικό, Ο έλεγχος της λειτουργίας σας πιθανώς επέστρεψε αληθείς ή ψευδείς. Έτσι, αυτό είναι ουσιαστικά η αξία παίρνουμε πίσω. Αλλά είδαμε τη Δευτέρα εν συντομία, μπορείτε σίγουρα συνδέσει πιο ενδιαφέρουσα τιμές από ό, τι ακριβώς αληθής ή ψευδής με κλειδιά, όπως η Apple. Θα μπορούσε πραγματικά να επιστρέψετε ένα αυθαίρετη φράση, και μάλιστα, αυτό είναι ό, τι $ _GET και αυτά άλλες μεταβλητές σας αφήσει να κάνετε. Έτσι $ _POST είναι συναφείς στο πνεύμα, αλλά αν έχετε υποβάλει μια φόρμα μέσω ταχυδρομείου, μια διαφορετική μέθοδο HTTP που είναι χρησιμοποιείται για πράγματα όπως πιστωτικές κάρτες, και ιδιωτικές πληροφορίες, ακόμα και δυαδικές πληροφορίες όπως φωτογραφίες, αυτά τα πράγματα καταλήγουν στο εσωτερικό των $ _POST. Και πραγματικά για τα αρχεία όπως αρχεία JPEG και εταζέρα, υπάρχει ακόμη και ένα άλλο που δεν είναι μέχρι εδώ ονομάζεται $ _FILES καθώς και. Έτσι, ο διακομιστής δεν θα σταθώ σε πολύ πολύ, αλλά αυτό σας δίνει πρόσβαση για να ταξινομήσετε του κατώτερου επιπέδου λεπτομέρειες σχετικά με το ίδιο το διακομιστή που χρησιμοποιείτε. Cookie και διάρκεια, όμως, θα δούμε αποτελεσματικά τώρα. Το τελευταίο είναι αυτό που χρησιμοποιούμε για την εφαρμογή η έννοια του ένα καλάθι αγορών. Μια εξαιρετικά απλή, αλλά ανάκληση ότι είχαμε αυτό το παράδειγμα εδώ, μετρώντας πόσες φορές σας είχε επισκεφτεί αυτή τη σελίδα πριν. Αλλά σήμερα, όχι απλά κοιτάξτε η επίδραση της αυτό, ας ανοίξει Του Chrome Επιθεωρητή, το οποίο μπορείτε να συνήθως κάνει με δεξί κλικ ή ελέγχου κλικ οπουδήποτε σε μια ιστοσελίδα, και στη συνέχεια επιλέξτε επιθεωρήσει το στοιχείο. Ή μπορείτε να πάτε μέσω του μενού ότι έχουμε περιγράψει στο spec pset6 του. Και Πάω στην καρτέλα Δίκτυο εδώ, και ας παρακολουθήσουν για μια στιγμή η κυκλοφορία HTTP που είναι πηγαινοέρχονται. Επιτρέψτε μου πρώτα να πάμε μπροστά και cache σαφές Chrome. Έτσι, κάποιοι από εσάς μπορεί να είναι εξοικειωμένοι με αυτήν την τεχνική ήδη, και θα πάμε να το χρησιμοποιήσετε για τον εντοπισμό σφαλμάτων σκοπούς εδώ. Τώρα εμείς ως υπολογιστής Οι επιστήμονες πρόκειται να ξεκινήσει κάνει αυτό για εντοπισμό σφαλμάτων σκοπούς, οπότε θα καθαρίσετε την cache, τυπικά, έτσι ώστε να μπορέσουμε μπορούμε να απαλλαγούμε από τα πράγματα τα λεγόμενα cookies. Έτσι, είστε πιθανώς εξοικειωμένοι σε γενικές γραμμές με ποια cookies είναι, ή τουλάχιστον ότι υπάρχουν, αλλά τι είναι κατανόηση σας από αυτούς, όπως ακριβώς ένα χρήστη του υπολογιστές, τι είναι ένα cookie; Ναι. ΚΟΙΝΟ: Είναι λίγο of-- καλά, δεν bit σε έναν όρο της επιστήμης των υπολογιστών. Είναι ένα κομμάτι δεδομένων που ένας ιστοσελίδα σας στέλνει για να είναι σε θέση να καταγράφει στατιστικά στοιχεία για σας. David J. Malan: Εντάξει, καλά. Έτσι είναι ένα κομμάτι δεδομένων που ένας εξυπηρετητή, βάζει επάνω στον υπολογιστή σας, και ας το γενικεύσουμε ακόμη περισσότερο, είναι ένα βασικό value-- καλά, ότι είναι όλο και πιο ακριβή. Είναι ένα κομμάτι πληροφορίες, ένα κομμάτι των δεδομένων, ότι ένας διακομιστής είναι σε θέση να βάλει στον υπολογιστή σας και πολύ συχνά, ο διακομιστής κάνει αυτό, έτσι ώστε να θυμηθείτε ποιοι είστε. Έτσι, για παράδειγμα, οι πιθανότητες Δεν είστε πιθανώς συνδεδεμένοι σε ιστοσελίδες όπως το Facebook, ή το Gmail, ή άλλοι πριν, και θα συνδεθείτε με σας το όνομα χρήστη και τον κωδικό πρόσβασης, και στη συνέχεια μετά από αυτό, για κάποιο αριθμό από λεπτά ή ώρες ή ακόμη και ημέρες, ο διακομιστής θυμάται ότι που είναι, στην πραγματικότητα, εισέλθει. Τώρα, πώς είναι ότι πραγματικά συμβαίνει; Επειδή είστε σίγουρα δεν επαναπληκτρολόγηση το όνομα χρήστη και τον κωδικό πρόσβασής σας κάθε φορά μπορείτε να πλοηγηθείτε σε ένα διαφορετική σελίδα στο Facebook. Έτσι αποδεικνύεται η μπισκότα είναι η απάντηση. Ένα cookie μπορείτε να σκεφτείτε όπως, το είδος της αρέσει, μια ψηφιακή χέρι σφραγίδα που μπορείτε να πάρετε σε ένα διασκέδασης πάρκο ή μια λέσχη που ουσιαστικά αυτό σημαίνει ότι έχετε έρθει εδώ πριν, και έχετε ήδη φαίνεται ID σας στο μπράβος, για παράδειγμα, και ότι ο σύλλογος ή το πάρκο πρέπει τώρα να υποθέσουμε ότι σας έχουν επικυρώσει ήδη. Έχετε ήδη εντοπιστεί από αυτό. Έτσι, με αυτό κατά νου, ας ανοίξει μετρητή εδώ. Επιτρέψτε μου να πάει μπροστά, έκανα ακριβώς, και σαφής όλα τα cookies μου. Και τώρα τι Πάω να κάνουμε είναι Κρατήστε πατημένο το Shift, μόνο για το καλό μέτρο, και βίαια επαναλάβετε τη φόρτωση της σελίδας. Shift απλά βεβαιωθείτε ότι τίποτα δεν παίρνει αποθηκεύονται προσωρινά. Και εδώ είναι το αίτημα ότι πήγε μπροστά και πίσω. Έτσι, εδώ έχουμε ένα αίτημα, και ας Θέλω να μεγεθύνετε εδώ κάτω, και πολλά από αυτά Είναι το είδος του πληκτικός λεπτομέρειες για τώρα ότι το πρόγραμμα περιήγησης έχει αυτόματα αποστέλλονται, αλλά ας κάντε κλικ στο Προβολή Πηγή για να δείτε τις πρώτες κεφαλίδες. Και αν έχετε βουτήξει σε pset6 ήδη, θα αναγνωρίσει σίγουρα τα πράγματα όπως αυτό, και ίσως κάποια από αυτές τις άλλες γραμμές εδώ, αλλά αυτό που είναι πιο ενδιαφέρουσα για σήμερα αν μετακινηθείτε προς τα κάτω, όχι στην αίτηση αλλά με τη λεγόμενη απόκριση, Αυτή η γραμμή φαίνεται πιθανώς εξοικειωμένοι. Αυτό είναι ένα καλό πράγμα όταν βλέπετε ένα 200 OK. Προφανώς αυτή είναι η την ημερομηνία και την ώρα στο διακομιστή και υπάρχει ένα σωρό πράγματα. Ω, αυτό είναι ενδιαφέρον. Βγάζει κάθε φορά που χρησιμοποιείτε PHP, τουλάχιστον σε αυτόν τον server, ο διακομιστής φτύσει τι έκδοση της PHP που χρησιμοποιείτε. Η οποία, στην πραγματικότητα, για την ασφάλεια σκοπούς, δεν είναι ένα καλό πράγμα. Όμως, εμείς θα επανέλθουμε σε αυτό κάποια άλλη φορά ίσως. Αλλά τώρα αυτό είναι το ζουμερό γραμμή σήμερα, και είδαμε εν συντομία μερικά από αυτά, Νομίζω ότι με το Facebook όταν έσπρωξε γύρω από τον Επιθεωρητή εκείνη τη στιγμή, σύνολο cookie είναι ό, τι φύτευση αυτό το μικρό κομμάτι των πληροφοριών στον υπολογιστή σας. Αυτή είναι μια κεφαλίδα HTTP ότι είναι αποτελεσματικά λέγοντάς του browser σας, Chrome, IE, όποια και αν είναι, hey κατάστημα πρόγραμμα περιήγησης για το χρήστη σκληρό δίσκο ή στη μνήμη RAM του χρήστη, ένα κλειδί που ονομάζεται PHPSESSID, η οποία είναι μια σημειογραφία στενογραφία για αναγνωριστικό περιόδου, και να δώσετε την τιμή του 0vlk8t, τελεία, τελεία, τελεία. Ένα πραγματικά μεγάλο ψευδο τυχαία σειρά αλφαριθμητικών. Είναι απλά ένα πραγματικά μεγάλο αριθμό, αλλά αυτό είναι κωδικοποιημένα με γράμματα και αριθμούς έτσι ώστε το μέγεθος του μπορεί να είναι ακόμη μεγαλύτερο από αριθμούς και μόνο. Και στη συνέχεια, από τον τρόπο, Path = /, ότι Σημαίνει απλώς ότι αυτό το cookie θα πρέπει να είναι που συνδέεται με το σύνολό της ιστοσελίδας, όχι μόνο ένα συγκεκριμένο σελίδα το όλο θέμα. Έτσι, αυτό είναι ότι η εικονική σφραγίδα χέρι. Είναι σαν το διακομιστή, το Facebook, ή σε περίπτωση που η συσκευή μας, έχει κυριολεκτικά γραπτή 0vlk8t και ούτω καθεξής, στο χέρι σας. Παρατηρήστε τι το διακομιστή, δεν κάνει είναι ότι δεν είναι αποθηκεύει το όνομα χρήστη μου, σίγουρα δεν αποθηκεύει τον κωδικό μου. Αντ 'αυτού, φαίνεται να είναι αποθήκευση ψευδο τυχαία πληροφορίες έτσι ώστε να μην μπορεί κανείς να μαντέψει τι σφραγίδα χέρι μου είναι. Από την πλευρά του διακομιστή, Εν τω μεταξύ, ο διακομιστής πρόκειται να θυμόμαστε, ίσως σε μια βάση δεδομένων ή κάτι, ότι ο χρήστης, ο οποίος στο μέλλον παρουσιάζει μια σφραγίδα στο χέρι της 0vlk8t, dot, τελεία, τελεία, θα πρέπει να συνδέονται με αυτό Ειδικότερα καλάθι αγορών, να το πω έτσι. Με άλλα λόγια, αν εγώ τώρα πάω πίσω εδώ και φορτώστε ξανά αυτήν τη σελίδα, πώς γνωρίζει ο διακομιστής ότι έχω επισκεφθεί μία φορά; Ή αν το κάνω πάλι, πώς το διακομιστή ξέρω ότι έχω επισκεφθεί αυτό δύο φορές; Λοιπόν αν πάω κάτω σε αυτό πιο πρόσφατο αίτημα, το οποίο είναι τώρα η τρίτη ότι έχω στείλει συνολικά, παρατηρήσετε αίτημά μου τώρα. Υπάρχει ακόμα αυτή η ζητήσει μέχρι εδώ, το ίδιο όπως και πριν, υπάρχει ακόμα ένα σωρό πράγματα που έχουμε αγνοούνται όπως και πριν, αλλά η τελευταία κεφαλίδα, αυτό χρόνο, γιατί έχω ξανάρθει εδώ, Είναι μια παρουσίαση του Αυτή η εικονική σφραγίδα χέρι. Όπου αυτή η γραμμή εδώ, δεν έχει οριστεί μπισκότο αλλά μπισκότο παχέος εντέρου PHPSESSI = 0vlk8t, αυτό είναι μόνο το πρόγραμμα περιήγησης μου αυτόματο παρουσίαση αυτής της σφραγίδας στο χέρι, έτσι ώστε τώρα ο server, μόλις συνειδητοποιεί, Ooh, αυτό είναι 0vlk8t χρήστη τελεία, τελεία, τελεία, Τώρα μπορώ να θυμηθώ ποιος αυτός ή αυτή είναι και επανασυνδέονται με την εν λόγω χρήστη ανεξάρτητα από πληροφορίες που θέλω, και το σύνολο των οι πληροφορίες μπορεί να αποθηκευτούν από εσάς, ο προγραμματιστής, σε $ _SESSION. Έτσι για να είναι σαφές, αν ανοίξει πραγματικά γρήγορα στο gedit ότι πραγματικό αρχείο, counter.php, σε τοπικό κεντρικό δημόσιο κατάλογο μου όπως και πριν, παρατηρούμε ότι, πράγματι, Είμαι τελικά την αποθήκευση σε $ _SESSION Απόσπασμα εισαγωγικά "πάγκο", η αξία του προηγούμενου μετρητής ο οποίος Παίρνω από αυτές τις γραμμές μέχρι εδώ ότι εμείς κοίταξε για τελευταία φορά συν ένα. Έτσι, κάτω από την κουκούλα, ότι είναι όλα τα cookies είναι. Είναι ακριβώς το είδος των ψηφιακών χέρι σφραγίδα πηγαινοέρχονται, και ειλικρινά αν ανοίξετε του Chrome Επιθεωρητή σε οποιαδήποτε ιστοσελίδα θα επισκεφθεί σήμερα, με σούπερ υψηλή πιθανότητα, θα πάμε να δούμε ίσως μία, ίσως μισή ντουζίνα μπισκότα να θυμόμαστε από εσάς. Και ακόμα χειρότερα, αν αυτοί ιστοσελίδα που επισκέπτεστε όλα έχουν διαφημίσεις, η οποία είναι σίγουρα αρκετά κοινό σήμερα, και αν αυτές οι διαφημίσεις έρχονται από κάποια κεντρική κόμμα, κάποιος όπως το Google ή το AdWords, καθώς καλέστε ένα από τα προϊόντα τους ή άλλες τέτοιες προμηθευτές που πωλούν διαφημίσεις, αυτό που είναι ενδιαφέρον, και ειλικρινά αυτό είναι ένα μικρό ανησυχητικό, για το πώς λειτουργεί το HTTP, είναι ότι αν έχετε μια διαφήμιση ενσωματωμένο στο Facebook.com, και Google.com, και Harvard.edu, οποιοσδήποτε αριθμός των δικτυακών τόπων, έτσι ώστε να είναι τέτοιο ότι υπάρχει ένα μέσο άνθρωπο ο οποίος εκτίει up διαφημίσεις για τις τρεις από αυτές τις ιστοσελίδες, αποδεικνύεται ότι η cookies είναι ανά τομέα. Έτσι, εάν έχετε μια διαφήμιση που προέρχονται από το ίδια εταιρεία σε διάφορες ιστοσελίδες, ότι η εταιρεία μπορεί να παρακολουθεί αποτελεσματικά οι οποίοι είστε σε όλους αυτούς τους ιστότοπους. Χάρβαρντ δεν μπορεί να ξέρει είστε επισκέπτονται το Facebook. Το Facebook δεν μπορεί να γνωρίζει και είστε επισκέπτονται το Χάρβαρντ. Αλλά ανεξάρτητα από την υπηρεσία διαφημίσεων από όπου και αν χρησιμοποιούν, αν η περιοχή είναι παρούσα σε τόσο Harvard.edu web σελίδες και Facebook.com ιστοσελίδες, Αυτό το μεσαίο άνθρωπος ξέρει σίγουρα ποιος είσαι Λόγω αυτών των cookies που μοιράζονται ολόκληρη, ή μάλλον να, ότι η λεγόμενη μεσάζων. Γι 'αυτό και θα επανέλθουμε σε αυτό σε επιπτώσεις στην ασφάλεια, τους αλλά υπάρχουν πολλές πληροφορίες αποθηκεύονται για σας κάθε φορά που θα επισκεφθείτε τις περισσότερες οποιαδήποτε ιστοσελίδα για το διαδίκτυο και πραγματικά μειώνει σε αυτό το πολύ απλό μηχανισμό. Τι συμβαίνει, λοιπόν, αν είστε σούπερ παρανοϊκός και αν αποφασίσετε να πάτε στο Chrome ή IE ή ό, τι και να απενεργοποιήσετε τα cookies σας; Τι συμβαίνει; Ναι; Μπορείτε really-- έχετε κάνει αυτό το δικαίωμα; ΟΚ. Όχι, προχωρήστε. ΚΟΙΝΟ: Ορισμένες ιστοσελίδες δεν έχουν μια λειτουργία χωρίς αυτό, όπως το Facebook. David J. Malan: Ναι! Έτσι, ορισμένες ιστοσελίδες θα σταματήσει να λειτουργεί. Και στις περισσότερες ιστοσελίδες αυτές τις μέρες που ουσιαστικά βασίζονται σε cookies, ειδικά αν έχετε συνδεθείτε σε, είναι ακριβώς πρόκειται να σπάσει. Επειδή θεωρούν ότι η εναλλακτικά, εάν η ιστοσελίδα δεν έχει κανένα τρόπο να θυμόμαστε ποιοι είστε, και ως εκ τούτου, web browser σας δεν είναι που εκπροσωπούν με κάθε HTTP αίτημα αυτής της σφραγίδας χέρι, αποτελεσματικά μια ιστοσελίδα όπως η εξέλιξη του Facebook που πρέπει να σας προτρέψει να συνδεθείτε σε κάθε καταριέται χρόνο αλλάζετε σελίδες, ή κάντε κλικ σε ένα σύνδεσμο, ο οποίος Δεν είναι σίγουρα μια ιδιαίτερα καλή χρήστη εμπειρία. Έτσι ώστε να υπάρχει, επίσης, είναι μεταξύ τους συμβιβασμούς. Έτσι, χωρίς άλλη καθυστέρηση, ας ρίξουμε δεδομένο ότι με web προγραμματισμό, σε γλώσσες όπως η PHP, μπορείτε να θυμηθείτε πληροφορίες, όπως ότι το πρόβλημα που επτά, όταν εφαρμόζουν τη δική σας E * Trade-όπως ιστοσελίδα με την οποία να αγοράσουν και να πωλούν τα αποθέματα, θα θυμάμαι ακριβώς τι ο χρήστης έχει αγοραστεί και να πωληθεί και ποιος είναι αυτός ή αυτή είναι μέσω αυτής της συνόδου. Αλλά θα πάμε να χρειάζονται ένα φανταχτερό τρόπο από ό, τι e-mail να αρχίσουμε να τηρούμε πληροφορίες γύρω. Σωστά; Τη Δευτέρα, μιλήσαμε για Frosh ΔΥ και πώς στην έκδοση ενός της εν λόγω ιστοσελίδας, χρόνια πριν, το μόνο που κάναμε ήταν email το Proctor που είναι υπεύθυνος των τειχών του αθλητισμού προγράμματος, το όνομα και το φύλο, και κατά πόσον είναι ή δεν είναι καπετάνιος, και η κοιτώνα του κάποιον που είναι εγγραφή για την εντός των τειχών του αθλητισμού. Έτσι δεν είναι κακό, αλλά αυτός ή αυτή στη συνέχεια έπρεπε να ψαρεύουν μέσω του ηλεκτρονικού ταχυδρομείου τους, δημιουργήσετε ένα υπολογιστικό φύλλο ή κάτι παρόμοιο ότι, για να κρατήσει όλα οργανωμένα. Έτσι, σίγουρα εμείς ως προγραμματιστές μπορεί να κάνει αυτό για το ότι Proctor. Και έτσι αρχίζει σε SQL, Structured Query Language, που πρόκειται να δούμε αρκετά διαφορετικά τόσο C και PHP, και θα βουτήξετε σε πολύ περισσότερα χέρια για PHP και το πρόβλημα που επτά, αλλά και SQL, ή SQL, αυτή είναι μια γλώσσα που μπορείτε να χρησιμοποιήσετε για να μιλήσει σε μια βάση δεδομένων. Αλλά τι είναι μια βάση δεδομένων; Καλά νομίζετε ενός βάση δεδομένων, τουλάχιστον για τώρα, όπως ακριβώς είναι σαν ένα αρχείο Excel, ή εάν είστε ένα αρχείο Mac αριθμούς χρήστη μια, ή αν είστε το Google Apps χρήστη ένα υπολογιστικό φύλλο Google, είναι ουσιαστικά μια βάση δεδομένων, ή πραγματικά Συγκεκριμένα μια σχεσιακή βάση δεδομένων. Μια σχεσιακή βάση δεδομένων είναι απλά κάτι που έχει σειρές και στήλες, και μπορείτε να αποθηκεύσετε κάθε είδους πληροφορίες σε αυτές τις γραμμές ή στήλες. Αλλά τι είναι καλό για το SQL, και σχετικά με τις πραγματικές βάσεις δεδομένων, όχι μόνο λογιστικά φύλλα ή φύλλα Google, είναι ότι μπορείτε να χρησιμοποιήσετε μια γλώσσα να εκτελέσει πραγματικά ερωτήματα για εισαγωγή δεδομένων, για να καταργήσετε δεδομένα, να ψάξουν για στοιχεία, ακόμη και το πιο σημαντικό, μπορείτε και Δεν χρειάζεται να το χρησιμοποιήσετε αρκετά χειροκίνητα όπως ίσως συνήθως ένα Google λογιστικών φύλλων, όπως αυτό. Έτσι, σε SQL, υπάρχει μια δέσμη των θεμελιώδεις δηλώσεις ή κομμάτια της λειτουργικότητας ενσωματωμένη. Υπάρχουν πολλά περισσότερα από αυτά, αλλά μπορείτε να πάτε μια τεράστια απόσταση μόνο με τη γνώση ότι Αυτή η γλώσσα που ονομάζεται SQL έχει τουλάχιστον τέσσερις καταστάσεων που μπορούν να αξιοποιήσουν. Διαγραφή, για την αφαίρεση των δεδομένων, Τοποθετήστε, για την προσθήκη γραμμών, Ενημέρωση για αλλαγή σειρές, και την επιλογή, για να πάρει πίσω σειρές και ότι είναι πράγματι αυτό που κάνει τον SQL. Λειτουργεί εξ ολοκλήρου σε σειρές έτσι ότι όταν εισάγετε ή να αφαιρέσετε, ή ενημέρωση, ή να επιλέξετε ό, τι είσαι να πάρει πίσω, όπως το λεγόμενο σύνολο αποτελεσμάτων, όπως και μια σειρά από γραμμές. Μια δέσμη των γραμμών από ένα τραπέζι. Έτσι, πίσω στην ημέρα, και ακόμη και σε αυτήν την ημέρα, μπορείτε να αλληλεπιδράσουν με το βάση δεδομένων χρησιμοποιώντας μια γραμμή εντολών, αλλά δεν είναι ιδιαίτερα διασκεδαστικό να το χρησιμοποιήσετε Αυτό το μαύρο και άσπρο παράθυρο στυλ και στην πραγματικότητα εκτελούν εντολές και σακί γύρω από τη βάση δεδομένων σας. Μια γραφική διεπαφή χρήστη, ή GUI, είναι πολύ πιο προτιμότερο, αναμφισβήτητα, και έτσι το εργαλείο που σας προτείνουμε και προεγκατεστημένα για εσάς στη συσκευή ονομάζεται phpMyAdmin. Είναι μια συνολική σύμπτωση το γεγονός ότι η το όνομα του αυτό το πράγμα έχει PHP σε αυτό, αυτό σημαίνει απλώς ότι οι άνθρωποι ο οποίος έγραψε τον εαυτό τους αυτό το πρόγραμμα έγραψε στην PHP. Αλλά είναι τελικά για τη χορήγηση ένα διακομιστή βάσης δεδομένων, όπως ένα κεντρικό υπολογιστή MySQL ότι μπορεί να έχετε, όπως σας κάνει, στη συσκευή CS50. Έτσι υπάρχει περισσότερη λεπτομέρεια από ό, τι εδώ θα πρέπει να νοιάζονται για σήμερα, αλλά αυτό που είναι βασικό είναι ότι για την αριστερά πλευρά είναι μια λίστα των βάσεων δεδομένων ότι έχετε στον υπολογιστή σας, στην συσκευή CS50 σας, ή έρχονται τελευταία έργα που μπορεί να έχουν σε ένα τρίτο μέρος, μια εταιρεία ιστοσελίδα server ή web, ότι ίσως να πρέπει να πληρώνουν για το διάστημα. Έτσι, για την αριστερά είναι η βάσεις δεδομένων, ένας από τους οποίους είναι pset7 που δανείστηκα από την επόμενη εβδομάδες το chipset, και στη συνέχεια στην κορυφή παρατηρήσετε εκεί υπάρχει μια μάτσο καρτέλες, μία εκ των οποίων είναι βάσεις δεδομένων, SQL, το καθεστώς, χρήστες, εξαγωγή και ούτω καθεξής. Έτσι, μπορείτε να πάτε μια μακρά τρόπο μόνο με την πραγματοποίηση ότι το μεγαλύτερο μέρος της διεπαφής χρήστη είναι στην πάνω αριστερή στήλη και πέρα ​​από την κορυφή μέχρι εκεί. Έτσι, ό, τι μπορούμε τελικά να κάνουμε με αυτό; Λοιπόν, ας ξεκινήσουμε δημιουργώντας ένα κομμάτι των πληροφοριών ως εξής. Ας υποθέσουμε ότι το ακόλουθο είναι η περίπτωση, όπως θα είναι σε λίγες μέρες, Θέλετε να εφαρμόσουν μια ιστοσελίδα, που ονομάζεται CS50 Οικονομικών, και αυτή η ιστοσελίδα σας επιτρέπει να αγοράσετε παραθέτω εισαγωγικά και να πωλούν τα αποθέματα. Και αυτό πρόκειται να καταλάβω η τιμή των εν λόγω αποθεμάτων, τελικά, όπως θα δείτε, μιλώντας στο Yahoo Finance. Ποια, θαυμάσια, έχει μια δωρεάν υπηρεσία όπου μπορείτε να περάσετε σε μια ταινία μετοχών όπως GOOG για το Google, και θα να σας δώσει πίσω την τρέχουσα χρηματιστηριακή της Google τιμή εντός του παρελθόντος λίγα λεπτά τουλάχιστον. Έτσι θα χρησιμοποιήσετε ότι, σε τελική ανάλυση, να προσποιούνται για το χρήστη να αγοράζουν και να πωλούν πραγματική αποθέματα χρησιμοποιώντας εικονικά χρήματα, αλλά το πρώτο πράγμα ο χρήστης πρόκειται να δείτε είναι η οθόνη σύνδεσης που τους ζητά για το όνομα χρήστη και τον κωδικό πρόσβασής τους. Και έτσι, ένα από τα πρώτα προκλήσεις για εσάς σε pset7 πρόκειται να είναι να εφαρμόσει το πίσω άκρο βάση δεδομένων, το λογιστικό φύλλο, αν θέλετε, ότι πρόκειται να αποθηκεύσετε ονόματα και τους κωδικούς πρόσβασης των χρηστών και, τελικά, τι τα αποθέματα που κατέχουν, και πόσα και πόσα χρήματα έχουν, έτσι ένα σωρό άλλα πράγματα στο άλλα τραπέζια, ή υπολογιστικά φύλλα. Έτσι, ας ρίξουμε μια ματιά στο πώς αυτό μπορεί να φαίνεται με την πρώτη ματιά. Πάω να πάει πίσω στο η συσκευή και είμαι πρόκειται να πάει σε αυτό το URL εδώ phpMyAdmin localhost / phpmyadmin και θα δείτε ότι μου παίρνει σε μια διεπαφή ακριβώς όπως είδαμε στις ο στιγμιότυπο οθόνης, και εδώ έχουν μία επιπλέον βάση δεδομένων κάλεσε διάλεξη για σήμερα και επιτρέψτε μου να πάει μπροστά πρώτη και κάντε κλικ στο pset7. Μου φαίνεται να έχουν μια-δυο επιλογές, ένα για τα νέα, για τη δημιουργία ενός νέου πίνακα, και μια σύνδεση με τους χρήστες, το οποίο είναι ένας πίνακας που έχουν ήδη δημιουργηθεί. Έτσι τι είναι ένας πίνακας; Έτσι, αν έχετε χρησιμοποιήσει το Excel πριν, και αν έχετε μεταχειρισμένα αριθμούς ή το Google Φύλλα, θα ανοίξει ένα παράθυρο και μπορείτε να πάρετε ένα σωρό των γραμμών και των στηλών, αλλά τότε θα πρέπει συνήθως φύλλα εργασίας κατά μήκος του κάτω μέρος, ή ξεχωριστές καρτέλες. Μπορείτε να σκεφτείτε κάθε φύλλο εργασίας ως ένα τραπέζι έτσι ώστε βάσης δεδομένων, τελικά, είναι ένα συνδυασμό έναν ή περισσότερους πίνακες, μία ή περισσότερα φύλλα εργασίας, στην κόσμο της ένα κανονικό φύλλο. Έτσι, επιτρέψτε μου να πάει μπροστά και κάντε κλικ σε αυτό το φύλλο εργασίας ότι προκατασκευαστεί, που ονομάζεται χρήστες, ή ως Πίνακα της βάσης δεδομένων. Και αν μετακινηθείτε προς τα κάτω εδώ, επιτρέψτε μου σμίκρυνση λίγο, Αυτό είναι ό, τι λέει το phpMyAdmin μας είναι μέσα από αυτό το τραπέζι τώρα. Είναι μια μικρή σύγχυση κατά την πρώτη ματιά γιατί η UI δεν είναι το πιο όμορφο πράγμα στον κόσμο, αλλά αυτό που έχει ενδιαφέρον είναι αυτό το μέρος εδώ. ID, όνομα χρήστη, και κατακερματισμού. Στην εκ των προτέρων, και θα παραδοθεί Αυτό το πρόβλημα που επτά, σας δίνουμε ένα αρχείο που περιέχει ένα σούπερ μικρό πίνακα της βάσης δεδομένων, δανείστηκε πραγματικότητα από την έκδοση του χάκερ του προβλήματος που δύο, στο εσωτερικό των οποίων υπάρχουν έξι σειρές. Μία για Belinda όλα τα τρόπος κάτω σε ένα για Zamyla, και ανακοίνωση προς τα αριστερά εκείνων ονόματα χρήστη είναι μοναδικά αναγνωριστικά, όπως ένα, δύο, τρεις, τέσσερις, πέντε, έξι, ακέραιοι, και στη συνέχεια προς τα δεξιά είναι hashes. Και αν, είναι οι πιθανότητες, δεν κάνατε το πρόβλημα χάκερ έκδοση που δύο, αλλά ένα hash είναι ακριβώς όπως ένα κρυπτογραφημένο κωδικό με λίγες επιφυλάξεις. Κι έτσι, αυτό που βλέπετε εδώ είναι οι κρυπτογραφημένες εκδόσεις όλων των έξι των κωδικών πρόσβασης μας από το πρόβλημα που δύο του χάκερ έκδοση. Τώρα προς τα αριστερά είναι μερικά μόνο από τα πράγματα GUI, επεξεργασία αυτής της στήλης, αντιγράφοντας αυτή σειρά, διαγραφή αυτής της σειράς. Αλλά αυτό που είναι ενδιαφέρον τώρα είναι η ακόλουθη. Μπορώ πραγματικά να ξεκινήσετε πειραματίζονται με αυτόν τον πίνακα. Έτσι αν πάω και κάντε κλικ στο SQL καρτέλα, να πάρω αυτό το μεγάλο κουτί κειμένου. Και αυτό δεν είναι το πώς θα πάμε να κάνει αυτό όταν γράφετε στην πραγματικότητα κώδικα. Για να είμαι σαφής, το phpMyAdmin Είναι απλά ένα εργαλείο που είναι πρόκειται να αφήσουμε να μας σπρώξει γύρω από τη βάση δεδομένων και αφήστε μας να πειραματιστούν με τα ερωτήματα. Έτσι, για παράδειγμα, ας υποθέσουμε ότι Εκτελώ ακριβώς αυτό. Επιλέξτε, η οποία είναι ένας από αυτούς λέξεις-κλειδιά που ανέφερα νωρίτερα, αστέρι, το οποίο αντιπροσωπεύει το σύνολο οι στήλες σε έναν πίνακα. Από ποιο τραπέζι; Λοιπόν, οι χρήστες. Και προειδοποίηση υπάρχει είναι αυτό Περίεργο σύμβαση σε SQL όπου μπορείτε πραγματικά να χρησιμοποιήσετε πίσω τσιμπούρια, τυπικά, δεν μονά εισαγωγικά και όχι διπλά εισαγωγικά όταν μιλάτε για πίνακες ονόματα, έτσι ώστε το πίσω απόσπασμα είναι το πράγμα για το πάνω αριστερή πλευρά του πληκτρολογίου σας πιο πιθανό. Επιτρέψτε μου λοιπόν να μην προχωρήσει τώρα και μόλις το αφήσουμε μόνο του και μετακινηθείτε προς τα κάτω και κάντε κλικ στο κουμπί Μετάβαση, και είμαστε στην πραγματικότητα πρόκειται να δούμε το ίδιο πράγμα. Έχουμε μόλις εκτελεστεί ένα ερώτημα SQL λέγοντας επιλέξτε τα πάντα αστέρων από τον πίνακα που ονομάζεται χρηστών, και ό, τι μπορείτε να πάρετε πίσω είναι αυτό. Τελικά, θα είμαστε σε θέση να κάνουμε το ίδιο πράγμα σε κώδικα, αλλά προς το παρόν το μόνο που ήθελα να δεν ήταν το δείτε στον browser μου. Λοιπόν ας κάνουμε κάτι λίγο διαφορετική. Επιτρέψτε μου να πάω πίσω στην καρτέλα SQL, και ας πούμε ότι αυτό; Zamyla έχει χάσει όλα της χρήματα, και ως εκ τούτου είναι ώρα για εμάς να την διαγράψει ως χρήστης. Της πλέον συνδεθείτε. Έτσι, Πάω να πω διαγράψετε from-- καλά, διατηρούν κεφαλαιοποίηση για τη συνοχή, να διαγράψετε από όπου οι χρήστες. Και έτσι, μπορούμε να έχουμε αυτά κατηγορήματα, ή αυτά προκριματικά, στο τέλος της δήλωσής μου πού και πώς θα μπορούσε να διαγράψω Zamyla; Με το όνομά της Zamyla, έτσι ώστε η στήλη, μία από τις στήλες πήρε το όνομά του, έτσι ώστε όπου name = "Zamyla". Και εδώ μπορώ να χρησιμοποιήσω διπλά εισαγωγικά ή μονά εισαγωγικά, μπορείτε να χρησιμοποιήσετε μόνο το πίσω τσιμπούρια όταν μιλάμε για τα ονόματα, για παράδειγμα, των πινάκων ή πεδίων. Και επιτρέψτε μου να κάντε κλικ στην επιλογή Go εδώ. Και τώρα, η ιστοσελίδα είναι είναι λίγο νευρικοί. Ή, θέλετε πραγματικά να εκτελέσει διαγραφή από τους χρήστες, όπου το όνομα ισούται Zamyla; Ναι. Έτσι τώρα, αν πάμε πίσω στο τραπέζι μου πατώντας χρήστες, παρατηρήσετε ότι Χμ. Έχω goofed. Και στην πραγματικότητα, εγώ το είδος του κλικ μακριά τόσο γρήγορα δεν έχετε δει ακόμα το κόκκινο μήνυμα λάθους, ίσως. Τι έκανα λάθος; ΚΟΙΝΟ: Εσείς δεν χρειάζεστε να αξιοποιήσει το όνομά της. David J. Malan: Ναι, κεφαλαιοποιούνται το όνομά της, αλλά της username-- πραγματικά μου έκανε ένα ζευγάρι λάθη, σωστά; Ένα, το όνομα της είναι zamyla, πεζά Ζ, και το όνομα της στήλης είναι το όνομα χρήστη, όχι το όνομα, οπότε ας κάνουμε αυτό και πάλι. Επιτρέψτε μου να προχωρήσει και διαγραφή από τους χρήστες, όπου ψευδώνυμο ισούται με παράθεση unquote "Zamyla". Εντάξει; Έτσι, αυτό φαίνεται λίγο καλύτερα, ας Θέλω να πάω μετακινηθείτε προς τα κάτω και κάντε κλικ στην επιλογή Μετάβαση. Είναι ακόμα πρόκειται να φωνάζεις εμένα για να είστε σίγουροι. Έχω κλικ στο κουμπί Ναι, και τώρα βλέπουμε, ειλικρινά αυτό που συνέβη, πραγματικά γρήγορη, λιγότερο από το ένα δεύτερο βεβαίως, αυτό είναι ακριβώς το ερώτημα που πήρε εκτελεστεί. Για να επιβεβαιώσετε, επιτρέψτε μου κλικ χρηστών και μάλιστα τώρα Zamyla έχει φύγει. Τώρα ας κάνουμε το αντίθετο. Ας υποθέσουμε ότι Gabe θέλει να εγγραφείτε για την ιστοσελίδα. Τι είναι το SQL ερώτημα, ποια είναι η εντολή θα μπορούσα να πληκτρολογήσετε Gabe να προσθέσω; Καλά είναι αρκετά απλή. Τοποθετήστε σε χρήστες, και τώρα παίρνει λίγο αινιγματικό. Πρέπει να καθορίσετε, στο διακομιστή, ποια πεδία που θέλετε να ορίσετε. Πραγματικά, δεν με νοιάζει τι Gabe αναγνωριστικό αριθμός είναι, έτσι Πάω να παρακάμψετε αυτό. Είμαι αντί πρόκειται να πω όνομα χρήστη, hash, και στη συνέχεια, οι αξίες που θέλω να θέσω υπάρχει πρόκειται να είναι Gabe. Και τότε κατακερματισμού του, δεν ξέρω. Έτσι, για τώρα, πάω να αφήστε ότι ως ένα μεγάλο να κάνει. Θα επανέλθουμε σε ότι στην ρυθμιστεί το πρόβλημα spec για το πώς μπορείτε πραγματικά να κάνουμε αυτό. Έτσι παρατηρούμε, και πάλι, η σύνταξη. Τοποθετήστε σε όνομα πίνακα, τότε ένα παρένθεση κατάλογος των πεδίων, οι στήλες που θέλετε να προσθέσετε τιμές σε, και στη συνέχεια, μόλις η ίδια ακριβώς παραγγελία αριστερά προς τα δεξιά από τις τιμές που θέλετε να προσθέσετε, και είναι ακριβώς τυλίγοντας επειδή το κείμενο είναι λίγο καιρό. Έτσι τώρα επιτρέψτε μου να κάντε κλικ στο Μετάβαση. Μια σειρά εισάγεται. Και τώρα, αν πάω πίσω στο χρήστες, αυτό που είναι ενδιαφέρον είναι ότι όχι μόνο είναι Gabe τώρα στο βάση δεδομένων, πράγμα που είναι προφανώς την ταυτότητά του; Καλά είναι επτά. Γιατί είναι επτά, όταν εγώ δεν το προσθέσετε; Έτσι, αυτό, επίσης, είναι ένα από τα χαρακτηριστικά που παίρνετε από τη βάση δεδομένων. Πολλοί ενσωματωμένη λειτουργικότητα. Αποδεικνύεται ότι όταν δημιούργησε αυτό τον πίνακα, Έχω προπαραμετροποιηθεί είναι αυτόματα ορίσετε ένα ID με τέτοιο τρόπο ότι αυξάνει. Έτσι, αν έχετε ποτέ έσπρωξε γύρω, και κοίταξε την Facebook ταυτότητα ό, τι σας αριθμός είναι, αυτές τις μέρες δεν είναι πραγματικά ένα πράγμα που πρέπει να κάνουμε, αλλά το Facebook ως ένα API, Διεπαφή προγραμματισμού εφαρμογών, σύμφωνα με την οποία μπορείτε να πάρετε πίσω ένα σωρό των δεδομένων σχετικά με τον εαυτό σας, για τους φίλους σας, και τις συνδέσεις σας. Και ό, τι χρησιμοποιείται για να είναι το είδος δροσερό, πίσω στην ημέρα, ήταν να κοιτάζω προς τα πάνω ό, τι σας Facebook αριθμό ταυτότητας ήταν. Του Mark Zuckerberg, για παράδειγμα, είναι τρεις αφού ήταν ο συντάκτης του site. Και καθώς η ιστορία πηγαίνει, δημιούργησε δύο δοκιμαστικούς λογαριασμούς, οι χρήστες ένα και δύο, την οποία ο ίδιος στη συνέχεια, διαγράφονται. Και έτσι, Zuck, όπως είναι το όνομα του στο Facebook, είναι αναγνωριστικό αριθμό τρία, και όλοι μας έχουμε τους αριθμούς πολύ μεγαλύτερο από τρία αυτές τις μέρες. Στην πραγματικότητα, σε κάποιο σημείο Facebook μετακινηθεί μακριά ακόμη και από τη χρήση ενός int, η οποία είναι μία τιμή 32-bit, με τη χρήση Το επόμενο βήμα, ουσιαστικά ένα πολύ καιρό έτσι ότι θα μπορούσαν να φιλοξενήσουν ακόμη περισσότερους χρήστες την εγγραφή. Έτσι, ένα διασκεδαστικό λίγο ιστορικό γεγονός. Έτσι, αυτό είναι μόνο η βασική σύνταξη με την οποία θα μπορούσε να εκτελέσει ένα ζευγάρι των ερωτήματα, αλλά μπορούμε πραγματικά κάνει ένα μάτσο περισσότερα πράγματα με τον SQL. Και θα δείτε, εν τέλει, στο πρόβλημα που επτά ότι θα πρέπει να κάνει μια τον αριθμό των αποφάσεων σχεδιασμού, μεταξύ των οποίων πρόκειται να είναι Τι τύπους δεδομένων να χρησιμοποιήσει. Έτσι ακριβώς όπως και στη C, υπάρχουν δεδομένα τύποι σε μια βάση δεδομένων, όπως MySQL, και τα είδη δεδομένων που έχετε να επιλέξετε από την ενσωμάτωση των τομέων αυτών εδώ. Char, varchar, Int, μεγάλο int, δεκαδικό και το χρόνο ημερομηνίας, και πολλά άλλα. Οπότε ας κάνουμε πραγματικότητα αυτό. Ας προσποιηθούμε ότι δεν είχαμε χέρι σας τραπέζι του χρήστη και επιτρέψτε μου να πάει μπροστά και να δημιουργήσουν, για τον εαυτό μου, στις διαλέξεις database-- στην πραγματικότητα, επιτρέψτε μου να πάει μπροστά και να διαγράψετε Ο πίνακας που έχω στο ήδη εδώ έτσι ώστε να μπορούμε πραγματικά να δημιουργήσει αυτό. Ωχ. Πάω να ρίξει αυτό τραπέζι, και τώρα είμαι πρόκειται να πάει πάλι στο διάλεξη βάση δεδομένων εδώ, Πάω να δημιουργήσετε έναν πίνακα κάλεσε τους χρήστες και ας ακριβώς κάνει τρεις στήλες αρχικά και κάντε κλικ στο Μετάβαση. Τώρα, ως επί το πλείστον, πάλι, αυτό είναι ακριβώς χρησιμοποιώντας αυτό το γραφικό εργαλείο που ονομάζεται phpMyAdmin, και τι κάνουμε τώρα είναι η δημιουργία ενός πίνακα. Έτσι, αυτό είναι σαν να πηγαίνει αρχείου, Νέα, και δημιουργώντας ένα νέο αρχείο Excel. Γι 'αυτό μου ζητά λίγα ερωτήματα, από τα αριστερά προς τα δεξιά, ποιο είναι το όνομα της πρώτης στήλης, και στη συνέχεια το όνομα της δεύτερης στήλης, και το όνομα του το τρίτο. Ας αναδημιουργήσει αυτό. ID, και στη συνέχεια το όνομα ήταν ένα, και στη συνέχεια χασίς ήταν άλλο. Λοιπόν, τι θα πρέπει ο τύπος δεδομένων είναι τώρα για έναν τομέα όπως η ταυτότητα; Εδώ είναι ολόκληρη η λίστα των τύπων δεδομένων στη διάθεσή σας σε μια βάση δεδομένων, και για τώρα ας πάμε με int. Τιμή 32-bit, δεν το κάνω σκεφτείτε ρεαλιστικά είμαι πρόκειται να έχει περισσότερα από 4 δισεκατομμύρια χρήστες στο λογαριασμό μου, στην υπηρεσία μου, έτσι Πάω να συνεχίσουμε στην επόμενη ερώτηση. Είμαι δεν πρόκειται να καθορίσετε ένα μήκος ή αξίες, δεν είναι εφαρμοστέα εδώ για έναν int, per se. Και τώρα μπορώ να καθορίσετε, προφανώς, μια προεπιλογή αξία, η οποία δεν πρόκειται να καθορίσετε. Μια παραβολή, δεν ξέρω τι είναι αυτό. Ένα χαρακτηριστικό. Τώρα μπορούμε πραγματικά να κάνουμε έχουν μια σχεδιαστική απόφαση. Έτσι, υπάρχει μια μερικά πεδία εδώ, δεν είναι όλα των οποίων εφαρμόζονται, αλλά ανυπόγραφο ακριβώς σημαίνει αυτό; Αυτό το int πρέπει να είναι; Απλά μη-αρνητική. Γι 'αυτό πρέπει να είναι 0 για επάνω. Όχι, εγώ δεν πρόκειται να ελέγξει γιατί Θέλω κάθε χρήστη να έχει ένα αναγνωριστικό, δεν μπορεί να είναι null. Και τότε, θα έχουμε σε κάποιο περισσότερο ενδιαφέρουσες σχεδιαστικές αποφάσεις όπως αυτή. Θα επανέλθουμε σε αυτό σε μια στιγμή, αλλά ό, τι άλλο χαρακτηριστικό της βάσης δεδομένων είναι, είναι ότι μπορείτε να πείτε ο διακομιστής της βάσης δεδομένων προχωρήσει και να βελτιστοποιήσουν τον εαυτό σας, σας RAM και χώρο στο σκληρό δίσκο σας, έτσι ώστε να επιλέγει, και ένθετα, και διαγράφει, και οι ενημερώσεις είναι πραγματικά γρήγορα. Σε αντίθεση με αυτό pset5. Αν θέλατε να αναζητήσετε κάτι στον πίνακα κατακερματισμού σας, η οποία σκέφτεστε σαν μια βάση δεδομένων, ο οποίος είχε να κάνει όλα τα εργάζονται για την κατασκευή πίνακα κατακερματισμού σας γρήγορα. Είναι σαν, προφανώς, σας. Σωστά; Θα έπρεπε να βάλει σε όλη την ώρα πρόστιμο συντονίζοντας τα πράγματα, να πάρει μια συνάρτηση κατακερματισμού δεξιά, αναφέρονται για το πώς πολλοί κάδοι να έχουν. Αλλά τι είναι ωραίο, και πάλι, για μια βάση δεδομένων είναι απλά punt όλα Αυτό σε άλλους ανθρώπους οι οποίοι έχουν σκεφτεί αυτό μέσα για σας, και ποια Πάω να πω εδώ κάτω δείκτη είναι ότι το πεδίο ID μου πρόκειται να είναι ο κύριος τρόπος για να τον εντοπισμό των χρηστών σε αυτή τη βάση δεδομένων. Είμαι δεν πρόκειται να σκεφτείτε της Zamyla ως Zamyla, Πάω να σκεφτώ της ως τον αριθμό 6. Γιατί είναι, ίσως, η καλύτερη διαισθητικά να σκεφτείτε και το μοντέλο καθένα από τα επιμέρους σειρές σας χρησιμοποιώντας έναν αριθμό αντί για κάτι σαν μια σειρά, όπως το Zamyla ή Gabe ή περισσότερο κορδόνι ακόμα; Ναι; ΚΟΙΝΟ: Ένα αναγνωριστικό είναι μοναδικό; David J. Malan: Πείτε ξανά; ΚΟΙΝΟ: Ένα αναγνωριστικό είναι μοναδικό; David J. Malan: Ένα αναγνωριστικό είναι μοναδική, αλλά suppose-- ανάλογα με την περίπτωση εν γένει με ονόματα χρηστών, ας υποθέσουμε Είπα επίσης ότι μπορεί να υπάρχει μόνο μία Zamyla στον κόσμο, και μόνο ένας Gabe. Θα μπορούσα να επιβάλει τη μοναδικότητα Περιορισμούς στις χορδές, πάρα πολύ, αν ήθελα. Έτσι, δεν είναι μια κακή σκέψη. ΚΟΙΝΟ: Πιο ασφαλείς. David J. Malan: Πιο ασφαλείς, γιατί; ΚΟΙΝΟ: Δεν μπορείτε να πείτε που Είναι η οποία, όπως και στην χρήστη. David J. Malan: Εντάξει, σας δεν μπορεί να πει ποια χρήστη η οποία είναι έτσι υπάρχει μια πτυχή της ιδιωτικής ζωής σε αυτό, ειδικά αν τα αναγνωριστικά ίσως εμφανίζονται στις διευθύνσεις URL. Έτσι είστε σίγουροι, ότι θα μπορούσε το είδος της εργασίας, πάρα πολύ. Άλλες σκέψεις; Ναι; ΚΟΙΝΟ: Είναι πιο εύκολο να εκτελούν λειτουργίες σε έναν int. David J. Malan: Αυτή είναι η πραγματική kicker. Είναι απλά πιο αποτελεσματική, ή πιο εύκολο για τον υπολογιστή, να εκτελούν λειτουργίες σε έναν ακέραιο. Σωστά; Ένας int είναι εγγυημένη για να είναι 32-bit, ενώ Zamyla είναι μακρά λίγα χαρακτήρες, Gabriel είναι μακρά λίγες περισσότερους χαρακτήρες, Davenport είναι πραγματικά μεγάλο, και γι 'αυτό είναι δεν είναι ιδιαίτερα αποτελεσματικό να χρησιμοποιήσει χορδές για να συγκρίνετε τιμές και να εξετάσουμε για τα πεδία, και ενημέρωση πεδίων, αν μπορείτε να πάρετε μακριά με ένα μόνο ακέραιο. Μόλις 32 bits. Έτσι, τα ονόματα χρήστη, πάρα πολύ, με αυτό τον τρόπο, Δεν χρειάζεται να είναι μοναδική, αν και ίσως θα έπρεπε να είναι, ακόμη και με τον τρόπο αυτό πάρα πολύ ένας χρήστης θα μπορούσε να επιτραπεί σε αλλάξετε το username του ή της. Ας τους αφήσουμε αυτό ως το πρωταρχικό μέσο για την αναγνώριση του χρήστη. Αυτό λέει την βάση δεδομένων να προχωρήσει και να βελτιστοποιήσει τον εαυτό σας έτσι ότι η UPS ματιά στο ταυτότητας είναι εξαιρετικά γρήγορη. AI, φρικτά ονομάζεται, ακριβώς σημαίνει αυτόματη προσαύξηση, και αυτό είναι ο έλεγχος box θα πρέπει να ελέγξετε να διευκρινίσουν ότι το πεδίο ID για να να ενημερώνεται αυτόματα για μένα, και, στη συνέχεια, Πάω να μετακινηθείτε προς τα δεξιά εδώ και ειλικρινά δεν είμαι πραγματικά ενδιαφέρονται σε οποιαδήποτε περισσότερα από αυτά τα πεδία. Σίγουρα όχι σήμερα. Έτσι, Πάω να επιστρέψω εδώ, στην πρώτη στήλη, όπου Πρέπει να καθορίσετε το όνομα χρήστη και κατακερματισμού, και ας τουλάχιστον εστίαση στην ο δεύτερη για τώρα. Int δεν είναι πιθανώς η σωστή κλήση, έτσι τι πιο λογικό ίσως; ΚΟΙΝΟ: Κείμενο. David J. Malan: Πείτε ξανά; ΚΟΙΝΟ: Κείμενο. David J. Malan: Κείμενο; Εντάξει, άκουσα κείμενο. Τι άλλο; Είμαστε είδος έχει ένα σωρό επιλογές που είναι υπό μορφή κειμένου στη φύση. Έτσι, όταν, και γιατί, κάνουμε μπορείτε να χρησιμοποιήσετε κάποια από αυτά; Καλά char, σε αντίθεση με ό, τι ίσως νομίζω, δεν είναι ένα ενιαίο χαρακτήρα. Είναι ένα συγκεκριμένο αριθμό χαρακτήρων. Έτσι, αν γνωρίζουμε ότι όλα τα ονόματα χρήστη πρέπει να είναι σαν οκτώ χαρακτήρες, όπως χρησιμοποιείται για να είναι κοινή σε παλαιότερες συστήματα πληροφορικής, θα μπορούσα να πω char και, στη συνέχεια, θα μπορούσα να πω 8 εδώ. Ότι όταν η τρίτη στήλη γίνεται εφαρμόζονται κατά τη δημιουργία ενός πίνακα. Αλλά αυτό είναι το είδος ενοχλητικό γιατί ορισμένοι άνθρωποι μπορεί να θέλουν να έχουν μια μακρύτερη όνομα χρήστη από οκτώ χαρακτήρες, μερικοί άνθρωποι μπορεί να θέλουν να έχουν μικρότερη όνομα χρήστη, οπότε γιατί να δεσμεύσει τον εαυτό μου σε ένα συγκεκριμένο αριθμό; Γιατί να μην έχουν μια μεταβλητή αριθμό των χαρακτήρων και απλά λένε ότι το μέγιστο μήκος του ονόματος είναι, δεν ξέρω, όπως και 64 χαρακτήρες. Δεν μπορώ να σκεφτώ οποιαδήποτε φίλους που έχουν ονόματα μεγαλύτερα από 64 χαρακτήρες, ακόμη και αν αυτό είναι πάρα πολύ μικρή θα μπορούσατε σίγουρα χτύπημα μέχρι αυθαίρετα. Έτσι varchar είναι μια μεταβλητή αριθμό των χαρακτήρων. Το κείμενο δεν είναι μια κακή ένστικτο, και ειλικρινά ότι το είδος της κάνει ό, τι λέει, αλλά ένα πεδίο κειμένου μπορεί να είναι σαν 65.000 bytes τουλάχιστον. Αυτό είναι μάλλον υπερβολή για ένα τομέα, και στην πραγματικότητα, yup, 65.535. Αυτό είναι μάλλον υπερβολή για ένα όνομα, έτσι θα κολλήσει, κατά κανόνα, με varchars για έγγραφες τομέα και κατακερματισμού, πάρα πολύ. Hash, αποδεικνύεται, θα μπορούσαμε να κάνουμε μια varchar καθώς ή κάτι τέτοιο, αλλά εμείς δεν θα επικεντρωθεί σήμερα για το κρυπτογραφία εκεί και οι αριθμοί ότι θα μπορούσαμε πραγματικά θέλετε να χρησιμοποιήσετε για το μήκος της. Αλλά επιτρέψτε μου να μετακινηθείτε προς τα κάτω προς τα δεξιά. Μπορείτε να έχετε μόνο μία πρωτεύον ευρετήριο για έναν πίνακα, αλλά δεν θέλω να εφαρμόσετε κάποια από αυτές, τώρα, με το όνομα χρήστη, θα λέγατε; Τι θα πρέπει το όνομα χρήστη πρέπει να βασίζεται σε μια αόριστη κατανόηση αυτών των τεσσάρων επιλογών; Απλά με το όνομά τους; ΚΟΙΝΟ: Μοναδικό. David J. Malan: τόσο μοναδικό, σωστά; Έτσι αποδεικνύεται ότι όχι μόνο θα μπορούσε να σας πω μια βάση δεδομένων, εκ των προτέρων, Αυτό είναι ο πρωταρχικός τρόπος προσδιορισμό πεδίων. Μπορείτε, επίσης, να πω ότι αυτό είναι πρόκειται να είναι ένα μοναδικό πεδίο. Δεν πρόκειται να είναι το πράγμα που έχω επικαλεστεί, αλλά θα ήθελα τη βάση δεδομένων για να έχουν κατ 'ουσίαν, ότι αν η κατάσταση, έτσι ότι και αν έχω δοκιμάσει ποτέ να εγγραφείτε δύο χρήστες με το ίδιο όνομα, η βάση δεδομένων κατ 'έξω Δεν πρόκειται να με αφήσει. Θα ήθελα να έχουν κάποια επιπλέον κώδικα σε PHP που εμποδίζει τόσο πολύ, αλλά η βάση δεδομένων, επίσης, μπορεί να εξασφαλίσει ότι ποτέ δεν πρόκειται να συμβεί. Τώρα, ως ένα μέρος, ιδίως σε ό, η γνώμη σας για την τελική έργων, να έχετε κατά νου το δείκτη και πλήρη το κείμενο είναι πραγματικά αρκετά χρήσιμα. Εάν έχετε μια μεγαλύτερη βάση δεδομένων, όχι με δεκάδες, αλλά εκατοντάδες ή χιλιάδες ή ακόμα και εκατομμύρια των πεδίων, μπορείτε να επίσης να ενημερώσετε τη βάση δεδομένων εκ των προτέρων Αυτό είναι ένα πεδίο Πάω να ψάχνουν για μια παρτίδα. Ίσως το όνομα του, ίσως είναι βιολογικά, αν είστε κάνοντας ένα Facebook μοιάζει με ιστοσελίδα που έχει παραγράφους που ο χρήστης επέτρεψε για να σώσει, και αν θέλετε να πει τη βάση δεδομένων εκ των προτέρων Πάω να ψάχνουν σε αυτό το πεδίο πολλά, αλλά δεν είναι απαραίτητα το μοναδικό, μπορείτε να καθορίσετε τη δημιουργία μου ένα ευρετήριο. Ή, μπορείτε να πείτε, επίσης, να μου επιτρέψετε να κάνω το είδος των αυθαίρετων αναζητήσεις όπως Εντολή ή Control F, όπως σας θα μπορούσε σε έναν επεξεργαστή κειμένου, ώστε να μπορείτε να δείτε αυθαίρετη χορδές ή substrings σε αυτόν τον τομέα. Με άλλα λόγια, παίρνουμε στο σημείο στο εξάμηνο όπου δεν έχετε να ανησυχείτε για πώς να εφαρμόσουν αποτελεσματικά τα πράγματα. Απλά πρέπει να γνωρίζουν σχετικά με το τι σχεδιαστικές αποφάσεις για να κάνουν έτσι ώστε να είστε χρησιμοποιώντας τα κατάλληλα εργαλεία για την το εμπόριο, προκειμένου να τονωθούν τα χαρακτηριστικά ότι οι άλλοι άνθρωποι έχουν χτίσει για εσάς. Έτσι, για να ανακεφαλαιώσουμε, πρωτοβάθμια πρέπει μόνο έχουν ένα, μπορείτε να έχετε μόνο μία, και αυτό είναι το πράγμα είστε δέσμευση για χρησιμοποιώντας για τον εντοπισμό πεδίων μοναδικά. Μοναδική είναι ακριβώς όμοια με το πνεύμα, αλλά ίσως μόνο περιστασιακά να χρησιμοποιήσει, αλλά θέλετε η βάση δεδομένων για να επιβάλει. Δείκτης σημαίνει απλά προληπτικά επιταχυνθούν τα πράγματα στο μέλλον έτσι ώστε να μπορώ να ψάξετε για πράγματα σε αυτόν τον τομέα. Και στη συνέχεια πλήρες κείμενο είναι γενικά για παραγράφους, ή δοκίμια, ή μεγάλα σώματα του κειμένου, όπου μπορείτε Ίσως επίσης να θέλετε να έχετε wild cards όπως το ισοδύναμο των αστέρων. Δεξιά. Έτσι, αυτό ήταν το είδος του πολλά σε όλα με τη μία. Ας δούμε αν δεν μπορούμε να αποστάξει ένα ζευγάρι από αυτά τα χαρακτηριστικά και στη συνέχεια να οικοδομήσουμε κάτι αρκετά απλό, αλλά ισχυρό. Έτσι, μεταξύ των άλλων σχεδιαστικές αποφάσεις είστε τελικά, πρόκειται να έχει το μήκος οι γραμμές των κινητήρων αποθήκευσης. Και επιτρέψτε μου να κάνω αναφορά σε αυτό εν αναμονή των τελικών σχεδίων, και της πρόβλεψης των ας say-- όχι ας το κάνουμε αυτό. Ας χτίσουμε αυτό το μικρό πρώτη εφαρμογή. Πάω να μπω σε τερματικό μου παράθυρο, και εδώ δεν είναι μόνο counter.php, που είμαστε τώρα θα να απαλλαγούμε από όσο πλέον σχετικός, αλλά έχουμε ένα σωρό των καταλόγων και αυτό πρόκειται να είναι πολύ παρόμοια με το πνεύμα σε ό, τι θα δείτε στο πρόβλημα που επτά. Έτσι έχουμε τρεις καταλόγους περιλαμβάνει δημόσιους και πρότυπα, τα οποία Είναι ακριβώς εκεί που είχαμε μείνει στο Τη Δευτέρα με ολόκληρο το MVC μας παράδειγμα. Και για να ανακεφαλαιώσουμε, σε δημόσιους πρόκειται να πάει κάθε αρχείο που θέλω χρήστες πραγματικότητα v να είναι σε θέση να επισκεφθείτε το browser τους μέσω του URL. Πρότυπο. Τι βάζουμε σε πρότυπα; Τι είδους πράγματα; Εκεί δεν ήταν πολύ, αλλά ένα ζευγάρι αρχεία τουλάχιστον τη Δευτέρα. Ναι. ΚΟΙΝΟ: Κεφαλίδα και υποσέλιδο; David J. Malan: Κεφαλίδα και υποσέλιδο. Έτσι έχουμε κάτι παρόμοιο και σήμερα, πάρα πολύ. Έχουμε μερικά περισσότερα αρχεία, αλλά Υποσέλιδο βλέπω, Header βλέπω, και στη συνέχεια ένα σωρό άλλα αρχεία. Έτσι, αυτό είναι το ισοδύναμο από την άποψη V MVC, το οποίο, και πάλι, θα είναι λίγο πιο σαφές στο πρόβλημα που επτά, αλλά αυτό είναι μόνο ένα φάκελο είμαι βάζοντας πολλά αισθητικής μου. Πολλοί HTML μου, πολλές μορφές μου. Εν τω μεταξύ, περιλαμβάνει, είναι μια άλλη κατάλογο που έχει αυτά τα τρία αρχεία και ας ρίξουμε μια γρήγορη ματιά σε αυτά. Πάω να πάει μπροστά και να ανοίξει το config.php. Όπως αποδεικνύεται, πολύ όπως νωρίτερα στον όρο, που περιλαμβάνονται απότομη CS50 dot h με pset7. Στο σημερινό παράδειγμα, θα πάμε για να κάνει το ισοδύναμο του ότι με έναν απαιτούν δήλωση ότι η αποτελεσματική περιλαμβάνει αυτές τις λίγες γραμμές. Έτσι, για να είναι σαφής, αυτό είναι ένα αρχείο που ονομάζεται config.php. Και παρατηρήσετε τι κάνει. Είναι προφανώς να κάνει κάτι αινιγματικά, μετατρέποντας σε μηνύματα λάθους έτσι ώστε να μπορείτε να τα δείτε στο πρόγραμμα περιήγησης. Είναι, λοιπόν, προφανώς που απαιτεί δύο άλλα αρχεία έτσι αυτό είναι σαν #include στην C, και, στη συνέχεια, αυτό που είδε, και έχουμε επικαλέστηκε, αυτό μετατρέπεται σε ότι το καλάθι αγορών όπως η λειτουργικότητα. Αυτό σημαίνει ότι ένα cookie θα να σταλεί πίσω και εμπρός. Γιατί λοιπόν είναι αυτό το ενδιαφέρον; Λοιπόν, αν πάμε πίσω σε αυτό καταλόγου και να ανοίξουν, για παράδειγμα, constance.php. Παρατηρήστε ότι η PHP κάνει σταθερές υποστήριξης, δεν είναι αρκετά όπως #define στη Γ Αντ 'αυτού, μπορείτε κυριολεκτικά λένε ορίζεται και ειδοποίηση ότι έχω αποθηκευμένες εκ των προτέρων τέσσερις σταθερές σε αυτό το αρχείο. Μία για τη σημερινή βάση δεδομένων, για τον κωδικό μου, για όνομα μου, και για το όνομα του διακομιστή. Έτσι, αυτά είναι πραγματικά πρόκειται να είναι αρκετά παρόμοιο με το πρόβλημα που επτά. Και τέλος, και αυτό είναι όπου είμαι πρόκειται να πάρετε κάποια ωραία λειτουργικότητα από το προσωπικό, σε functions.php είναι ένα μάτσο κώδικα που έχω γράψει, και έκλεψα μερικά από αυτό από το πρόβλημα που επτά για σήμερα, ότι κάνει ένα σωρό πράγματα και ας δούμε ένα από αυτά ειδικότερα. Η λειτουργία αυτή εδώ, ερώτημα, πρόκειται να είναι η λειτουργία PHP καλούμε προκειμένου να εκτελέσει SQL. Πριν από μια στιγμή ήμασταν χρησιμοποιώντας phpMyAdmin, αλλά αυτό είναι μόνο για το είδος των μαθησιακούς σκοπούς και διαγνωστικούς σκοπούς και ξεχνώντας σύνολο της βάσης δεδομένων σας. Όταν μπορείτε πραγματικά να χρησιμοποιήσετε σας βάση δεδομένων, μπορείτε, το ανθρώπινο, είναι προφανές ότι δεν πρόκειται να το τράβηγμα μέχρι ένα web σελίδα κάθε φορά που κάποιος καταγράφει. Θα πάμε για να γράφουν κώδικα ο οποίος ένθετα και διαγράφει χρήστες σε πρώτη ζήτηση, και θα πάμε να το κάνουμε αυτό μέσω της λειτουργίας ερωτήματος. Αν τώρα μετακινηθείτε προς τα κάτω, δεν υπάρχει πρόκειται να είναι μερικά ακόμη χαρακτηριστικά. Επαναπροώθηση πρόκειται να είναι μια λειτουργία που γράψαμε για σας που σας επιτρέπει να στείλετε το χρήστη σε μια άλλη διεύθυνση URL, και να καταστήσουν είναι μια λειτουργία, αρκετά όπως είδαμε τη Δευτέρα, ότι καθιστά στην πραγματικότητα ένα πρότυπο, αλλά περισσότερο σε αυτούς τους τομείς η μορφή της δικής πόδια pset7 μέσα. Για τώρα, ας πάμε μπροστά και να το κάνουμε αυτό. Επιτρέψτε μου να πάω σε διαλέξεις τραπέζι μου και δείτε ότι δεν υπάρχει επί του παρόντος τίποτα εδώ ακριβώς ακόμα, και επιτρέψτε μου επίσης να πάτε σε δημόσιο κατάλογο μου, όπου υπάρχει μόνο ένα αρχείο, το index.php. Αυτό το αρχείο φαίνεται να είναι εξαιρετικά απλή αυτή τη στιγμή, φαίνεται ακριβώς όπως αυτό. Μοιάζει πολύ με το πώς εμείς σταματήσατε τη Δευτέρα. Είμαι απαιτούν αυτό το αρχείο, config.php, η οποία είναι ένα περιλαμβάνει τον κατάλογο, η οποία είναι σε dot dot, οι γονείς μου, και, στη συνέχεια, είναι ακριβώς καθιστώντας αυτό το αρχείο. Έτσι τι είναι αυτό το αρχείο; Ας ανοίξει σε πρότυπά μου form.php, και θα δούμε αυτό. Σούπερ απλό, προφανώς αυτή η μορφή είναι πρόκειται να υποβάλει από $ _GET ή $ _POST. Γρήγορη έλεγχος ασφαλείας. Κυριολεκτικά αναζήτηση οπτικά το αρχείο. Μέθοδος ισούται με το ταχυδρομείο. Έτσι, δεν πρόκειται να χρησιμοποιήσετε τη διεύθυνση URL, όπως Η Google κάνει, πρόκειται να ταξινομήσετε απόκρυψη η πληροφορία πίσω οι σκηνές και είναι πρόκειται να υποβάλει στο αρχείο που ονομάζεται register.php, και αυτό είναι το αρχείο δεν έχουμε ακόμη γραπτή αλλά τι αυτό πρόκειται να μοιάσει είναι αυτό. Αν πάω σε μια ξεχωριστή σελίδα Αυτό είναι τι localhost / index.php μοιάζει. Και πάλι, το διακομιστή απλά υποθέτοντας index.php. Enter. Έτσι, αυτό είναι όπου είμαστε σε, και αυτό που θέλω να κάνω είναι να είναι σε θέση να πληκτρολογήσετε τα πράγματα σαν τον Δαβίδ, και στη συνέχεια, τον αριθμό του τηλεφώνου μου, που θα πει 617-555-1212 για τώρα, εγγραφείτε και τώρα register.php δεν βρέθηκε. Γι 'αυτό πρέπει να εφαρμόσουν αυτό. Ας γρήγορα μαστίγιο κάτι σαν αυτό επάνω. Επιτρέψτε μου να πάω σε δημόσιο κατάλογο μου και να κάνει το gedit της register.php, και τώρα είμαι πρόκειται να πάει μπροστά και να ξεκινήσετε τη λειτουργία της PHP, όπως κάναμε τη Δευτέρα, και ετικέτα κλείσιμο της PHP, και ας κάνουμε μια-δυο πράγματα. Έτσι, ένα, το ξέρω, από έχει γράψει αυτή τη μορφή, ότι θέλω να ελέγξει για την επόμενη. Αν είναι άδειο, ανεξάρτητα από το χρήστη πληκτρολογήσει μέσα στο πεδίο ονόματος, στη συνέχεια, Πάω να πω κάτι σαν συγγνώμη λείπει το όνομα του. Συγγνώμη, εν τω μεταξύ, είναι δεν είναι ενσωματωμένη στην PHP πράγμα, Είναι μια λειτουργία που γράψαμε σε functions.php για pset7 έτσι ώστε να έχετε πρόσβαση σε αυτό. Αλλιώς, αν το άλλο πεδίο είναι κενή, αριθμός, τότε είμαι πρόκειται να ζητήσω συγγνώμη από το χρήστη και να πω τον αριθμό που λείπει. Αποθηκεύστε αυτό το αρχείο. Τώρα, ας πάμε πίσω στον browser μου, πάει πίσω στο forum προσπαθήστε ξανά. Εγγραφείτε. ΟΚ. Τίποτα δεν συνέβη, πράγμα που είναι καλό. Δεν είχα πάρει ένα μήνυμα σφάλματος. Αλλά αν αντί, ας reload αυτό σελίδα, και δεν παρέχει τίποτα. Γαμώτο. Πιστεύετε ότι. Εγγραφείτε. Τι έκανα λάθος; Εάν κενό, το όνομα $ _POST. Πείτε ξανά; Ω, βέβαια. Ξέχασα το πιο σημαντικό μέρος, το οποίο Είναι απαιτούν ("../ includes / config.php."). Χρειάζομαι να έχω πρόσβαση στην συγγνώμη λειτουργία, η οποία Γι 'αυτό τίποτα δεν συνέβαινε. Η λειτουργία αυτή δεν υπάρχει στην πραγματικότητα. Οπότε ας προσπαθήσουμε ξανά. Ας επαναλάβετε τη φόρτωση της σελίδας, κάντε κλικ στο Εγγραφή. ΟΚ. Εκεί είναι. Έτσι, η έξοδος είμαστε βλέπουμε εδώ είναι το αποτέλεσμα του καλώντας μια συγνώμη λειτουργία, εξαιρετικά απλή, και εκτυπώνει ακριβώς έξω ανεξαρτήτως Σας το δίνω ως επιχείρημα. Εντάξει, ας συνεργαστούν. Ας δώσετε το όνομά μου όπως ο David, εγγραφείτε, αγνοούμενα ΟΚ ας προβλέπουν ότι, πάρα πολύ. 617-555-1212. Εγγραφείτε. ΟΚ. Έτσι, όλα είναι καλά τώρα, απλά τίποτα ενδιαφέρον συμβαίνει. Έτσι τώρα ας κάνουμε κάτι περισσότερο ενδιαφέρουσα συμβεί σαν αυτό. Επιτρέψτε μου να πάω στο phpMyAdmin, και ας πραγματικά να δημιουργήσετε έναν πίνακα που ονομάζεται χρηστών, Πάω να του δώσει τρεις στήλες, και εγώ θα γρήγορα τη δημιουργία ταυτότητας, και, στη συνέχεια, όνομα, και στη συνέχεια τον αριθμό, και το πεδίο ID είμαι πρόκειται να φύγει ως int. Το πεδίο όνομα Πάω να φύγει ως varchar, και εμείς θα πούμε 64, κάπως αυθαίρετα. Ο αριθμός Πάω να κάνει, ξέρετε τι; Εμείς πάμε σε υποστηρίζουν τους αριθμούς των ΗΠΑ εδώ, έτσι Πάω να κάνω κάτι όπως το κάρβουνο και στη συνέχεια 10 χαρακτήρες max για τον κωδικό περιοχής και, στη συνέχεια, επτά ψηφία. Και στη συνέχεια, εδώ, θα πάω να καθορίστε την αυτόματη αύξηση αυτό το πεδίο, κάνουν αυτό ένα πρωτεύον κλειδί, και Πάω να πάει μπροστά και να μην ελέγξετε οποιοδήποτε από αυτά τα άλλα κουτιά. Έτσι, όταν επιτέλους κλικ στο κουμπί Αποθήκευση, και πάω πίσω στους χρήστες τραπέζι μου, Αυτό είναι ό, τι μοιάζει, αν μου τώρα κάντε κλικ σε μια δομή Νέα καρτέλα. Γι αυτό, για να είναι σαφής, είναι ακριβώς ο τρόπος phpMyAdmin του του λέγοντας πίνακα της βάσης δεδομένων σας έχει μια ταυτότητα, ένα όνομα και έναν αριθμό με τις συγκεκριμένες διαμορφώσεις και θα αγνοήσει το υπόλοιπο των πεδίων εκεί για τώρα. Έτσι, τώρα τι θέλω να κάνω; Έτσι αν πάω τώρα σε μου πηγαίο κώδικα, αν όλα είναι καλά Θέλω να εκτελέσει το ακόλουθο ερώτημα. Τοποθετήστε σε, και μπορώ μόνο λένε οι χρήστες δεν κάνουν απολύτως Πρέπει εκείνοι πίσω τσιμπούρια αν είναι δεν είναι μια επικίνδυνη λέξη, όπως οι χρήστες. Πάω να πω το όνομα, αριθμό, και στη συνέχεια, εδώ είμαι δεν πρόκειται να σκληρό κωδικό ο ψηφίο των τιμών ακόμα. Πάω να βάλει δύο ερωτηματικά. Και αυτό είναι μια σύμβαση σε πολλές γλώσσες σύμφωνα με την οποία αν θέλετε να έχετε ένα σύμβολο κράτησης θέσης για ένα string θα πάμε να χρησιμοποιήσετε το ερώτημα σήματα, για λόγους που θα έρχονται πίσω για να κουβεντιάσει για ασφάλειας, και εδώ Πάω να περάσει σε εκείνους δύο πεδία μετά το όνομα, και στη συνέχεια, μετά τον αριθμό, και τώρα να αποθηκεύσετε το αρχείο. Και τώρα πάω να πηγαίνετε εδώ κάτω είναι ένα σούπερ απλά να πω rendersuccess.php, η οποία πρόκειται να είναι ένα άλλο πρότυπο. Πάω να δημιουργήσει πολύ γρήγορα. Geditsuccess.php και είμαι απλώς πρόκειται για να πω την επιτυχία Η1 σε αυτό το αρχείο. Εντάξει. Έτσι τώρα, ας πάμε πίσω στο πρόγραμμα περιήγησης, όπου επισκέφθηκα πριν. Ας πάμε μπροστά και να επιβεβαιώσω έγραψα στο Δαβίδ, έγραψα σε έναν αριθμό τηλεφώνου, εγγραφείτε. Γαμώτο. Τι έκανα λάθος; Έτσι βλέπω ένα λάθος εδώ, έχουν ένα σφάλμα στη σύνταξη SQL σας. Επιτρέψτε μου να πηδήσει πίσω στο gedit, ας Θέλω να πάω πίσω για να register.php, και τι δεν παραλείπω ότι Ήταν σημαντικό για τελευταία φορά; Χρειάζομαι αυτό. Θέλετε να γνωρίζετε ότι εκτός από από έχουν παρατηρήσει πριν, αλλά χρειάζομαι αυτό. Έτσι τώρα ας πάμε πίσω, και αυτό ήταν χρήσιμο να δούμε στο πρόγραμμα περιήγησης και γι 'αυτό στο αρχείο config.php θα φτύσει λάθη. Ας πάμε μπροστά και να φορτώσετε εκ νέου, κάντε κλικ στην επιλογή Συνέχεια, επιτυχία. Έτσι, τώρα επιτρέψτε μου να πάω πάνω να μου βάση δεδομένων εδώ και κάντε κλικ σε χρήστες, και να περιηγηθείτε, και παρατηρήσετε εγώ τώρα έχουν Δαβίδ στη βάση δεδομένων μου εδώ. Τώρα τεχνικά αυτή η ιστοσελίδα είναι δεν είναι ακόμα στο δημόσιο διαδίκτυο, έτσι δεν μπορώ να έχω άλλο οι άνθρωποι στην τοποθέτηση εδώ, αλλά αν εγώ τώρα ήθελε να, για παράδειγμα, στείλτε μου ένα μήνυμα κειμένου. Ας πάει έξω σε ένα άκρο εδώ και να δούμε αν αυτό λειτουργεί πραγματικά. Πάω να πάει μπροστά και να διαγράψετε αυτή την γραμμή και θα θολώσουν αυτό στο βίντεο αργότερα έτσι δεν έχουμε το ολόκληρο το Internet γραπτών μηνυμάτων μου, και τώρα θα πάμε μέχρι το browser και θα πάμε πάνω για να διαλέξεις και εμείς θα πληκτρολογήσετε διαφορετικά αριθμό εδώ, εγγραφείτε, επιτυχία. Μέχρι τώρα, ο δικός μου αριθμός είναι πιθανώς σε η βάση δεδομένων, και τώρα το διασκεδαστικό μέρος. Ας πραγματικά τη χρήση της PHP για να κάνουμε κάτι προγραμματισμού, είτε από την εντολή γραμμή ή από κάπου αλλού, και για τώρα είμαι απλά πρόκειται να το κρατήσετε απλό και Πάω να μπω σε μου Κατάλογος εδώ και να κάνουμε το εξής. Gedit σενάριο ας πούμε, θα καλέστε το κείμενο, #! / χρήστη / bin / env PHP, όπως είδαμε τελευταία φορά. PHP. Τώρα Πάω να απαιτούν περιλαμβάνει config.php, Ακόμα και αν έτσι επάγει ένα μικρό λάθος. Και τώρα είμαι πρόκειται να πάει μπροστά και να πει σειρές, ερώτημα, επιλέξτε αστέρι από τους χρήστες, και τώρα εδώ Πάω να κάνω μια τεχνική από την τελευταία φορά για κάθε σειρές όπως σειρά. Και Πάω να κάνω κάτι απλό. Printf ας πούμε ότι το όνομα είναι αυτό, και ο αριθμός είναι αυτό, backslash n. Και τώρα Πάω να περάσει στη σειρά παραθέσω unquote όνομα, και ο αριθμός σειράς απόσπασμα εισαγωγικά, και τώρα ας πάμε μπροστά και το παράθυρο τερματικού μου chmod αυτό α + x για να κάνουν Αυτό το σενάριο που να ονομάζεται εκτελέσιμο κείμενο. Και τώρα ας τρέξει κείμενο. Εντάξει, έτσι η πρόοδος. Έτσι, τώρα έχω γράψει ένα εντολή δέσμης ενεργειών γραμμής, σε μια γλώσσα που ονομάζεται PHP, ότι, λόγω του ότι απαιτούν γραμμή, έχει πρόσβαση σε όλα αυτά διαμόρφωση σταθερές που προσδιορίζονται. Το όνομα της βάσης δεδομένων και ούτω καθεξής. Στην πραγματικότητα, ακριβώς για να είναι σαφές ότι αυτό δεν είναι μια απροσδόκητη επιτυχία, επιτρέψτε μου να προχωρήσει και να εγγραφείτε, πολύ γρήγορα, κάποιος άλλος σαν τον Rob και θα του δώσει τον αριθμό 555-1212. Και τώρα, αν εκτελέσετε το σενάριο και πάλι, να παρατηρήσετε τη δύναμη από ό, τι κάνουμε με τη βάση δεδομένων. Τώρα έχω δει αμέσως ποια είναι η άλλες δύο σειρές είναι στη βάση δεδομένων μου. Έτσι, τώρα ας προσπαθήσουμε να κάνουμε κάτι ακόμη φανταχτερό εσωτερικό της, και αυτό είναι το μέρος που έχουμε δεν έχει δοκιμαστεί εκ των προτέρων, έτσι ώστε η τελευταία φορά που το έκανα αυτό τα πράγματα πήγαν στραβά φρικτά, έχουμε βίντεο για το σκοπό αυτό. Στην πραγματικότητα, ναι, αστεία κατά μέρος. Έτσι, την τελευταία φορά, σε ένα διάλεξη όπως πριν από δύο χρόνια, αποφασίσαμε, αποφάσισα, να είναι όλα αυτά θα ήταν μια μεγάλη ιδέα να δημιουργήσει δυναμικά μηνύματα ηλεκτρονικού ταχυδρομείου σε τάξη, χρησιμοποιώντας το σύνολο της βάσης δεδομένων CS50 φοιτητές, οι οποίοι μας είχαν δώσει τους αριθμούς τους και φορείς κινητό τους το οποίο σας Ίσως να θυμάστε από pset0, πώς να λόγο αυτό, αποδεικνύεται Είχα ένα μικρό σφάλμα στο πρόγραμμα μου και έκανε μια-δυο λάθη το 2012, νομίζω. Σύμφωνα με την οποία, το ένα που είχα για βρόγχο που έκανε ακριβώς αυτό το είδος του πράγματος, επανάληψη πάνω από τη βάση δεδομένων, να πάρει ένα όνομα από τη βάση δεδομένων, όνομα από τη βάση δεδομένων, και στη συνέχεια, για κάθε επανάληψη αυτού του βρόχου έστειλα ένα email. Αλλά αντί για την αποστολή ενός e-mail, εγώ έστειλε ένα e-mail η πρώτη επανάληψη, και δύο emails την δεύτερη επανάληψη, αποστέλλονται τρία emails μια δεύτερη επανάληψη, η οποία όπως ίσως θυμάστε από μας συζήτηση της ασυμπτωτικής σημειογραφίας αυτό το μεγάλο O κακών, όπως n στο τετράγωνο είναι πόσα μηνύματα που αποστέλλονται, αλλά αυτό δεν ήταν καν e-mail ήταν μηνύματα κειμένου. Και όπως γνωρίζετε, η φοίτηση δεν είναι σούπερ υψηλή προς το τέλος του εξαμήνου και έτσι σκέφτηκα ότι θα ήταν χαριτωμένο σε η ώρα να πούμε, "Γιατί δεν είσαι τάξη;" Στο μήνυμα κειμένου μου αποστέλλονται σε όλη την τάξη, και ήταν αστείο να αρέσει το 50% της τάξη, αλλά το υπόλοιπο 50%, μερικοί από τους οποίους φρίκαρε, έστειλα απίστευτα απολογητικός γλυκές νότες για το προσωπικό ζητώντας συγνώμη για έχοντας χάσει τη διάλεξη μόνο αυτή τη φορά, σωστά; Έτσι ώστε θα ήταν φρικτά στραβά. Έτσι, σε αυτό το πνεύμα, ας προσπαθήσουμε αυτό και πάλι, αλλά μόνο με τον αριθμό μου. Στην εκ των προτέρων, σε functions.php, Έχω γράψει την λειτουργία εδώ. Ονομάζεται κείμενο, και παίρνει σε τρία επιχειρήματα. Ένας αριθμός, ένα φορέα, και ένα μήνυμα. Είμαι χρησιμοποιώντας μια δήλωση switch, το οποίο θαυμάσια PHP λαμβάνουν χορδές, όχι μόνο ακέραιοι, και εγώ δεν εφαρμόζουν όλη η υποστήριξη για αυτό ακόμα, Έχω κάνει ακριβώς AT & T και Verizon. Επειδή αποδεικνύεται ότι με αυτούς τους φορείς έχουν ηλεκτρονικού ταχυδρομείου με SMS πύλες, σύμφωνα με την οποία μπορείτε πραγματικότητα στείλετε ένα email σε μια διεύθυνση όπως τον αριθμό του τηλεφώνου σε vtext.com και αν ο χρήστης δεν έχει αποκλειστεί τα μηνύματα, αυτό θα περάσουν είναι ένα μήνυμα κειμένου. Τώρα για να το κάνετε αυτό, είμαι πρόκειται να πρέπει να προσθέσετε ένα πεδίο πολύ γρήγορα στη βάση δεδομένων μου. Πάω να μπω σε δομή μου, και είμαι πρόκειται να πάει μπροστά και να προσθέσετε μια πεδίο στο τέλος του πίνακα. Ας κάντε κλικ στο κουμπί Μετάβαση, και είμαι πρόκειται να καλέσει τον εν λόγω αερομεταφορέα και για τώρα Πάω να αφήστε αυτό ως μια γραμμή κειμένου, αλλά μπορούμε να είμαστε φανταχτερό στο μέλλον. Πάω να πάει γρήγορα στο τραπέζι μου, και είμαι πρόκειται να απαλλαγούμε από τον Rob, γιατί αυτό είναι ένα ψεύτικο αριθμό, Πάω να μπω σε επεξεργασία εδώ και είμαι πρόκειται να αλλάξει καριέρα μου με το χέρι να είναι Verizon, η οποία είναι είναι, και τώρα εδώ. Ας κάνουμε ένα γρήγορο έλεγχο λογική. Ας ανοίξουμε σενάριο κειμένου μας, η οποία μοιάζει με αυτό, ο φορέας είναι% s. Κάνουμε πολλά περισσότερα λάθους τον έλεγχο από ό, τι έκανα το 2012, φορέα. Και τώρα, εγώ είμαι πρόκειται να πάει μπροστά και εκτελέστε ξανά το σενάριο. ΟΚ. Carrier είναι η Verizon, η οποία σημαίνει τώρα ελπίζω να κάνει ακριβώς αυτό. Σωστά αυτό το έτος, Ας ελπίσουμε ότι, εδώ πηγαίνουμε. Έτσι, μέσα από αυτό για το βρόχο, είμαι πρόκειται να έχουν όχι μόνο αυτό printf, Είμαι, επίσης, πρόκειται να καλέσετε το κείμενο και η χρήση αυτής της ανάκλησης λειτουργίας Ήταν παίρνει έναν αριθμό, ένα φορέα, και ένα μήνυμα. Ας δούμε λοιπόν, ο αριθμός πρόκειται να είναι σειρά απόσπασμα unquote "αριθμός" απόσπασμα σειρά εισαγωγικά "φορέας", και η τελευταία ήταν το μήνυμα. Μην βίδα μέχρι φέτος, το ερωτηματικό. ΟΚ. Δάχτυλα διασχίσει. Ας δούμε αν αυτό λειτουργεί. Εντάξει, έτσι. Εδώ πάμε. Ας ξεκλειδώσετε το τηλέφωνο, διασχίζουν τα δάχτυλά σας, γαμώτο. Απροσδιόριστο μεταβλητή may-- oh περιμένετε, περιμένετε, περιμένετε, πραγματικά γρήγορα. Ρεάλ γρήγορα, πολύ γρήγορα. Αυτό είναι εντελώς αξίζει τον κόπο. Επιτρέψτε μου να αρπάξει, επιτρέψτε μου να αρπάξει, uh-oh. Σας ευχαριστώ, τα κείμενα έχουν ξεκίνησε από κάποιον άλλο. Επιτρέψτε μου να πάει μπροστά και να ανοίξει πραγματική γρήγορο, dropbox.php / mail στο εδώ. Αναμονή. Εντελώς αξίζει τον κόπο. Λήψεις. Εντάξει, πηγή src8m. ΟΚ. Χρειάζεστε μια κοινή γραμμή εδώ. Ω, εκεί που είναι, είναι σε Frosh ΔΥ, είναι το μητρώο σε τρεις. Ω Γεια σας, Margo, σας ευχαριστώ πολύ. Εντάξει, και μου έλειπε αυτή τη γραμμή εδώ. Έτσι, επιτρέψτε μου γρήγορα αρπάξει Αυτή η γραμμή κώδικα, το οποίο περιλαμβάνει το ταχυδρομείο ή τη βιβλιοθήκη ότι εγώ πραγματικά θέλετε να χρησιμοποιήσετε, Πάω να γρήγορα πάει πίσω σε λειτουργίες, Πάω να πάει στην κορυφή του αυτό αρχείο και να απαιτήσει αυτό το αρχείο, καθώς και, και τώρα είμαι πρόκειται πραγματικά να διασχίσουν μου τα δάχτυλα όταν πάω πίσω στην εντολή script γραμμή, η οποία βρίσκεται στο εσωτερικό του τοπικό κατάλογο υποδοχής του σήμερα. Εκτελέστε κείμενο. Enter. Mail. Αναμονή. Αναμονή. Mail. Ω, εντάξει. Εδώ πάμε. Mail παίρνει νέα PHP πρόγραμμα ηλεκτρονικής αλληλογραφίας. Μήπως μπορώ να κάνω αυτό το δικαίωμα; Γαμώτο. To-- Περίμενε, περίμενε, περίμενε. Stand by. Υπόσχομαι, αυτό είναι πρόκειται να είναι τόσο αξίζει τον κόπο. Διεύθυνση. Αυτός είναι ο λόγος που δεν κάνει το παραδείγματα δεξιά πριν το μάθημα. Ugh. Οι παρακάτω παραλήπτες απέτυχαν. Ας δοκιμάσουμε ένα τελευταίο πράγμα. SMTP που από, προσθέστε τη διεύθυνση, η διεύθυνση είναι όντως αυτό. Ας προσπαθήσουμε αυτό το τελευταίο μέρος στη διεύθυνση. Aw, είμαι πολύ λυπημένος τώρα. Σας ευχαριστώ. Αλλά εγώ πραγματικά εκτιμώ όλους τα κείμενα που έχετε στείλει. Έχετε αυτό το Δαβίδ. Είσαι το φύσημα. Ας το αφήσουμε εκεί και θα καθορίσει τη Δευτέρα. Θα σας δούμε στη συνέχεια. DAVEN FARNHAM: Και τώρα Βαθιά Σκέψεις από Daven Farnham. Αν ένα δυαδικό δέντρο πέσει στο δάσος και κανείς δεν είναι γύρω στο C it-- [καγχάζει].