>> R.J. AQUINO: Ας ξεκινήσουμε.
Έτσι, αυτό είναι Quiz 1.
Εδώ είναι μερικές πληροφορίες υψηλού επιπέδου.
Η Σχετικά με τη σελίδα του κουίζ είναι αυτό URL, δεν είναι πλέον CS50.net, παρόλο που
θα εξακολουθούν να εργάζονται.
Είναι CS50.harvard.edu/quizzes/2013/1.
Είναι η μεγάλη Σχετικά με τη σελίδα, σας λέω πού και πότε, δηλαδή την επόμενη Τετάρτη
σε μια δέσμη των δωματίων.
Και από την επόμενη Τετάρτη, I σημαίνει δύο ημέρες από τώρα.
Όλες αυτές οι πληροφορίες είναι εκεί.
Αλλά είναι αθροιστική.
>> Έτσι, τα πάντα, από το πρώτο εξάμηνο του έτους είναι δυνητικά στο κουίζ,
γιατί δεν μπορεί πραγματικά να κάνει την προηγμένη τα πράγματα σε C χωρίς εάν οι συνθήκες και
για βρόχους και παρόμοια.
Αλλά θα υπάρξει έμφαση στην υλικό που καλύπτεται από το Quiz 0,
ξεκινώντας με structs και αρχείων I / O. Είναι συνήθως πιο
προκλητικό από Κουίζ 0.
Ο μέσος όρος βαθμολογίας είναι συνήθως χαμηλότερα.
Μελέτη σκληρά.
>> Ενώ εσείς μελετάτε, να είστε βέβαιος να χρησιμοποιήσει CS50/discuss να δημοσιεύσετε τις ερωτήσεις σας
και να διαβάσετε τις ερωτήσεις άλλων ανθρώπων.
Έτσι, αν δεν έχετε οποιεσδήποτε ερωτήσεις, συνδεθείτε και να διαβάσετε
ερωτήσεις των φίλων σας.
Είναι ίσως καλές ερωτήσεις.
Και να λάβει τα κουίζ πρακτική.
Έχουμε ήδη δώσει κουίζ για επτά ή οκτώ χρόνια.
Είναι όλα σε απευθείας σύνδεση.
Μελλοντικές ερωτήματα αυτά είναι παρόμοια σε παλιά ερωτήματα.
Αυτό είναι το πώς θα τους κάνουν.
>> Το κουίζ δεν υπάρχει ακόμα.
Κανένας από εμάς έχουμε δει.
Αλλά θα μοιάσει προηγούμενο κουίζ.
Για αυτή τη συνεδρία αξιολόγησης, αυτό δεν είναι εξαντλητικό κατάλογο των θεμάτων.
Μπορείτε όχι μόνο να παρακολουθήσουν αυτό και στη συνέχεια να είναι απόλυτα έτοιμος για το κουίζ.
Διαφορετικά, δεν θα ήταν ότι ένα μεγάλο μέρος ενός κουίζ.
Και αυτό επίσης δεν είναι κατ 'ανάγκην όλα όσα χρειάζεται να ξέρετε για κάθε
συγκεκριμένο θέμα.
Είναι γραφτό να σας εκθέσει στα πράγματα έχουμε καλύψει, να σας υπενθυμίσω αυτό που
καλύπτονται, και ο τρόπος με τον το οποίο θα κάλυπτε.
Αλλά θα πρέπει να προχωρήσει περαιτέρω και να βαθύτερα, όταν έχετε μελετήσει για να διπλό έλεγχο
ότι ξέρετε τα πάντα για κάθε δεδομένη το θέμα και ότι έχετε συμπληρώσει
όλες οι γωνίες που ήταν καλύπτονται στη διάλεξη.
>> Οι σημειώσεις κουίζ σας πει να πάτε στο σημειώσεις γραφέα, το ρολόι βίντεο διάλεξη.
Αυτός είναι ένας καλός τρόπος για να βεβαιωθείτε ότι έχετε καλύπτει όλες τις βάσεις σας.
Έτσι, το ξεκίνημα, όταν έκανα αυτά διαφάνειες, προσπάθησα να βάλω όπου βρήκα
πληροφορίες.
Έτσι, για το αρχείο Ι / Ο, για παράδειγμα, την εβδομάδα 7, Δευτέρα διάλεξη, και ο αποσπασμένος
Τμήμα 6 και Πρόβλημα Set όλα έχουν πληροφορίες σχετικά με το αρχείο I / O. Έχω κάνει
αυτό για κάθε θέμα.
Έτσι, οι διαφάνειες τίτλου μπορεί να να είναι χρήσιμο σε εσάς.
>> Έτσι, εδώ έχουμε File I / O. Θυμηθείτε, το Πρόβλημα Σετ 5, χρησιμοποιήσαμε fopen, fclose,
fwrite, fread και fseek.
Αφού ανακτηθεί 30ish αρχεία JPEG και έχοντας αλλάξει το μέγεθός τους και μπέρδεμα με
bitmaps, θα πρέπει να είναι αρκετά εξοικειωμένοι με αυτές τις λειτουργίες
και πώς λειτουργούν.
Αν δεν είναι πλέον εξοικειωμένοι, σίγουρα επανεξετάσει τους.
Και βεβαιωθείτε ότι έχετε κατανοήσει τι τα διάφορα επιχειρήματα,
όταν έχεις συνηθίσει.
>> Αλλά τα κοινά αρχείο σφάλματα που σχετίζονται με μπορεί να σας ζητηθεί για -
καλά, αν έχετε ξεχάσει να ελέγξετε αν fopen πραγματικά εργάστηκαν πριν πάτε για
τροποποιήσετε ένα αρχείο.
Αυτό θα μπορούσε να είναι κακό.
Εάν έχετε ξεχάσει να fclose ένα αρχείο ότι έχετε fopened, αυτό είναι παρόμοιο με
μια διαρροή μνήμης.
Αυτό είναι πολύ κακό.
Και ξεχνώντας να ελέγξετε αν έχετε φτάσει στο τέλος του αρχείου πριν να
αρχίσετε να γράφετε σε αυτό.
>> Έτσι, αν σας πω, hey, είμαι σε το τέλος του αρχείου.
Δώσε μου 5 περισσότερα bytes.
Λοιπόν, αυτό είναι κατά πάσα πιθανότητα δεν πρόκειται να λειτουργούν με τον τρόπο που αναμένετε.
Αυτό είναι πραγματικά αυτό για το αρχείο I / O, επειδή κάναμε τόσο πολύ από αυτό
με που το πρόβλημα.
Έτσι, αν έχετε καταλάβει τι συνέβαινε στο πρόβλημα Set 5, θυμηθείτε τα bitmats
και τα αρχεία JPEG, τότε είστε πιθανώς όλοι οριστεί για το αρχείο I / O. Αν αυτό είναι ένα κομμάτι
fuzzy, σίγουρα επανεξετάσει το πρόβλημα οριστεί και το σχετικό υλικό.
>> Structs ήταν το θέμα που ήταν σχετικά με την γραμμή μεταξύ 0 και Quiz Quiz 1.
Μήπως δεν είναι αρκετά να την περικοπή για Quiz 0.
Έτσι, θα είναι σίγουρα στο Quiz 1, Εβδομάδα 7, τη Δευτέρα.
Τι είναι ένα struct;
Εδώ μπορούμε να δείξουμε ένα struct.
Είναι σαν ένα νέο είδος.
Είναι σαν ένα δοχείο για πολλά πεδία.
>> Σε αυτή την περίπτωση, έχουμε δηλώσει struct σπουδαστών που έχει δύο πεδία -
μια σειρά που είμαστε καλώντας το όνομα και ένα int που είμαστε καλώντας την ηλικία.
Έτσι, όταν περνώ γύρω από φοιτητές ή Ι τροποποιήσει τους μαθητές, θα είμαι σε θέση να
πρόσβαση το όνομά τους και την ηλικία τους.
Ας δούμε λίγο κώδικα για αυτό.
Εδώ βλέπουμε ότι έχω δηλωθεί ένας φοιτητής s, όπως ακριβώς
Δηλώνω κάθε μεταβλητή -
int x, int y, κ.λπ..
>> Εδώ είναι φοιτητής s.
Ξεκινά με τίποτα στο χωράφι του.
Οπότε ας τον καθορισμό τους.
Μπορείτε να ορίσετε τα πεδία του struct με τελεία.
Έτσι, έχω πει εδώ ότι s.name = RJ.
Και s.age = 21.
Μπορείτε επίσης να ενημερώσετε τα πεδία με τον ίδιο τρόπο που θα ενημερώσετε
η τιμή μιας μεταβλητής.
Γι 'αυτό θέλω να αλλάξω το όνομά μου από την RJ με δεν υπάρχουν περίοδοι που R.J. σήμανε το
σωστό τρόπο.
Θα ήταν s.name = RJ, το ίδιο όπως είπε αρχικά.
Και τότε μπορείτε να έχουν πρόσβαση σε αυτά.
>> Έτσι έχουμε τον καθορισμό τους.
Έχουμε τους ενημέρωση.
Μπορείτε επίσης να αποκτήσετε πρόσβαση σε αυτά στο πολύ ίδιο τρόπο.
Έτσι, εδώ, είμαι εκτύπωση R.J. Είναι 21 ετών.
Και είμαι πρόσβαση σε αυτές τις τιμές με s.name και s.age.
Έτσι ώστε να είναι πρόσβαση structs με το συμβολισμό με την τελεία.
Ναι, ερώτηση;
>> ΚΟΙΝΟ: Υπάρχει κάποιος λόγος για την εκεί προηγούμενη διαφάνεια που δεν βάλατε
φοιτητής στην επάνω γραμμή, όπως typedef φοιτητής struct και, στη συνέχεια,
φοιτητής στο τέλος;
>> R.J. AQUINO: Άρα το ερώτημα ήταν, για αυτή η διαφάνεια, έχουμε συνήθως δει
typedef struct node και στη συνέχεια το πεδία του struct και
τότε η λέξη κόμβου.
Και πώς έρχονται εδώ δεν είχα να πω, typedef φοιτητής struct και στη συνέχεια το
πεδία του struct και στη συνέχεια μαθητής;
Ο λόγος είναι ότι δεν χρειάζεται να πρόσβαση το εσωτερικό του struct.
Γι 'αυτό είναι εντάξει για να αφήσει χωρίς όνομα.
Μπορώ να το αφήσω όπως μια ανώνυμη struct.
>> Ο λόγος που το κάνουμε για συνδεδεμένες λίστες και τα πράγματα είναι επειδή μέσα που χρειάζεστε
να γίνει αναφορά σε ένα αστέρι κόμβους struct.
Έτσι, η struct πρέπει να έχει ένα όνομα, έτσι μπορείτε να έχετε πρόσβαση αργότερα.
Είναι μια μικρή λεπτομέρεια.
Αλλά θα δείτε συνήθως typedef struct άγκιστρα, αν δεν χρειάζεστε
το όνομα και typedef struct κάποια ονομασία ακολουθούμενη από αγκύλες αν θα
Πρέπει το όνομα.
Έτσι, αυτό είναι μια καλή ερώτηση.
>> Και στο σημείο αυτό, έχουμε την τάση να τροποποιήσετε structs και να περάσει γύρω από structs
αναφορά, όχι με βάση την αξία.
Γι 'αυτό θα πρέπει ακριβώς να περάσει γύρω από δείκτες σε structs αντί να περάσει γύρω από το
Δομές οι ίδιοι.
Έτσι, είστε πολύ συχνά πρόκειται να είναι χρησιμοποιώντας, στην περίπτωση αυτή, φοιτητής * ή
struct node * ή κόμβο * αντί τους φοιτητές ή κόμβους.
Τόσο εδώ, έχω πει, εντάξει, η μεταβλητή ptr πρόκειται να είναι η διεύθυνση του s.
Είναι πρόκειται να είναι ο δείκτης στον μαθητή R.J.
>> Έτσι, μπορούμε να πάρουμε σε αυτά τα πεδία το ίδιο όπως έχουμε τίποτα.
Πρώτον, ID αναφορά το δείκτη για να πάρει το struct.
Αυτό είναι * ptr και, στη συνέχεια, μια τελεία και μετά την ηλικία.
Έτσι για να έχουν πρόσβαση στο χώρο, και έχω ενημερώσει τώρα σε 22, διότι, ας
ας πούμε, ήταν τα γενέθλιά μου.
Υπάρχει μια σύνταξη συντόμευση χρησιμοποιώντας το βέλος εδώ.
Έτσι ptr βέλος ηλικία είναι απλά το ίδιο * ptr.age.
Τώρα, αυτό είναι κάτι που θα πρέπει να απομνημονεύουν και να θυμάστε.
>> Μπορείτε να χρησιμοποιείται πολύ στη pset6, ο ορθογράφος από το chipset.
Αλλά αυτό είναι πραγματικά ό, τι συμβαίνει σε κάτω από το καπό.
Είναι dereferencing το δείκτη και στη συνέχεια να έχουν πρόσβαση.
Ερώτηση;
>> ΚΟΙΝΟ: [δεν ακούγεται].
>> R.J. AQUINO: Τότε γιατί με τη χρήση δείκτες όπως structs αντί του
Δομές οι ίδιοι;
Ο λόγος θα ήταν αν είστε περαστικοί ένα struct σε μια λειτουργία, ίσως
θέλουν να περάσουν γύρω από ακριβώς το 4 ή έτσι bytes που αποτελούν το δείκτη, όπως
σε αντίθεση με την 30 ή δυνητικά 40 bytes που αποτελούν το struct.
Έτσι περνά κάτι σε μια λειτουργία είναι ευκολότερη όταν το πράγμα
είναι μικρότερο σε σύντομη.
Ερώτηση;
>> ΚΟΙΝΟ: Μπορεί να αναφερθεί σε αυτό στην αρχή, αλλά υπάρχουν
άλλες διαφάνειες επάνω σε [δεν ακούγεται];
>> R.J. AQUINO: Οι διαφάνειες θα είναι μετά τη συνεδρίαση επανεξέτασης.
Θα τις δημοσιεύσουμε στην ιστοσελίδα.
Έτσι, κινείται και κινείται σε ελαφρώς πιο γρήγορα, θα πάμε να μιλήσουμε για τα δεδομένα
δομές.
Υπάρχουν πολλά.
Καλύψαμε ένα σωρό από αυτούς.
Εδώ είναι τι πρέπει να καταλάβουν σχετικά με τη δομή των δεδομένων.
>> Θα πρέπει πραγματικά να καταλάβουμε σε υψηλό επίπεδο αυτό κάθε δομή είναι.
Μπορείτε να εξηγήσετε στα αγγλικά για να σας φίλο που δεν έχει λάβει CS50 πώς
είμαστε οργάνωση των δεδομένων μας και γιατί έπαιρνα να χρησιμοποιούν κάτι με αυτόν τον τρόπο;
Αυτό είναι ένα πράγμα.
Πράγμα δύο, να κατανοήσουν η εφαρμογή.
Έτσι καταλαβαίνουν πώς να χρησιμοποιούν αυτά τα πράγματα σε C. Και εμείς θα πρέπει να πηγαίνει πέρα ​​από αυτό.
>> Και τότε το πράγμα τρεις θα γνωρίζουν την χρόνους εκτέλεσης και οι περιορισμοί της
διάφορες δομές που χρησιμοποιείτε.
Έτσι καταλαβαίνω γιατί θα πρέπει να χρησιμοποιήσετε ένα hash πίνακα αντί ενός πίνακα.
Καταλάβετε πόσο γρήγορα, κατά μέσο όρο, πρόσβαση σε ένα πίνακα κατακερματισμού είναι.
Κατανόηση του τι είναι εργασίες γρήγορα για συνδεδεμένη λίστα, αλλά αργή σε πίνακες και
αντίστροφα.
Έτσι για να καταλάβετε ότι, θα πρέπει να κατανοήσουν Big-O συμβολισμός μόνο για να ξέρετε
πώς να μιλήσουμε για αυτά τα είδη των πραγμάτων.
Και θα μιλήσουμε γι 'αυτό.
>> Έτσι, το πρώτο πράγμα, συνδεδεμένες λίστες.
Εδώ είναι μια εικόνα υψηλού επιπέδου από μια συνδεδεμένη λίστα.
Έχουμε αποδείξει αυτό στην τάξη.
Εμείς συνήθως έχουν 10 άτομα στέκεται στη σκηνή.
Αλλά έχουμε μια σειρά κόμβων όπου κάθε κόμβος έχει κάποια αξία και ένα δείκτη
στην επόμενη τιμή της.
Έτσι για να πάρετε από έναν κόμβο στον επόμενο, θα απλώς να πω, να μου δώσει το επόμενο κόμβο.
Έχετε ότι ο κόμβος.
Δώσε μου το επόμενο κόμβο.
Έχετε ότι ο κόμβος.
Δώσε μου το επόμενο κόμβο και ούτω καθεξής έως ότου δεν υπάρχει αριστερό κόμβο.
>> Έτσι ώστε να συνεχίσει να μιλήσουμε για το σε υψηλό επίπεδο.
Είναι πολύ εύκολο να τοποθετήσετε τα πράγματα σε μια συνδεδεμένη λίστα.
Αν δεν νοιάζονται για τη σειρά, μπορείτε να το παρατήσω
ακριβώς στην αρχή.
Αυτό είναι σταθερό χρόνο.
Αλλά είναι δύσκολο να βρεθεί μια τιμή.
Εάν προσπαθείτε να ρωτήσω, είναι επτά στη λίστα μου;
Θα πρέπει να περάσουν κάθε αξία.
Είναι αυτό το επτά;
Ξανά και ξανά.
Και αυτό είναι O (n).
Έτσι, κατά τη μελέτη για το κουίζ, Συγκρίνετε αυτό με τους πίνακες.
>> Είναι αυτό εντάξει;
Τα φώτα έσβησαν αμυδρό.
OK.
Όταν είναι συνδεδεμένη λίστα καλύτερο;
Όταν είναι μια σειρά καλύτερα;
Έτσι, ας δούμε λίγο κώδικα.
Εδώ είναι ένα κόμβο δυναμικού.
Είναι ένα struct.
Έχει έναν int n, η οποία Θα είναι τιμή μας.
Και έχει έναν κόμβο struct * επόμενο, το οποίο είναι δείκτης μας στον επόμενο κόμβο.
Έτσι, εδώ, μπορούμε να δούμε ότι συνέβη να έχουν θέσει int στον κόμβο μας.
Αλλά αν αυτό ήταν μια συνδεδεμένη λίστα char αστέρια ή μια συνδεδεμένη λίστα των αρμάτων, εμείς
συνολικά θα μπορούσε να το κάνει αυτό πάρα πολύ.
>> Θυμηθείτε το pset6, είχατε πιθανώς ένα συνδεδεμένη λίστα των αστέρων char ή απλά
στατικές συστοιχίες char.
Ας δούμε εδώ σε μια λειτουργία.
Έτσι θέλουμε να τοποθετήσετε ένα νέο n σε συνδεδεμένη λίστα μας.
Ξεκινάμε με ένα δείκτη κεφάλι που είναι ένας δείκτης προς αυτόν τον κόμβο που έχει το
τιμή του η και ένα επόμενο ενός δείκτη που σημεία προς αυτόν τον κόμβο αποτελεί αξία
n και δίπλα από μηδενική, διότι είναι ο τελευταίος κόμβος.
Έτσι, προς το συμφέρον του χρόνου, θα το κάνω βάλει όλο τον κώδικα στην οθόνη.
Και θα περάσεις μερικές γραμμές σε έναν χρόνο.
>> Έτσι, εδώ είναι ο κώδικας.
Ελπίζω να είναι αναγνώσιμο.
Το πρώτο πράγμα που κάνουμε είναι έχουμε malloc ένα νέο κόμβο.
Γι 'αυτό κάνει ένα δείκτη σε ένα νέο κόμβο που δεν έχουν αρκετά που τίποτα
σε αυτό ακόμα.
Εμείς βεβαιωθείτε ότι ο νέος κόμβος δεν είναι null.
Διαφορετικά, θα πρέπει να παραιτηθεί.
Έτσι, αφού ελέγξει ότι, τώρα ορίσετε τις τιμές στον κόμβο.
Έτσι βάζουμε το νέο n σε n τομέα μας.
Και θέσαμε το επόμενο δείκτη στο σημείο να το αρχικό κεφάλι, έτσι ώστε να μπορούμε να
τώρα έχουν εισαχθεί αυτό κόμβο στη λίστα μας.
>> Τέλος, έχουμε το παγκόσμιο σημείο της κεφαλής στο νέο κόμβο μας, έτσι ώστε αν επρόκειτο να
ξεκινούν από το κεφάλι, θα είμαστε σε αυτό νέο πρώτο κόμβο αντί
το παλιό πρώτο κόμβο.
Και όταν αυτή η λειτουργία βγαίνει, η μεταβλητή νέος κόμβος δεν υπάρχει πια,
επειδή ήταν τοπικά στη συνάρτηση.
Έτσι, αυτή είναι η κατάσταση του κόσμου.
Επικεφαλής του παγκόσμιου μας δείχνει νέα μας πρώτο κόμβο, η οποία επισημαίνει μας
αρχική πρώτο κόμβο, το οποίο σημεία στον κόμβο μετά από αυτό.
>> Αυτή ήταν η εισαγωγή.
Ελπίζω ότι ήταν σχετικά εύκολο να ακολουθήσει.
Σε περίπτωση αμφιβολίας, να σχεδιάσετε μια εικόνα.
Έτσι, θεωρώ ότι μιλάμε για συνδεδεμένες λίστες και κοιτάζοντας
κώδικας είναι πολύ δεν είναι χρήσιμη.
Ότι, κοιτάζοντας μια εικόνα ενός συνδεδεμένου λίστα σας επιτρέπει να σκεφτώ, OH, τόσο
Έχω αυτό το κόμβο εδώ.
Αλλά αν μπορώ να ενημερώσω ότι το δείκτη, καταλήγει αποσυνδεθεί.
Και έχω ξεχάσει, όπου ο κόμβος πηγαίνει.
Και ο κώδικας βγαίνει.
Και έχετε πολλαπλούς κόμβους που έχουν αποσυνδεθεί.
Και να μην καταλήξετε με η λίστα που θέλετε.
>> Έτσι, αν σχεδιάσετε την εικόνα και να το κάνουμε βήμα προς βήμα, ελπίζουμε, θα δείτε
η σωστή σειρά των πραγμάτων από την άποψη της ενημέρωση τους δείκτες για να βεβαιωθείτε ότι
ότι ο κατάλογος έρχεται μαζί.
Εισαγωγή είναι σχετικά απλή.
Μια πιο περίπλοκη θα είναι εισαγωγή σε έναν ταξινομημένο κατάλογο.
Μια πιο πολύπλοκη λειτουργία είναι να διαγράψετε και να βρει, έτσι κοιτάζοντας μέσα από ένα κατάλογο
να δούμε αν κάτι είναι εκεί.
Ίσως να το έκανε αυτό στην pset6 όταν πήρε στον hash πίνακα σας και είπατε,
καλά, είναι η λέξη μήλο σε συνδεδεμένη λίστα μου;
>> Έτσι, μπορεί να έχετε ήδη κάνει.
Αλλά σίγουρα, φρεσκάρω τη μνήμη σας και προσπαθήστε να βρείτε Νέα υλοποίηση και
Νέα υλοποίηση διαγραφή για μια συνδεδεμένη λίστα.
Fun πλευρά σημείωση, υπάρχουν επίσης διπλά συνδεδεμένη καταλόγων, όπου έχετε
δείκτες που δείχνουν προς τα εμπρός και προς τα πίσω, έτσι ώστε να μπορείτε να πάτε στο
επόμενο κόμβο και στο προηγούμενο κόμβο.
Και υπήρχε μια ερώτηση σχετικά με το περσινό κουίζ αυτού του τύπου, μιλώντας
περίπου διπλά συνδεδεμένες λίστες.
>> Τώρα, αυτό είναι μια δομή που είστε σχετικά εξοικειωμένοι με, επειδή οι περισσότεροι
από εσάς τους χρησιμοποιήσει πιθανώς σε pset6.
Εδώ είναι ένα που είναι λίγο λιγότερο εξοικειωμένοι.
Σαν δευτερεύουσα σημείωση, νομίζω ότι Quiz 1 είναι κυρίως πιο δύσκολο από ό, τι Quiz 0, διότι
τα πράγματα που κάνετε, σας δεν έχουν κάνει τόσο πολύ.
Για να το θέσω με άλλο τρόπο, για Quiz 0, είχατε γράψει πολλά C. Και εμείς
ρωτήσατε για το C.
>> Για Quiz 1, θα πάμε για να σας ρωτήσω σχετικά με PHP και JavaScript, τα οποία θα
Δεν έχω γράψει τόσο μεγάλο.
Εμείς πάμε για να σας ρωτήσω σχετικά με C-code που δεν έχετε γράψει τόσο μεγάλο,
αυτό το προηγμένο υλικό C.
Έτσι, σίγουρα, να εφαρμόσει την έχουμε πράγματα μίλησε για το διάλεξη που θα
δεν πρέπει απαραίτητα να σχετικά με το πρόβλημα που.
>> Μιλώντας εκ των οποίων, δεν έχετε γράψει μια στοίβα σε ένα πρόβλημα που.
Αλλά ήταν στη διάλεξη.
Εδώ είναι η εικόνα υψηλού επιπέδου στοίβες ότι δείχνουμε κάθε χρόνο.
Είναι η στοίβα των δίσκων σε η τραπεζαρία Mather.
Σε υψηλό επίπεδο, στοίβες είναι η τελευταία in, first out δομή δεδομένων.
Αυτό σημαίνει ότι θα πάμε να βάλει τα πράγματα σε -
1, 3, 7, 12, 14, αρνητικό μηδέν.
Το ένα πράγμα που δεν θα μπορούσε να έχει είπε - αρνητικό 3, 0.
Βάζετε όλα αυτά τα πράγματα μέσα
Και το τελευταίο που μπαίνει στα είναι η πρώτη αυτό που πρόκειται να βγει.
>> Έτσι, έχετε δύο πράξεις -
ωθήσει και ποπ.
Όλα τα βάζοντας στο ότι ήμουν χειρονομία όπως αυτό είναι ώθηση.
Και στη συνέχεια, όταν θα φτάσει για να αρπάξει κάτι ή να φτάσει στην κορυφή για να αρπάξει
κάτι, αυτό είναι ποπ.
Έτσι θα πάμε να εφαρμόσει στοίβες.
Και τους έδειξε σε διάλεξη χρήση πινάκων.
Αλλά θα μπορούσατε να κάνετε χρησιμοποιώντας συνδεδεμένες λίστες.
Μια στοίβα είναι ένα εννοιολογικό δεδομένων δομή, όχι σαν μια
εφαρμογή-συγκεκριμένη.
>> Λοιπόν, τι θα που μοιάζουν;
Θα δούμε κάτι σαν αυτό.
Θα έπρεπε ένα μέγεθος ακέραιο.
Και θα έχετε μια σειρά από αξίες που είμαστε καλώντας τους δίσκους, γιατί αυτό είναι
ποια είναι η εικόνα ήταν για την μας - int δίσκους -
και στη συνέχεια κάποιες μέγιστη χωρητικότητα.
Λοιπόν, τι θα ωθήσει μοιάζει;
Λοιπόν, αν έχουμε μια στοίβα s, στη συνέχεια, να ωθήσει κάτι επάνω s, θα παίρναμε
το μέγεθος του s.
Και αυτό θα είναι το επόμενο ανοικτή θέση του πίνακα μας.
Έτσι, αν έχουμε τρία πράγματα στο stack μας, Στη συνέχεια δίσκους 3 θα είναι το επόμενο
ανοικτή θέση, επειδή το 0, 1, και 2 έχουν ήδη γεμίσει.
>> Έτσι βάζουμε την τιμή σε s.trays [s.size], η τρίτη θέση.
Και τότε θα αυξήσετε s.size να πούμε, hey, είχαμε τρία πράγματα πριν.
Τώρα, έχουμε τέσσερις.
Έτσι την επόμενη φορά που θα ωθήσει, είστε πρόκειται να τεθεί κάτι σε 4.
Ή την επόμενη φορά που θα εμφανιστεί, θα πάμε για να δούμε σε 3 αντί για 4 ή οτιδήποτε άλλο.
Και τότε θα επιστρέψει αλήθεια ας πούμε, hey, τα καταφέραμε.
Αυτό λειτούργησε.
Ως γενικός κανόνας, εάν μια συνάρτηση που είναι θα πρέπει να επιστρέψουν αλήθεια ή
ψευδείς επιστρέφει πάντα αλήθεια, μπορείτε να έχουν κάνει κάτι λάθος.
Έτσι κάνει αυτό το έργο;
>> Λοιπόν, αυτό λειτουργεί μια χαρά για 1, και 2, και 3, και 4, και πέντε.
Αλλά ας πούμε ότι έχω φτάσει ιδιότητά μου.
Έχω στη συνέχεια να εκτελέσετε σε ένα πρόβλημα, διότι εάν το μέγεθος είναι το ίδιο με την ικανότητα, είμαι
τώρα προσπαθεί να βάλει κάτι σε μια πίνακας όπου δεν έχω χώρο.
Έτσι, μια μικρή ελέγχου για να διορθώσετε αυτό.
Αν s.size ΙΚΑΝΟΤΗΤΑ ==, επιστρέφει false.
Διαφορετικά, προχωρήστε και να κάνουμε ό, τι κάναμε.
Λοιπόν, τι άλλο θα μπορούσαμε να ζητήσουμε περίπου για στοίβες;
Τι άλλο πρέπει να μελετήσει;
Τι άλλο πρέπει να ασκήσετε;
>> Λοιπόν, για την εφαρμογή ποπ.
Έχουμε ήδη έκανε ώθηση.
Θα το διορθώσω αυτό.
Μια εφαρμογή που δεν είναι πίνακας, όπου μπορείτε να χρησιμοποιήσετε μια συνδεδεμένη λίστα, ίσως.
Η εφαρμογή μη-int.
Κάναμε ints εδώ.
Αλλά θα μπορούσε να ήταν επιπλέει.
Θα μπορούσα να είμαι χορδές.
Θα μπορούσε να ήταν char αστέρια.
Κοιτάξτε το παρελθόν κουίζ για τα είδη των ερωτήσεις που έχουμε ζητήσει για στοίβες.
>> Θα πω ότι καλύψαμε στοίβες γύρω το ίδιο όπως έχουμε αυτές καλύπτονται από το
τα προηγούμενα χρόνια.
Έτσι, τα ερωτήματα κουίζ θα πρέπει να είναι μια καλή ένδειξη.
Προχωρώντας προς τα εμπρός, ακόμη πιο γρήγορα, ουρές.
Είναι σαν στοίβες.
Αλλά είναι first in, first out.
Αν είσαι Βρετανός, ουρά η λέξη ίσως κάνει πολύ νόημα για εσάς.
Διαφορετικά, μπορεί να έχετε ακούσει για αυτό ως μια γραμμή.
Λειτουργούν σαν τη γραμμή στο κατάστημα της Apple.
Το πρώτο πρόσωπο για να εμφανιστούν στις 3:00 το πρωί είναι η πρώτη
πρόσωπο για να αγοράσει iPad του.
>> Έτσι έχουμε δύο πράξεις -
enqueue και dequeue.
Τοποθέτηση στην ουρά βάζει κάποιος στη γραμμή.
Dequeue τραβά την πρώτη πρόσωπο από τη γραμμή.
Και πάλι, μπορούμε να εφαρμόσουμε αυτό με μία συστοιχία.
Έτσι ποια είναι η struct μας έδειξε σε διάλεξη;
Ήταν αυτό.
Πάλι, οι αριθμοί.
Και πάλι, το μέγεθος και αυτό το νέο μέτωπο πράγμα.
Γιατί είναι κάτι που ονομάζεται το μέτωπο;
Είναι ο δείκτης του επόμενου στοιχείο για dequeue.
Είναι απλά κρατώντας εσωτερικά παρακολουθείτε ο πρώτος άνθρωπος για να δείξει, έτσι ώστε να
μπορεί να τραβήξει έξω όταν χρειάζεται να.
>> Σίγουρα δούμε σημειώσεις από τις διαλέξεις και να προσπαθήσουμε να εφαρμόσουν enqueue και dequeue
κατά τη μελέτη για το κουίζ.
Σημαντικά πράγματα να σκεφτώ.
Αναδίπλωση γύρω, αν το μπροστινό συν το μέγεθος καταλήγει μεγαλύτερο από την ικανότητα.
Και πάλι, αν δομή σας είναι πλήρης, θα πάμε να έχουν ένα πρόβλημα.
Hash πίνακες που έχετε δει πριν.
Οι περισσότεροι από εσάς ίσως εφαρμοστεί αυτά για pset6.
Είναι μια δομή που έχει ως στόχο την O (1) σταθερό χρόνο εισαγωγής και O (1)
συνεχή αναζήτηση του χρόνου.
>> Σε CS50, υλοποιήσαμε αυτό ως μια σειρά από συνδεδεμένες λίστες.
Το βασικό στοιχείο σε ένα πίνακα κατακερματισμού είναι η συνάρτηση κατακερματισμού.
Έτσι μετατρέπει τη συμβολή σας, ας πούμε, λεξικό λέξη, σε αριθμό,
η οποία πρόκειται να είναι ευρετήριό μας.
Και θα χρησιμοποιήσει αυτό το ευρετήριο σε σειρά μας.
Έτσι, εδώ είναι μια χαριτωμένη μικρή εικόνα από study.50.net.
Έχουμε ρίξει όλες τις λέξεις σε hash λειτουργία μας.
Και η συνάρτηση κατακερματισμού μας λέει πού να θέσει αυτά τα λόγια.
>> Αυτό είναι μεγάλη στη γη, όπου υπάρχει μόνο μία λέξη για κάθε υποδοχή.
Αλλά, όπως θυμάστε από pset6, υπάρχει είναι περισσότερες λέξεις από σχισμές.
Έτσι τι συμβαίνει όταν πάρετε μια σύγκρουση;
Αντί για την αποθήκευση ενός αξία, ας πούμε, πίνακα κατακερματισμού 3, θα
αποθηκεύσετε μια συνδεδεμένη λίστα.
Και έτσι αντί να πεπόνι εδώ, θα έχετε μια συνδεδεμένη λίστα,
όπου ο πρώτος κόμβος είναι πεπόνι.
Και ο επόμενος κόμβος είναι γάτα.
Και ο τρίτος κόμβος είναι σύγκρουσης, ας πω, επειδή ξεκινήσει όλα αυτά τα λόγια
με C.
>> Έτσι, οι περισσότεροι από εσάς έκαναν αυτό για pset6.
Εάν δεν κάνετε έναν πίνακα κατακερματισμού pset6 και θα προσπαθήσει κάτι σαν
ένα trie, σίγουρα επανεξετάσει πίνακες κατακερματισμού.
Αν το έκανα pset6, σίγουρα αναθεώρηση πίνακες κατακερματισμού.
Και αν το έκανε για pset6 και δεν έκανε λειτουργήσει αρκετά δεξιά και
είχε πολλά προβλήματα με αυτό, σίγουρα αναθεώρηση πίνακες κατακερματισμού.
Έτσι, το μάθημα είναι πραγματικά σίγουρα αναθεώρηση πίνακες κατακερματισμού.
>> Η συντριπτική μειοψηφία έχετε δοκιμάσει έξω προσπαθεί για pset6.
Εικόνα υψηλού επιπέδου.
Είναι κάτι σαν αυτό, όπου κάθε κόμβος έχει μια σειρά από τα παιδιά, όπου κάθε
παιδί αντιστοιχεί σε ένα γράμμα.
Και κάθε κόμβος λέει επίσης, hey, είμαι μια λέξη.
Έτσι, σε αυτή την περίπτωση, η λέξη Maxwell, αν ακολουθήσετε το Μ στο Α έως το
X-W-E-L-L και στη συνέχεια να ακολουθήσει μία περισσότερο.
Και μπορείτε να πάρετε αυτό το σύμβολο, δέλτα, το οποίο που σημαίνει να σημαίνει αυτό είναι μια λέξη.
Έτσι Maxwell είναι μια λέξη.
Αυτά τα δέλτα είναι όλη σημασιοδοτικών ποια πράγματα είναι λέξεις και η οποία
τα πράγματα δεν είναι.
>> Έτσι, pset6, τα δεδομένα που είναι αποθηκευμένα παράλληλα με κάποιο από τους κόμβους μας ήταν "I am a
λέξη. "Και το δροσερό πράγμα για προσπαθεί είναι να αποδείξει την εισαγωγή και
αναζήτηση σε O (μήκος μιας λέξης).
Έτσι απλά για να περάσει Maxwell, είναι Μ-Α-Χ-W-E-L-L. Έτσι επτά ή οκτώ -
Δεν μπορώ να μετρήσω -
βήματα για να φτάσουμε στο τέλος και να ελέγξει τα πράγματα έξω.
Έτσι γρήγορη εφαρμογή εδώ.
Rob πέρασε από μια συνδεδεμένη λίστα στην μεταθανάτια του.
Έτσι, ελέγξτε ότι έξω.
Λυπάμαι.
Πήγε μέσω trie στην μεταθανάτια του.
Έτσι, ελέγξτε ότι έξω.
>> Αλλά έχετε ουσιαστικά κάθε κόμβος έχει 27 δείκτες στις επόμενες κόμβους και ένας
Λογικό για είμαι μια λέξη.
Αναχώρηση μεταθανάτια Rob για το πώς Αυτό πράγματι εφαρμόζεται.
Τελική δομή μας, τα δέντρα μας και δυαδικά δέντρα αναζήτησης.
Έτσι, αναζητούν σε αυτά, αυτά καλύπτονται πιο πρόσφατα Εβδομάδα 8, τη Δευτέρα.
Ένα δέντρο είναι παρόμοια με μια trie, εκτός από εσάς δεν έχουν απαραιτήτως 27 κόμβους
κάθε σημείο.
Και δεν έχετε αυτά τα δεδομένα σε κάθε βήμα που σημαίνει αν η -
η διαδρομή δεν έχει σημασία.
Λαμβάνοντας υπόψη ότι η trie, η πορεία από πάνω προς τα κάτω, Maxwell, ήταν σημαντικό για μας.
>> Όμως, κάθε κόμβος έχει πολλαπλά τα παιδιά, ίσως.
Έχουμε λίγο περισσότερο λεξιλόγιο.
Η ρίζα του δέντρου είναι στην κορυφή.
Και μπορούμε να πούμε ότι η ίδια η bottommost κόμβους που δεν έχουν
παιδιά είναι τα φύλλα.
Έτσι, σαν ένα trie, ένα δέντρο είναι μια δομή κόμβων.
Ένα κοινό είδος δέντρου που θα πάμε να μιλήσουμε για είναι ένα δυαδικό δέντρο, όπου
κάθε κόμβος δεν έχει καθόλου παιδιά ή ένα παιδί ή δύο παιδιά.
Έτσι, αυτή η εικόνα δεν είναι εδώ ένα δυαδικό δένδρο, επειδή
κόμβος 3 έχει τρία παιδιά.
>> Αλλά αν ήταν να αγνοήσουμε εκείνους, το υπόλοιπο από αυτό είναι ένα δυαδικό δένδρο, διότι
αποδεικνύει την ιδιότητα ότι κάθε κόμβος έχει μηδέν, ένα, ή δύο παιδιά.
Έτσι, πώς θα μπορούσαμε να εκφράσουμε αυτό στον κώδικα;
Θα μπορούσαμε να έχουμε έναν κόμβο όπου κάθε κόμβος έχει ένας ακέραιος στο εσωτερικό του, καθώς
ως δείκτης για το δέντρο στο αριστερό και έναν δείκτη για το δέντρο για το
δεξιά, έτσι ώστε τα δύο παιδιά.
Πώς είναι αυτό χρήσιμο;
Λοιπόν, αν κάνουμε τους κανόνες σχετικά με το πού βάλει κόμβους, μπορούμε να κάνουμε πιο γρήγορες αναζητήσεις.
>> Έτσι, υπάρχει μια έννοια της δυαδικής αναζήτησης δέντρο, όπου όλοι οι κόμβοι σχετικά με την
αριστερό υποδένδρο έχουν μικρότερη αξία από τον κόμβο που ψάχνουμε.
Και όλοι οι κόμβοι στο δεξί υποδένδρο έχουν μεγαλύτερη αξία
από τον κόμβο ρίζα.
Τώρα, που μοιάζει με πολλά λόγια.
Πάω να το βάλει μέσα της διπλής εισαγωγικά και να σας δείξει μια εικόνα.
Τόσο εδώ είναι ένα παράδειγμα ένα δυαδικό δένδρο αναζήτησης.
Δείτε ότι ξεκινάμε με 10.
Πάντα στα αριστερά της 10 είναι μικρότερο από ό, τι.
Και πάντα προς τα δεξιά είναι μεγαλύτερο από αυτό.
>> Αλλά περισσότερο από αυτό, κάθε κόμβος το δέντρο εκφράζει αυτή την ιδιότητα.
Έτσι, ο κόμβος 7 έχει 3 έως το αριστερά και ένα 9 προς τα δεξιά.
Έτσι, όλα αυτά είναι μικρότερα από 10.
Αλλά κοιτάζοντας μόνο εκείνοι, το 7 έχει 3 προς τα αριστερά και 9 του προς τα δεξιά της.
Και ομοίως στα δεξιά, έχει 15 14 προς τα αριστερά και 50 του προς τα δεξιά της.
Έτσι, οι τρεις κόμβοι εκεί, 15, 14, και 50, είναι επίσης ένα έγκυρο δυαδικό δέντρο
ή ένα έγκυρο δυαδικό δένδρο αναζήτησης.
Και γιατί όλα αυτά είναι μεγαλύτερο από 10.
Έτσι, τους επιτρέπεται να σχετικά με το δικαίωμα εκεί.
Είναι μια ερώτηση εκεί;
>> ΚΟΙΝΟ: Πώς θα αντιμετωπίσουμε όταν έχετε δύο εφτάρια;
>> R.J. AQUINO: Ναι.
Πώς μπορείτε να ασχοληθεί με δύο τιμές που είναι το ίδιο;
Ορισμένα δυαδικά δένδρα αναζήτησης λέτε ότι αγνοήσει εις διπλούν, διότι ο στόχος είναι
απλά να πω, έχω δει αυτά τα πράγματα μέχρι τώρα.
Ορισμένα δυαδικά δένδρα αναζήτησης θα μπορούσαμε να πούμε έχουν μια μέτρηση στο εσωτερικό του κόμβου.
Άλλοι μπορεί να πουν ότι τα πάντα για να η αριστερά είναι μικρότερη ή ίση με.
Και πάντα προς τα δεξιά είναι μεγαλύτερο από.
>> Εξαρτάται μόνο από ό, τι η το πρόβλημα είναι είστε επίλυση.
Έτσι, σε ένα λεξικό, για παράδειγμα, μπορείτε δεν θα νοιάζονται για τα διπλότυπα.
Θα τους πετάξει έξω.
Αλλά κάποιο άλλο πρόβλημα που μπορεί να ενδιαφέρονται.
>> ΚΟΙΝΟ: Είναι δυνατόν να έχουν α 1 στα αριστερά του 15, το οποίο
είναι μικρότερο από 10;
>> R.J. AQUINO: Όχι.
Εάν το 14 εδώ ήταν ένα 1, αυτό θα δεν είναι έγκυρο δυαδικό δέντρο αναζήτησης,
γιατί τα πάντα στα δεξιά του 10 πρέπει να είναι μεγαλύτερο από αυτό.
Και θα δούμε γιατί.
Εάν στη γη της αναζήτησης στόχος μου είναι να βρει 14, μπορώ να ξεκινήσω από τη ρίζα.
Έτσι κοιτάζω.
OK.
Εμείς πάμε για να ξεκινήσει από τη ρίζα.
Κοίτα 10.
>> Λοιπόν, 14, ο στόχος μας, είναι μεγαλύτερο από 10.
Γι 'αυτό πρέπει να είναι στα δεξιά.
Αυτό είναι πολύ παρόμοιο με το σύνολο τηλέφωνο πράγμα βιβλίο κάναμε, το δυαδικό
αναζήτηση εκεί.
Αλλά αντί της δυαδικής αναζήτησης σε μια σειρά, είμαστε δυαδικό
αναζήτηση σε αυτό το δέντρο.
Έτσι είμαστε ακόμη ψάχνει για 14.
Λοιπόν, 14 είναι μικρότερη από 15.
Έτσι, αν αυτό είναι το δέντρο μας, θα πρέπει να είναι σε αυτήν την περιοχή εδώ.
Πρέπει να είναι στα δεξιά του 10 και στα αριστερά του 15.
>> Και έτσι έχουμε ελέγξει αυτό κόμβο.
Και yay, βρήκαμε 14.
Είμαι δεν πρόκειται να περπατήσει μέσα από αυτό.
Αλλά εδώ είναι ο κώδικας.
Είναι στην πραγματικότητα σχετικά απλή,
γιατί αυτή είναι αναδρομική.
Τι θα μπορούσαμε να σας ζητήσουμε να κάνετε ένα κουίζ;
Θα μπορούσαμε να σας ζητήσω να γράψετε τον κωδικό αυτό.
Θα μπορούσαμε να σας ζητήσουμε να δούμε αυτόν τον κώδικα και να τροποποιήσετε αυτόν τον κώδικα και να εξηγήσει τι
το κάνει.
Ναι.
Ερώτηση;
>> ΚΟΙΝΟ: Είναι αυτές οι διαφάνειες θα είναι διατίθενται όπως ήταν την τελευταία φορά;
>> R.J. AQUINO: Ναι.
Έτσι, αυτές οι διαφάνειες θα είναι σίγουρα να αναρτηθεί.
>> ΚΟΙΝΟ: Είναι δημοσιεύτηκε στην πραγματικότητα αυτή τη στιγμή στην ιστοσελίδα.
David έκανε ακριβώς αυτό.
>> R.J. AQUINO: Οι διαφάνειες αυτή τη στιγμή στην ιστοσελίδα.
Κατά πάσα πιθανότητα θα μπαλώσουν ένα ζευγάρι τα λάθη που διαπιστώθηκαν και να τα διορθώσετε.
Αλλά υπάρχει ένα ρεύμα έκδοση στην ιστοσελίδα.
Άλλα πράγματα που θα μπορούσαμε να σας ζητήσουμε να κάνετε -
γράψτε ένθετο.
Γράψτε μια επαναληπτική έκδοση του αναδρομική συνάρτηση που σας έδειξα
ή να μιλήσουμε για αυτά τα πράγματα, όπως στην σκέψεις, στα λόγια, στις προτάσεις.
Συγκρίνοντας τους χρόνους λειτουργίας και εξηγώντας τι θα θέλετε να χρησιμοποιήσετε ένα δυαδικό
δέντρο αναζήτησης αντί για ένα hash πίνακα, για παράδειγμα.
>> Έτσι, καταλαβαίνω αυτές τις δομές σε ένα αρκετά βαθύ επίπεδο.
Κατανοήστε πώς να τα γράφουν, πώς να χρήση τους, πώς να μιλήσουμε γι 'αυτούς.
Και θα πρέπει να ρυθμίσετε όλες.
Ερώτηση;
>> ΚΟΙΝΟ: Όταν είστε γραπτώς το δυαδικό δένδρο αναζήτησης, πώς το κάνεις
προσδιορίσει τι αξία να καθιστούν ως τη ρίζα;
>> R.J. AQUINO: Άρα το ερώτημα ήταν, τι αξίας κάνετε ως τη ρίζα;
Ανάλογα με τον κωδικό σας, μπορεί να έχει μια παγκόσμια ρίζα.
Έτσι, μπορεί να έχετε πιθανόν είχε pset6 ένα παγκόσμιο πίνακα κατακερματισμού.
Ή θα μπορούσε να περάσει τη ρίζα στην ως επιχείρημα.
Έτσι, αυτή η λειτουργία αναζήτησης εδώ παίρνει ένα επιχείρημα ένας κόμβος *.
Και έτσι ό, τι κόμβος τυχαίνει να είναι κοιτάζοντας το ένα είστε θεραπεία
ως root σας όταν περάσει μέσα
Και είμαι έτοιμος.
Αυτοί είναι οι διαφάνειες μου.
Το επόμενο πρόσωπο που μπορεί να έρθει ανταλλαγής σε ένα φορητό υπολογιστή και μικρόφωνο.
>> ROB BOWDEN: Νομίζω ότι θα μπορούσε να έχει ερμήνευσε το εν λόγω ζήτημα με διαφορετικό τρόπο.
Αλλά εγώ θα ερμηνευτεί ως, αν έχετε οι αριθμοί 1, 2, και 3, πώς μπορούμε να
ξέρουν να κάνουν τη ρίζα 2 σε αντίθεση με 1 ή 3;
Αν κάνουμε 2 ρίζα, τότε είναι ωραία 1 και 3, προς τα αριστερά και δεξιά.
Αλλά αν 1 είναι η ρίζα, τότε είναι 1 έως το κορυφή, 2 το δικαίωμα, 3 προς τα δεξιά.
Έτσι, από προεπιλογή, δεν ξέρετε τι πρέπει να κάνουν τη ρίζα.
Και για κάθε αλγόριθμο είμαστε περιμένουμε να να σας δώσω, μόνο το πρώτο πράγμα που
ένθετο θα είναι η ρίζα.
Ή εμείς θα σας δώσουμε ένα δυαδικό δέντρο που υπάρχει ήδη που έχει μια ρίζα.
Αλλά και άλλοι αλγόριθμοι τέτοιο ώστε, η ρίζα θα ενημερώσει, έτσι ώστε αν
καταλήγουν στην κατάσταση όπου αυτό είναι 1, 2, 3, θα ενημερώνει αυτόματα να
2 κάνει την νέα ρίζα, έτσι ώστε να είναι ακόμα ωραία βάση.
>> ANGELA LI: Cool.
Γεια σας, παιδιά.
Είμαι Angela.
Και Πάω να τελειώσω C μας και στη συνέχεια να πάνε σε κάποια από την ιστοσελίδα μας
τεχνολογιών -
HTTP, HTML, CSS.
Έτσι, το πρώτο πράγμα είναι ρυθμιστικό επιθέσεις υπερχείλισης.
Έτσι, ας ρίξουμε μια ματιά σε αυτόν τον κωδικό.
Είναι πολύ απλό.
Υπάρχει μια συνάρτηση foo.
Και δεν επιστρέφει τίποτα.
Αλλά παίρνει σε ένα δείκτη σε μια σειρά που ονομάζεται μπαρ.
>> Και πρόκειται να το δηλώσει ρυθμιστικό διάλυμα, το οποίο είναι ένας χαρακτήρας
πίνακα που έχει 12 υποδοχές.
Και χρησιμοποιεί memcpy, η οποία είναι απλά μια λειτουργίας που αντιγράφει από μία διεύθυνση
σε ένα άλλο.
Έτσι, αυτό προσπαθεί να αντιγράψει σε ρυθμιστικό μας, από όποια
μπαρ δείχνοντας.
Έτσι, οποιαδήποτε ιδέα τι είναι λάθος με αυτό τον κωδικό;
>> ΚΟΙΝΟ: Εάν η γραμμή είναι μεγαλύτερη από ό, τι C, που θα αντικαταστήσει.
>> ANGELA LI: Ναι, ακριβώς.
Δεν έχουμε καμία εγγύηση ότι το μπαρ πρόκειται να είναι μικρότερη από 12.
Εμείς απλά έκανε κάποιο αυθαίρετο αριθμό 12.
Και ήμασταν σαν, ας ελπίσουμε ότι εισόδου του χρήστη μας είναι λιγότερο από ό, τι
12 χαρακτήρες.
Έτσι, σε έναν ιδανικό κόσμο, εάν η είσοδος μας είναι πάντα όπως αναμένεται, τότε θα πάρουμε
κάτι σαν, γειά σου.
Αυτό είναι λιγότερο από 12 χαρακτήρες.
Παίρνει διαβάσει σε char c.
Και τότε θα κάνουμε κάτι με αυτό.
Δεν έχει τόση σημασία.
>> Αλλά ένα κακόβουλο άτομο θα μπορούσε να κάνει κάτι περισσότερο όπως αυτό, όπου
να μας δώσει ό, τι μπαρ επισημαίνοντας, πρόκειται να επισημάνω σε αυτή την τεράστια ποικιλία
μόλις Α.
Και αυτός είναι ο τρόπος περισσότερο από 12.
Έτσι πρόκειται να πάει όλος ο τρόπος εδώ κάτω στο σημείο όπου η επιστροφή
διευθύνσεων που χρησιμοποιείται για να είναι.
Έτσι, ας πούμε αυτή τη λειτουργία ονομάζεται foo.
Ίσως foo κλήθηκε από κάποιο άλλο λειτουργία, η οποία κλήθηκε από το κύριο.
Έτσι, όταν foo τρέχει, χρειάζεται να ξέρετε πού να επιστρέψουν.
>> Αν foo κλήθηκε από μια συνάρτηση που ονομάζεται baz, πρέπει να ξέρετε ότι είναι
Πρέπει να πάω πίσω στο baz.
Και αυτό είναι ό, τι αυτή η διεύθυνση επιστροφής εδώ κάτω μας λέει.
Αλλά αν το αντικαταστήσετε με κάποιο άλλο διεύθυνση, σε αυτή την περίπτωση, αυτό είναι ένα
εκπροσώπηση της διεύθυνσης κατά τη πολύ αρχίζοντας από αυτό το ρυθμιστικό, στη συνέχεια,
τι πραγματικά πρόκειται να συμβεί είναι ότι αντί να επιστρέψει πίσω στην baz,
η οποία ονομάζεται λειτουργία μας, είναι ακριβώς πρόκειται να πάει στο μέτωπο του κωδικού αυτού.
>> Και, εάν αυτό ήταν εκεί επειδή ένα κακόβουλος χάκερ μάγκα ήρθε και
ένεση αυτό, τότε ίσως το ποσό αυτό Α δεν είναι πραγματικά Α.
Και αυτό είναι πραγματικά ακριβώς προγραμματίσετε εκείνο διαλείμματα υπολογιστή σας ή κάτι.
Έτσι για να είναι αμυντικός για αυτό το είδος της πράγμα, θα πρέπει ποτέ να υποθέσουμε ότι
που εισάγει ο χρήστης είναι ένα ορισμένο ποσό των χαρακτήρων.
Για παράδειγμα, όταν έκανες ορθογραφικός έλεγχος, σας είπαν ότι τα λόγια ήταν
μόνο πρόκειται να είναι 40 χαρακτήρες μακράς μέγιστο.
Και αυτό ήταν καλό.
>> Αλλά αν όχι, τότε θα πρέπει να φροντίστε να διαβάσετε μόνο σε 45
χαρακτήρες σε μια στιγμή.
Διαφορετικά, μπορείτε να αντικαταστήσετε buffer σας.
Οποιεσδήποτε ερωτήσεις σχετικά με αυτό.
Ναι.
>> ΚΟΙΝΟ: Μπορείς απλά να μιλήσετε λίγο περισσότερο γι 'αυτά;
>> ANGELA LI: Συγγνώμη.
Ναι.
>> ΚΟΙΝΟ: Το μικρόφωνο είναι μόνο για το βίντεο.
Θα προσπαθήσω και έργο.
Γεια σας, παιδιά.
Sup?
Οπότε ας πάμε πάνω από κάποια πράγματα στο Βιβλιοθήκη CS50, που έχετε χρησιμοποιήσει
όλα εξάμηνο, ως επί το πλείστον για να πάρει την είσοδο του χρήστη.
Όπως γνωρίζετε, έχετε συμπεριλάβει το CS50 βιβλιοθήκη με ακριβώς να κάνει CS50.h, η οποία
περιέχει όλα τα πρωτότυπα των λειτουργίες που μπορείτε να χρησιμοποιήσετε, όπως
GetString και GetInt, και GetFloat, κ.λπ..
Και υπάρχει αυτή η γραμμή στο CS50 βιβλιοθήκη η οποία καθορίζει μια σειρά, η οποία
εσείς γνωρίζετε όλα από τώρα είναι απλά ένα char *.
>> Αλλά ας ρίξουμε μια ματιά στο πώς λειτουργεί GetString.
Αυτή είναι μια πολύ συνοπτική έκδοση.
Μπορείτε να σηκώσει τα αρχεία της βιβλιοθήκης CS50 από, νομίζω, manuals.CS50.net.
Και μπορείτε να διαβάσετε μέσω του η πραγματική λειτουργία.
Αλλά και αυτό καλύπτει κάποιες από τα σημαντικά μέρη.
Έτσι έχουμε δημιουργήσει κάποιο ρυθμιστικό με κάποια ιδιότητα.
Και αυτό που κάνουμε είναι να έχουμε ένα χαρακτήρα σε μια στιγμή από το πρότυπο n.
Αυτός είναι όπου ο χρήστης εισάγει κειμένου στην κονσόλα.
>> Και έτσι θα πάμε να διαβάσετε σε ένα χαρακτήρα, εφ 'όσον δεν είναι μια νέα
γραμμή και δεν είναι το τέλος του αρχείου, το οποίο είναι το τέλος του standard input.
Και για κάθε χαρακτήρα που διαβάζουμε στο, αν ο χαρακτήρας καταλήγει προσθέτοντας
με τον αριθμό των χαρακτήρων που έχουμε διαβάσει μέσα και ότι είναι κάτι περισσότερο από την ικανότητά μας,
τότε αυτό που κάνουμε είναι απλά να αλλάξετε το μέγεθος μας buffer, ώστε να είναι διπλάσιο χρόνο.
Έτσι και πάλι, αυτή η προστασία έναντι ρυθμιστικού διαλύματος επιθέσεις υπερχείλισης, επειδή μπορείτε να διαβάσετε στο
ένα χαρακτήρα τη φορά.
Και αν σε οποιοδήποτε σημείο μπορείτε να διαβάσετε στο πολύ πολλά, απλά επεκτείνετε την προσωρινή μνήμη σας.
Μπορείτε να το πολλαπλασιάσετε επί δύο.
Και τότε θα έχετε περισσότερο χώρο.
>> Διαφορετικά, μπορείτε απλά να προσθέσω ένα χαρακτήρα για να αμβλυνθούν.
Και αφού έχετε διαβάσει σε όλα τα χαρακτήρες, θα συρρικνωθεί το ρυθμιστικό
πίσω στο κανονικό μέγεθος, να προσθέσετε μια null τερματισμού, και στη συνέχεια επιστρέφουν.
Τώρα, ας δούμε GetInt.
Μπορεί εσείς να το διαβάσεις;
Μπορώ να κάνετε ζουμ σε ένα κομμάτι.
Δεν ξέρω πώς λειτουργούν οι υπολογιστές.
Δεν πειράζει.
Δεν μπορώ να μεγεθύνετε σωστά.
>> Αυτό είναι πραγματικά δύσκολο.
Λυπάμαι.
Ας δούμε αυτό.
Έτσι τι GetInt κάνει είναι να διαβάζει το πρώτο σε μια σειρά από GetString, η οποία
έχουμε σε εφαρμογή πριν.
Και το σημαντικό μέρος να σημειωθεί εδώ είναι αν αυτή η ανταλλαγή που καταλήγει
ανάγνωση είναι σαν να μην πραγματικά ένα string, τότε θα επιστρέψουν μόλις INT_MAX να
αντιπροσωπεύουν την αποτυχία.
Γιατί επιστρέφουμε INT_MAX αντί αρνητικής 1 ή 1;
Οποιεσδήποτε ιδέες;
>> ΚΟΙΝΟ: [δεν ακούγεται] 1 αρνητική σε ένα.
>> ANGELA LI: Ναι, ακριβώς.
Έτσι, είστε πολύ πιο πιθανό να θέλουν απλά στην είσοδο 1 ή αρνητική 1, όταν σας ζητηθεί
για νιοστή και ό, τι νιοστή Maxes.
Είναι τεράστιο.
Είστε κατά πάσα πιθανότητα δεν πρόκειται να τον χρησιμοποιήσει.
Έτσι, αυτό είναι σαν μια σχεδιαστική απόφαση να βεβαιωθείτε ότι δεν έχετε κατά λάθος
επιστρέψει ένα σφάλμα ή αν δεν επιστρέψετε 1, το οποίο μπορεί να αναλυθεί
ως σωστή απάντηση.
Έτσι, αν μια γραμμή δεν υπάρχει, επιστρέφουμε INT-MAX.
Σε αντίθετη περίπτωση, χρησιμοποιούμε sscanf, η οποία είναι σαν scanf.
Αλλά διαβάζει από ένα string.
>> Και έχουμε αυτή τη σχηματοποιημένη χορδών, η οποία είναι% i% γ.
Και προσπαθούμε και να ταιριάζει με αυτή με ό, τι ο χρήστης μας έδωσε.
Θέλουμε τον αριθμό των συμφωνημένα πράγματα να είναι 1, πράγμα που σημαίνει ότι μόνο
πραγματικά θέλετε να ταιριάζει με έναν ακέραιο που περιβάλλεται από λευκό ίσως
χώρο, ίσως όχι.
Σε αυτή την περίπτωση, αν βάλετε σε κάτι όπως bar, δεν ταιριάζει σε όλους,
γιατί πρέπει να υπάρχει ένας ακέραιος κατά την έναρξη.
Έτσι, ποτέ δεν γύρισε sscan 0.
Έτσι ώστε να μην επιστρέψουν αυτό.
>> Εναλλακτικά, αν έχετε θέσει σε κάτι όπως 1, 2, 3, Α, Β, C, ότι αγώνες
τόσο ο ακέραιος αλλά ο χαρακτήρας μετά από αυτό.
Έτσι sscanf θα επιστρέψει 2, η οποία Επίσης, δεν είναι ιδανική.
Δεν θέλετε 1, 2, 3, A, Β, Γ να είναι μια έγκυρη int.
Έτσι ώστε, επίσης, δεν λειτουργεί.
Αλλά λένε βάζετε σε κάτι σαν 50.
Αυτό θα ταιριάξει με το i%, πράγμα που σημαίνει θα πάρει το διαβάσετε σε n.
Και τώρα, η θα περιέχει τον αριθμό 50.
Και τότε μπορείτε να το επιστρέψετε.
>> Διαφορετικά, θα χτυπήσει Επανάληψη.
Και τότε πηγαίνει ακριβώς ξανά μέχρι μπορείτε να πάρετε μια σωστή είσοδο από το χρήστη.
Οποιεσδήποτε ερωτήσεις σχετικά με αυτό;
>> ΚΟΙΝΟ: Έτσι, εάν επρόκειτο να εκτυπώσετε η αξία του GetInt για [δεν ακούγεται]
θα ήταν μόνο ο ακέραιος και max;
>> ANGELA LI: Ναι.
Έτσι, αν χρησιμοποιείτε GetInt, θα πρέπει να υποθέσουμε ότι δεν θέλετε να νιοστή max
είναι μια έγκυρη είσοδο, γιατί θα πάμε να υποθέσουμε ότι αυτό ήταν κακό.
>> ΚΟΙΝΟ: Αν δεν είχαμε char c και κάποιος έβαλε σε 1, 2, 3, Σαμ, θα είναι
εξακολουθούν να εργάζονται για 1, 2, 3;
>> ANGELA LI: Νομίζω ότι θα μπορούσε να λειτουργήσει.
Αλλά δεν θέλετε να 123Sam να είναι μια έγκυρη εισόδου από ένα χρήστη.
Αυτό δεν είναι πραγματικά μια int.
Γι 'αυτό δεν φαίνεται δίκαιο να αναλύσει ως int.
OK.
Σε αυτή την περίπτωση, ας την κίνηση του με το διαδίκτυο.
Έτσι HTTP δεν είναι γλώσσα.
HTTP είναι απλά το σύνολο των προτύπων για πώς μπορείτε να στείλετε τα πράγματα από πελάτες,
ότι είναι, σε servers.
Αυτό είναι άλλα άτομα στο διαδίκτυο.
>> Έτσι HTTP σημαίνει Hypertext Πρωτόκολλο μεταφοράς.
Είναι η καρδιά και η ψυχή ολόκληρου του ιστού.
Το τμήμα hypertext μόνο αναφέρεται σε HTML.
Η μεταφορά είναι πελάτες όπως θα στέλνουν αιτήματα
εξυπηρετητές, τα οποία δίνουν απαντήσεις.
Και το πρωτόκολλο είναι ακριβώς, πώς περιμένετε ένα διακομιστή να συμπεριφέρονται;
Και πώς είστε υποτίθεται για να συμπεριφέρονται έτσι ώστε να μπορείτε να βελτιώσετε αυτό
διαδικασία της επικοινωνίας;
>> Έτσι, οι αιτήσεις HTTP μοιάζουν πολύ με αυτό.
GET είναι ο τύπος της αίτησης.
Εσείς έχετε δει αιτήσεις GET και τα αιτήματα POST.
Αυτό το δεύτερο πράγμα εκεί, / μου, αυτό είναι μόνο το URI ή η διεύθυνση URL όπου μπορείτε
θέλουν να πάνε μέσα στον ξενιστή.
Έτσι, το αίτημα αυτό ζητά η σελίδα, όπως www.facebook.com / me.
Και αυτό είναι ένα αίτημα GET.
Και τότε αυτό το HTTP/1.1, αυτό είναι μόνο η έκδοση του HTTP που χρησιμοποιείτε.
Είναι σχεδόν πάντα 1.1.
>> Και έπειτα υπάρχει μια δέσμη άλλα πράγματα πάρα πολύ.
Μπορείτε να δείτε πραγματικά αυτά, αν ανοίξει την κονσόλα σας όταν είστε
την περιήγηση στο διαδίκτυο.
Οι απαντήσεις είναι κάπως περισσότερο σαν αυτό.
Το επάνω μέρος είναι, και πάλι, το τον τύπο του HTTP που χρησιμοποιείτε
ακολουθείται από έναν κωδικό κατάστασης.
Έτσι, 200 OK είναι όλα πήγαν.
Εδώ είναι το περιεχόμενό σας.
Το περιεχόμενό σας πρόκειται να ακολουθήσει.
Και τότε θα σας πω τι είδους του περιεχομένου και άλλα πράγματα πάρα πολύ.
>> Οι κωδικοί κατάστασης, υπάρχουν μερικά σημαντικά αυτά που πρέπει να ξέρετε.
200 OK είναι σαν χρυσή όλα είναι καλά.
Όλα τα έργα.
403 Forbidden.
Αυτό πιθανώς έχετε δει, αν έχετε ξεχάσει να chmod κάτι σωστά.
Αυτό σημαίνει ότι δεν έχετε τα σωστά δικαιώματα για την
πρόσβαση ότι στο διακομιστή.
Είναι σαν, όχι, δεν μπορείτε να το δείτε.
404 σημαίνει ότι το πράγμα δεν υπάρχει.
Δεν βρέθηκε.
Έχετε δει πιθανώς ότι πολλά.
>> 500 Εσωτερικό σφάλμα διακομιστή είναι συνήθως σαν κάτι πήγε στραβά από την πλευρά της
του διακομιστή.
Έτσι, όταν υλοποιούσαν pset7, αν είχατε PHP λάθη, θα μπορούσε
πραγματικά να πάτε στη σελίδα και να δείτε μια σωρό πράγματα PHP σφάλματος.
Αλλά αυτό δεν συμβαίνει συνήθως, επειδή ιστοσελίδες δεν θέλουν πραγματικά να
να σας πω γιατί το site τους έχει σπάσει.
Θα πιθανώς ακριβώς επιστρέψει ένα 500 Εσωτερικό σφάλμα διακομιστή.
>> Και έπειτα υπάρχει 418 Είμαι μια τσαγιέρα.
Υπάρχει μια ολόκληρη ιστορία για γιατί αυτό είναι ένα πράγμα.
Αλλά μπορείτε να διαβάσετε γι 'αυτό στον ελεύθερο χρόνο σας.
Υπάρχει μια ολόκληρη δέσμη των άλλους κωδικούς κατάσταση πάρα πολύ.
Αλλά αυτά είναι αυτά θα πρέπει να γνωρίζετε.
Ας μιλήσουμε για την HTML.
HTML, θυμηθείτε, δεν είναι γλώσσα προγραμματισμού.
Είναι μια γλώσσα σήμανσης.
Αυτό σημαίνει ότι περιγράφει το περιεχόμενο.
Θα σας λέει τι ένα έγγραφο HTML φαίνεται ομοειδών ή όχι τι μοιάζει
αλλά το πώς είναι δομημένο.
>> Έτσι ώστε να ορίζει μια δομή και σημασιολογία των ιστοσελίδων.
Είναι σαν, αυτή είναι μια σκέψη.
Αυτή είναι μια διατεταγμένη λίστα.
Αυτό είναι σαν ένα τμήμα της σελίδας μου.
Εδώ είναι ο τίτλος.
Κάνει τέτοια πράγματα.
Δεν το στυλ τίποτα από αυτά, γιατί αυτό είναι ό, τι κάνετε στο CSS.
Και αυτό μοιάζει με μια σειρά ένθετων ετικετών.
Έτσι για να χρησιμοποιήσουμε ένα παράδειγμα ενός πολύ βασικό Η σελίδα HTML, έχετε το DOCTYPE
δήλωση μέχρι εκεί.
>> Αυτή η δήλωση DOCTYPE είναι λέγοντας, είμαστε χρησιμοποιώντας HTML5.
Στη συνέχεια, έχετε το μεγάλο ετικέτα HTML.
Περιέχει ένα κεφάλι και ένα σώμα.
Μέσα από το κεφάλι, έχετε τον τίτλο.
Αυτό είναι ό, τι συμβαίνει στον τίτλο bar του browser σας.
Έχουμε μια ετικέτα σύνδεσμο που συνδέει σε ένα εξωτερικό φύλλο στυλ.
Και τότε έχουμε ένα σενάριο που τραβά από μια εξωτερική JavaScript, καθώς και.
>> Και τότε μέσα στο σώμα μας είναι στην πραγματικότητα αυτό που παίρνει εμφανίζεται στην σελίδα.
Έχουμε μια παράγραφο και στη συνέχεια ένα εικόνα μέσα σε αυτό το σημείο.
Αυτή είναι μία εικόνα της γατάκια.
Παρατηρήστε ότι η εικόνα tag κλείνει από μόνη της.
Έτσι, αντί του ανοίγματος με μια εικόνα και στη συνέχεια να κάνει μια άλλη / εικόνας,
Απλά έχουν αυτό το μικρό κάθετο εδώ, που κλείνει.
Και η ετικέτα εικόνας έχει επίσης αυτό το πλήκτρο χαρακτηριστικό τιμή που ονομάζεται alt.
Αυτό είναι το εναλλακτικό κείμενο που συμβαίνει όταν περνάτε από πάνω.
>> Τα περισσότερα στοιχεία HTML έχουν κάποια τιμή κλειδιού πράγματα που μπορείτε να δώσετε, διάφορα
προσαρμογής.
Ναι.
>> ΚΟΙΝΟ: [δεν ακούγεται].
>> ANGELA LI: Λοιπόν, γι 'αυτό είναι μια χαρακτηριστικό της ετικέτας.
Έτσι, αν ήσασταν χρησιμοποιώντας jQuery, θα μπορούσατε κάνουν επιλέξτε image.getAttribute.
Και τότε μπορείτε να ψάξετε για να πάρει το χαρακτηριστικό alt.
Και θα σας δώσει τα γατάκια.
Αν θυμάστε φόρμες σε HTML, είσοδος στοιχεία θα έχουν τα χαρακτηριστικά όνομα.
Και αυτό είναι που χρησιμοποιεί η PHP για να στείλετε αιτήσεις, όταν υποβάλλεται ένα έντυπο.
>> ΚΟΙΝΟ: Μήπως σας αναφέρω κάτι σχετικά με το πώς, αν χρησιμοποιείτε Kittens.jpg ή
κάτι που έχει τα ελλείποντα υποβάλουν φακέλους ή άλλα αρχεία;
>> ANGELA LI: Ναι.
Έτσι, αυτό είναι ό, τι λέγεται συγγενής μονοπάτι, γιατί δεν δίνω
σας την πλήρη διαδρομή.
Αυτό είναι όπως όταν σε C αν το κάνετε fopen κάποιο αρχείο, αν fopen hi.txt, ότι
hi.txt αναμένεται να είναι στο ίδιο κατάλογο, αν δεν της δώσει μια πιο
πολύπλοκη διαδρομή.
>> ΚΟΙΝΟ: Έτσι μπορείτε να καθορίσετε η οποία φάκελο [δεν ακούγεται];
>> ANGELA LI: Ναι.
Και μπορείτε να αναζητήσετε πώς να το κάνουμε αυτό.
Αλλά αν ήθελε να πάρει έξω Kittens.jpg της μητρικής καταλόγου, θα ήθελα να κάνω
.. / Kittens.jpg.
Ναι.
Λυπάμαι.
Ναι.
Ω άνθρωπος, ξέχασα την ερώτηση.
Ποια ήταν η ερώτηση;
Ω, το ερώτημα ήταν είναι, Kittens.jpg αναμένεται να είναι στον ίδιο κατάλογο;
Και σε αυτή την περίπτωση, είναι.
Αλλά μπορείτε επίσης να δώσει μια συγκεκριμένη πορεία τέτοια ώστε να μην χρειάζεται να είναι.
Καλό;
>> CSS.
Έτσι, CSS, όπως HTML, δεν είναι μια γλώσσα προγραμματισμού.
CSS είναι απλά μια σειρά από κανόνες styling.
Ξεχωρίζει για Cascading Style Sheets.
Και μπορείτε να το χρησιμοποιήσετε σε συνδυασμό με HTML σε σελίδες στιλ.
Έτσι, υπάρχουν τρεις τρόποι μπορείτε να συμπεριλάβετε.
Ένας τρόπος που μπορείτε να κάνετε είναι στο κεφάλι τμήμα του HTML σας, μπορείτε απλά να
ανοίξετε ένα ύφος ετικέτα και στη συνέχεια να κολλήσει κάποια CSS κανόνες εκεί.
Είναι αρκετά εντάξει.
Ναι.
>> ΚΟΙΝΟ: Μπορείτε να βάλετε εκείνες ετικέτες στυλ στο μεταξύ, ας
ας πούμε, του σώματος και / σώμα.
Και τότε θα είναι styling μόνο στο σώμα.
>> ANGELA LI: Θα μπορούσατε.
Θα λειτουργήσει.
Αλλά δεν πρέπει, επειδή styling είναι το είδος των μεταδεδομένων που πρέπει να πάει σε
ο επικεφαλής του εγγράφου σας.
Φορέας πρέπει πραγματικά να περιέχει μόνο τι πραγματικά πρόκειται να
εμφανίζονται στη σελίδα σας.
>> ΚΟΙΝΟ: Έτσι θα έβαζα στυλ στο κεφάλι σου για το στυλ της
ολόκληρη την ιστοσελίδα, έτσι δεν είναι;
>> ANGELA LI: Ναι.
Έτσι, βάζοντας το στυλ εδώ, αυτοί οι κανόνες CSS θα ισχύει για ολόκληρη τη σελίδα με βάση
επιλογείς τους.
Έτσι, ο καλύτερος τρόπος για να το κάνουμε είναι αντί έχουν ένα ύφος ετικέτα στο κεφάλι σας,
Έχετε αυτό το σύνδεσμο για ένα εξωτερικό στυλ φύλλο, όπως σας έδειξα στην
προηγούμενο παράδειγμα.
Αυτό που κάνει είναι να προσπαθεί και βρίσκει το style.css αρχείο και στη συνέχεια να τραβά
και χρησιμοποιεί ότι καθώς η στυλ για τη σελίδα.
Και style.css σας θα ακριβώς μοιάζει με αυτό.
Θα είναι απλώς ένα μάτσο CSS.
>> Και τέλος, υπάρχει ένας άλλος τρόπος που μπορεί να περιλαμβάνουν CSS, η οποία πραγματικά
δεν πρέπει ποτέ να κάνει.
Πρόκειται για την κλήση inline styling.
Και έτσι κάθε στοιχείο HTML μπορεί επίσης να να λάβει ένα χαρακτηριστικό στυλ.
Και στη συνέχεια, σε αυτό το χαρακτηριστικό στυλ, μπορείτε να δώσετε κανόνες CSS.
Έτσι, στην περίπτωση αυτή, ανεξάρτητα div είμαι καθορίζοντας ακριβώς εδώ, πρόκειται να
έχουν ένα μαύρο φόντο και ένα λευκό χρώμα του κειμένου.
Αλλά δεν πρέπει να το κάνετε αυτό, γιατί ό, τι αυτό δεν είναι αυτό που βάζει το στυλ σας
μέσα στο HTML σας.
>> Και ξέρω ότι έχουμε μιλήσει για την HTML είναι η δομή και CSS είναι το στυλ.
Εάν το κάνετε αυτό, αναμιγνύει μαζί.
Και δεν είναι πολύ καθαρό.
Επομένως, μην το κάνεις αυτό.
Χρησιμοποιώντας ένα παράδειγμα CSS, μέχρι εκεί, απλά επιλέξτε το σώμα της HTML
ντοκιμαντέρ.
Και είμαστε σαν, όλα είναι πρόκειται να είναι Comic Sans.
Επίσης, δεν συνιστούμε.
Αλλά θα μπορούσατε να το κάνετε αυτό.
>> Ο δεύτερος κανόνας εδώ, πρόκειται για να επιλέξετε το στοιχείο σχετικά με την
σελίδα με ID κύριο.
Έτσι, ανεξάρτητα από HTML στοιχείο, είπα ID = Κύριος, Πάω να του δώσετε μια
Περιθώριο 20-pixel και να ευθυγραμμίσει τα πάντα, ολόκληρο το κείμενο, προς το κέντρο.
Το τελευταίο πράγμα που επιλέγει με CSS τάξη.
Έτσι, κάθε στοιχείο στη σελίδα που έδωσα μια κατηγορία τμήμα, Πάω να το κάνει
ένα χρώμα φόντο το γαλάζιο.
Ναι.
Αυτό είναι το μόνο που πήρα.
Ερώτηση;
>> ΚΟΙΝΟ: Τι σημαίνει το hashtag πριν από τα κύρια κάνω;
>> ANGELA LI: Το ερώτημα είναι, τι κάνει το hashtag πριν από τα κύρια do;
Σε αυτή την περίπτωση, το κλειδί κατακερματισμού σε CSS σημαίνει επιλέξτε με ID.
Έτσι, αν είχα κάποιο στοιχείο HTML, όπως διαιρώντας = κύρια, αυτό το CSS επιλέγει τον κανόνα
το πράγμα με ID κύριο.
Και ομοίως, η περίοδος μπροστά ενότητα είναι να επιλέξετε από το CSS τάξη ή
επιλέξτε ανά κατηγορία HTML.
>> ΚΟΙΝΟ: Γιατί υπάρχει έχει πριν 6 σε χρώμα του φόντου;
>> ANGELA LI: Ναι.
Έτσι, το ερώτημα είναι, γιατί δεν υπάρχει ένα hash πριν 6;
Αυτό είναι διαφορετικό από αυτό το hash.
Αυτό σημαίνει ότι δίνετε ένα δεκαεξαδικό χρώμα.
Έτσι hex χρώματα, αυτό ακριβώς αντιπροσωπεύει ένα χρώμα.
Και να θυμάστε, όταν τρίκλινα RGB έκανες το από το chipset εγκληματολογίας;
Αυτό είναι παρόμοιο.
Τα δύο πρώτα ψηφία αντιπροσωπεύουν πόσο κόκκινο είναι το χρώμα.
Η δεύτερη, που αντιπροσωπεύουν δύο πόσο πράσινο.
Και η τρίτη αντιπροσωπεύει πόσο μπλε.
Και το hash είναι αυτό πρόκειται να αντιπροσωπεύει ένα χρώμα.
>> Έτσι, τίποτα από 0, 0, 0, 0, 0, 0 έως F, F, F, F, F, F είναι έγκυρη.
Είναι κάποια έγκυρη χρώμα που μπορεί να να εμφανίζεται από το πρόγραμμα περιήγησής σας.
Ερώτηση;
>> ΚΟΙΝΟ: Ποια είναι η διαφορά μεταξύ χρήση από την ταυτότητα και την τάξη;
>> ANGELA LI: Το ερώτημα είναι τι είναι η διαφορά μεταξύ
χρήση από την ταυτότητα και την τάξη;
Μπορείτε να έχετε μόνο ένα στοιχείο σε μια Έγγραφο HTML που έχει μια δεδομένη ταυτότητα.
Έτσι, μόνο ένα πράγμα στη σελίδα μου επιτρέπεται να έχει ID κύριο.
Έτσι, μπορείτε να το χρησιμοποιήσετε για αυτό είναι η μπάλα.
Αυτή είναι η πλοήγηση.
Αυτό είναι το υποσέλιδο.
Τα μαθήματα είναι διαφορετικά, επειδή μπορείτε να εφαρμόζουν τις κατηγορίες ως πολλά στοιχεία HTML
όπως θέλετε.
>> Έτσι, για παράδειγμα, έκανα τμήμα τάξης, επειδή υπάρχει πιθανώς περισσότερα από ένα
στη σελίδα μου.
Είστε ακριβώς επιτρέπεται να έχουν ως πολλά στοιχεία σχετικά με την σελίδα με την ίδια
κατηγορίας, αλλά μόνο ένα με ένα συγκεκριμένο Ιϋ.
>> ΚΟΙΝΟ: Έτσι, η τελεία αντιπροσωπεύει η τάξη;
>> ANGELA LI: Ναι.
Μια κουκίδα αντιπροσωπεύει μια τάξη.
Cool.
Αυτό είναι όλα τα έχω, παιδιά.
Σας ευχαριστώ.
>> [Χειροκροτήματα]
>> ZAMYLA CHAN: Γεια, σε όλους.
Είμαι Zamyla.
Πάω να καλύπτει PHP, MVC, SQL και σήμερα.
Πολλά από τα υλικά που θα είμαι κάλυψη πρόκειται να είναι λίγο πολύ
δεξιά από pset7.
Εντάξει.
Έτσι, ποια είναι η PHP;
PHP σημαίνει PHP Hypertext Προεπεξεργαστή.
Έτσι, από μόνη της, είναι ένα αναδρομικό το όνομα, το οποίο είναι αρκετά δροσερό.
PHP είναι μια server-side scripting γλώσσα, και παρέχει το backend
και οι λογικές βάσεις της ιστοσελίδας μας.
>> Έτσι Angela μιλήσει πολύ για την HTML και CSS το οποίο θα καταστήσει τη δομή
της ιστοσελίδας.
Τι γίνεται όμως αν θέλετε να αλλάξετε ότι περιεκτικότητα σε δυναμικά ή αν διαφέρει
με βάση το χρήστη ή ορισμένες προϋποθέσεις;
Αυτός είναι όπου PHP μπαίνει
Τώρα, τυπικά, η PHP μπορεί να διαρκέσει μερικά λιγότερα γραμμές για να εφαρμόσει το ίδιο πράγμα
σε C. Αυτό συμβαίνει γιατί η PHP χειρίζεται τη μνήμη διαχείρισης για τον προγραμματιστή,
σε αντίθεση με εμάς που έχει να malloc δωρεάν, τέτοια πράγματα.
>> Αλλά δεδομένου ότι η PHP είναι μια ερμηνευτική γλώσσα, τυπικά, θα μπορούσε να εκτελέσει
λίγο πιο αργά από ό, τι C, η οποία είναι ένα μεταγλωττισμένο γλώσσα.
Επειδή είμαστε κινείται προγραμματισμού γλώσσες, ας ρίξουμε μια ματιά στο πώς η
σύνταξη θα διαφέρουν.
Ας είμαστε πολύ προσεκτικοί ώστε να μην μπερδεύονται με αυτό.
Έτσι, με τη σύνταξη της PHP, αν είστε PHP κώδικα σας μέσα από ένα HTML
αρχείο ή μέσα σε ένα αρχείο php. μόνη της, σας πρέπει να επισυνάψουν τον κώδικα στην ανοικτή
PHP και τα κλειστά ετικέτες PHP, όπως Επομένως, όπως και στην οθόνη.
>> Μεταβλητές στην PHP.
Κάθε μεταβλητή θα ξεκινήσει με το σύμβολο $ ακολουθούμενο από το όνομα του
μεταβλητή σας.
Τώρα, οι μεταβλητές στην PHP είναι χαλαρά δακτυλογραφημένο, πράγμα που σημαίνει ότι δεν χρειάζεστε
για να δείξει τι τον τύπο δεδομένων είναι όταν είστε αναγγέλναμε.
Ωστόσο, αυτό δεν σημαίνει ότι δεν έχουν κανένα τύπους καθόλου.
Έτσι, αν δηλώσετε μια μεταβλητή και μόλις που είναι ίσο με 1, και στη συνέχεια, δηλώνω
άλλη μεταβλητή, τίθεται ίση με "1" και στη συνέχεια άλλο ένα 1.0, αλλά,
ανάλογα με τον τύπο της ισότητας φορείς που χρησιμοποιούν, αν θέλετε να συγκρίνετε
σε όλους τους τύπους, τότε θα είναι ίση.
Αλλά αν θέλετε να είστε σίγουροι ότι η τύποι είναι ίσες, η PHP μπορεί να κάνει ακόμα
ότι, παρόλο που δεν δείχνουν τι τύπου είναι όταν
βεβαιωθείτε πρώτα το αρχείο.
>> Τώρα, σε PHP, παρόλο που είμαστε μετάβαση από τον προγραμματισμό
γλώσσες από C, έχουμε ακόμα μας έμπιστος αν η κατάσταση, ακριβώς όπως αυτό.
Έχουμε ακόμα, ενώ βρόχους μας, απλά όπως αυτό, όπου μπορείτε να βάλετε στο αρχείο σας
κατάσταση και στη συνέχεια το σώμα του βρόχου.
Και τότε έχουμε επίσης μας για το βρόχο, το οποίο συνήθως μοιάζει με αυτό.
Έτσι αν θέλετε να επαναλάβετε σε όλους εννέα psets και να υποβάλει και να καλέσετε ένα
submitPset λειτουργία, τότε μπορώ να το κάνω αυτό εδώ, το οποίο εσείς έχετε όλα
γίνεται από αυτό το σημείο.
Συγχαρητήρια, από τον τρόπο.
>> Για την κάμερα, οι άνθρωποι είπε, σας ευχαριστώ.
Τώρα, αν δεν θέλετε να χρησιμοποιήσετε μόνο αυτό για βρόχο, τότε η PHP πραγματικότητα και
Έχει πράγματα που ονομάζεται βρόγχους foreach.
Έτσι, αν είχα μια σειρά ακεραίων, 0 μέσω 8, αποθηκεύονται στις psets συστοιχία,
τότε θα μπορούσα να έχω έναν βρόχο foreach που επαναλαμβάνεται σε κάθε αριθμό σε psets.
Και τότε θα μπορούσα να ονομάσω το ίδιο λειτουργεί οκτώ φορές,
ακριβώς όπως έκανα πριν.
Έτσι, αυτό για κάθε βρόχο είναι ωραίο, διότι δεν έχετε να, αν δεν ξέρετε
το ακριβές μήκος του πίνακα που θα έχουν, στη συνέχεια, χρησιμοποιώντας αυτό το βρόχο foreach
θα φροντίσει για αυτό για σας.
>> Έτσι έκανα psets ως μια σειρά.
Ας δούμε σε αυτό.
Οι πίνακες στην PHP είναι συνήθως το ίδιο με αυτά που είχαμε στο C, όπου
μπορείτε να δηλώσετε έναν πίνακα.
Και εδώ, μπορώ να δηλώσω έναν άδειο πίνακα και στη συνέχεια να δημιουργήσουν δυναμικά με τη χρήση
δείκτες ως ακέραιοι.
Έτσι δείκτη 0, Πάω να αποθηκεύσετε ακέραιος αριθμός που ονομάζεται 1.
Στο δείκτη 1 της λίστας μου, θα πάω για να αποθηκεύσετε την τιμή 2.
Και στο τρίτο δείκτη, αλλά η δεύτερο αριθμό, Πάω να
αποθηκεύσετε τον αριθμό 12.
>> Τώρα, αυτό είναι καλό το ότι λειτουργεί λειτουργεί καλά.
Αλλά λένε ότι έχει σημασία για μένα αυτό που κρατά κάθε δείκτη.
Για μένα, ο δείκτης 0 σημαίνει πως πολλές γάτες που έχω.
Και ο δείκτης 1 σημαίνει πως πολλές κουκουβάγιες έχω.
Και το επόμενο σημαίνει πως πολλά σκυλιά.
Καλά, τότε να διευκρινιστεί ότι, αντί να πρέπει να θυμάστε 0 σχετίζεται με το
γάτες και 1 με τις κουκουβάγιες, μπορώ να χρησιμοποιήσω associative arrays, πράγμα που σημαίνει ότι
αντί των ακεραίων ως δείκτες μου, Μπορώ να χρησιμοποιήσω πραγματικά χορδές.
>> Έτσι αυτό είναι αρκετά χρήσιμο.
Και έχετε ουσιαστικά μόλις αντικατασταθεί οι ακέραιοι με χορδές.
Και εκεί έχετε ένα associative array.
Ναι.
>> ΚΟΙΝΟ: Υπάρχει ένας λόγος που υπάρχει εκεί ένα χαρακτήρα υπογράμμισης για το δεύτερο
μέρει, επειδή η λίστα μου έχει τον πίνακα.
>> ZAMYLA CHAN: Το ερώτημα ήταν, είναι υπάρχει ένας λόγος για τον οποίο υπάρχει μια
υπογραμμίζουν μεταξύ μου και η λίστα;
Όχι.
Αυτό είναι ακριβώς το πώς είμαι ονοματοδοσία μεταβλητή μου.
>> ΚΟΙΝΟ: Την πρώτη γραμμή, είναι μια λέξη.
>> ZAMYLA CHAN: Ζητώ συγγνώμη.
Θα το διορθώσω αυτό.
Ναι.
Θα πρέπει να είναι το ίδιο όνομα μεταβλητής.
Καλή ψαριά.
OK.
Οπότε ας προχωρήσουμε σε string συνένωση.
Αν ήθελα να πάρω δύο χορδές, τότε μπορώ να τα ενώσετε
με τον τελεστή τελεία.
Έτσι, αν έχω Milo ως πρώτο όνομα Μπανάνα και ως επώνυμο, τότε
συνένωση με τον τελεστή τελεία και στη συνέχεια, βάζοντας ένα χώρο μεταξύ
θα κάνει ένα string που περιέχει Milo Μπανάνα, η οποία, στη συνέχεια, μπορώ να επαναλάβω ή,
μάλλον, να εκτυπώσετε.
>> Μιλώντας ηχώ, ας μιλήσουμε για μερικές χρήσιμες -
ουπς.
Λυπάμαι.
Μερικές χρήσιμες λειτουργίες PHP.
Έτσι έχουμε το -
τεχνικές δυσκολίες.
Ένα δευτερόλεπτο.
Το έστειλα.
Προβλήματα PowerPoint.
Και είμαστε πίσω με λειτουργίες PHP.
>> Έτσι έχουμε το απαιτεί η λειτουργία, όπου αν περάσετε σε ένα αρχείο, εδώ είναι απλά
ένα παράδειγμα ενός αρχείου που Θα μπορούσε να περάσει μέσα
Στη συνέχεια, αυτό θα περιλαμβάνει τον κώδικα PHP από το αρχείο που μου δείχνουν.
Και θα αξιολογήσει ότι μέσα
Στη συνέχεια, έχουμε επίσης ηχώ, η οποία είναι παράλληλη με τις printf.
Exit είναι μια παράλληλη να σπάσει, το οποίο εξέρχεται από το μπλοκ
κώδικα που είστε μέσα
Και στη συνέχεια άδειο έλεγχοι εάν ένα δεδομένο μεταβλητή είναι σαν null ή μηδέν ή
ό, εξισώνεται με το να είναι άδειο.
Ναι.
>> ΚΟΙΝΟ: Για την αλληλουχία συμβολοσειρών φορέα dot μία, σε PHP, είναι ότι η
ίδιο με το JavaScript, όπου πρόκειται για τη χρήση το dot για την συνένωση σημαίνει συν;
Έτσι, για το πλήρες όνομα, θα μπορούσατε να έχετε δολάριο υπογράψει το πρώτο + + και στη συνέχεια να διαρκέσει;
>> ZAMYLA CHAN: Ναι.
Έτσι, το ερώτημα ήταν αν σε PHP εμείς μπορεί να χρησιμοποιήσει την ίδια αλληλουχία συμβολοσειρών
όπως σε JavaScript με τα συν.
Και ο Ιωσήφ θα μπει σε αυτό αργότερα.
Πιστεύω ότι έχει μια διαφάνεια σε αυτό.
Στην πραγματικότητα, τα πράγματα είναι διαφορετικά.
Έτσι, σε JavaScript, θα πρέπει να χρησιμοποιήσετε το συν για να ενώσετε χορδές.
Και στην PHP, θα πρέπει να χρησιμοποιήσετε τον τελεστή τελεία.
Έτσι είναι διαφορετική.
>> OK.
Έτσι τώρα που έχουμε καλύψει όλα Αυτό PHP, όπου δεν
πραγματικά να έρθει σε πρακτικό;
Λοιπόν, έρχεται σε βολικό όταν να το συνδυάσετε με HTML μας.
Έτσι, η PHP θα μας δώσει τη δύναμη να τροποποιήσει το περιεχόμενο HTML μιας σελίδας πριν από την
φόρτωση του.
Έτσι, με βάση διαφορετικές συνθήκες, συνήθως το συγκεκριμένο χρήστη που είναι
συνδεδεμένος, μπορούμε να εμφανίσουμε διαφορετικές πληροφορίες.
Λίντα, δεν έχετε μια ερώτηση;
>> ΚΟΙΝΟ: Μπορείτε να ενώσετε ακέραιος, επίσης;
>> ZAMYLA CHAN: Ναι, μπορείτε.
Άρα το ερώτημα ήταν αν μπορείτε ενώσετε ακέραιοι ή άλλων
variable.s τώρα, θα προχωρήσουμε σε MVC, η οποία Είναι ένα παράδειγμα που χρησιμοποιήσαμε στην
pset7 και πολλοί σχεδιαστές ιστοσελίδων χρησιμοποιούν για την οργάνωση του κώδικα στα αρχεία
στην ιστοσελίδα τους.
M ξεχωρίζει για το μοντέλο.
Και βασικά, τα αρχεία μοντέλο θα ασχοληθεί με αλληλεπιδράσεις με τη βάση δεδομένων.
Δείτε τα αρχεία, που αφορούν το την αισθητική της ιστοσελίδας.
Και οι λαβές Controller αιτήματα των χρηστών, αναλύει
δεδομένων, κάνει και άλλη λογική.
>> Σε pset7, συνδυάσαμε το μοντέλο και ο ελεγκτής.
Και εμείς απλά κάλεσε τους ελεγκτές και βάζουμε στο δημόσιο κατάλογο.
Και τα αρχεία άποψη, εμείς τα χρησιμοποιούν ως πρότυπα στον κατάλογο προτύπων.
Έτσι, το διάγραμμα αυτό εδώ αποτελεί επίσης το ίδιο είδος της διαίρεσης με το
μοντέλο και ο ελεγκτής σε μωβ εδώ στην αριστερή
η προβολή στα δεξιά.
Έτσι, αυτό είναι μια σχηματική ότι κάποιοι από εσάς μπορεί να δει σε ώρες γραφείου ή
διαγράμματα που ήμασταν σχέδιο, όπως σας ήταν αναφέρονται για το chipset σας.
>> Έτσι, εδώ, σε ένα δεδομένο ελεγκτή, ένα μοντέλο ελεγκτή, έχουμε λειτουργίες
που σχετίζονται με την αναζήτηση του SQL βάση δεδομένων, την εκτέλεση PHP λογική.
Ίσως θα κοιτάζω προς τα πάνω ένα απόθεμα στο Yahoo!
Οικονομικών.
Ή ίσως, θα κοιτάξω να να δούμε αν ένας χρήστης είχε υποβληθεί
αποτελούν ήδη προτού επισκεφτεί τη σελίδα σας.
Και τότε θα καταστήσει α αποτελούν εδώ.
Μετά από αυτή η μορφή είχε υποβληθεί από τον χρήστη, η ενέργεια που ήταν
καθορίζονται στο HTML tag της φόρμας θα έδειχνε τη σελίδα που
επιστρέφει τα δεδομένα σε.
>> Έτσι, όλες οι πληροφορίες θα είναι έστειλε πίσω στο χειριστήριό σας.
Στη συνέχεια, μπορείτε να κάνετε πιθανώς λίγο πιο λογική σε αυτό και ίσως να εκτελέσει μερικές
περισσότερα ερωτήματα στη βάση δεδομένων SQL και Στη συνέχεια, τέλος, να καταλήξουμε σε μια ωραία
συσκευασμένο σύνολο των πληροφοριών που θα κάνατε περάσει σε κάποιο άλλο πρότυπο
που εμφανίζεται τις πληροφορίες.
Τώρα, πώς μπορούμε πραγματικά να συσκευάζουν ότι οι πληροφορίες up;
Λοιπόν, έχουμε μια λειτουργία που ονομάζεται Render που ήταν στο αρχείο functions.php σε
pset7, όπου μπορείτε να περάσετε στο όνομα του ένα αρχείο, το όνομα του προτύπου.
>> Και τότε μπορείτε επίσης να περάσει στο ένα associative array.
Και έτσι ώστε associative array αντιπροσωπεύει τις διάφορες πληροφορίες που
που θέλετε να περάσετε μέσα
Τώρα, τι πρόκειται να είναι σταθερή σε Αυτά τα παραδείγματα είναι ότι τα πλήκτρα ή,
μάλλον, τα κλειδιά του συνεταιριστικού συστοιχίες, αυτά είναι ό, τι πρόκειται να είναι
αναμένεται να είναι σταθερή από το πρότυπο, γιατί ξέρει ότι χρειάζεται
κάτι που ονομάζεται μήνυμα ή κάλεσε το όνομά.
Και τότε τα πράγματα σχετικά με το δικαίωμα, η πραγματικές τιμές, οπότε σε αυτή την περίπτωση, οι οποίοι είναι
ένα καλό αγόρι και Milo, εκείνοι θα να είναι οι αξίες που αλλάζουν
ότι ο ελεγκτής αλλάζει κάθε φορά ή με βάση μια συγκεκριμένη κατάσταση και
ότι θα περάσει μέσα
>> Έτσι, εδώ σε πρότυπα, θα δούμε ότι χρησιμοποιείτε HTML ειδικούς χαρακτήρες,
πράγμα που σημαίνει κατά βάση απλώς ότι θέλουμε για να πάρει το string από ομοτίμους ότι η
χρήστης που έκανε
Και θέλουμε να υποκαταστήσει Μήνυμα εκεί.
Έτσι, λοιπόν, όταν στην πραγματικότητα δείτε το αρχείο, η ειδική
Οι πληροφορίες αυτές μεταβιβάζονται μέσα
Σημειώστε ότι το κλειδί το πώς να καταστήσει τα έργα είναι ότι τα κλειδιά του συνεταιριστικού
συστοιχίες, εκείνοι γίνει μεταβλητή ονόματα εδώ.
Και έτσι οι τιμές από αυτό το κλειδί στην associative array, στη συνέχεια γίνεται η
τιμή της μεταβλητής.
>> Τώρα, ας προχωρήσουμε σε SQL.
Ξεχωρίζει για Δομημένα Ερώτημα Γλώσσας.
Και έτσι αυτό είναι απλά ένας προγραμματισμός γλώσσα που σχεδιάστηκε
για τη διαχείριση των βάσεων δεδομένων.
Και ήρθε σε πρακτικό για μας ιστοσελίδα χρηματοδότηση pset7 μας.
Ουσιαστικά, είναι απλώς ένας εύκολος τρόπος για να παρακολούθηση και τη διαχείριση αντικειμένων και πινάκων
και τη σύνδεσή τους με το άλλο.
Τώρα, σκεφτείτε SQL βάση δεδομένων σας ουσιαστικά ως αρχείο Excel, ίσως,
με πολλαπλές καρτέλες φύλλων.
>> Έτσι, θα μπορούσατε να έχετε πολλούς πίνακες, ίσως, ότι συνδέεται με το ένα το άλλο.
Και σαν Excel, έχουμε πολλά η λειτουργικότητα που θέλουμε.
Για παράδειγμα, μπορούμε να επιλέξουμε ορισμένες σειρές.
Μπορούμε να εισάγετε πληροφορίες.
Μπορούμε να ενημερώσετε σειρές.
Και μπορούμε επίσης να διαγράψετε τα πράγματα.
>> Η SQL επιλογή έργων επιλέγοντας σειρές ή μια σειρά από συγκεκριμένες στήλες από ένα
βάση δεδομένων που ταιριάζουν με ένα συγκεκριμένο τα κριτήρια που αναφέρει.
Έτσι, εδώ όταν βλέπω select * from μάγους, όπου σπίτι = Ravenclaw, στη συνέχεια,
Είμαι επιλέγοντας *, πράγμα που σημαίνει ότι είμαι επιλέγοντας κάθε στήλη σε ότι
γραμμή από τον πίνακα οδηγούς, αλλά μόνο αν η στήλη σπίτι ισούται Ράβενκλοου.
Τώρα, αυτό είναι καθαρή ή SQL.
Έτσι, αν πήγα στο phpmyadmin, το οποίο είναι το συγκεκριμένο τρόπο που χρησιμοποιούμε για να διαχειριστούμε
SQL βάσεις δεδομένων μας, τότε θα μπορούσατε να τοποθετήσετε ότι στην ιστοσελίδα phpMyAdmin.
Και αυτό θα εκτελέσει.
>> Αλλά πραγματικά θέλουμε να κάνουμε ότι από την πλευρά της PHP.
Έτσι, πώς θα το κάνουμε αυτό;
Λοιπόν, θα χρησιμοποιήσετε τη λειτουργία αναζήτησης, το οποίο ουσιαστικά εκτελεί αυτό το ερώτημα SQL.
Χρησιμοποιώντας;
ως σύμβολο κράτησης θέσης, μπορούμε να περάσουμε σε ορισμένες τιμές σε string μας ότι
θέλετε να αντικαταστήσετε.
Έτσι, ίσως είμαι αποθήκευση διαφορετικών τιμές στο curr_house, η οποία
αντιπροσωπεύει το τρέχον σπίτι ότι θα πάω μέσα.
Έτσι, μπορώ να περάσω ότι ως σύμβολο κράτησης θέσης με το ερωτηματικό.
Και τότε εγώ θα εκτελέσει ουσιαστικά το ίδιο πράγμα όπως έκανα και πριν, εκτός από
τώρα, είμαι σε PHP.
>> Και το ερώτημα θα επιστρέψει ένα associative array.
Και Πάω να το αποθηκεύσετε σε σειρές.
Τώρα, το ερώτημα μπορεί πάντα αποτυγχάνουν.
Ίσως το ερώτημα SQL δεν μπόρεσε να εκτελέσει επειδή ο πίνακας δεν υπάρχει.
Ή ίσως, η στήλη δεν υπήρχε.
Κάτι πήγε στραβά.
Λοιπόν, σε αυτή την περίπτωση, θα θελήσετε να κάνετε βεβαιωθείτε ότι έχετε ελέγξει αν η
το ερώτημα επιστρέφει false.
Και αυτό είναι με τη χρήση του τριπλού ισούται με τη λειτουργία εκεί.
>> Και τότε ζητώ συγνώμη, που αποτελεί άλλο ένα Λειτουργία CS50, περνώντας ένα μήνυμα.
Και αν εξετάσουμε συγγνώμη, όλα είναι πραγματικά κάνει είναι να καταστήσει apology.php.
Ναι.
>> ΚΟΙΝΟ: Μπορείς να εξηγήσεις τι αυτό αστέρι κάνει μεταξύ επιλέξτε και από;
>> ZAMYLA CHAN: Ναι, απολύτως.
Έτσι, το αστέρι ανάμεσα σε επιλεγμένα και από σημαίνει ότι θέλω να επιλέξετε το σύνολο
ολόκληρη γραμμή από το τραπέζι μου.
Θα μπορούσα να έχω αναφέρονται επιλέξτε το όνομα, το έτος, το σπίτι.
Και θα πάρει, μόνον οι τρεις στήλες στο τραπέζι μου.
Αλλά αν πω επιλέξτε *, τότε εγώ θα πάρετε τα πάντα σε αυτή τη στήλη.
Στη συνέχεια, Πάω να πάτε στην πρώτη πλάτη.
>> ΚΟΙΝΟ: Έτσι, αυτό εξακολουθεί να είναι σε SQL, έτσι δεν είναι;
Είναι αυτό το ερώτημα ή είναι αυτή η PHP;
>> ZAMYLA CHAN: Είμαστε σε ένα ερώτημα.
Έτσι, αυτό είναι σε PHP.
Έτσι, χρησιμοποιώντας το ερώτημα λειτουργία PHP, είμαστε εκτέλεση ενός ερωτήματος SQL.
>> ΚΟΙΝΟ: Υπάρχει κάτι στην SQL case-sensitive, όπως επιλέξτε
ή μάγους ή το σπίτι;
>> ZAMYLA CHAN: Υπάρχει κάτι σε SQL πεζών-κεφαλαίων;
Πιστεύω πως ναι.
Πιστεύω ότι SELECT και FROM Και πού είναι case-sensitive.
Όχι;
>> ROB BOWDEN: Λοιπόν, αυτό είναι το αντίθετο.
Τα ονόματα των στηλών και τα μέσα του πίνακα, όλα αυτά είναι case-sensitive.
Αλλά οποιαδήποτε από τις λέξεις κλειδί MySQL, όπως SELECT, FROM και WHERE, αυτά δεν είναι
case-sensitive.
OK.
Έτσι, το αντίθετο από αυτό που είπα.
Έτσι, όλες οι λέξεις-κλειδιά MySQL -
επιλέξετε, από όπου - εκείνες δεν είναι case-sensitive.
Αλλά ό, τι άλλο είναι.
OK.
Μπορείτε στο μπροστινό μέρος.
>> ΚΟΙΝΟ: Αν έχω $ σειρές από την άποψη της περισσότερες από μία γραμμές, αυτό σημαίνει ότι είναι
απλά γίνεται ένα associative array;
>> ZAMYLA CHAN: Άρα το ερώτημα ήταν αν σειρές έχει περισσότερες από μία γραμμή σε αυτό, δεν
να γίνει ένα associative array;
Γι 'αυτό είναι μια σειρά από συνειρμική συστοιχίες ήδη.
Έτσι, ακόμα κι αν υπάρχει μόνο μία γραμμή επιστραφεί, τότε θα πρέπει να πάτε στο
δείκτης 0 από αυτό το αποτέλεσμα.
Και τότε θα έχουν αυτό πρώτη γραμμή.
Ναι, Belinda;
>> ΚΟΙΝΟ: Όταν χρησιμοποιείτε ===, αυτό είναι το μόνο παράδειγμα;
Ή είναι άλλοι εκεί;
>> ZAMYLA CHAN: Έτσι, στην περίπτωση αυτή, === είναι μια σύγκριση σε όλους τους τύπους.
Λυπάμαι. === Είναι μια σύγκριση που συγκρίνει τους τύπους.
Και στη συνέχεια == συγκρίνει σε όλους τους τύπους.
>> ΚΟΙΝΟ: Μπορείτε να εξηγήσετε τι σειρών είναι σε αυτή την κατάσταση;
Είναι σειρά των δεδομένων;
>> ZAMYLA CHAN: Στην επόμενη διαφάνεια, είμαι πρόκειται να εξηγήσω τι είναι σειρές.
Έτσι, αν δεν σας πειράζει που κατέχουν μακριά σε αυτό.
Και τότε στην πλάτη;
>> ΚΟΙΝΟ: Για λειτουργίες όπως το ερώτημα, απαλλάξουν και να ζητήσει συγγνώμη [δεν ακούγεται];
>> ZAMYLA CHAN: Το ερώτημα ήταν κατά πόσον αυτές οι λειτουργίες - ερώτημα, συγγνώμη,
και να καταστήσει -
είναι κοινά σε όλη την PHP.
Αυτοί είναι αυτοί που CS50 έγραψε για pset7.
Και Jay;
>> ΚΟΙΝΟ: Όταν πρέπει να πω $ _SESSION, Είναι ότι μόνο για τις ταυτότητες;
Ή θα μπορούσε να σας πει ότι εδώ;
>> ZAMYLA CHAN: Άρα το ερώτημα ήταν, όταν χρησιμοποιούμε $ _SESSION, αυτό ήταν μια ειδική
καθολική μεταβλητή που χρησιμοποιούμε.
Εδώ η μεταβλητή αυτή θα είναι τοπική στη συνάρτησή μας.
Έτσι, είμαστε απλά δηλώνοντας μια νέα μεταβλητή.
>> ΚΟΙΝΟ: Πώς συγγνώμη εφαρμοστεί;
>> ZAMYLA CHAN: Το ερώτημα ήταν, πώς συγγνώμη εφαρμοστεί;
Και νομίζω ότι αυτό είναι στην πραγματικότητα μια αρκετά ορθής πρακτικής για σας παιδιά να πάνε σε
το τμήμα functions.php και να κοιτάξουμε συγγνώμη και να δούμε πώς θα μπορούσατε να έχετε
κάνει αυτό στον εαυτό σας.
Έτσι, μπορώ να αφήνω σε εσάς, αλλά μόνο λένε ότι αν κοιτάξετε συγγνώμη,
Στη συνέχεια παίρνει το μήνυμα που υποβάλλονται για να ζητήσει συγγνώμη, και στη συνέχεια
καθιστά αυτό το μήνυμα.
Οποιεσδήποτε άλλες ερωτήσεις;
Λατρεύω ερωτήσεις.
Έτσι, να τους κρατήσει έρχονται.
>> ΚΟΙΝΟ: [δεν ακούγεται]
echo ή εκτύπωσης από εκεί;
>> ZAMYLA CHAN: Το ερώτημα ήταν, δεν θα μπορούσε απλά έχουν βάλει
echo ή εκτύπωσης από εκεί.
Έτσι, αυτό θα κάνει κάτι ελαφρώς διαφορετική.
Αυτό θα εκτυπωθεί ερώτημα απέτυχε σε αυτό -
καλά, αυτή τη στιγμή, είμαστε στην πραγματικότητα ελεγκτή μας.
Έτσι δεν έχουμε στην πραγματικότητα HTML συσταθεί εδώ.
Ζήτα συγνώμη καθιστώντας apologize.php σας ανακατευθύνει στην πραγματικότητα να apology.php.
OK.
>> Έτσι τώρα, ας πάμε για να αντιμετωπίσει την ερώτηση από τις προηγούμενες για το τι
Είναι πραγματικά σειρές.
Λοιπόν, το ερώτημα θα επιστρέψει μια σειρά από γραμμές.
Και κάθε σειρά εκπροσωπείται από ένα associative array.
Έτσι, αν έχω εκτελεστεί ένα ερώτημα SQL και Έχω αποθηκεύσει το αποτέλεσμα της σε σειρές, στη συνέχεια,
χρησιμοποιώντας ένα βρόχο foreach, τότε η συστοιχία το όνομα είναι το πρώτο εκεί - σειρές.
Και στη συνέχεια, Πάω να καλέσετε κάθε σειρά εκεί $ γραμμή.
>> Έτσι επανάληψη πάνω από αυτό, μπορεί στη συνέχεια να πρόσβαση στήλη το όνομα του δεδομένη σειρά του,
έτος της στήλης και η στήλη το σπίτι.
Σημειώστε ότι δεν θα ήταν σε θέση να να το κάνετε αυτό με τις σειρές, επειδή ο δείκτης σειρές
το όνομα δεν υπάρχει.
Γραμμές είναι απλώς μια σειρά από associative arrays.
Έτσι, έχετε δύο επίπεδα.
Μόλις έχετε τη σειρά των γραμμών, θα πρέπει να μπει σε αυτό.
Και τότε μπορείτε να αποκτήσετε πρόσβαση στις στήλες.
Μήπως αυτό να καταστεί σαφές;
Ναι, μπροστά;
>> ΚΟΙΝΟ: [δεν ακούγεται] ανοίξει παρένθεση για [δεν ακούγεται];
>> ZAMYLA CHAN: Με συγχωρείτε;
>> ΚΟΙΝΟ: Οι παρενθέσεις.
>> ZAMYLA CHAN: Αυτά εδώ;
Αυτό είναι που μου επιτρέπει να συμπεριλάβει αυτή η μεταβλητή.
Ναι.
>> ΚΟΙΝΟ: Όταν εκτυπώνετε, είσαι εκτύπωση στον κώδικα HTML;
>> ZAMYLA CHAN: Ναι.
Όταν εκτυπώνετε, αυτό εδώ είναι μέσα πρότυπό μου τώρα, έτσι
την άποψή μου για τη μέθοδο MVC.
Έτσι είμαι εκτύπωση στην HTML.
>> ΚΟΙΝΟ: Έτσι, αν πήγαμε σε προγραμματιστή εργαλεία μετά την εκτέλεση αυτή, θα μπορούσαμε να
ότι στην πραγματικότητα στον κώδικα;
>> ZAMYLA CHAN: Αυτό είναι ένα μεγάλο ερώτηση, ναι.
Έτσι, αν πήγε σε εργαλεία για την ανάπτυξη το Firefox χρησιμοποιώντας το Firebug ή
Chrome, τότε ναι, θα μπορούσε δείτε το συγκεκριμένο HTML.
Γι 'αυτό δεν θα δείξει $ γραμμή ["Όνομα"].
Θα δείξει οποιοδήποτε εφαρμοστέο όνομα είναι σε αυτή τη γραμμή.
>> ΚΟΙΝΟ: Ακριβώς ένα γενικό ζήτημα, τι tr td και ορίζεται ως;
Γιατί θα έχουμε [δεν ακούγεται];
>> ZAMYLA CHAN: Πίνακας σειρά tr, πίνακας στη συνέχεια td στήλη.
OK.
>> ΚΟΙΝΟ: Ναι, είναι δεδομένα πίνακα.
>> ZAMYLA CHAN: δεδομένα του πίνακα.
Ναι.
>> ΚΟΙΝΟ: Είναι μια σειρά στην οποία η γραμμή αντιμετωπίζεται σαν μια στήλη;
>> ZAMYLA CHAN: Συγγνώμη.
Μπορείτε να το επαναλάβετε;
>> ΚΟΙΝΟ: Πως θα απεικονίσει σειρές;
>> ZAMYLA CHAN: Πώς θα απεικονίσει σειρές σε τι είδους τρόπο;
Μιλάς γι 'αυτές σειρές εδώ ή οι σειρές tr;
>> ΚΟΙΝΟ: Οι σειρές.
>> ZAMYLA CHAN: Οι σειρές αυτές εδώ;
Θα απεικονίσει αυτό ως Εκτελώ το ερώτημά μου.
Και λέει, εντάξει, έχω είτε 0 έως n το ποσό των γραμμών που ταιριάζουν με τα κριτήρια
ότι είχε ερωτηματικά.
Έτσι, δεν έχω κάποιο αριθμό των γραμμών.
Έτσι, σειρές, οι σειρές $, καταστήματα έχουν μία από αυτές τις σειρές σε μία συστοιχία.
Έτσι, ακόμα κι αν είναι μόνο ένας από αυτούς, είναι ακόμα μια σειρά από γραμμές που ταιριάζουν.
>> Έτσι λοιπόν, για παράδειγμα, αυτό είναι παρόμοια με όταν σας παρατραβηγμένο
η μνήμη cache από τους χρήστες.
Και τα κριτήρια εκεί όπου ήταν ID ισούται με το ID της συνεδρίας.
Πραγματικά δεν υπάρχει μόνο μία γραμμή ότι θα μπορούσε να ταιριάζει με αυτό.
Αλλά ακόμα σειρές μόλις επέστρεψε μία σειρά.
Έτσι θα πρέπει να πάτε σε σειρές, δείκτη 0, ο δείκτης cache σε
πράγματι να cache σας.
>> ΚΟΙΝΟ: Είναι η λειτουργία εκτύπωσης στην απηχούν το ίδιο πράγμα;
>> ZAMYLA CHAN: Ναι.
Ναι.
Εκτυπώστε μια ηχώ του ίδιου.
>> ΚΟΙΝΟ: Είναι ο βρόχος foreach η μόνος τρόπος για να δείκτη σε σειρές;
>> ZAMYLA CHAN: Είναι ένας βρόχος foreach ο μόνος τρόπος που μπορείτε να
επαναλάβει στις γραμμές;
Όχι.
Μπορείτε επίσης να χρησιμοποιήσετε ένα για βρόχο, υπό την προϋπόθεση ότι γνωρίζετε το μήκος
του πίνακα της σειράς του.
>> ΚΟΙΝΟ: Μπορείτε να έχετε πρόσβαση χρησιμοποιώντας μια σειρά, όπως [δεν ακούγεται];
>> ZAMYLA CHAN: Έτσι δεν μπορείτε να αποκτήσετε πρόσβαση χρησιμοποιώντας μόνο γραμμή, αν δεν έχετε ένα
βρόχο foreach υπό την προϋπόθεση ότι δεν έχετε δηλώσει γραμμή.
Ναι.
Ναι, στο λευκό.
>> ΚΟΙΝΟ: Λοιπόν, τι tr td και να κάνω;
>> ZAMYLA CHAN: Έτσι tr και td είναι ετικέτες HTML.
tr υποδεικνύει την αρχή από μια γραμμή πίνακα.
Και κάθε td δείχνει μια νέα στήλη πίνακα δεδομένων.
>> ΚΟΙΝΟ: Για μια οπτική του τι είναι μια σειρά είναι παρόμοια, απλά φανταστείτε τον SQL, πώς
έχουν μια σειρά.
[Δεν ακούγεται].
>> ZAMYLA CHAN: Ναι.
Αυτό είναι ένα μεγάλο σημείο.
Μπορείτε να απεικονίσει τις γραμμές, όπως ακριβώς όπως σε έναν πίνακα του Excel, απλά
ο κατάλογος των γραμμών.
OK.
Εντάξει.
Έτσι, τώρα που έχουμε περάσει πάνω από επιλογή, αν δεν υπάρχουν άλλες ερωτήσεις, θα
πάει πάνω σε ένθετο.
Έτσι αν θέλετε να τοποθετήσετε σε κάποια τραπέζι και να εισαγάγετε ορισμένα στήλη
τιμές, θα μπορούσα να εισάγετε σε Ravenclaw κατά το έτος 7.
Αλλά μερικές φορές μπορεί να υπάρχουν εις διπλούν αξίες, όπως είδαμε στο pset7 όταν
είχαν την ενημέρωση του χαρτοφυλακίου μας.
>> Έτσι, στην περίπτωση αυτή, θέλουμε να χρησιμοποιήσουμε ON ΑΝΑΠΑΡΑΓΕΤΕ KEY UPDATE, έτσι ώστε να μην
αποθηκεύουν πολλαπλές σειρές με το ίδιο αξία, αλλά μάλλον ενημερώσετε.
Στη συνέχεια, έχουμε πραγματικά την ενημέρωση, που δεν αποτελεί ένθετο.
Είναι απλά μια ενημερωμένη έκδοση, όπου μπορείτε να ενημερώσετε σε ένα ορισμένο πίνακα με ένα δεδομένο
κριτήρια και στη συνέχεια, τελικά, να διαγράψετε, η οποία κάνει μια πολύ παρόμοιο πράγμα.
>> ΚΟΙΝΟ: Θα μπορούσατε να εν συντομία πάει πάνω από το διπλό κλειδί;
>> ZAMYLA CHAN: Ναι.
Ουσιαστικά εδώ, έχω INSERT INTO Gringotts, είναι, γαλέρες, οι αξίες αυτές.
Αλλά ID, προφανώς, είναι ένα μοναδικό κλειδί τιμή που έχει οριστεί σε MySQL πίνακα.
Έτσι, αν έχω ήδη ότι η ταυτότητα που έχει συσταθεί, τότε δεν μπορώ να εισαγάγετε μια νέα γραμμή.
Έτσι, αν δεν υπάρχει ήδη, τότε θα πρέπει να το ενημερώσετε.
Στη μέση στο λευκό.
>> ΚΟΙΝΟ: Έτσι εισαγωγή, ενημέρωση, διαγραφή, και επιλέξτε, είναι εκείνα όλα τα διαθέσιμα
σε τοπικό επίπεδο [δεν ακούγεται];
>> ZAMYLA CHAN: Έτσι τοποθετήστε, ενημέρωση, διαγραφή και
επιλέξετε είναι όλα τα ερωτήματα SQL.
Έτσι, κάθε φορά που χρησιμοποιείτε SQL, θα έχετε τις διαθέσιμες.
>> ΚΟΙΝΟ: Επιστροφή στην τελευταία κουίζ -
υπήρχε μια ερώτηση που ασχολήθηκε με εάν είχατε ένα τραπέζι και ήθελε να
εισάγετε βαθμολογίες του τεστ σε ένα και εισάγετε το όνομά σας και έτσι δεν θα σας αφήσει
[Δεν ακούγεται] σκορ δοκιμασία του φίλου σας.
Πώς θα το κάνουμε αυτό με το ένθετο;
>> ZAMYLA CHAN: Έτσι, το ερώτημα ήταν περίπου μια προηγούμενη ενδιάμεση ερώτηση.
Δεν γνωρίζω εκ των οποίων ένα είναι σωστό τώρα.
Έτσι ίσως αργότερα, αν θέλετε να έρχονται και να μου δείξει, τότε μπορώ
σίγουρα να σας δώσει συμβουλές.
Αλλά μιλώντας για την εισαγωγή πράγματα, όπως λαμβάνοντας βαθμολογία κάποιου όταν
δεν πρέπει, ας μιλήσουμε για SQL ένεση επιθέσεις.
Έτσι, μια επίθεση SQL ένεση είναι ουσιαστικά όταν κάποιος παίρνει
πλεονέκτημα της χαμηλής ασφάλειας της τρόπο που παίρνετε στα δεδομένα.
>> Έτσι, εδώ, όπως ακριβώς και στη χρηματοδότηση CS50, όταν είστε συνδεδεμένοι, μπορούμε να μπούμε σε μια
όνομα χρήστη στην φόρμα σύνδεσης, το πρώτο πλαίσιο κειμένου, και
στη συνέχεια, πληκτρολογήστε έναν κωδικό πρόσβασης.
Ίσως κώδικα PHP μας μπορεί να μοιάζει κάτι σαν αυτό, όπου $ username
είναι το όνομα μετα-δεδομένων και τον κωδικό πρόσβασης κωδικό πρόσβασης μετά τα δεδομένα.
Και τότε ακριβώς εκτέλεση του ερωτήματος μας, ας πούμε, Εντάξει, καλά, το ερώτημά μας πρόκειται να
επιλέξτε από τους χρήστες μας, όπου το όνομα χρήστη είναι το
ένα που υπέβαλε.
Και το password είναι ο κωδικός, πράγμα που σημαίνει ότι οι κωδικοί πρόσβασης ταιριάζουν.
>> Τώρα, τι θα γίνει αν αντί πραγματικά υποβάλλοντας ένα πραγματικό κωδικό πρόσβασης, όπως
12345 και να μαντέψουν σε προεξοχή που λέει κωδικό και προσπαθεί να χαράξει τους
λογαριασμό, τι θα γίνει αν αντί υπέβαλαν αυτό.
Θα μπορούσαν ίσως να πληκτρολογήσετε μια εικασία σε έναν κωδικό πρόσβασης.
Και τότε θα τελειώσει το παραθέτω στη συνέχεια, πληκτρολογήστε ή 1 = 1.
Αυτό θα ρυθμό απευθείας στην SQL ερώτημα για να δούμε κάτι σαν αυτό.
Επιλέξτε από τους χρήστες, όπου το όνομα χρήστη = Αιχμές και τον κωδικό πρόσβασης
ισούται με κρίνο ή 1 = 1.
>> Έτσι, είτε ο κωδικός πρόσβασης έχει να είναι σωστή ή 1 = 1,
που είναι πάντα αλήθεια.
Έτσι, στην περίπτωση αυτή, βασικά, ο χρήστης μπορεί να να επωφεληθούν από αυτό και απλά συνδεθείτε
οι ίδιοι και να hack λογαριασμό κάποιου.
Έτσι, γι 'αυτό θέλουμε να αποφύγουμε κάποιος χρειάζεται να το κάνουμε αυτό.
Αλλά ευτυχώς, η λειτουργία ερωτήματος περνώντας τα σύμβολα κράτησης θέσης θα
φροντίσει αυτό για σας.
Επίσης, θα συνήθως δεν θέλουν υποχρεούται να υποβάλει τους κωδικούς πρόσβασης
οι ίδιοι.
Γι 'αυτό κατακερματίζεται ή κρυπτογραφημένα τους στη χρηματοδότηση CS50.
>> ΚΟΙΝΟ: Το παρελθόν κουίζ μίλησε για χορδές διαφυγής MySQL.
Μήπως πρέπει να ανησυχείτε γι 'αυτό;
>> ZAMYLA CHAN: Αυτή είναι μια καλή ερώτηση.
Οι χορδές διαφυγής MySQL είναι σίγουρα ένα λειτουργία που χρησιμοποιήθηκε στο ερώτημα μας.
Αλλά σίγουρα να εξετάσουμε αυτό.
Θα έλεγα ότι είναι δίκαιο παιχνίδι για να γνωρίζετε ότι θα πρέπει να καλέσετε ότι
λειτουργούν σε μια σειρά.
Ναι, Belinda;
>> ΚΟΙΝΟ: Πώς ξέρετε πότε είναι μονά εισαγωγικά ή διπλά εισαγωγικά;
Και επίσης, νιώθω σαν στο διάλεξη σας ανέφερε κάτι για να μην έχουν
η [δεν ακούγεται] ή κάτι ή το δεύτερο single απόσπασμα στο τέλος.
Νομίζω τόνισε στην ομιλία που είστε υποτίθεται για να έχει απόστροφο 1
και στη συνέχεια να μην έχουν αποστρόφους ή κάτι τέτοιο.
>> ΚΟΙΝΟ: [δεν ακούγεται].
>> ΚΟΙΝΟ: Το θέμα είναι το τελευταίο single quote εκεί σε αυτό το δεύτερο πλαίσιο
δεν πρέπει να υπάρχει.
[Δεν ακούγεται]
Διότι όταν παίρνετε αυτό το τελευταίο single παραθέτω και να ταιριάζουν με αυτά για το περιεχόμενο
όταν ο κωδικός πρόσβασης είναι, αν έχετε ότι ερώτημα, υπάρχει μια μόνο προσφορά στο
το τέλος ήδη.
Θέλετε να χρησιμοποιήσετε αυτό το απλό εισαγωγικό όπως αυτή που βλέπει το ένα
[Δεν ακούγεται].
Έτσι, αυτό που είναι πραγματικά σε αυτό το κείμενο πλαίσιο δεν θα πρέπει να έχουν αυτό.
>> ZAMYLA CHAN: Θα αλλάξει αυτό.
OK.
Αν δεν υπάρχουν οποιεσδήποτε ερωτήσεις, τότε εγώ θα περάστε το από τον Ιωσήφ να μιλήσει
για JavaScript, κ.λπ..
>> [Χειροκροτήματα]
>> JOSEPH ONG: Γι 'αυτό και τρέχουν λίγο πίσω.
Έτσι, εάν έχετε να φύγει, αυτό είναι εντάξει.
Αλλά σας ζητάμε να κρατήσει το κεφάλι σας προς τα κάτω αν είστε στη μέση, έτσι ώστε να
δεν εμποδίζουν την κάμερα και χρησιμοποιείτε το πίσω έξοδο, αν έχετε να.
Είμαι ο Ιωσήφ από το δρόμο.
Γεια σας.
Δοκιμή, τη δοκιμή.
Dan, είναι ότι η καλή;
Cool.
>> Έτσι, το βίντεο θα αναρτηθεί σε απευθείας σύνδεση για εκείνους που
Πρέπει να φύγω τώρα.
Awkward.
OK.
Έτσι, η κριτική κουίζ.
Αυτή είναι μια γάτα.
Τώρα, JavaScript, τα οποία δεν είναι ίσως ως aww για κάποιους από εσάς παιδιά.
OK.
Έτσι, αυτή είναι η πρώτη, ανάκληση από τους Zamyla.
Να θυμάστε ότι η PHP είναι εκτελούνται στο διακομιστή.
Και πολλές φορές, εσείς έγραψε βρόχους στην PHP να εκτυπώσετε HTML, έτσι δεν είναι;
Έτσι, τη στιγμή που ο κώδικας αυτός εκτελεί, ότι HTML εξόδου που θα εκτυπώσετε
παίρνει αποστέλλεται στο χρήστη.
Και όταν αυτό συμβεί, όχι περισσότερο PHP μπορεί να να τρέξει, αν δεν κάνετε ανανέωση της σελίδας, των
Φυσικά, η οποία reexecutes την PHP.
Αλλά τη στιγμή που θα εκτυπώσετε αυτό το HTML, δεν μπορείς να πας πουθενά.
>> Έτσι ώστε HTML στέλνεται πάνω στο χρήστη, το οποίο είναι το πρόγραμμα περιήγησης εδώ, όπου
Milo χρησιμοποιεί τον υπολογιστή.
Και τόσο καλά, υπάρχουν πολλά πράγματα τη στιγμή που στέλνουμε HTML στον χρήστη.
Μερικές φορές θέλουμε να κάνουμε κάτι σαν όταν κάνετε κλικ πάνω σε κάτι, θέλουμε
κουτιά συναγερμού για να αναδυθεί, αυτά τα είδη των αλληλεπιδράσεις, όπως όταν πατάτε το πλήκτρο
κλειδί, όταν κάνετε κλικ σε κάτι το σελίδα, θέλω κάτι να συμβεί.
Λοιπόν, δεν μπορείτε να επιτρέπει την επανεκτέλεση PHP κώδικα μόλις οριστεί η HTML.
Λοιπόν, πώς το κάνεις αυτό;
>> Έχουμε εισαγάγει μια νέα γλώσσα που ονομάζεται JavaScript, που λειτουργεί στο πρόγραμμα περιήγησης
που σας επιτρέπει να κάνετε πράγματα σε HTML αφού λάβετε
από το διακομιστή.
Και αυτός είναι ο λόγος που το ένα client-side κλήση γλώσσα προγραμματισμού.
Λειτουργεί στον υπολογιστή σας -
ο πελάτης.
Οποιεσδήποτε ερωτήσεις σχετικά με αυτό το μέτρο;
Αυτό παράδειγμα νόημα για τους ανθρώπους;
OK.
Καλή.
Εντάξει.
Έτσι, το πρώτο πράγμα που πρέπει να σημειωθεί Είναι JavaScript δεν είναι η PHP.
>> Έχουν κάποια διαφορετική σύνταξη, την οποία θα πάμε σε.
Και έχουν πολύ διαφορετικές χρήσεις.
JavaScript, και πάλι, για σας πρόγραμμα περιήγησης, για τον πελάτη.
Διακομιστής τρέχει κάπου σε κάποιον άλλο υπολογιστή που στέλνει πληροφορίες
σε εσάς, σωστά;
Έτσι, αν σας ζητήσω να γράψετε κώδικα PHP σε μια ερώτηση εξετάσεις, δεν γράφουν
JavaScript και αντιστρόφως.
Θα χάσετε μόνο σημεία, και δεν θα ήταν σωστό.
>> Οπότε ας μπει σε κάποια διαφορές σύνταξη -
JavaScript στο αριστερό PHP και στα δεξιά.
Το πρώτο πράγμα που θα παρατηρήσετε με JavaScript, δηλώνουμε μεταβλητές με
η λέξη-κλειδί var -
V-Α-Κ. PHP χρησιμοποιείται το σύμβολο του δολαρίου, όπως Zamyla συζητήθηκε νωρίτερα.
Αν θέλετε να κηρύξει συνειρμική πίνακα, βλέπουμε το συντακτικό για
η δεξιά πλευρά με την PHP.
Στην αριστερή πλευρά, αντί χρησιμοποιείτε άγκιστρα.
Και στη συνέχεια τα κλειδιά σας στο αριστερό.
Στη συνέχεια, έχετε ένα κόλον.
Και τότε θα έχουν τις τιμές που θέλετε.
>> Έτσι, αυτό είναι το πώς θα το κάνουμε σε PHP στη δεξιά πλευρά με την εν λόγω δεύτερη
γραμμή που ξεκινά στο Μύλο.
Και αυτό είναι το πώς θα το κάνουμε με το αριστερή πλευρά σε JavaScript εάν θέλετε
αυτό που λέμε ένα αντικείμενο.
Και αντικείμενα JavaScript είναι μόνο συνειρμική συστοιχίες.
Έτσι, εάν θέλετε να έχετε πρόσβαση τομείς, PHP που χρησιμοποιείτε αυτήν τη σύνταξη βραχίονα.
Και με αυτόν τον τρόπο, μπορείτε να εκχωρήσετε εκ νέου αυτό το πεδίο ιδιοκτήτη να Lauren.
>> Λοιπόν, σε JavaScript, αν κάποιος θέλει να πρόσβαση σε ένα πεδίο και να το αλλάξετε, μπορείτε να
χρησιμοποιήστε τη σύνταξη τελεία.
Μπορείτε επίσης να χρησιμοποιήσετε τη σύνταξη βραχίονα.
Αλλά δεν μπορείτε να χρησιμοποιήσετε το σύνταξη τελεία σε PHP.
Αυτό δεν θα λειτουργήσει.
Λειτουργεί μόνο σε PHP.
Και τέλος, για την εκτύπωση της κονσόλα, μπορείτε να χρησιμοποιήσετε console.log, η οποία
εσείς χρησιμοποιείτε πολύ σε pset8.
Μπορείτε να console.log αυτό.
>> Αν θέλετε να εκτυπώσετε σε μια σειρά PHP, θα πρέπει να χρησιμοποιήσετε εκτύπωσης r.
Και στη δεξιά πλευρά, βλέπετε i hash αλφαριθμητικό εκεί.
Κάποιος ρώτησε νωρίτερα.
Χρησιμοποιώ ένα συν σε JavaScript.
Αν θέλω να ενώσετε κάτι σε PHP, μπορώ να χρησιμοποιήσω την τελεία.
Αυτά είναι διαφορετικά.
Αν γράφετε κώδικα PHP, δεν χρησιμοποιούν πλέον.
Αν είστε γραπτώς JavaScript κώδικα, δεν γράφουν μια τελεία.
Θα είναι λάθος.
Και θα είναι θλιβερή.
>> Έτσι σύνταξη διαφορές.
Γνωρίστε τη σύνταξη σας, γιατί αν πρέπει να συντάξει μια ερώτηση και θα χρησιμοποιούν τη σύνταξη
από λάθος γλώσσα, δεν θα λειτουργήσει.
Και θα είναι λάθος.
Ας μιλήσουμε για κάποια ελέγχου ροής διαφορές, τον τρόπο που χρησιμοποιείτε
βρόχους σε καθεμία από αυτές.
Zamyla πήγε πάνω από την δεξιά πλευρά.
Stuff στη δεξιά πλευρά πρέπει να είναι εξοικειωμένοι.
Ας δούμε στην αριστερή πλευρά.
>> Όταν χρησιμοποιείτε για ν βρόχο JavaScript, μεταβλητή βρόχου σας, var i εκεί,
βρόχος πάνω από τα πλήκτρα της συστοιχίας.
Έτσι, θα δείτε το όνομα, το σπίτι, και το ρόλο.
Αν έχω console.log i, παίρνω το όνομα, το σπίτι, και το ρόλο.
Αυτά είναι τα κλειδιά.
Στο JavaScript, ένας βρόχος foreach πηγαίνει πάνω από τις τιμές της παρούσας διάταξης.
Έτσι, θα παρατηρήσετε ότι είστε και οι δύο i.
Αλλά εδώ από την πλευρά της PHP, εκτυπώνει από Milo, CS50, και μασκότ.
Αυτοί είναι οι τιμές στην PHP.
>> Έτσι, αυτά είναι πώς αυτά τα δύο είναι διαφορετικά στις διάφορες γλώσσες.
Έτσι, εάν είστε χρησιμοποιώντας ένα foreach βρόχο, μην υποθέσετε ότι
σας δίνει τα κλειδιά.
Και αν χρησιμοποιείτε μια για ν βρόχου, δεν υποθέσουμε ότι σας δίνει τις τιμές.
Μήπως αυτό έχει νόημα μέχρι στιγμής;
Η επόμενη διαφάνεια πρόκειται να σας δείξω πώς μπορείτε να αποκτήσετε πρόσβαση στο αντίθετο
καθένα από αυτά.
>> Λοιπόν, αν έχετε το κλειδί JavaScript και θέλετε την τιμή έξω,
απλά δείκτη σε η συστοιχία με αυτό.
Έτσι Milo του i θα πάρει ό, τι θέλετε - τις τιμές.
Υπάρχει αυτή η διαφορετική σύνταξη σε PHP.
Αν θέλετε πραγματικά να το ξέρετε, εγώ δεν κάνω νομίζω ότι έχουμε το έδειξε σε σας ακόμα.
Αλλά αν σας ενδιαφέρει, μπορείτε να χρησιμοποιήσετε αυτή η πρόσθετη σύνταξη στα δεξιά
πλευρά που πραγματικά θα σας αφήσει να πάρετε το κλειδιά σε PHP όταν χρησιμοποιείτε ένα
βρόχο foreach.
Έτσι, μόνο ένα μικρό κομμάτι του trivia αν σας ενδιαφέρει.
>> Έτσι, αυτό είναι μόνο για να καταδειχθεί η διαφορές μεταξύ αυτών των δύο βρόχους.
Μην τα συγχέουμε όταν είστε προγραμματισμό μια ερώτηση.
Οποιεσδήποτε ερωτήσεις σχετικά με αυτό.
Cool.
Εντάξει.
JavaScript αντικείμενα.
Μίλησα γι 'αυτούς.
Είναι σαν συνειρμική συστοιχίες.
Το ένα πράγμα που θα ήθελα να σημειώσετε εδώ είναι ότι μια τιμή σε μια συσχετιστική
array μπορεί να είναι οτιδήποτε σε JavaScript.
>> Μπορεί ακόμη να είναι μια συνάρτηση, όπως εκεί.
Έχω μια λειτουργία που είναι μια τιμή ενός κλειδιού.
Και αν θέλετε να καλέσετε τη λειτουργία αυτή, Απλά μεταβείτε φλοιό.
Και τότε έβαλα τα παρενθέσεις μετά από αυτό.
Και αυτό λειτουργεί.
Υπάρχουν ερωτήσεις;
Όχι;
OK.
Καλή.
JavaScript, όπως η PHP, είναι χαλαρά πληκτρολογήσει.
Τι σημαίνει αυτό;
>> Θα έχει τους τύπους.
Αλλά όταν δηλώνετε μια JavaScript μεταβλητή, λέτε var i.
Δεν το λένε.
Αυτό δεν είναι ένα πράγμα.
Μπορείτε απλώς να πω ότι είναι μια μεταβλητή.
Και έπειτα το JavaScript θα χειριστεί το τύποι κάτω από την κουκούλα για εσάς.
Μπορούμε να το μετατρέπουν ελεύθερα μεταξύ τύπους εξαιτίας αυτού.
Γι 'αυτό και ξεκινά ως μια σειρά στην περίπτωση αυτή.
Και τότε έχω ένα string.
Και εγώ μπορώ να προσθέσω σε αυτό.
Και το επανεκχώρηση πίσω στο i.
>> Έτσι, σε αυτή την πρώτη γραμμή, i είναι ο αριθμός.
Στη δεύτερη γραμμή, i γίνεται τώρα μια συμβολοσειρά μετά να κάνω την αλλαγή.
Και εδώ, είμαι απλώς να συνενώσει ότι ο αριθμός πάνω στο κορδόνι.
Έτσι μπορείτε να δείτε ότι ακόμα κι αν ήταν ένα ακέραιος στο πρώτο μέρος, αυτό είναι το είδος
σαν να μετατραπεί σε ένα χορδών και, στη συνέχεια, προστίθενται
σε αυτή τη χορδή γεια.
Και αυτό είναι ό, τι εννοώ από το χαλαρό πληκτρολόγηση.
Αυτό είναι που θα μετατρέψει μεταξύ τύποι πολύ εύκολα.
Και δεν ρίξει τις προειδοποιήσεις σε θέλατε C κάνει.
>> Γι 'αυτό και τώρα περιέχει γεια 123 με την σειρά.
Επόμενο.
Μπορούμε επίσης ελεύθερα να συγκρίνετε μεταξύ των τύπων.
Έτσι, αν χρησιμοποιείτε ακριβώς ==, πολύ όπως σε PHP, JavaScript
κάνει ένα παρόμοιο πράγμα.
Η χορδή 123 είναι η ίδια με τον αριθμό 123 όταν χρησιμοποιείτε διπλά ίσων.
Όταν χρησιμοποιείται τριπλή ίσων, επίσης θέλει να βεβαιωθείτε ότι
ο τύπος είναι η ίδια.
Έτσι, γιατί αυτό είναι μια σειρά και αυτό είναι ένας αριθμός, έστω και αν είναι και οι δύο
123, όταν χρησιμοποιείτε το τριπλό ισούται, μπορείτε να πάρετε ψευδείς.
Στο διπλό ισούται με την περίπτωση, μπορείτε να πάρετε αλήθεια, επειδή διπλό ίσων δεν
νοιάζονται για το είδος.
Triple ίσων δεν ενδιαφέρεται για το είδος.
Ερωτήσεις;
OK.
>> Και ένα άλλο πράγμα για JavaScript είναι το πεδίο εφαρμογής είναι το είδος της παγκόσμιας εκτός αν είστε
σε μια λειτουργία.
Και λειτουργεί το ίδιο τρόπο σε PHP πραγματικότητα.
Οπότε ας πάμε μέσα από αυτό το παράδειγμα.
I i με 999.
Και στη συνέχεια να πάω σε αυτό για βρόχο.
Έτσι, αν είμαι εκτύπωση i έξω σ 'αυτό για βρόχο, περιμένω 0, 1, 2, 3, 4.
Έχω να i = 4.
Είναι προσαυξήσεις i τώρα σε 5 το τέλος του βρόχου for.
Και τότε θα ξεσπάσει από το βρόχο, διότι δεν πληρούν τις
εξαρτηθεί πια.
>> Τι νομίζετε ότι το επόμενο console.log εκτυπώνει;
Έτσι, αυτό είναι που θα κάνει η C. Στην C, γιατί αν έχετε σαν var i έξω
και έχετε var i μέσα σε ένα βρόχο, σαν ένα για βρόχο, τότε καθιστά τέτοια ώστε
είναι scoped ότι οι δύο i είναι διαφορετικές.
Στο JavaScript, αυτό θα είναι ακριβώς αντιμετωπίζουν ως το ίδιο i.
Παίρνω 5, διότι αυτή ήταν η αξία αφού εξέλθει από το βρόχο.
Έτσι, αυτά τα i είναι το ίδιο i.
Μήπως αυτό έχει νόημα;
>> Λοιπόν, είναι λογικό, από μια άποψη JavaScript.
Αλλά το ίδιο πρότυπο δεν μεταφέρουν στο C. Έχουν
διαφορετικούς κανόνες οριοθέτησης.
Ναι.
>> ΚΟΙΝΟ: [δεν ακούγεται]
έξω από τη συνάρτηση [δεν ακούγεται];
>> JOSEPH ONG: Έτσι, εκτός της οποίας η λειτουργία;
Γι 'αυτό θα φτάσουμε σε αυτό σε μόλις ένα δευτερόλεπτο.
Έτσι καλούμε foo (i).
Αυτό περνά i σε foo, προσαυξήσεις , και στη συνέχεια καταγράφει.
Γι 'αυτό ήταν 5.
Έτσι γίνεται 6.
Αλλά τι μιλάω είναι ότι εγώ σε αυτή τη λειτουργία.
Επειδή είναι μια παράμετρος, είναι scoped για αυτή τη λειτουργία.
Έτσι, τη στιγμή που στην πραγματικότητα να βγούμε από αυτό λειτουργία, είναι τώρα πρόκειται να πάει
πίσω στην παλιά i.
Αυτό θ μόνο επειδή scoped ότι βρίσκεται σε λειτουργία.
Και έχουμε το πεδίο εφαρμογής και τις λειτουργίες.
Αλλά δεν έχουμε εκτός του πεδίου εφαρμογής των λειτουργιών σε JavaScript.
Μήπως αυτό έχει νόημα;
Ναι.
Ερώτηση.
>> ΚΟΙΝΟ: Same [δεν ακούγεται];
>> JOSEPH ONG: Οπότε ναι.
Στην PHP, είναι το ίδιο είδος του πράγματος.
Υπάρχει μια μικρή λεπτότητα πραγματικότητα.
Αλλά μπορείτε να με ρωτήσετε για ότι μετά την αναθεώρηση.
Μπορείτε πραγματικά δεν χρειάζεται να γνωρίζετε η λεπτότητα του κουίζ.
Για όλες τις προθέσεις και τους σκοπούς, όπως μεταβλητές, παγκόσμια και PHP, εκτός
είναι σε μια λειτουργία, το ίδιο πράγμα το JavaScript.
Ναι.
>> ΚΟΙΝΟ: Γιατί είναι αυτό επέτρεψε στην JavaScript και δεν πού αλλού;
>> JOSEPH ONG: Γιατί λοιπόν επιτρέπεται σε JavaScript και όχι σε C;
Είναι απλά όποιος ήρθε με JavaScript αποφάσισε ότι αυτό ήταν εντάξει σε
JavaScript.
Έτσι είναι ακριβώς όπως μια γλώσσα προγραμματισμού σύμβασης, όπως θα λέγαμε.
Ναι.
>> ΚΟΙΝΟ: Γιατί, λοιπόν, να πάει 6-5;
>> JOSEPH ONG: Γι 'αυτό πήγε 6-5, γιατί όταν πέρασα εγώ σε foo, ότι
i εσωτερικό του foo τώρα ως πεδίο foo, επειδή το πεδίο εφαρμογής υπάρχει σε λειτουργίες
JavaScript.
Αλλά μόλις βγω από εδώ, γιατί έχει ως πεδίο στη λειτουργία, είμαι απλά
χρησιμοποιώντας την τακτική i που ήταν μέσα το υπόλοιπο του ελέγχου ροής.
Νόημα;
Μπορώ να προχωρήσουμε;
Εντάξει.
Cool.
>> Η αποδοχή αυτή είναι αντικείμενα περνιούνται με αναφορά.
Ξέρετε πώς όταν περνάτε μια σειρά σε C θα μπορούσε
στην πραγματικότητα να τροποποιήσει τον πίνακα;
Είναι το ίδιο πράγμα σε JavaScript.
Αν έχω περάσει ένα αντικείμενο, σε αυτή την περίπτωση, Milo πέρασε σε αυτή τη λειτουργία catify.
Milo ξεκινά.
Το όνομά του είναι Milo Μπανάνα.
Έχω περάσει αυτό το αντικείμενο σε μια συνάρτηση γιατί είναι ένα αντικείμενο, μια συνειρμική
συστοιχία σε JavaScript.
>> Όταν εκτελείτε μια λειτουργία σε αυτή τη λειτουργία, θα
πραγματικά αλλάξει το αντικείμενο.
Έτσι, αυτό θα συμβεί μόνο για τα αντικείμενα σε JavaScript, όπως ακριβώς συμβαίνει
για συστοιχίες εσωτερικό του ονόματος C. Έτσι Μάιλο πραγματικά θα γίνει γάτα τώρα.
Μήπως αυτό έχει νόημα;
Έτσι, αυτό λειτουργεί μόνο για τα αντικείμενα.
Τα αντικείμενα που ψηφίστηκε από αναφορά.
Ναι.
>> ΚΟΙΝΟ: Δηλαδή λέτε ότι σε αντίθεση με την μεταβλητή i.
>> JOSEPH ONG: Ναι.
Ποια μεταβλητή i was just ένας αριθμός, σωστά;
Είναι όπως στο C όταν περνάτε μια ακέραιο a, κάνει ένα αντίγραφο.
Και όταν περάσει μια σειρά, στην πραγματικότητα αλλάζει την πραγματική σειρά σε
Γ. Το ίδιο συμβαίνει και με JavaScript σε αυτή την περίπτωση.
Εντάξει.
Και την επόμενη, Milo είναι λυπηρό γιατί αυτός είναι τώρα μια γάτα.
Αυτό ήταν πραγματικά Milo μετά κάποια ταξίδι στον κτηνίατρο.
>> Επομένως, πώς θα χρησιμοποιήσουμε JavaScript σε μια ιστοσελίδα;
Μπορούμε να το συμπεριλάβουμε.
Αυτό είναι HTML κώδικα με τις ετικέτες ταινία.
Γι 'αυτό και έχουν ετικέτες ταινία εκεί.
Και μετά έβαλα κάποια JavaScript Κωδικός εντός των ετικετών σενάριο.
Και στη συνέχεια εκτελεί αυτό.
Όταν το κάνετε ακριβώς όπως αυτό, είναι ονομάζεται inline JavaScript.
Είναι το είδος του βρώμικο, γιατί η JavaScript είναι στην πραγματικότητα στην HTML.
>> Ένας καλύτερος τρόπος για να γίνει αυτό, πολύ καλύτερο, είναι να γράψετε JavaScript σας σε μια
εξωτερικό αρχείο και στη συνέχεια να παρέχουν η ετικέτα script με μια πηγή.
Και αυτό θα πάει σε αυτό το αρχείο JavaScript και να διαβάσετε τον κώδικα JavaScript από
ότι το αρχείο αντ 'αυτού.
Και με αυτό τον τρόπο, δεν έχετε πολλά JavaScript στις αρχές του σας
HTML αρχείο, το οποίο καθιστά πραγματικά βρώμικο.
Μπορείτε απλά να το βάλετε κάπου αλλού.
Και τότε θα το διαβάσετε από εκεί.
Μήπως αυτό έχει νόημα;
>> Θέματα τοποθέτησης.
Σε αυτή τη συγκεκριμένη περίπτωση, η σενάριο είναι πριν από το σώμα.
Έτσι, όταν εκτελώ ότι, υπάρχει τίποτα στο σώμα ακόμα.
Ίσως αυτό θα κάνει λίγο πιο αίσθηση όταν δείχνω αυτό το επόμενο μέρος.
Στην περίπτωση αυτή, το σενάριο έρχεται μετά από το div.
Έτσι φαίνεται στην πραγματικότητα το div στην πρώτη σελίδα.
Εδώ σε αυτό το μικρό κόκκινο κύκλο, βλέπετε εμφανίζεται το κείμενο.
Και τότε η ειδοποίηση εμφανίζεται.
>> Στην πρώτη περίπτωση, επειδή το σενάριο ήταν πριν από το div, η
ειδοποίηση εμφανίζεται για πρώτη φορά.
Και στη συνέχεια το div δείχνει μετά θα απορρίψει το πλαίσιο.
Έτσι, η εκτέλεση έχει σημασία.
Γι 'αυτό και θα κρατήσει αυτό κατά νου.
Αυτό θα είναι σημαντικό σε λίγο.
OK.
Τόσο καλά, πώς μπορείτε να περιμένετε μέχρι το ολόκληρη η σελίδα φορτώνεται, τότε, πριν να
εκτελέσει κάποιο κωδικό;
Θα μπει σε αυτό το λίγο λίγο πολύ αργότερα.
Αλλά απλώς διατηρούν αυτήν την τοποθέτηση θέματα στο μυαλό για το πότε θα
έρχονται σε μια άλλη διαφάνεια.
>> Έτσι έχουμε την ευκαιρία να DOM τώρα.
Και τι είναι DOM;
Έτσι, αν κοιτάξετε τον κώδικα HTML, είναι ακριβώς ένα μάτσο κειμένου στην οθόνη.
Έτσι, πώς JavaScript γνωρίζουν ότι αυτό είναι ένα στοιχείο HTML;
Έτσι πρέπει να έχουμε λίγη μνήμη εκπροσώπηση αυτή
δομή που έχουμε.
Και κάθε φορά που έχουμε αυτό στη μνήμη εκπροσώπηση σε JavaScript, καλούμε
ότι το DOM.
Και είναι απλά ένας τρόπος που οι άνθρωποι αποφάσισαν ότι θα πρέπει να αντιπροσωπεύει αυτό
HTML δομή όπως.
>> Και τι κάνει αυτό το DOM μοιάζει;
Λοιπόν, στην αναπαράσταση της μνήμης, παίρνουμε αυτό το κείμενο.
Και θα το μετατρέψει σε μνήμη εκπροσώπηση.
Έτσι, αυτό είναι το HTML.
Γι 'αυτό πρώτα να μάθετε ότι κάθε DOM δέντρο έχει ένα έγγραφο.
Μοιάζει με ένα δέντρο.
Και το έγγραφο περιέχει την HTML ετικέτα, στην πραγματικότητα τα πάντα
μέσα σ 'αυτό τώρα.
Η ετικέτα HTML έχει δύο παιδιά.
Έχει ένα κεφάλι.
Αυτό το κεφάλι, αν κοιτάξετε εσοχή εκεί πέρα ​​το πώς είναι δομημένο
μεταξύ των στενή ετικέτες, κεφάλι έχει ένα παιδί.
Το παιδί είναι ο τίτλος.
Ακριβώς.
>> Τώρα, έχουμε ένα παιδί το σώμα.
Και στη συνέχεια, ότι το σώμα έχει παιδί που ονομάζεται οικογένεια.
Και ότι η οικογένεια έχει τρία παιδιά -
παλαιότερο, μεσαία, και ο νεότερος.
Έτσι, θα πρέπει να γνωρίζετε πώς να σχεδιάσετε ένα διάγραμμα όπως αυτό, όταν σας ρωτήσω πώς
να σχεδιάσετε ένα διάγραμμα όταν δίνουμε Σας το HTML στα αριστερά.
Μάθετε πώς να παράγει το δέντρο DOM.
Και μέσα από αυτά τα πράγματα, υπάρχει μόνο κάποιο κείμενο, το οποίο έχω εκπροσωπούνται
όπως μικρά κουτιά.
>> Μήπως αυτή η δομή δέντρου DOM κάνει λογική και ποια είναι η DOM είναι;
Έτσι, τι κάνει στάση το p για;
Πάνω από εδώ, το p εκεί σε αυτό το tag αντιπροσωπεύει
παράγραφο ετικέτα στο HTML.
Έτσι, μπορείτε να το αναζητήσετε.
Αλλά αυτό σημαίνει απλώς ότι είναι κάποια χώρο για κάποιο κείμενο.
Και έχει κάποια εξ 'ορισμού CSS styling, επειδή είναι ένα tag παραγράφου.
Αλλά πραγματικά δεν ανησυχείτε για το μέρος πάρα πολύ.
Απλά ξέρω ότι είναι ένα σύμβολο κράτησης θέσης για κάποιο κείμενο.
Ναι.
Ερώτηση;
Ναι.
>> ΚΟΙΝΟ: Είπατε ακριβώς CSS.
Η οικογένεια και το hash hash όλα αυτά τα πράγματα είναι βασικά
εκπροσωπούν αναγνωριστικά σε CSS;
>> JOSEPH ONG: Ναι, ακριβώς.
Θα πάρω σε ό, τι αυτά τα hashes σημαίνει σε ένα δευτερόλεπτο.
Όταν η Angela πήγε πάνω από CSS, που μίλησε για CSS επιλογείς.
Αυτές είναι οι επιλογείς CSS που μιλούσε.
Ναι, Rob;
>> ROB BOWDEN: Θα ήθελα να σχολιάσω επίσης ότι DOM εσωτερικό του τίτλου ετικέτας
Είναι επίσης ένας κόμβος κειμένου.
>> JOSEPH ONG: Σωστά.
Έτσι, μέσα στην ετικέτα τίτλου, Έχω κάποια DOM κείμενο.
Έτσι, πραγματικά, ο τίτλος αυτός θα πρέπει να έχει σαν μικρό κουτί που έρχεται από αυτό επίσης.
Αλλά δεν πειράζει πραγματικά πάρα πολύ σε αυτή την περίπτωση.
Εμείς δεν ενδιαφέρονται πραγματικά για κόμβους κειμένου, όπως τους αποκαλούμε, πάρα πολύ.
Εντάξει, κάνουμε.
Προφανώς, το κάνουμε.
Και θα το διορθώσω ότι όταν Το ανεβάσω ξανά.
Μήπως αυτό έχει νόημα;
>> Επομένως, πώς θα συνεργαστεί με το DOM;
Κάθε φορά που θα ασχοληθεί με το DOM σε JavaScript, υπάρχουν δύο βήματα.
Μπορείτε να επιλέξετε ένα στοιχείο DOM.
Και τότε θα κάνουμε τα πράγματα σε αυτό.
Έτσι, στην περίπτωση αυτή, αφηρημένα, έχω επιλέγεται το μεσαίο στοιχείο.
Και στη συνέχεια ένα παράδειγμα του να κάνει πράγματα σε αυτό θα πρέπει να αλλάζει το κείμενο.
Αυτό χρησιμοποιείται για να είναι ο Μπομπ.
Τώρα, αυτό που έκανα ήταν να άλλαξα Bob να Milo σε αυτή την περίπτωση.
>> Επομένως, πώς θα το κάνετε πραγματικά αυτό;
Πώς μπορούμε να κάνουμε την επιλογή;
Και πώς να κάνουμε τα πράγματα να κάνουμε το πράγμα από τη στιγμή που έχω λάβει;
Λοιπόν, ο τρόπος που τα παιδιά έχουν μάθει σε αυτή την κατηγορία είναι με τη χρήση κάτι που
ονομάζεται jQuery.
Έτσι τι είναι jQuery;
jQuery είναι μια βιβλιοθήκη που κάνει JavaScript εύκολο να γράψει.
Έτσι, κάποιος πήρε το χρόνο και έγραψε jQuery.
>> jQuery είναι γραμμένο στην πραγματικότητα σε JavaScript.
Και τότε γιατί το έκαναν αυτό, έχουμε τώρα έχουν ένα σωρό λειτουργίες που
μπορούμε να χρησιμοποιήσουμε που κάνουν μας ζει πραγματικά εύκολο.
Έτσι τι είναι μερικά από τα πράγματα που κάνει;
Κάνει την επιλογή στοιχείων ευκολότερη.
Κάνει την αλλαγή HTML, προσθέτοντας τάξεις ευκολότερη.
Κάνει Ajax ευκολότερη.
Θα φτάσουμε σε αυτό σε ένα δευτερόλεπτο.
>> Και είναι ανάλογη με C βιβλιοθήκες.
Έτσι θα περιλαμβάνουν string.h, μπορείτε να strlen.
Μπορείτε να πάρετε strcpy, όλα αυτά τα πράγματα.
Όταν περιλαμβάνουν jQuery, μπορείτε να πάρετε ωραία τρόποι για να επιλέξετε τα στοιχεία για την αλλαγή
πράγματα, κ.λπ..
Μπορείτε να πάρετε επιπλέον λειτουργικότητα που JavaScript δεν σας δίνει.
Έτσι δεν είναι jQuery JavaScript.
jQuery είναι μια βιβλιοθήκη που είναι γραμμένο σε JavaScript που κάνει JavaScript
πιο εύκολο να γράψει.
>> Έτσι jQuery δεν είναι ένας προγραμματισμός γλώσσας.
Αλλά JavaScript είναι.
κάνουν.
Σίγουρα μπορείτε να πάρετε την ορολογία σας δικαίωμα.
Οποιεσδήποτε ερωτήσεις;
Ναι.
Είναι αυτό μια ερώτηση;
Εντάξει.
Τόσο πώς μπορείτε να χρησιμοποιήσετε το jQuery;
Λοιπόν, όταν γράφετε κάποια JavaScript κώδικα και θα περιλαμβάνουν
jQuery στην κορυφή του αρχείου σας ως script του αρχείου, μπορείτε να χρησιμοποιήσετε το σύμβολο του δολαρίου
τώρα για να αποκτήσετε πρόσβαση σε jQuery.
Και αυτό είναι διαφορετικό από το σύμβολο του δολαρίου σε PHP.
>> Είναι το ίδιο σύμβολο που πληκτρολογείτε στο πληκτρολόγιό σας.
Αλλά σημαίνουν πολύ διαφορετικά πράγματα.
Σύμβολο του δολαρίου σε PHP σημαίνει αυτό είναι το πώς θα δηλώσετε μια μεταβλητή.
Στο JavaScript, όταν έχετε συμπεριλάβει jQuery, στέκεται για jQuery.
Έτσι, έχετε κατά νου ότι.
Λοιπόν, πώς θα μπορούσαμε να επιλέξετε DOM στοιχεία;
Λοιπόν, όταν το κάνετε το άσχημο JavaScript τρόπο, θα έχουν πρόσβαση στο
τεκμηριώνει την παγκόσμια μεταβλητή.
Και τότε μπορείτε να πάρετε το στοιχείο με ID οικογένεια.
Αυτό είναι πραγματικά μεγάλο και φλύαρος και δεν είναι πολύ ωραία.
>> Ή μπορείτε να πάρετε όλα τα στοιχεία που είναι μια ετικέτα p.
Αυτό λειτουργεί πάρα πολύ σε JavaScript.
Αλλά ποτέ δεν έδειξε η σύνταξη σας πάρα πολύ.
Αυτό που σας έδειξα ήταν jQuery.
Έτσι ώστε ολόκληρο επιλογέα μέχρι εκεί που εκφράστηκε σε JavaScript ακριβώς γίνεται
συμπυκνώνεται σε αυτό το πολύ ωραίο δολάριο υπογράψουν την οικογένεια hashtag.
Και $ p, εκεί ακριβώς όπου είναι έτσι.
Αν θέλετε να επιλέξετε όλες τις ετικέτες p μέσα σε μια οικογένεια, βάζουμε ένα χώρο
μεταξύ των δύο.
Και τώρα, έχουμε πάρει όλα τα p tags μέσα σε μια οικογένεια.
>> Και φαίνεται γνωστό;
Λοιπόν, Angela μίλησε για CSS επιλογείς.
Δώσε μου ένα δευτερόλεπτο.
Και έτσι, ώστε να επιλέξετε ένα στοιχείο, μπορείτε απλά να χρησιμοποιήσετε το ίδιο πράγμα όπως εσείς
θα κάνουμε με έναν επιλογέα CSS.
Αν βάλετε ένα hash μπροστά του, επιλέγει με ID.
Μια κουκίδα επιλέγει κατά τάξεις.
Αν έχετε μόνο το πράγμα, χωρίς να hashes ή τελείες, επιλέγει αυτές τις ετικέτες.
Ερωτήσεις.
Ναι;
>> ΚΟΙΝΟ: Όταν χρησιμοποιούμε τελεία μας HTML, είναι ότι δεν είναι jQuery;
>> JOSEPH ONG: Dot σε HTML μας Είναι ένα πράγμα JavaScript.
Δεν είναι ένα πράγμα jQuery.
Ο τρόπος εσείς να το μάθει με jQuery είναι να χρησιμοποιήσετε. html.
Και τότε πέρασε ανεξαρτήτως η HTML θα είναι.
Γι 'αυτό θα φτάσουμε σε αυτό σε λίγο μια δεύτερη πραγματικότητα.
Τόσο πώς κάνουμε τα πράγματα με το στοιχείο από τη στιγμή που την έχετε επιλέξει;
Έτσι, αυτό είναι ένα παράδειγμα της επιλέγοντας ένα στοιχείο.
Έτσι τώρα, θέλουμε να κάνουμε πράγματα για αυτό.
>> Έτσι, στην περίπτωση αυτή, επιτρέψτε μου να πάω πίσω στην προηγούμενη διαφάνεια.
Ήταν ο Bob πριν.
Και θέλω να το αλλάξουμε αυτό μέσα σε HTML στο Milo.
Καλώ λοιπόν τη λειτουργία HTML από το στοιχείο.
Η λειτουργία αυτή είναι HTML μια μέθοδος του στοιχείου.
Και τότε μου δώσει ό, τι Θέλω η HTML να είναι.
Και αυτό ακριβώς αντικαθιστά ό, τι υπάρχει στο εσωτερικό της ότι η ετικέτα με ό, τι μπορώ να δώσω.
Ναι.
Ερώτηση;
>> ΚΟΙΝΟ: Το hashtag χρησιμοποιείται μόνο για το jQuery.
[Δεν ακούγεται]
δεν θα την χρησιμοποιήσει.
>> JOSEPH ONG: Ναι, ακριβώς.
Αλλά μην ανησυχείτε πάρα πολύ για καθαρή JavaScript.
Απλά θέλω εσείς να επικεντρωθεί στο πώς μπορείτε Θα το κάνουμε με jQuery, γιατί
ότι πρόκειται να είναι το σημαντικό μέρος στο κουίζ.
Δεξιά.
Ακριβώς.
Έτσι θα δείτε ότι hashtag, έτσι ώστε να αντιστοιχεί για να επιλέξετε το στοιχείο με
το αναγνωριστικό μέση λόγω του ότι hashtag.
Hashtag σημαίνει ID.
Και αυτό το στοιχείο έχει ένα αναγνωριστικό της μέσης.
Έτσι, αυτό είναι το στοιχείο που επιλέξατε.
>> ΚΟΙΝΟ: [δεν ακούγεται].
σύμβολο του δολαρίου hashtag [δεν ακούγεται];
>> JOSEPH ONG: Έτσι, δεν έχει.
Το ερώτημα είναι αν μπορούμε να χρησιμοποιήσετε. Αξία.
Και. Αξία λειτουργεί μόνο σε στοιχεία ότι οι εισροές.
Στην jQuery, θα ήταν . Val, όχι. Αξίας.
Γι 'αυτό θα φτάσουμε σε ένα μικρό παράδειγμα που αποδεικνύει όλα αυτά σε συνδυασμό
σε ένα δευτερόλεπτο.
Αλλά νομίζω ότι αυτό εξυπηρετεί ένα μικρό απόσπασμα νόημα για τους ανθρώπους μέχρι στιγμής.
Θέλετε να αλλάξετε την HTML, καλέστε τη μέθοδο HTML.
Ναι.
>> ΚΟΙΝΟ: Μπορείτε να εξηγήσετε η μέθοδος και πάλι;
>> JOSEPH ONG: Έτσι, μια μέθοδος είναι απλά μια λειτουργία που ανήκει σε ένα, σε αυτή
περίπτωση, ένα από αυτά τα στοιχεία DOM, γιατί βλέπεις I
επιλέγεται το πρώτο στοιχείο.
Στην πραγματικότητα, επιτρέψτε μου να χρησιμοποιήσω το ποντίκι.
Έχω επιλέξει το πρώτο στοιχείο.
Και τότε κάλεσα αυτό το HTML λειτουργία που είχε.
Και επειδή αυτή η λειτουργία ανήκει στην αυτό το πράγμα, εμείς το ονομάζουμε μέθοδο.
Αυτό είναι μόνο ένα φανταχτερό όνομα για αυτό.
Πες το πάλι.
Έτσι θυμηθείτε, επιλέξαμε τώρα το στοιχείο.
Και έχουμε το βάλετε μέσα από το μεταβλητό στοιχείο.
Διορθώστε;
>> Έτσι, όταν θέλουμε να αλλάξουμε τον κώδικα HTML στο στο εσωτερικό, επειδή ήταν ο Bob πριν,
θέλετε να αλλάξετε αυτό το κείμενο σε Milo.
Έτσι καλούμε HTML.
Και θα το πω ποια είναι η HTML μέσα το στοιχείο αυτό θα πρέπει να είναι τώρα.
Και γι 'αυτό αλλάζει σε Milo, γιατί μου έδωσε Milo.
>> ΚΟΙΝΟ: Έτσι δουλεύουμε μαζί.
[Δεν ακούγεται]
>> JOSEPH ONG: Ναι, ναι.
Θα δουλεύουμε μαζί.
Έτσι, ένας από τους επιλέγει το πρώτο στοιχείο.
Και το δεύτερο που κάνει κάτι σε αυτό.
Ναι.
>> ΚΟΙΝΟ: [δεν ακούγεται].
Εάν αυτή η μέθοδος είναι διαφορετική από σε μορφή HTML έχετε τη μέθοδο ισοδύναμη πραγματική.
>> JOSEPH ONG: Ναι.
Αυτό είναι μια διαφορετική μέθοδος.
Και μπορούμε να καλύψουμε ότι σε μόλις ένα δευτερόλεπτο όταν φτάσουμε σε ένα παράδειγμα.
Θέλω να βεβαιωθείτε ότι θα επιταχυνθεί επειδή είμαστε ο χρόνος.
Αλλά έχουμε τρέξει τρόπο την πάροδο του χρόνου τώρα.
OK.
Cool.
Έτσι, εάν θέλετε να προσθέσετε μια τάξη, δεν υπάρχει επίσης μια μέθοδο add τάξη.
Αυτό είναι μόνο ένα παράδειγμα του τι μπορείτε να κάνετε με jQuery.
Αυτό προσθέτει μόνο μια τάξη.
>> Αν θέλετε να το αφαιρέσετε, μπορείτε να καλέσετε αφαίρεση.
Αυτό είναι ακριβώς ένα άλλο πράγμα που μπορείτε να κάνετε.
Έτσι, περισσότερα παραδείγματα από πράγματα που μπορείτε να κάνετε.
Έτσι μπορώ να το θέσω απλά σε η κορυφή, όπως αυτό;
Μικρότερος αφαίρεση.
Αν απλά εκτελέσει το JavaScript στο η κορυφή του αρχείου μου, θα λειτουργήσει αυτό;
Δεξιά.
Επειδή η μέση δεν υπάρχει ακόμα.
Έτσι, αυτό δεν πρόκειται να λειτουργήσει.
Για την εκτέλεση.
Πηγαίνει στην κορυφή για πρώτη φορά.
Τι;
>> ΚΟΙΝΟ: Μικρότερος δεν υπάρχει ακόμα;
>> JOSEPH ONG: Ναι.
Οι νεαρότεροι δεν υπάρχει ακόμα.
Ακριβώς.
>> ΚΟΙΝΟ: Είπατε μέση.
>> JOSEPH ONG: Συγγνώμη.
Οι νεαρότεροι δεν υπάρχει ακόμα.
Και το άλλο πράγμα είναι ότι δεν έχουν περιλαμβάνεται το jQuery
αρχείο script src ρωτήσω.
Έτσι, αυτό δεν πρόκειται να λειτουργήσει.
Στην πραγματικότητα, εγώ δεν το κάνουμε αυτό σε η επόμενη διαφάνεια, η οποία είναι
υποτίθεται για να διορθωθεί αυτό, είτε.
Αλλά ο τρόπος που το κάνουμε αυτό είναι JavaScript είναι οδηγούμενο από τα γεγονότα.
Έτσι, αυτό που κάνουμε είναι να χρησιμοποιήσετε μια εκδήλωση Handler για να συμβεί αυτό.
Και γι 'αυτό επιλέξτε το έγγραφο που για πρώτη φορά.
Το λέω, εντάξει, όταν το έγγραφο είναι έτοιμο, επιτρέψτε μου να τρέξει μια λειτουργία.
Έτσι ώστε να είναι όλα αυτά που μέσα σύνταξη.
>> Έχω επιλέξει το έγγραφο.
Τώρα, όταν το έγγραφο βρίσκεται έτοιμο, εκτελέστε τη λειτουργία.
Και έτσι εδώ όταν το έγγραφο είναι έτοιμα, που σημαίνει ότι όλα τα HTML έχει
φορτωμένο, τότε εκτελείτε τη λειτουργία ότι αφαιρεί το στοιχείο αυτό.
Και τώρα, όταν τρέχω αυτή τη λειτουργία ότι πέρασα σε έτοιμη, είμαι
εγγυάται ότι όλα τα σχετικά με την HTML Η σελίδα θα υπάρχει για πρώτη φορά.
Ναι.
Ερώτηση;
>> ΚΟΙΝΟ: Ποια είναι η λέξη-κλειδί εκδήλωση κατά τη λειτουργία;
>> JOSEPH ONG: Έτσι, η λέξη-κλειδί εκδήλωση στο λειτουργία είναι μόνο μια παράμετρος που
παίρνει περάσει στη λειτουργία για κάθε περίπτωση.
Είναι απλά κάτι που μπορείτε να πάρετε δωρεάν.
Όταν χρησιμοποιείτε το κλειδί χειριστές σε pset8, το γεγονός αυτό θα μπορούσε να σας πω, για
παράδειγμα, το οποίο κλειδί πατήσατε για.
Στην περίπτωση αυτή, για ένα έτοιμο γεγονός, δεν είναι πραγματικά εξαιρετικά χρήσιμο.
Αλλά για ένα κλειδί κάτω περίπτωση, είναι πιο χρήσιμο, επειδή μπορείτε να πάρετε για να ξέρετε που
πλήκτρο που πιέζεται από το κλειδί πρόσβασης κώδικα από αυτό το αντικείμενο εκδήλωσης.
Διορθώστε;
Μήπως αυτό έχει νόημα;
OK.
Ναι.
Ερώτηση;
>> ΚΟΙΝΟ: Έτσι, μπορείτε να βάλετε το script tag κάτω κάτω;
>> JOSEPH ONG: Οπότε ναι.
Θα μπορούσατε να βάλετε το σενάριο ετικέτα κάτω κάτω.
Αλλά τότε γίνεται ακριβώς πραγματικά βρώμικο.
Και μας αρέσει να συγκεντρώνει όλες του κώδικά μας σε ένα μέρος.
Και αυτό θα μας επιτρέψει να το κάνουμε.
Θυμηθείτε νωρίτερα είπα ότι υπάρχει ένα καλύτερο τρόπος να εξασφαλιστεί ότι τα στοιχεία είναι
στη σελίδα προτού να εκτελέσει κώδικα;
Και αυτό είναι απλά ένα ωραίο τρόπο θα το επιτύχει αυτό.
>> ΚΟΙΝΟ: [δεν ακούγεται].
>> JOSEPH ONG: Ναι.
Θα πρέπει ακόμα να, έτσι δεν είναι;
Επειδή θυμηθείτε, θα περιλαμβάνεται η αρχείο στο επάνω μέρος της σελίδας.
Έτσι πρόκειται να εκτελέσει για πρώτη φορά πριν μπορείτε να φτάσετε στο κάτω μέρος της σελίδας.
OK.
Έτσι, μπορείτε επίσης να προσθέσετε ένα διαφορετικό τον τύπο του χειρισμού συμβάντων.
Αυτός επεξεργάζεται μόνο κλικ.
Όταν κάνω κλικ στο νεότερος, τότε θα εμφανιστεί με μια προειδοποίηση.
Αυτό είναι απλά μια διαφορετική το είδος της εκδήλωσης.
Σε αντίθεση με την περίπτωση έτοιμο, μπορείτε τώρα χρησιμοποιήσετε το κλικ συμβάν όταν λαμβάνετε
κλικ σε ένα στοιχείο.
>> Και στην προκειμένη περίπτωση, να θυμάστε, το κλικ χειριστής συνδέεται με τη νεότερη.
Έτσι, αυτό συμβαίνει μόνο όταν Κάνω κλικ πάνω νεότερος.
Και στην άλλη μία, το έτοιμο εκδήλωση συνδέθηκε με το έγγραφο.
Έτσι, περιμένει το έγγραφο να είναι έτοιμη.
Νόημα;
Νομίζω ότι μπορώ να προχωρήσω.
Ναι.
Ερώτηση;
>> ΚΟΙΝΟ: [δεν ακούγεται].
σε αυτή την περίπτωση μπορείτε να χρησιμοποιήσετε [δεν ακούγεται].
>> JOSEPH ONG: Ω, ναι, επειδή σ 'αυτό περίπτωση, θα πρέπει να περιμένω για τους νεότερους
στοιχείο για να εμφανιστεί στην οθόνη το πριν μπορώ να επισυνάψω ένα χειριστή κλικ για να
αυτό, το οποίο είναι ο λόγος που το έβαλα μέσα του ένα έγγραφο έτοιμο.
OK.
Και την επόμενη, έτσι αυτό είναι ένα μεγάλο παράδειγμα της πώς θα συνδυάσετε τα πάντα.
Αυτό είναι μόνο ένα παράδειγμα επικύρωση φόρμα έχετε δει στη διάλεξη.
Πάρτε λοιπόν αυτό το βήμα προς βήμα, όπως θα περάσει μέσα από αυτό.
Και αυτό θα είναι απολύτως εντάξει.
Απλά διαβάζεται από πάνω προς τα κάτω.
>> Έχω ένα έντυπο στο κάτω μέρος.
Όταν το έγγραφο είναι έτοιμο, επισυνάπτω ένα υποβάλλουν χειριστή στη φόρμα, έτσι ώστε
όταν υποβάλετε το έντυπο, να πάρω τις τιμές μέσα σε κάθε μία από τις εισόδους.
Και μπορώ να ελέγξω αν είναι κενό.
Αν είναι κενό, θα επιστρέψει false, επειδή Δεν θέλω να υποβάλει τη φόρμα,
επειδή η μορφή είναι λάθος.
Εάν ο κωδικός πρόσβασης είναι κενός ή είναι λιγότερο από οκτώ χαρακτήρες, δεν υποβάλω
η μορφή, γιατί αυτό είναι επίσης λάθος.
Και η ψευδής δήλωση μόνο εμποδίζει η μορφή, από την υποβολή και
πρόκειται για μια νέα σελίδα.
>> Και ελπίζω, αυτό έχει νόημα.
Νομίζω ότι εσείς θα πρέπει να περπατήσετε μέσα από αυτό το βήμα προς βήμα κώδικας για τη δική σας.
Και μόλις καταλάβετε ποια είναι η επιλογή στοιχεία και να κάνουμε πράγματα για να
στην πραγματικότητα συνεπάγεται, αυτό θα κάνει πολύ νόημα για εσάς.
Ναι;
>> ΚΟΙΝΟ: Τι σημαίνει η name = όνομα σημαίνει;
>> JOSEPH ONG: Έτσι το όνομα = όνομα χρήστη και name = κωδικός πρόσβασης σημαίνει απλά κοιτάξτε το
χαρακτηριστικό ό, τι είστε επιλογή.
Και στη συνέχεια, ότι πρέπει να ταιριάζουν.
Οπότε πάμε σε εγγραφή.
Και τότε θα δούμε σε όλες τις εισόδους και την καταγραφή.
Και τότε θα πάρει το ένα, όπου το όνομα χαρακτηριστικό είναι ίση με το όνομα χρήστη.
Έτσι, η πρώτη επιλογέα επιλέγει μόνο η είσοδος όνομα χρήστη.
Και η δεύτερη επιλογέα επιλέγει μόνο τον κωδικό πρόσβασης, γιατί αυτές έχουν
χαρακτηριστικά που το όνομά τους, όπως αυτό που υποτίθεται ότι είναι.
Ερώτηση;
>> ΚΟΙΝΟ: Με την υποβολή, πώς η κάτω μέρος επιλύσει το πάνω μέρος;
>> JOSEPH ONG: Έτσι, αυτό συμβαίνει επειδή του χειρισμού συμβάντων.
Έτσι, είμαστε σε αναμονή για μια εκδήλωση υποβάλλει ότι απολύεται από τη φόρμα.
Και αυτό είναι το μόνο που είναι να υποβάλει.
Γιατί καλώ να υποβάλουν μέχρι εκεί;
Λέει, όταν υποβληθεί η φόρμα, Παίρνω μια εκδήλωση υποβάλει.
Έτσι, επιτρέψτε μου να υποκλέψει ότι και στη συνέχεια να εκτελέσετε αυτόν τον κώδικα αντ 'αυτού.
Ναι;
>> ΚΟΙΝΟ: Γιατί έχετε να έχουν εκδήλωση λειτουργία;
Γιατί δεν μπορείς απλά [δεν ακούγεται];
>> JOSEPH ONG: Επειδή το JavaScript, σας πρέπει να δηλώνουν τις λειτουργίες.
Αυτό είναι ακριβώς πώς λειτουργεί σε JavaScript.
Θα πρέπει να πω ότι πρόκειται να εκτελέσετε μια λειτουργία.
Έτσι φαινόταν ότι λέει ότι είστε αναμένει μια λειτουργία εδώ, αντί να
μόνο άγκιστρα.
>> ΚΟΙΝΟ: Και η λειτουργία είναι ό, τι ακολουθεί;
>> JOSEPH ONG: Ναι.
Η λειτουργία αυτή είναι ό, τι είναι μέσα τα άγκιστρα μετά
ότι η λέξη-κλειδί της λειτουργίας.
Ναι;
>> ΚΟΙΝΟ: [δεν ακούγεται].
>> JOSEPH ONG: Για υποβάλω;
>> ΚΟΙΝΟ: Όχι, για τη λειτουργία χωρίς την εκδήλωση.
>> JOSEPH ONG: Ναι.
Έτσι, χωρίς την εκδήλωση, μπορείτε να έχετε αυτό.
Αν δεν χρειάζεστε την εκδήλωση, τότε μπορείτε να παραλείψετε απλά.
Αλλά αν το κάνετε, τότε θα απλά το έβαλε εκεί.
Ναι.
Γρήγορη ερώτηση;
>> ΚΟΙΝΟ: [δεν ακούγεται].
>> JOSEPH ONG: Ναι.
Γιατί αυτό που πρέπει να κάνετε, η document.ready λέει απλά περιμένετε για όλα
το HTML στη σελίδα για να φορτώσει πρώτα.
Και συνήθως, θέλετε τα στοιχεία σας στη θέση του, πριν να εκτελέσει οποιονδήποτε κώδικα.
Εντάξει.
Πρέπει να φτάσουμε σε Ajax.
Δεν έχουμε πολύ χρόνο.
Έτσι, τα πλεονεκτήματα και τα μειονεκτήματα.
JavaScript είναι πιο εύκολο δοκιμή γράψει με jQuery.
Αλλά jQuery είναι το είδος του αργή.
>> Είναι σαν PHP είναι πιο αργή από ό, τι C, επειδή έχει ερμηνευθεί.
Και jQuery είναι λίγο πιο αργή από ό, τι JavaScript, γιατί κάνει πολλά
τα πράγματα κάτω από το καπό.
Και έτσι, αν είστε με τη χρήση jQuery, είναι λίγο πιο αργή από ό, τι
JavaScript, μολονότι σας δίνει ωραία κομψότητα.
Και τέλος, Ajax.
Μέχρι στιγμής με τον Άγιαξ, δεν έχετε δει Ajax από την άποψη της pset7 ακόμα, επειδή
όταν το κάνετε, θα υποβάλει μια μορφή για παράθεση.
Φορτώνει μια νέα σελίδα.
Έτσι, μπορείτε να πάρετε αυτό το μεγάλο λευκό φλας στη σελίδα, ενώ η
δεύτερη σελίδα φορτώνει, σωστά;
>> Θα ήταν πολύ ωραίο αν δεν έχουν αυτό το flash.
Όπως το Facebook, αν απλά μεταβείτε στο το κάτω μέρος, προσθέτει νέο περιεχόμενο
χωρίς ανανέωση ολόκληρης της σελίδας.
Έτσι, κάτι τέτοιο θα ήταν ωραίο.
Πρόκειται για τον κώδικα JavaScript στην αριστερή πλευρά.
Μπορείτε να πάρετε ό, τι είναι μέσα από αυτή την είσοδο.
Μπορείτε να πάρετε τις πληροφορίες μετοχών από το Yahoo!
Και τότε θα κάνει μια μεγάλη σειρά που λέει, εντάξει, αυτό είναι το μήνυμα που θέλω
να εμφανιστεί στην οθόνη.
Και τότε θα θέσει αυτό το μήνυμα στο εσωτερικό κάποιου στοιχείου HTML που παίρνει
εμφανίζεται στην οθόνη.
>> Έτσι, αυτό είναι το μόνο που συμβαίνει εδώ.
Έτσι, βασικά, γιατί αυτό είναι το μόνο JavaScript και δεν χρειάζεται να τρέχει
PHP πια, αυτό θα βεβαιωθείτε ότι ότι η σελίδα δεν ανανεωθεί.
Έτσι, αυτό είναι μόνο μια αφηρημένη ιδέα ότι λέω εδώ τώρα.
Η αφηρημένη ιδέα είναι ότι αν το κάνετε όλα σε JavaScript, δεν έχετε ένα
ανανέωση της σελίδας.
Αλλά πώς θα το κάνετε πραγματικά αυτό;
>> Λοιπόν, στην πραγματικότητα, ας μιλήσουμε για ένα πρόβλημα με αυτήν την πρώτη.
Ένα πρόβλημα είναι σε JavaScript, εκτέλεση είναι σύγχρονη.
Έτσι, θα πρέπει να περιμένετε για ένα γραμμή για να τελειώσει προτού
εκτελέσει την επόμενη γραμμή.
Και τι θα γίνει αν πάω πάνω στο Yahoo!, και servers τους είναι πολύ αργή, και
τους παίρνει τρία δευτερόλεπτα για να να μου δώσει πίσω ότι πληροφορίες απόθεμα;
Όταν χτύπησα αυτή τη γραμμή των τιμών, εάν η εκτέλεση είναι σύγχρονη, καθώς είναι από
προεπιλογή, αυτό είναι ακριβώς πρόκειται να κάνουμε είναι να Ο φυλλομετρητής σας δεν πρόκειται να σταματήσει για
τρία δευτερόλεπτα.
Και δεν πρόκειται να είναι σε θέση να κάνει τίποτα, ενώ παίρνει τα δεδομένα.
Είναι πρόκειται να καταψυχθεί.
>> Και αυτό είναι κακό.
Δεν θέλετε ένα χρήστη να έχουν μια παγωμένη ιστοσελίδα.
Διορθώστε;
Αυτό είναι απλώς κακή.
Όλοι συμφωνούν;
Αν είστε περιήγηση στο Facebook και παγώνει και δεν μπορείτε να κάνετε τίποτα,
πάρει πραγματικά απογοητευμένοι.
Έτσι, η λύση είναι να κάνουμε κάτι ασύγχρονη αντ 'αυτού.
Έτσι, όλη αυτή η ασύγχρονη πράγμα λέει είναι, Πάω να ρωτήσω το εξής
URL για ορισμένα δεδομένα.
Και στη συνέχεια, Πάω να συνεχίσω.
Είμαι ακριβώς πρόκειται να κρατήσει την εκτέλεση ανεξάρτητα από τον κωδικό που ήταν μετά από αυτό.
>> Και στη συνέχεια, όταν τα δεδομένα είναι έτοιμη, τότε θα το επεξεργαστεί.
Αυτό είναι όλο αυτό λένε.
>> ΚΟΙΝΟ: Ajax κάνει ακριβώς Κωδικός ασύγχρονη;
>> JOSEPH ONG: Είναι μια ασύγχρονη τρόπος γοητευτικός δεδομένων.
Έτσι, το πρώτο πράγμα για Ajax είναι ότι μου επιτρέπει να πάρετε τα δεδομένα
από μια εξωτερική ιστοσελίδα.
Και το δεύτερο πράγμα είναι ότι σιγουρεύεται η σελίδα μου δεν σταματήσει, ενώ είμαι
γοητευτικός ότι τα δεδομένα.
Αυτό είναι το ασύγχρονο μέρος της.
Επειδή πηγαίνει κάπου αλλού, επειδή το λέω εγώ συνεχίζω επάνω ενώ
είναι γοητευτικός αυτά τα δεδομένα, ότι καθιστά ασύγχρονη.
Κρατάω εκτέλεσης.
>> Έτσι διατηρούν το ασύγχρονη ιδέα στο μυαλό.
Και εγώ θα σας δείξω τι η διαφορά.
Η σύγχρονη εκδοχή είναι στην αριστερή πλευρά.
Η ασύγχρονη έκδοση είναι στη δεξιά πλευρά.
Κοιτάξτε τους αριθμούς για να δείτε σε ποιες βήματα αντιστοιχούν σε ό, τι
εκτελεί σε κάθε γραμμή.
Εκεί, η ειδοποίηση εμφανίζεται για πρώτη φορά.
Γιατί να πάρει πληροφορίες μετοχών από το Yahoo!
διαρκεί τρία δευτερόλεπτα σβήσει για τρία δευτερόλεπτα.
Και τότε ειδοποιεί την τιμή μετά από αυτά τα τρία δευτερόλεπτα.
>> Έτσι τώρα, ότι δείχνει συναγερμού μέχρι εκείνη τη στιγμή -
τριών δευτερολέπτων μέσα
Και τότε ειδοποιούν μετά από αυτό.
Γι 'αυτό πηγαίνει ακριβώς βήμα προς βήμα.
Είναι σαν αυτό που εσείς θα δεχόταν, σωστά;
Με ασύγχρονη εκτέλεση, σας ειδοποιεί πρώτα.
Στη συνέχεια, μπορείτε να πάτε μακριά σε αυτό το URL.
Και λέτε, Πάω να απλώς να ρωτήσω για τα δεδομένα.
Και στη συνέχεια, Πάω να επεξεργαστεί αργότερα.
Έτσι, εκτελεί αμέσως την επόμενη γραμμή αφού κάνω ότι
ασύγχρονη αίτηση.
>> Έτσι, ένα 0,001 δευτερόλεπτα, θα δείτε hi συναγερμού.
Εκτελέστε αυτή τη λειτουργία, αντίο προειδοποίησης.
Και επειδή έκανα μια υπόσχεση που έχω θα επεξεργάζεται τα δεδομένα αργότερα, τι
που συμβαίνει είναι ότι τα δεδομένα όταν έρχεται πίσω τρία δευτερ λεπτα, στη συνέχεια, τρέχω ότι
λειτουργία που έχω εκεί.
Ναι;
>> ΚΟΙΝΟ: Μπορείτε να ορίσετε ή διευκρινίσει τι σημαίνει Ajax;
>> JOSEPH ONG: Έτσι Ajax είναι ένας τρόπος ότι αν Πρέπει δεδομένα όταν είμαι σε μια ιστοσελίδα και εγώ
Δεν θέλω να ανανεώσετε τη σελίδα και, στη συνέχεια Μπορώ να χρησιμοποιήσω αυτή την τεχνολογία που ονομάζεται Ajax.
Αυτό ουσιαστικά σημαίνει απλά, πηγαίνετε φέρω δεδομένα από μια άλλη ιστοσελίδα.
Και το κάνουμε με έναν τρόπο που μόνο δεν μπλοκάρει την ιστοσελίδα μου.
>> ΚΟΙΝΟ: Έτσι είναι ότι μια εγγενής μέρος της JavaScript ή jQuery;
>> JOSEPH ONG: Έτσι, κάποιος έγραψε ένα τρόπο για να γίνει Αυτό το javascript πριν από πολύ καιρό.
Σε ένα σημείο, δεν υπάρχει.
Και έτσι κάποιος εφηύρε την τεχνική να επιτρέπουν στα άτομα να ζητούν αυτά τα δεδομένα
με αυτό τον τρόπο.
Και έγραψαν κάποια πράγματα να το κάνει για εσάς.
Και jQuery σου δίνει ακριβώς αυτό πολύ καλός τρόπος για να το κάνουμε
με αυτό το $. πάρει λειτουργία.
ερωτήσεις;
Μπορώ να απαντήσει σε ερωτήσεις σχετικά Ajax αργότερα πάρα πολύ.
Θα είμαι εδώ.
>> Γι 'αυτό ας μας φέρω τα δεδομένα χωρίς ανανεώνοντας τη σελίδα.
Και ας μας το κάνετε αυτό στο ένα ασύγχρονο τρόπο που
δεν παγώσει τη σελίδα.
Πάρα πολύ καιρό, δεν είχε διαβάσει αν αυτό εξήγηση ήταν πολύ μεγάλο για σένα.
Έτσι, τελικά, cross-site scripting επιθέσεις.
Το είδαμε αυτό με Zamyla.
Εάν στη βάση δεδομένων μου κάποιος έχει αυτό το όνομα, ποια είναι αυτή η ετικέτα script, και εγώ
έχουν κάποιο κώδικα στη σελίδα μου που εκτυπώνεται τα ονόματα των ανθρώπων σε μια σειρά, ή να έχω
κάποιο κώδικα JavaScript που εισάγει αυτό το όνομα στη σελίδα,
τι HTML παίρνει παράγεται;
Λοιπόν, έχω να εκτυπώσετε την ετικέτα HTML.
Θα εκτυπώσετε όλες αυτές τις ετικέτες.
>> Παίρνω το μέρος όπου είμαι εκτύπωση έξω με τους φίλους μου.
Τυπώσω Lauren έξω.
Θα εκτυπώσετε Milo έξω.
Και τότε το όνομά μου στη βάση δεδομένων είναι σενάριο μετά
κολακευτικό κατάσταση στο Facebook.
Επειδή αυτό εισάγεται μέσα στη σελίδα γιατί μοιάζει JavaScript, όταν
αυτή η σελίδα παίρνει σταλεί στον χρήστη, παίρνει εκτελούνται ως το JavaScript.
Και έτσι αυτό είναι αυτό που αποκαλούμε cross-site scripting επίθεση.
Κάποιος βάζει κακόβουλες πληροφορίες της βάσης δεδομένων σας, που θα μπορούσε να αντιστοιχεί σε
ορισμένες πρόσθετες σπάγκο ή κάποια σειρά JavaScript.
>> Και όταν παίρνει εκτυπωθεί με την σελίδα με αυτό τον τρόπο, τότε τι
που συμβαίνει είναι ότι η κακή κώδικα εκτελείται ότι δεν είχε την πρόθεση
για να πάρει εκτελεστεί.
Και αυτό είναι όλο ένα cross-site scripting επίθεση είναι.
Και ο τρόπος που μπορείτε να πάρετε γύρω από αυτό είναι σαν Zamyla είπε.
Απλά τυλίξτε τα πράγματα σε HTML ειδικούς χαρακτήρες.
Και αυτό το HTML ειδικούς χαρακτήρες είναι ένα PHP λειτουργία που θα αποτρέψει αυτό το είδος
πράγμα από το να συμβεί σε σας αν έχετε ένα κακόβουλο
κορδόνι στη βάση δεδομένων σας.
Είναι ξεφεύγει απλά, έτσι ώστε να μην να ερμηνευθεί ως HTML.
Αντικαθιστά τα μικρά στηρίγματα με αυτό που αποκαλούμε οντότητες.
Και πήγαμε πάνω από αυτό στη διάλεξη πάρα πολύ.
Νομίζω λοιπόν ότι εσείς θα πρέπει να έχουν μια καλή κατανόηση σχετικά με αυτό.
Ερωτήσεις;
Ναι.
>> ΚΟΙΝΟ: Λοιπόν, πώς θα η [δεν ακούγεται];
>> JOSEPH ONG: Πες το πάλι.
>> ΚΟΙΝΟ: Πώς θα την οθόνη -
>> JOSEPH ONG: Σωστά.
Έτσι έχετε κάτι που λέει, όταν Μπορώ να εγγραφώ, πληκτρολογήστε το όνομα μου.
Απλά πληκτρολογήστε σε αυτό το πεδίο, το όνομά μου είναι stript μετά κολακευτικό Facebook
κατάσταση κοντά tag script.
Και αυτό ακριβώς γίνεται τεθεί σε η βάση δεδομένων, επειδή δεν μπορώ να πω σε κάποιον
στον κόσμο δεν έχει ένα όνομα με ένα αριστερό βέλος σε αυτό ή το
script λέξη σε αυτό.
Αυτό δεν έχει νόημα.
Γι 'αυτό ακριβώς πρέπει να βεβαιωθείτε ότι αποστειρώνουν τα πράγματα πριν το εκτυπώσετε
έξω στη σελίδα.
>> ΚΟΙΝΟ: Έτσι, οι ειδικές κάρτες HTML αποτρέπει τις ετικέτες σενάριο;
>> JOSEPH ONG: Ναι.
Γι 'αυτό δεν εμποδίζει τις ετικέτες script.
Κάνει ακριβώς βέβαιος ότι η ετικέτες script δεν παίρνουν
ερμηνευθεί ως HTML ή -
ναι.
Αυτό ακριβώς έρχεται και τι είναι στην πραγματικότητα.
Εντάξει.
Έτσι, αυτό ήταν η αναθεώρηση κουίζ.
Cool.
>> [Χειροκροτήματα]