[Powered by Google Translate] [أسبوع 9] [ديفيد J. مالان - جامعة هارفارد] [هذا CS50. - CS50.TV] حسنا. مرحبا بك مرة أخرى. هذا هو CS50، وهذا هو بداية الأسبوع 9. اليوم ونحن نركز بشكل خاص على التصميم، لم يعد في سياق C ولكن في سياق PHP وقليلا من SQL وقليلا من جافا سكريبت، ولا سيما باتجاه نهاية كل pset 7 و أيضا المشروع النهائي. في الواقع، إذا كنت في تلك المرحلة في المشروع النهائي حيث يفترض ابتداء من ساعة أو نحو ذلك قبل كنت على الأقل بدأت تعطي بعض التفكير إلى المشروع النهائي وكنت أفكر كنت ترغب في التعاون مع 1 أو 2 زملاء الدراسة، إذا كنت تواجه مشكلة في التواصل مع زملاء الدراسة قال، لا تتردد في ملء النموذج في cs50.net/partners/form. فقط ما يطلب لك من أنت، أي نوع من المشروع كنت تفكر في، المكان الذي تعيش فيه فقط لأسباب لوجستية. ثم إذا كنت تريد إبقاء العين على مدى الاسبوع المقبل أو نحو ذلك في جدول URL هناك، ثم يمكنك ان ترى نسخة للقراءة فقط من محرر مستندات Google التي نحن جمع تلك المعلومات. حتى إذا كنت تريد أن تعمل مع شخص ما، وبكل الوسائل لا تتردد في التواصل مع الناس عبر هذه الآلية. ولكن الغالبية من الناس القيام منفردا العمل. هذا شيء طيب تماما. لذلك لا نرى أن هذا هو بأي حال من الأحوال إلزاميا. يوم الجمعة كان مجرد لي وعدد قليل من الفريق هنا، المسرح فارغة بالنسبة للجزء الاكبر. وكانت هناك 3 السياح الجلوس هناك، حتى أن كان محرجا قليلا. ما تحدثنا عنه كان قواعد البيانات وتحدثنا عن pset 7 أ قليلا. وإذا لم يحدث ذلك للقبض على الفيديو فقط حتى الآن، هذا شيء طيب. سأحاول أن تحدد أي شروط أننا سنتخذ خلاف ذلك أمرا مفروغا منه استنادا إلى محاضرة يوم الجمعة. ولكن اليوم ونحن في طريقنا إلى محاولة لتحصل على نقطة لا مجرد القدرة على فعل شيء مثل pset 7 ولكن فهم حقيقة ما يجري تحت غطاء محرك السيارة، ولا سيما بعض من تجريدات أن نضع في مكان في الملف functions.php لجعل حياتكم أسهل قليلا ولكن حتى يتسنى لك فهم في نهاية المطاف بحيث عندما عجلات التدريب تؤتي ثمارها في غضون بضعة أسابيع ما زال يمكنك البقاء على قيد الحياة في العالم الحقيقي، والقيام بذلك دون أي إطار الاشياء CS50 تحت لك. هذا _SESSION دولار، لأولئك منكم الذين هم على دراية أو الذين اشتعلت بالفعل الفيديو يوم الجمعة، ماذا الدورة فلنفعل في تطبيق ويب يستند إلى PHP؟ هذا هو متغير superglobal، مما يعني انها مماثلة للحصول على وسأعين وعدد قليل من الآخرين، ولكن ما هو هذا الشيء مفيد لل؟ ما هو الدورة استخدامها ل؟ نعم. [طالب] تسجيل الدخول. آسف؟ [طالب] تسجيل الدخول. تسجيل الدخول. الواقع. 7 نحن في pset كنت تستخدم هذه الدورة superglobal لتسهيل تسجيل الدخول. وما هو الجميل في هذا هو أن superglobal انها مجموعة النقابي. مجموعة النقابي، التذكير، هو مجرد مجموعة مؤشرات ولكن الذي لم يعد لدينا لتكون الأرقام مثل 012. يمكن أن تكون أرقام أو أنها يمكن أن تكون سلاسل من ذلك. وحتى إذا كنت قد اتجه الى pset 7 ولكن، ولعلكم تذكرون أننا تخزين مفتاح يسمى ID داخل هذه المجموعة النقابي قيمته هو شيء من هذا القبيل 123 - أيا كان دخوله حاليا في هوية المستخدم هو. الدافع لهذا هو أنه حتى بعد قيام المستخدم بزيارة المضيف المحلي أو موقع الويب الخاص بي بشكل عام ومن ثم تسجيل ما قد في، حتى إذا لم تقم بالنقر فوق ارتباط أو العودة إلى موقع الويب الخاص بي لمدة 5 دقائق أو حتى ساعة واحدة أو حتى يوم واحد ولكنها تترك نافذة مفتوحة على المتصفح، يمكن عن طريق هذا superglobal أتذكر أن يتم تسجيل في. وبعبارة أخرى، فإنه يسمح لي لتخزين أي شيء على المدى الطويل قليلا أريد حول مستخدم. ويمكنك التفكير في الأمر حقا كما تجسد عربة التسوق. أماكن مثل الأمازون السماح من الواضح انكم نضع الأمور في عربة التسوق، ولكن HTTP وبروتوكول أن القوى الويب، عديم الجنسية بمعنى أن عند زيارة موقع على شبكة الانترنت، بالنسبة للجزء الأكبر لم يكن لديك اتصال شبكة ثابتة بعض بين المتصفح والخادم. بمجرد لقد قمت بتحميل ملفات JPEG وHTML وملفات GIF وقبل كل شيء، أن الاتصال يذهب بعيدا وعليك نسخة من HTML وwhatnot من الخادم. ولكن إذا كان الملقم يريد أن يتذكر شيئا عنك، يقع العبء على الملقم لتسجيل تلك المعلومات بالفعل. وحتى تتمكن مبرمج الذين لديهم السيطرة على الخادم يمكن وضع أي شيء تريده معظم داخل مجموعة هذه النقابي superglobal وسوف يكون هناك في المرة القادمة المستخدم يعود، سواء كان ذلك دقيقة أو حتى أيام في وقت لاحق، إلا إذا كانوا إغلاق نافذة المتصفح الخاصة بهم، في الدورة التي يختفي نقطة. لذلك فمن التخزين المؤقتة، فمن غير الثابتة، والتي من المفترض أن تذهب بعيدا بمجرد إغلاق المستخدم المستعرض الخاص بهم - لا أن مجرد علامة التبويب، في كثير من الأحيان المتصفح بأكمله، وبالتالي تسجيل فعال للمستخدم بها. فكيف يتم هذا الشيء في الواقع تنفيذها؟ دعونا نلقي نظرة سريعة على مثال بسيط نحن ننظر في يوم الجمعة. بالنسبة لأولئك غير مألوف، كان بسيطا مثل هذا. هذه هي صفحة ويب هدفه الوحيد في الحياة هو أن تقول لي كم عدد المرات التي زرت هذه الصفحة. هذه هي المرة الأولى هنا يوم الاثنين ان زرت عليه، لذلك يقول 0 مرة. ولكن إذا كنت بدء إعادة هذه الصفحة، تقول 1 مرة، 2، 3، 4، 5، وسيكون هذا في نهاية المطاف تبقي فقط على العد حتى يصل، حتى، حتى يصل في كل مرة كنت فوق تحديث الواقع عليه. فكيف هو هذا العمل؟ اسمحوا لي أن انتقل من هذا الملف داخل دعا counter.php. الجزء العلوي من كل ذلك هو تعليق الأزرق، ولكن الجزء المثير للاهتمام هنا. على خط 13 ونحن نسمي هذا session_start وظيفة، وهذا هو حرفيا كل ما عليك القيام به إذا كنت تريد أن يكون الوصول لهذا دعا superglobal خاص دولار _SESSION. أن يجعل كل ذلك ممكنا، وسنرى في لحظة كيف أن كل شيء ممكن. في 16 خط إشعار ما أفعله. إذا كان مفتاح، ودعا مكافحة - وبعبارة أخرى، فإن القيمة الرئيسية - "مكافحة" يوجد داخل هذه المجموعة تسمى الدورة، ثم ماذا أفعل معها في خط أدناه؟ ما هو السلالة 18 تفعل؟ [رد الطالب غير مسموع] ما هذا؟ [طالب] تخزين القيمة. جيدة. انها تخزين قيمة هذا في الدورة في الوقت الحالي في متغير مؤقت جديد المحلية، $ العداد في جميع صغيرة. تلاحظ أن يجري بالفعل PHP قليلا كسول هنا. تلاحظ أننا لا نملك أي ذكر لكثافة العمليات أو تعويم أو سلسلة أو أي شيء من هذا القبيل لأن يتم كتابتها ضعيفة PHP، حيث لم يكن لديك لتحديد نوع متغير، وهنا في هذه الحالة أنا لم أعلن حتى الآن. أنا معلنا أنه داخل هذه الأقواس المتعرجة وعلى عكس C، وهذا هو في الواقع ما يرام. بغض النظر عن مدى تداخل عميق إعلان متغير هو في PHP - داخل متعرج، داخل متعرج وما شابه ذلك - فإنه في تلك اللحظة في الوقت المناسب وجود للفترة المتبقية من البرنامج، للأفضل أو للأسوأ. حتى يصبح على الفور العالمية بمجرد تحديد ذلك كما نقوم به هنا. وإلا، إذا أنا لا أجد أن هناك أي شيء في superglobal الدورة، أنا على ما يبدو تهيئة هذا العداد إلى 0 متغير، وبالتالي افتراض فقط للمستخدم لم يكن هنا من قبل. ثم وهذا بالطبع هو تزايد العداد كيف؟ أنا استكمال القيمة التي هو داخل هذه مجموعة النقابي من خلال تحديد ذلك تساوي كل ما العداد حاليا + 1. إذا كنت انتقل لأسفل هنا إلى HTML من الصفحة، انها في الواقع بسيط جدا. و، كل ما لدي في الجسم من هذه الصفحة "قد زار هذا الموقع يمكنك مرات كذا ونحو ذلك." وهذا هو بناء PHP. إذا كنت تفعل <؟ =، وهذا هو ما يعادل نحو فعال إلى ما وظيفة؟ انها حقا أن يعادل شيء من هذا القبيل printf، الذي رأيناه مرات عديدة في C، على الرغم من أن كما كنت قد تعرف بالفعل من المواصفات في pset 7، الطباعة أيضا وظيفة فقط التي تطبع شيء، أنه لا يستخدم في الواقع رموز تنسيق، ويمكنك أن تقول في الواقع صدى أيضا. انهم جميعا من أي وقت مضى حتى قليلا مختلفة على الرغم من أن الأثر الصافي هو في نهاية المطاف نفسه. حتى هذا الاستخدام للعلامة يساوي هو مجرد نوع من طريقة أنيقة للقيام بذلك أكثر وضوحا من قد يكون الأمر خلاف ذلك قادرة على. ذلك أن جميع هذا الموقع لا. فإنه يطبع من قيمة العداد. كيف يتم كل هذا يحدث بالفعل؟ ولعلكم تذكرون في الأسبوع أو قبل ذلك بدأنا تبحث تحت غطاء محرك السيارة في صفحة ويب كيف يعمل باستخدام علامة التبويب هذه المفتش. الكروم لديه هذه النسخة في كل من ماك، نسخة ويندوز، وحتى نسخة لينكس، وفايرفوكس وإنترنت إكسبلورر لديها آليات مماثلة حيث لديك هذا المصحح المدمج في داخل المتصفح. دعونا نلقي نظرة على ما يلي. لدينا مجموعة كاملة من علامات التبويب هنا، ويذكرون أن واحد هو أقصى اليسار عناصر، وبغض النظر عن مدى godawful في HTML و JavaScript في صفحة، مع التذكير بأن علامة التبويب عناصر يمكنك التنقل في الواقع HTML هرميا وجميلة وبدقة. إذا كان الأمر كذلك كنت في محاولة لمعرفة من موقع على شبكة الانترنت مثل غوغل أو الفيسبوك أو حقا أي موقع، ندرك أن ربما كنت أفضل حالا النظر إلى شفرة المصدر بهذه الطريقة بدلا من عرض المصدر الخام، التي يمكن أن تكون فوضى، كما رأينا وخاصة في الموقع جوجل. حتى لو كنت فوق علامة التبويب بدلا من ذلك على شبكة هنا، دعونا نرى ما يحدث عندما أقوم بزيارة هذه الصفحة. اسمحوا لي أولا مسح ذاكرة التخزين المؤقت الخاصة بي. انا ذاهب للذهاب إلى إعدادات في كروم ثم انتقل إلى التاريخ واضح بعد ذلك كل بيانات التصفح. قد تستخدم لأفعل هذا من أجل أغراض أخرى، [ضحك] ولكن عندما يتعلق الأمر تطوير مواقع الويب، انها فعلا مفيدة - إذا كنت تعرف الضحك. [ضحك] انها في الواقع مفيدة حقا عندما تطوير مواقع الإنترنت لأن الواقع هو أشياء مثل ملفات تعريف الارتباط والملفات أشياء مثل HTML مؤقتا، مؤقتا ملفات JavaScript يمكن أن تصبح في الواقع صداعا كبيرا، لأنه إذا لأي سبب من الأسباب المتصفح تقرر تخزين بعض الملفات وبعد كنت قد أجريت تغييرات على هذا الملف على الملقم لكن المتصفح لم يدرك حقا أن الملف قد تغير وبالتالي لا فعلا إعادة تحميل البرنامج حتى عندما تضغط على زر تحديث، واحدة من الطرق الأكثر مؤكدة النجاح لمجرد التأكد من الخطأ ليست مع التعليمات البرمجية، انها مع سلوك المتصفح، هو أن يذهب هنا في متصفحك وامسح فقط كل تاريخ حتى لا يكون هناك أي التباس هذا. ثم إذا كنت تريد حقا أن تكون بجنون العظمة، إنهاء المستعرض، إعادة تشغيله، ثم تأكد من كل شيء يعمل كما هو متوقع. لذلك باختصار، مسح ذاكرة التخزين المؤقت هو جيد عند القيام التنمية. حتى هنا لدينا علامة التبويب شبكة الاتصال. I سابقا قد زار الموقع 9 مرات، ولكن اسمحوا لي الآن المضي قدما وانقر فوق تحديث. وأنا تتراجع إلى 0. دعونا نرى كيف هو الواقع الذي يتم تنفيذه هذا superglobal الدورة. أنا ذاهب إلى الضغط على طلب HTTP 1 أن تم، ويتيح هذا الإطار التصحيح لي نظرة من الداخل على ذلك. هنا أرى مجرد استجابة من الملقم، وهي ليست مثيرة للاهتمام. لقد رأيت هذا في أي عدد من الطرق. ولكن ما هي مثيرة للاهتمام من الناحية الفنية الرؤوس. إذا كنت انزل هنا والتركيز على رؤوس طلب وانقر فوق عرض المصدر، ما أنا ذاهب لرؤية حرفيا على طلب HTTP الذي ذهب لتوه من متصفحي إلى الملقم، الحصول على كونها كلمة المنطوق و، ثم / counter.php كونها اسم الملف HTTP/1.1 كونها مجرد إصدار HTTP التي تستخدم متصفحي. هذا الخط هنا هو تذكير قليلا من متصفح إلى خادم ما اسم مركز الخدمة أنه يريد التحدث إليه. ومن ثم بقية هذا مثير للاهتمام في بعض الأحيان ولكن ليس في الوقت الراهن ذات الصلة. هذا هو مجرد نوع من الفضول. خفي على الرغم من هذه السلسلة هو، في أي وقت متصفحك يزور موقع على شبكة الانترنت انها إعلام الخادم ما المتصفح الذي تستخدمه وما نظام التشغيل الذي تستخدمه وإصدار ما منه. إذا كان الأمر كذلك كنت قد تساءلت عن كيفية مواقع مثل CNN وwhatnot تعرف ما هي النسب المئوية من مستخدمي ماك على مستخدمي الانترنت PC،، IE المستخدمين، والمستخدمين كروم وما شابه ذلك، انها لجميع المتصفحات يقولون كل موقع واحد هناك ما نحن عليه. أنه لا يحتوي على معلومات شخصية بالضرورة، ولكنه اخبار الخادم ما هو عنوان بروتوكول الإنترنت والمتصفح وما كنت تستخدم نظام التشغيل. ذلك حيث ان هذه المعلومات. ولكن ما هو أكثر إثارة للاهتمام عندما يتعلق الأمر الآن إلى هذه الدورات هو رأس استجابة. اسمحوا لي انقر فوق عرض المصدر المقبل للاستجابة. ما المثير للاهتمام هنا هو عدد قليل من الأشياء. 1، وصلنا مرة أخرى رمز حالة من 200. نحن لا نرى هذا رمز الحالة لأن ذلك يعني كل شيء على ما يرام. وهذا يعني حرفيا بخير وعلى النقيض من شيء آخر. ما هو عدد نرى في بعض الأحيان فهذا أمر سيئ؟ [طالب] 404. 404، لم يتم العثور على الملف، قد تكون عثرة 403 على بالفعل، المحرم، مما يعني أنك نسيت أن شيئا شمود، على الأرجح. وهناك حفنة من الآخرين. هنا أسفل، وهذا هو مجنون قليلا. أنا فقط حقا كتب هذا الملف قبل بضع دقائق من صقه في gedit. لماذا لم تنتهي هذه الصفحة في عام 1981 قبل كان هناك حقا ويب؟ ما يحدث هناك؟ [رد الطالب غير مسموع] الطابع الزمني. ولكن لماذا؟ انها تعسفية إلى حد ما، ولكنها في الواقع مفيدة. ما هو هذا القول هو لمتصفحي هذا الملف PHP التي طلبتها للتو قد انتهت بالفعل. في الواقع، انها انتهت قبل 30 عاما. ولكن ماذا يعني ذلك حقا؟ بل يعني فقط في المرة التالية يقوم المستخدم بزيارة هذه الصفحة، سواء عن طريق إعادة كتابة أو عنوان الموقع في شريط العنوان، تأكد من أن تذهب وجلب نسخة جديدة منه. هذا هو نوع من مثال على خرق ذاكرة التخزين المؤقت، كلمة غبي هذا يعني فقط محاولة لثني المتصفحات من الواقع HTML التخزين المؤقت انه تم ارسال هذا من ملقم بحيث لا تضغط على زر إعادة التحميل عن طريق الخطأ ونرى بعد ذلك نفس النسخة من الملف. كنت فعلا تريد الملقم لإرسال نسخة جديدة. وبالتالي فإن حقيقة أنه عام 1981 يعني فقط أن هذا ما هو اختيار الجهاز كموعد التعسفي في الماضي. لكن الخط الحقيقي العصير الآن هذا واحد. حتى قبل 50 وربما كنت على دراية غامضة مع ملفات تعريف الارتباط. اعتبارا من الآن، وخاصة بين من هم أقل مريحة أو بين بين، ما هو ملف تعريف الارتباط في فهم الخاص بك الآن على الرغم من أننا على وشك أن تجعل فهمك أكثر تقنية؟ ما هو ملف تعريف الارتباط؟ نعم. [طالب] معلومات عن المستخدم، مثل إذا كانت قد كتبت اسم المستخدم أو شيء. جيدة. انها معلومات عن المستخدم، سواء كانت قد كتبته في اسم المستخدم الخاصة بهم بالفعل. الكوكيز هي وسيلة يمكن أن نتذكر حيث ملقمات شيئا عن مستخدم. وما الكعكة هو حقا هو ملف نصي أو بعض تسلسل بايت انها زرعت من قبل الملقم التي داخل المتصفح الخاص بك، وداخل هذا الملف أو بين تلك بايت هو نوع من أنواع المعرف. ربما انها حرفيا اسم المستخدم الخاص بك، ولكن في كثير من الأحيان هو شيء خفي ذات مظهر أكثر مثل هذا الشيء هنا - bo8dal3ct وهكذا دواليك - هذه السلسلة الأبجدية الرقمية كبيرة حقا في الحقيقة كان ذلك يعني مجرد أن يكون معرف فريد بالنسبة لك. أو يمكنك التفكير في ان هذا النوع من طابع جهة الظاهري. إذا ذهبت إلى النادي أو بعض متنزه، أن نتذكر أن كنت قد دفعت فعلا وضعوا ذهب في، ملصقا حمراء صغيرة على يدك من نوع ما، ويذكر أن الناس في عداد بعد أن كنت قد دفعت بالفعل ويمكنك أن تأتي وتذهب كما يحلو لك. ملفات تعريف الارتباط قليلا مماثلة في الروح على ذلك. أول مرة زرت هذا الموقع، كما فعلت بعد مسح ذاكرة التخزين المؤقت الخاصة بي، وضع خادم الويب، والأجهزة في هذه الحالة، ختم على يدي اسمه PHPSESSID، الدورة ID، قيمتها هي هذه السلسلة الأبجدية الرقمية طويلة حقا. حتى الآن هذا النوع من كتب على يدي بحيث في المرة القادمة أنا ضربت تحميل أو زيارة هذا يدويا URL في المتصفح، من متصفحي تعريف HTTP هو الذهاب الى تقديم يد الطابع مرارا وتكرارا وتكرارا. حتى على الرغم من أن الملقم لا يعرف بالضرورة من أنا، أنهم على الأقل يعرفون أنني المستخدم نفسه أو على الأقل، وبشكل أكثر تحديدا، والمتصفح نفسه. وحتى هذا هو في نهاية المطاف كيفية تنفيذ superglobal الدورة. خادم ليس لديه فكرة من أنت عندما تقوم بزيارة موقع على شبكة الانترنت للمرة الثانية أو مرة الثالثة إلا إذا كنت تقديم هذا الطابع اليد. وبمجرد تقديم هذا الطابع جهة، خادم الويب يذهب أساسا إلى قاعدة بيانات صغيرة خاصة به والشيكات، حسنا، لقد رأيت للتو الطابع يد bo8dal3ct المستخدم وهكذا دواليك. دعني أرى ما هي المعلومات المخزنة ومبرمج داخل superglobal عن هذا المستخدم، وثم اسمحوا لي أن تأكد من أن البيانات مرة أخرى داخل دورة superglobal بحيث يمكن للمبرمج إعادة وصول إلى هذه البيانات حتى لو تم تعيينها بعض دقائق أو ساعات الماضى. حتى في غيرها من الكلمات، الكوكيز، والتي حصلت على الراب سيئة لبعض الوقت بسبب انعدام الأمن في المتصفحات ويمكن أن تنتهك الخصوصية حقا، وهذا كل شيء، لديهم في الواقع فائدة كبيرة لأن بدونها كنت باستمرار أن تسجيل الدخول إلى كل صفحة الفيسبوك التي تزورها أو كل ما تقرأه بريد Gmail الإلكتروني إذا كان المتصفح لا يكون وسيلة للتذكر لقد كنت أن مصادقة بالفعل. حتى في هذه الطريقة يتم إرسال الكوكيز جيئة وذهابا عبر السلك. آخر الفضول حول ملفات تعريف الارتباط، خصوصا هنا، هو أن هذا هو نص واضح تماما في. ليس هناك تشفير يجري هنا على الإطلاق، وبالفعل أنا باستخدام HTTP في الوقت الراهن. واحدة من المفضلة لدينا لحظات في CS50، الذي هو الآن 2 منذ سنوات، وقد جاء في وقت قريب أداة تسمى Firesheep بها. كان هذا قطعة من البرمجيات الحرة التي تم إجراؤها من قبل الباحث الأمني على أنها دعوة للاستيقاظ للمجتمع أن أقول فقط كيف تنفذ بوحشية وكانت آليات المصادقة معينة على الويب. كذلك لبعض الوقت، وكان الفيسبوك بالكامل تقريبا على HTTP، HTTPS لا. وحتى لو كان لديك أي فكرة كيف يعمل التشفير، S آمنة لذلك يعني أن هناك على الأقل بعض التشفير المعنية. لم تستخدم الفيسبوك لتشفير أسماء المستخدمين وكلمات المرور، ولكن بمجرد نظرت الخاص الوخزات أو الرسائل أو خلاصتك الأخبار، كان كل ذلك غير مشفرة. لذلك كان بريد جوجل حتى عام واحد فقط أو 2 قبل. أي وقت قمت بتسجيل الدخول في، نعم، استخدموا التشفير الآمن، ولكن بعد ذلك لم تكن. وربما السبب في ذلك؟ لماذا لا تستخدم الترميز فقط كل الوقت في حالات الاستخدام مثل هذا؟ ما هذا؟ أعتقد أنني سمعت شيئا. [طالب] سرعة. السرعة، أليس كذلك؟ هناك طرق للتغلب على هذه. ولكن إذا كنت مجرد نوع من التفكير في الامر منطقيا، إذا قمت بتشفير شيء، ما عليك القيام به على الأقل عمل أكثر من ذلك بقليل. في pset 2 عند تنفيذها أو قيصر أو الكراك حتى Vigenere، الطباعة فقط سلسلة من السهل نسبيا. تشفير ثم طباعة سلسلة الحد الأدنى يتطلب العمل أكثر قليلا.  لمواقع شعبية مثل السوبر جوجل والفيسبوك، إذا كان لديك لبذل المزيد من العمل لكل مستخدم لكل صفحة ويب واحدة زيارتهم، ان يستغرق الامر سوى الى مزيد من الوقت CPU. وإذا كنت بحاجة لمزيد من الوقت CPU، قد تحتاج أكثر من ملقمات، مما يعني أنك قد تحتاج المزيد من المال. وكذلك لسنوات عديدة هذا في الحقيقة مجرد ليست أفضل الممارسات. كان الناس استخدام التشفير SSL فقط عندما يحتاجون إليها. إلا أنه تبين أنها، وكما مع هذا الزميل Firesheep أدلى سوبر واضحة، عند الرجال الذين هم حاليا في الفيسبوك الآن - بدافع الفضول، دعونا نرى إذا كان عليك فيس أعلى. إذا كنت في الفيسبوك الآن في بعض التبويب، حتى لو كان لا foregrounded ذلك، هو HTTP URL الخاص بك أو HTTPS؟ [الطلاب متعددة] S. S؟ [ضحك] حسنا. أي HTTP؟ فقط 1؟ حسنا. لذلك يمكن لنا جميعا أن الرجل الإختراق الفيسبوك حساب الآن. بالنسبة للجزء الأكبر أصبح هذا قيد التشغيل بشكل افتراضي، على الأقل في بعض المواقع. وقصة قصيرة طويلة، إذا حركة المرور الخاصة بك على شبكة الإنترنت غير مشفرة، الأمر لم يقتصر على HTML العودة وذهابا عبر WiFis غير مشفرة، لذلك أشياء مثل ملفات تعريف الارتباط تذهب جيئة وذهابا طوال الهواء دون أي شكل من أشكال التشفير. إذا كان الأمر كذلك لديك فقط قليلا من الدهاء البرمجة أو قليلا من المهارات غوغلينغ للعثور على البرمجيات الحرة التي تفعل ذلك، كل ما عليك القيام به هو الجلوس في ستاربكس أو الجلوس في المطار حيث هناك عموما غير مشفرة واي فاي ومجرد مشاهدة لكلمات رئيسية مثل كوكي-SET: PHPSESSID أو لأنه إذا كان لديك والدهاء التقنية لمجرد مشاهدة واي فاي لجميع من البتات التي تتدفق طوال الهواء لهذا النمط، هل يمكن القول بعد ذلك أن الرجل PHPSESSID يحدث أن تكون bo8dal وهكذا دواليك. وبعد ذلك مرة أخرى إذا كنت بما فيه الكفاية من الناحية الفنية والدهاء أو لديك الأداة المناسبة، يمكنك ثم إعادة تكوين مجرد متصفح الخاص بك لبدء تقديم هذا الطابع اليد لFacebook.com، والفيسبوك هو مجرد الذهاب الى افتراض أن كنت ذلك الرجل لأن كل ما نعرفه هو ليس من أنت ولكن أن يكون لديك هذا معرف فريد. حتى إذا كنت سرقة معرف فريد أن وتقديمها إلى خادم الويب الخاصة بك و، وهم في طريقهم فقط لتظهر لك ذلك الشخص تغذية الأخبار أو ذلك الشخص أو رسائل الوخزات. وأود أن جوجل الآن كيفية تفعيل HTTPS لربما الفيسبوك. لكنها في الحقيقة بهذه البساطة. وهكذا قد حصلت على الفيسبوك وجوجل ومثل جيد حقا في هذا، ولكن إبقاء العين على المزيد من المعلومات عن أي جميع المواقع التي تزورها التي لا تستخدم HTTP ولها نوع من المعلومات الحساسة عليها، سواء كان ذلك مالية أو شخصية أو ما شابه ذلك. لو انهم لا يستخدمون هذا، يمكن من المحتمل جدا أن يكون مثل هذا الكوكيز بكل سهولة سرقتها ومزورة ثم، وهذا هو بالضبط ما فعلته Firesheep. هل بالضرورة أن يكون مبرمجا. وكان كل ما كان علي القيام به لديك اتصال بالإنترنت، وتحميل هذه الأداة المجانية، وما من شأنه أن القيام به هو تسجيل الدخول، ومن ثم سوف تظهر لك أسماء الفيسبوك الجميع في ساندرز، خاصة في هذه المظاهرة، من حولك وكل ما كان علي القيام به وانقر على اسم البرنامج وأتمتة عملية من استنشاق ملف تعريف الارتباط هذا، عرضه على الفيسبوك كما الخاصة بك، و، فويلا، وكنت لك بالدخول. لذلك هذا هو آخر واحد من تلك "لا تفعل ذلك" رسميا. إذا كان لديك شبكة منزلك وتريد العبث، وبكل الوسائل، ولكن هذا لا تدرك عبور خط على بيئة الجامعة. لكن الهدف هنا هو في الحقيقة لا أن أؤكد كيفية القيام بذلك ولكن كيف للدفاع ضد هذه الأنواع من الأشياء. والحل هنا تافهة، على الرغم من أنها نفسها معيبة، هو حقا للحد من استخدام أي المواقع التي لا تستخدم HTTPS باستمرار. حتى مواقع مثل الفيسبوك وجوجل بشكل متزايد خانات حيث يمكنك الاشتراك في هذا النوع من الشيء، وكان هذا البنوك لسنوات لأسباب مشابهة. حتى قليلا من عامل الخوف إذا وسعنا. ولكن هذا كل شيء باختصار. هذه هي الطريقة التي يتذكر الخادم من أنت. وبمجرد أن أتذكر من أنت، فإنها يمكن أن تذكر أي شيء عنك الذي تخزين مبرمج داخل هذا superglobal خاص يسمى $ _SESSION. وpset 7 نحن نقوم باستخدامه بشكل مسلي فقط أن نتذكر عدد صحيح، وهي فريدة من نوعها ID للمستخدم الذي يسجل في، حتى يتسنى لنا معرفة لقد كانت هناك قبل. ثم أي أسئلة أو ملفات تعريف الارتباط على دورات أو ما شابه ذلك؟ Firesheep لا يعمل وكذلك بعد الآن، وعليك ان تضع الكمبيوتر في وضع لمنحل خاص لذلك كنت فعلا الاستماع لحركة المرور إلى جانب أنفسكم. حتى إذا كنت تحميله حاليا Firesheep، وتحقيق انها ليست تماما كما سهل كما كان من قبل للتظاهر. حسنا. ولا تفعل ذلك في ساندرز. نفعل ذلك في المنزل. قواعد البيانات. واحدة من الأشياء فعلنا في 7 pset عمدا جدا ونقدم لكم جدول نموذج قاعدة البيانات للمستخدمين أن لديه بعض هويات المستعملين، بعض أسماء المستخدمين، كلمات المرور المشفرة وبعض فيها. وكما سترى، إذا كنت لم تقم بذلك بالفعل، وأنت تسير لدينا لتغيير الجدول قليلا. وأنت تسير لدينا لإضافة بعض ذاكرة التخزين المؤقت إلى كل من المستخدمين في هذا الجدول، وأنت تسير لدينا لإضافة جدول آخر التاريخ، جدول المحافظ، أو الاتصال ربما شيء آخر. ولكن من حيث التفكير في كيفية القيام بذلك، دعونا فتح هذه الأداة التي كنا يوم الجمعة، ولكن إذا غير مألوفة، ويأتي مع الجهاز أداة دعا بريس الذي هو مكتوب في PHP قبيل الصدفة، ولكن الغرض منه في الحياة، بعد أن سجل في jharvard هنا مع قرمزي، هو أن تعطيني وسيلة سهلة الاستخدام لعرض وتغيير قاعدة البيانات الخاصة بي. وتسمى قاعدة البيانات التي أنا على التوالي على الأجهزة الخلية. هذه هي شعبية جدا، وانها خالية قاعدة بيانات مفتوحة المصدر التي من السهل رائعة للاستخدام، مع مقدمات خاصة من هذا القبيل. ما هذه الأداة يسمح لي أن أفعل، على سبيل المثال، هو كزة حول الجداول. اسمحوا لي أن نمضي قدما ونفعل ذلك. يوم الجمعة أنشأنا جدول يسمى الطلاب التي كانت بسيطة عظمى. وكان 3 أعمدة - رقم أو اسم، والبريد الإلكتروني - وأنا إدراجها يدويا زوجين من الصفوف مثل ديفيد ومايك في هذا المثال بالذات. دعونا نلقي هذا قليلا كذلك، ودعونا نفترض أننا نريد أن نتذكر أكثر من مجرد اسم والبريد الإلكتروني حول مستخدم. اسمحوا لي هنا انقر فوق البنية في الأعلى. ومرة أخرى، pset مناحي لكم من خلال الخطوات المطلوبة هنا، لذلك لا تقلق إذا كان بعض من هذه قليلا سريعة. ثم أنا ذاهب إلى الضغط على هنا. أنا ذاهب لإضافة بعض الأعمدة بعد عدد من البريد الإلكتروني لأنني أريد أن أضيف شيئا مثل المنزل. لقد نسيت لتسجيل منزل الطالب. اسمحوا لي فوق الانتقال، والآن لدينا هذا الشكل وهذا هو للأسف قليلا واسعة من اليسار إلى اليمين، ولكن أنا ذاهب إلى استدعاء اسم هذا البيت المجال، وفوق نوع لدي الآن للاختيار. لذلك دعونا لها دردشة قصيرة عن أنواع مختلفة في الخلية لأن في حين يتم كتابتها ضعيفة PHP وانها نوع من يلعب بسرعة وفضفاضة مع أنواع، في قاعدة بيانات خاصة أنه من المهم فعلا سوبر لاستخدام الكتابة لصالحك لأنه لا يمكن واحد من الخلية الأشياء ومحركات قواعد البيانات الأخرى القيام به للكم وتأكد من أنك لا تضع بيانات وهمية في قاعدة البيانات الخاصة بك. هذا هو نوع من الخطأ مجانا التحقق المتاحة لك. لبيت نحن بالطبع لا تريد أن يكون الباحث، والذي هو قيمة 32 بت في الخلية. لم نتحدث لفترة وجيزة يوم الجمعة عن VARCHAR، التي تقف على طول متغير حرف. ما هو هذا النظام؟ هذا يسمح لك بتحديد التي تريد أن تكون هذه سلسلة من نوع ما. كنت لا أعرف حقا مقدما متى هو عليه، وهكذا لن نقول تعسفا اسم البيت يمكن أن تكون 255 حرفا، ولكن هل يمكن أن تذهب مع 64، 32 - أي عدد حقا. ولكن ميزة استخدام VARCHAR على حقل يسمى شار ما هو؟ فقط إذا انتقل لأسفل بشكل حدسي أنا هنا، لاحظ هناك شار وهناك VARCHAR. VARCHAR هو طول متغير شار؛ شار هو طول ثابت شار. مستندا في ذلك فقط على هذا التعريف، ما هو ميزة او عيب كل من هذه؟ وبعبارة أخرى، الذي يهتم تمييز، أو لماذا يجب أن يهمك الأمر؟ نعم. [طالب] VARCHAR أكثر مرونة ولكن يستغرق أكثر من الذاكرة. جيدة. VARCHAR يستغرق أكثر - دعونا نرى. أنا لست متأكدا مما إذا كان سمعت ذلك الحق. يمكنك أن تقول أن مرة أخرى؟ [طالب] قلت VARCHAR وربما المزيد من المرونة لكنه يأخذ المزيد من الذاكرة. مثيرة للاهتمام. حسنا. VARCHAR يعطي ربما كنت أكثر مرونة ولكن يستغرق أكثر من الذاكرة. هذا الأخير ليس صحيحا بالضرورة. ذلك يعتمد على السياق، ولكن دعونا نعود إلى ذلك. [رد الطالب غير مسموع] بالضبط. انها في الواقع الحالة التي سوف تستخدم عادة شار المزيد من الذاكرة لأن شار، كما هو الحال في C، مثل سلسلة، انها مجموعة من الأحرف. حتى إذا كنت أقول حقل حرف بطول 255، قاعدة البيانات هو الذهاب حرفيا لتعطيك 255 حرفا. وإذا كان المنزل ينتهي به الأمر MATHER و6 أحرف المجموع، كنت إضاعة أكثر من 200 حرفا. لذلك يستخدم بشكل فعال VARCHAR فقط كما العديد من الشخصيات ما هو ضروري يصل إلى الحد الأقصى. ولكن الثمن الذي تدفعه هو في الواقع الأداء، يحتمل. إذا كنت تعرف مسبقا أن جميع سلاسل الخاص بك سوف تكون 8 أحرف - على سبيل المثال، افترض أنك تحتاج إلى كلمات مرور بطول 8 - الجانب العلوي من استخدام حقل شار في بعض الأحيان، ولكن ليس في كثير من الأحيان، هو تحديد طول ثابت عن شيء مثل كلمة مرور لأنه الآن يمكن أن تكون قاعدة البيانات حتى أكثر ذكاء. إذا كان يعلم أن كل ميدان شار، كل سلسلة في عمود هو طول نفس، تحصل مرة أخرى ميزة من الوصول العشوائي. يمكنك القفز نحو الحقول بين مختلف شار في الجدول قاعدة البيانات الخاصة بك أعتقد بسبب وجود قاعدة بيانات والصفوف والأعمدة. إذا كان الأمر كذلك كل واحد من السلاسل هو طول نفس، هل تعلم أن أول واحد هو في البايت 0، المرحلة التالية هي في 8 بايت ثم بعد ذلك 16 و 24 و هكذا دواليك. حتى إذا كانت كافة سلاسل ذات طول نفس، يمكنك القفز نحو أكثر كفاءة. لذلك يمكن أن تكون ذات فائدة من حيث الأداء، ولكن عادة ما لم يكن لديك متسع من معرفة مسبقا، لذلك VARCHAR هو الطريق للذهاب. هنا آخر التفاصيل التي واجهت الفيسبوك حتى النهاية. رجات كبيرة، ونحن نوع من استخدامها بشكل افتراضي في أي وقت نريد عدد، ولكن هذا فقط 32 بت. وعلى الرغم من الفيسبوك لايوجد جدا 4000000000 للمستخدمين الآن، هناك بالتأكيد بعض الناس هناك حسابات متعددة مع أو الحسابات التي تم فتحها ومن ثم أغلقت، وهكذا أعتقد الفيسبوك نفسها قبل سنوات قليلة كان الانتقال من الباحث ل، كما تسمى بجدارة، BIGINT، الذي هو مجرد 64 بت بدلا من ذلك. لذلك هذا هو أيضا قرار تصميم. هل سيكون محظوظا بشكل مثير للدهشة إذا كان المشروع النهائي يتحول بدء التشغيل، و4 مليارات و المستخدمين 1، يعطي أو يأخذ، وفي هذه الحالة قد يكون باستخدام رجات قليلا قصيرة النظر. لكن في الواقع، لديك المستخدمين الجدول هو على الارجح مع غرامة رجات. ولكن لشيء من هذا القبيل pset 7، مثل الجدول الخاص بك التاريخ، قد يكون لديك آلاف أو ملايين من المستخدمين إذا كنت تتطور إلى etrade.com. ذلك في حين قد لا يكون لديك أكثر من 4 مليار مستخدم، هؤلاء المستخدمين قد لديك لديها أكثر من 4 مليارات المعاملات مع مرور الوقت - وتشتري وتبيع والأشياء في تاريخهم. حتى إذا كنت لا تتوقع - مرة أخرى، وهذه هي المشاكل الجيد أن يكون إذا كان لديك الكثير من هذه البيانات - إذا كنت لا تتوقع تجاوز حجم البيانات لكثافة العمليات، الذهاب مع شيء من هذا القبيل BIGINT هو اتجاه لا يكفي في كثير من الأحيان اعتمدت من قبل المصممين لأن الناس هذا الرقم لن يكون مشكلة، ولكن من السهل اختيار هذا شيء أكبر من ذلك. العشري الذي نستخدمه في pset 7، والذي يحدد بدقة الثابتة حتى تتمكن من تجنب القضايا التي تنطوي على العوامات والزوجي وريال وما شابه ذلك. وبعد ذلك هناك بعض المجالات الأخرى هنا. سنقوم موجة أيدينا عليهم إلى حد ما. لكن التواريخ والأوقات جميعها في شكل المقررة الخلية، ويمتاز التمر تخزين كتواريخ وvarchars لا يعني أن قاعدة البيانات يمكن إعادة صياغة الواقع منهم إلى صيغ مختلفة، إذا كان شكل أو تنسيق أمريكي أوروبي أو ما شابه ذلك - ولكن تريد ذلك - أكثر كفاءة مما لو كانت مجرد بعض VARCHAR عام. وبعد ذلك هناك بعض الثنائية الأخرى، VARBINARY، النقط. هذه هي كائنات كبيرة ثنائية، ويمكنك أيضا تخزين البيانات الثنائية وكذلك البيانات في قاعدة بيانات هندسية. ولكن بالنسبة لنا سوف نهتم عادة حوالي رجات وvarchars وما شابه ذلك. دعونا حتى الانتهاء من هذا المثال مع بيت. وسوف منزل انا ذاهب الى القول تعسفا تكون 255 حرف. ثم القيمة الافتراضية يمكن أن نفعل ذلك. يمكن افتراضيا نضع الجميع في البيت ماثر، على سبيل المثال. هذه هي الطريقة التي يمكننا تحديد أن قاعدة البيانات ينبغي أن تكفل شخص ما لديه دائما قيمة. ولكن سأترك أن يكون. في الواقع، بالنسبة للأشخاص الذين يعيشون خارج الحرم الجامعي وليس في المنزل، ربما أنا فعلا تريد لتحديد أن القيمة الافتراضية للمنزل هو NULL، وبعد ذلك تحتاج إلى التحقق من هذا المربع ونقول للقاعدة لا بأس إذا منزل المستخدم هو NULL. مرة أخرى، هذا هو آخر الآلية الدفاعية يمكنك وضعها في مكان لذلك أنت لا تملك حتى لوضعها في التعليمات البرمجية PHP بالضرورة. وقاعدة البيانات ضمان أن الأمور ليست NULL أو. ثم أخيرا، السمات. أيا من هذه هي حقا ذات الصلة. ثنائي، غير موقعة - أيا من تلك ذات الصلة إلى VARCHAR. مؤشر. لا أحد يعرف أو يتذكر أو لديك تخمين حول ما هو فهرس عن شيء مثل المنزل؟ هذا هو في الواقع أيضا قرارا هاما التصميم وسهلة نسبيا. بالنسبة لأولئك الذين لم نر حتى الآن أنه يوم الجمعة تحدثنا باختصار عن المفاتيح الأساسية. في جدول قاعدة بيانات، والمفتاح الأساسي هو حقل أو عمود الذي يعرف بشكل فريد الصفوف في الجدول. ذلك في الجدول الحالي لدينا معرفات، لدينا أسماء ورسائل البريد الإلكتروني. أي من هذه هو أفضل مرشح ليكون المفتاح الأساسي، دور الذي هو بشكل فريد الصفوف؟ ربما ID. يمكن القول، يمكننا أيضا استخدام ما على الرغم من؟ ربما يمكنك استخدام البريد الإلكتروني لأنه في نظرية انها فريدة من نوعها إلا إذا تقاسم الناس حسابات البريد الإلكتروني. ولكن الواقع هو أنه إذا كنت تستخدم معرف رقمي مثل 1234، هذا فقط 32 بت، في حين عنوان بريد إلكتروني يمكن أن يكون هذا أو هذا كثير بايت بايت كثيرة. لذلك من حيث الكفاءة لمعرفات فريدة من نوعها، فإنه يميل إلى أن يكون مجرد الممارسة الجيدة لاستخدام الباحث حتى لو كان لديك بعض المرشحين السلسلة التي يمكنك استخدامها يمكن القول. عن شيء مثل البيت، هذا لا ينبغي أن يكون مفتاح أساسي لأن ثم يمكن فقط 1 شخص يعيشون في ماثر و 1 شخص في كورير وما شابه ذلك. وبالمثل، يجب أن لا تكون فريدة من نوعها. الفرق بين الابتدائي وفريدة من نوعها هو أنه في حالة جدول أعمالنا الحالية، وID تكون الأولية ولكن ليس البريد الإلكتروني الأساسي لسبب ذكرنا للتو - الأداء - ولكن ينبغي أن يكون لا يزال فريدة من نوعها. حتى تتمكن من فرض تفرد تزال دون المطالبة انه عظمى الحقل الأساسي الهام. ولكن هذا هو واحد مفيدة جدا: مؤشر. إذا كنت تعرف مسبقا للمشروع الخاص بك النهائي، لpset 7، أو بصفة عامة، أن هذا البيت المجال سيكون شيئا كنت ابحث على الكثير باستخدام الكلمة تحديد أو شيء آخر، ثم يمكن أن أقول لكم استباقي قاعدة البيانات للعمل سحره وتأكد من أنه يخلق في الذاكرة أي هياكل البيانات اللازمة الهوى لتسريع عمليات البحث على أساس المنزل. ربما سيكون استخدام جدول التجزئة، وربما سيكون من استخدام قائمة مرتبطة. وغالبا ما تسمى هيكل في الواقع، فإنه يميل إلى استخدام شجرة، شجرة B-- لا شجرة ثنائية لكن B-شجرة - وهي شجرة واسعة جدا قد تشاهد في فئة مثل CS124، الطبقة هياكل البيانات. ولكن باختصار، لم يكن لديك ما يدعو للقلق أنه عند استخدام البرمجيات الذكية قاعدة البيانات. يمكن أن أقول لكم فقط، "مؤشر هذا المجال حتى أتمكن من البحث عليها بشكل أكثر كفاءة." إذا تركت هذا الخروج ومحاولة للبحث عن كل شخص في قاعدة البيانات الذي يعيش في ماذر، من أن تتحول الى البحث الخطي. وإذا كنت قد حصلت على 6000 الجامعيون جميع الكائنات الحية في بعض المنازل، وأنت تسير للبحث في الجدول بأكمله للعثور على Matherites، في حين إذا كنت أقول مؤشر، ونأمل أن يكون شيء قريب من البحث لوغاريتمي للعثور على تلك الأنواع من الطلاب. هذا هو مجرد ميزة مجانية لتشغيل، على الرغم من أنها لا تأتي بسعر قدرا من الفضاء. وأخيرا، الزيادة تلقائية، AI هذا المجال، وهو ما يعني فقط اذا كان عدد صحيح وكنت لا تريد لرعاية لزيادة ذلك بنفسك في كل مرة كان هناك مستخدم جديد، والتحقق من ذلك، وسوف يحصل كل مستخدم أن يحصل تلقائيا إدراج ID جديد. دعونا انقر فوق حفظ، والآن دعونا العثور على خطأ مع هذا التصميم. إذا ذهبت إلى استعراض، لاحظ أن كل من مايك وبيتي هو NULL. يمكنني استخدام بريس لتحرير هذا يدويا. يمكنني أن أذهب هنا واكتب في ماذر ثم اضغط Enter، وتلاحظ الآن الجدول مختلفة. ولكن لاحظت أنني يمكن أن تفعل شيئا آخر أيضا. ID داود هو 1، لذا بريس مرة أخرى مجرد أداة إدارية؛ هذا ليس شيئا المستخدمون أي وقت مضى الذهاب لرؤية. حتى لو كنت فوق علامة التبويب بدلا SQL تصل إلى أعلى الصفحة - ومرة أخرى، سوف أعرض لكم pset 7 إلى أكثر من هذه الأسئلة - لا أستطيع تنفيذ يدويا SQL لغة الاستعلام الهيكلية الأمر UPDATE SET المستخدمين منزل = 'Pfoho' WHERE ID = 1. هذه الاستعلامات SQL هي، وهو ما يكفي لطيف، قراءة جميلة من اليسار إلى اليمين. تحديث جدول المستخدمين، تعيين حقل يسمى بيت لPfoho حيث ID للمستخدم هو 1. أو يمكن أن أفعل حتى البريد الإلكتروني حيث = 'malan@harvard.edu'. ما دام لي الذي يعرف بشكل فريد، والتي تعمل أيضا. لكن ID يميل إلى أن يكون أداء أعلى، لذلك دعونا نفعل ذلك. دعونا انقر فوق انتقال. حسنا، lecture.users غير موجود. ما هو خطأي؟ ما هو جدول يسمى في الواقع هنا؟ انه دعا الطلاب لمجرد أن ما فعلناه هنا في أعلى اليسار. انه دعا الطلاب، وليس المستخدمين. انقر فوق الانتقال حتى الآن. 1 الصف تتأثر. استغرق الاستعلام 0.01 ثواني. إذا كنت انقر فوق استعراض الآن، يعيش حاليا في مالان Pfoho. ذلك أن آخر طعم SQL، ولكن pset سوف المشي لكم من خلال أكثر قليلا من ذلك. هناك قرار غبي لقد قدمت بالفعل هنا. أنا أزعم أن هذا هو تصميم قاعدة البيانات غير فعالة لأن المزيد من الناس أود أن أضيف إلى جدول الطلاب، أكثر منا I البدء في إضافة، وأكثر من TFS I البدء في إضافة، ونحن في طريقنا للبدء التكرار لمعرفة ما في هذا الجدول؟ نعم. [طالب] وترى أن ذلك يصب في الطلاب، ونحن نستخدم نفس [غير مسموع] نفس - يمين، بالضبط. إذا كان الأمر كذلك 400 شخص يعيشون في ماذر، يعطي أو يأخذ، في نهاية المطاف هذا الجدول هو الذهاب الى الصفوف دينا 400 التي تقول "ماذر"، "ماذر" "ماذر"، "ماذر"، "ماذر". نحن نضيع كل هذه بايت، وهناك زوجين من الوجبات السريعة هناك. 1، هناك حالة الزاوية مجنون اذا كان شخص ما يدفع فيها الكثير من المال وإعادة تسمية ماثر، لدينا الآن لتغيير جدول أعمالنا قاعدة بيانات كاملة. هذا لن يحدث في كثير من الأحيان ل، على الرغم من كان يطلق عليه يوما Pfoho شمال بيت قبل 15 عاما، لذلك يحدث. ولكن هذا ليس كل ما مقنعة. أكثر إقناعا من حالة الزاوية مثلها في ذلك مثل الحاجة إلى تحديث البيانات في معظم لقاعدة بيانات يتم تخزين لماذا أنت MATHER مرارا وتكرارا و؟ مرارا وتكرارا أن الكثير من حرف، 6 أحرف. لا يمكن أن نفعل أفضل من ذلك، وخاصة بالنسبة للPforzheimer؟ بالتأكيد يمكننا أن نفعل أفضل من ذلك العديد من الشخصيات. لماذا لا يربط فقط عن معرف فريد مع كل بيت والمخزن الذي لكل مستخدم؟ لذلك دعونا نحاول ذلك. بدلا من مجرد استخدام الجدول الطلاب، اسمحوا لي أن ترتفع إلى قاعدة البيانات محاضرتي هنا حتى في أعلى اليسار. تلاحظ هنا تقول إنشاء الجدول. اسمحوا لي أن إنشاء جدول جديد يسمى المنازل. عدد الأعمدة ستكون 2. دخول. الآن لقد 2 المجالات. أنا ذاهب لاستدعاء هذا الاسم، وانها ستكون من VARCHAR طول 255، ولكن هذا التعسفية جدا. اسمحوا لي أن وضع هذا إلى هنا من الاتفاقية. لذلك وضع معرف هنا. دعونا نعطي كل بيت على معرف فريد. دعونا نعطي كل بيت اسما. دعونا تحديد أن المعرف سيكون فقط من خلال الاتفاقية الموقعة لاستخدام أرقام موجبة فقط. دعونا نمضي قدما واعطاء هذه الزيادة تلقائية لحقل في الوقت الراهن. وهل نحن بحاجة أي شيء آخر؟ دعونا نمضي قدما وانقر فوق حفظ. الآن لدي الجدول الثاني. تلاحظ بوصفها جانبا هذا هو الأمر SQL خفي قليلا التي من شأنها أن كان لديك لكتابة يدويا إذا لم تكن تستخدم أداة إدارية مثل بريس. وهناك سبب آخر لذلك نستخدمها. انها نوع من رائعة مفيدة تربويا لأنه يمكنك انقر فوق حول ومعرفة كيفية عمل الأشياء عن طريق نسخ ولصق فقط ما لم بريس. ولكن الأمر إنشاء الجدول هو ما أعدم فقط، وهنا مائدتي. اسمحوا لي الآن المضي قدما واستخدام SQL الخام بدلا من تبسيط بالنقر فوق علامة التبويب إدراج. اسمحوا لي أن تفعل INSERT INTO المنازل، وانا ذاهب الى نطق الاسم من المنزل وستكون لدينا قيمة "ماذر". هذا هو. بناء الجملة هذا هو أكثر من ذلك بقليل خفي. هذا هو اسم من الحقول نريد إدراجه. هذه هي القيم التي تريد إدراجها في تلك المجالات. اسمحوا لي انقر فوق انتقال. من 1 الصف المدرج 0.02 ثواني. اسمحوا لي الآن انقر فوق استعراض. إذا كنت تلاحظ انقر فوق استعراض، وهناك ماثر، الذي هو من التشغيل الآلي ID الرقم 1. اسمحوا لي أن تفعل شيئا آخر واحد. اسمحوا لي أن انتقل إلى علامة التبويب SQL. INSERT INTO المنازل. اسم منزل وستكون لدينا قيمة Pfoho وهكذا دواليك. الذهاب. ويمكنني أن تستمر في فعل ذلك مرة أخرى ومرة ​​أخرى ومرة ​​أخرى. أو إذا كنت تشعر بالملل باستخدام phpMyAdmin، يمكنك استخدام علامة التبويب إدراج فقط وليس من الضروري أن اكتب SQL الخام. يمكنك مجرد فرقعة من ذلك بسرعة أكبر من خلال الكتابة، على سبيل المثال، كورير، أدخل، والآن إذا كنا انقر فوق استعراض، وهناك كورير مع ID من 3. لذلك هذا هو ما نعنيه طريقة لصناعة السيارات. ولكن الآن لدينا لإصلاح شيء ما في الطلاب. يجب على الطلاب في ما نوع بيانات الحقل المنزل يكون الآن؟ وينبغي أن يكون الباحث، أليس كذلك؟ لذا فإن الهدف هنا هو لخصم ما، والمعروف باسم تطبيع، جداول ذلك أننا لا تخزين المعلومات بوفرة في أي من الجداول بلدي. ومرة أخرى، فإن الطريق كنا هنا هو الذهاب الى القول ماثر، ماذر، ماثر، ماذر، Pfoho، Pfoho، Pfoho، Pfoho، والتي لا لزوم لها جدا من حيث التبذير من حرف. لذلك اسمحوا لي المضي قدما في تغيير هذا عن طريق النقر هيكل، واسمحوا لي أن تمضي قدما وتحقق خارج الملعب المنزل، انقر فوق تغيير، والآن انا ذاهب الى تغيير هذا أن يكون الباحث. 255 لم تعد ذات الصلة. اسمحوا لي أن أقول المضي قدما وهذا شيء طيب اذا كان لا يزال NULL. حفظ. الآن تم تغيير الجدول الطلاب بنجاح، وتلاحظ مرة أخرى المنزل هو الباحث. بوصفها جانبا، تجاهل عدد من الأقواس عندما يتعلق الأمر رجات. هذا هو لأسباب الإرث. مرة في اليوم عندما كنت لا تملك واجهات، وكان بدلا بيئة سطر الأوامر، و10 و 11 على التوالي المحدد عدد الحروف التي يجب أن تظهر في إطار المحطة الطرفية لعرض الواقع المجالات. أنه ليس لديها ما تفعله مع قليلا من طول الحقل الفعلي، لذلك سنقوم تجاهل ذلك تماما في الوقت الراهن. الآن يجب أن أذهب إلى هذا الجدول. وإذا كان ديفيد يعيش في ماذر، يجب ألا يكون البيت 0، وهو القيمة الافتراضية الباحث الأقرب إلى NULL. فعليه أن يعيش في منزل 1. دعنا نقول أن حياة مايك تعسفا في Pfoho، لذلك البيت رقم 2. الآن مائدتي يبدو قليلا أكثر خفي. ولكن النظر في الكفاءة. أنا باستخدام 32 بت الآن فقط لتحديد المنزل، وهو ما يعني أن هناك فقط 1 تعريف الكنسي ماثر بيتي وPfoho وهذا في الجدول المنازل. إذا كان الأمر كذلك أريد أن الانضمام الآن هذه الجداول، التفكير في الأمر بهذه الطريقة. هنا لدي الطلاب بلدي الجدول، وعلى الجانب الأيمن هناك هذه الأرقام، 1 و 2. 1 هو ماثر، 2 هو Pfoho. لدينا نفس هذه الأرقام في هذا الجدول الأخرى، وهو ما يسمى المنازل، 1 و 2 و 3 لتلك المنازل 3. ما نريد ان نفعله الان هو لديها القدرة في التعليمات البرمجية، وPHP SQL، لفرز من الانضمام هذه الجداول، حيث إذا كانت هذه هي الطلاب وهذه هي المنازل، نريد أن الجمع بين لهم حتى بطريقة ما أن 1 يصطف مع 1، 2 خطوط مع 2، وحتى نتمكن من معرفة من أين ديفيد وحيث مايك وحيث يعيش الجميع. لذلك يمكننا تنفيذ استعلام SQL كما يلي. SELECT * FROM الطلاب تنضم المنازل ON - والآن ما الحقول التي نريد للانضمام على؟ حتى students.house = houses.id. A خفي قليلا، ولكن هذا الجزء يعني حرفيا إنشاء جدول جديد مؤقتا هذا هو نتيجة لانضمام الطلاب والمنازل. وكيف تريد أن تجمع بين أصابعي نصائح من هنا؟ تعيين "فيلد هاوس يساوي المنازل 'للطلاب حقل معرف. وإذا كنت الآن فوق الانتقال، أعود بالضبط ما كنت آمل أن. ديفيد هو في ماذر، مايك هو في Pfoho، وأرى أيضا معرفات فريدة من نوعها. ولكن النقطة هي الآن لدي جدول كامل. وبالتالي فإن الوجبات الجاهزة هنا لpset 7 أو حقا للمشروع النهائي: إذا وجدت أن كنت تخزين أي معلومة و مكررين الا سواء كان ذلك في المنزل، وربما انها المدينة والولاية، والرمز البريدي حيث يمكن عادة ولكن ليس دائما ZIP أن تستخدم معرف فريد، لا تذهب من خلال ممارسة عقليا وبعد ذلك مع شيء من هذا القبيل بريس من التخصيم إلى أن بيانات مشتركة خاصة لموقع الويب الخاص بك تحصل على المزيد من استخدام جيد وأكثر شعبية، وهذا هو كيف يمكنك التأكد من أن كل شيء بسرعة فائقة، من خلال إعطاء قاعدة البيانات كما تلميحات كثيرة لتفرد ممكن. كان ذلك كثيرا. أي أسئلة؟ حسنا. دعونا نأخذ استراحة 5 دقائق بالسيارة هناك وتجميع صفوفهم. حسنا. ما يلي هو مثال الذي تم استخدامه قبل بضع سنوات عندما أخذت CS161، التي هي الطبقة أنظمة التشغيل في الكلية الذي يعرف لكونها مذهلة، ولكن كمية مجنونة من العمل، ويركز حقا على بعض المشاكل ذات المستوى المنخفض التي تنشأ في أنظمة التشغيل وأيضا حتى في العالم من قواعد البيانات. القصة كانت على قيل من قبل أستاذي، مارجو سيلتزر، ذلك العام على النحو التالي. لنفترض أن لديك ثلاجة النوم قليلا بالنسبة لك وشريك الغرفه وكلا منكم حقا مثل الحليب. حتى تتمكن من العودة الى الوطن يوم واحد الطبقة، الحجرة ليست هناك حتى الآن، فتح الثلاجة، وكنت أدرك، "يا لعنة، ونحن من الحليب". حتى إغلاق الثلاجة، يمكنك السير عبر الشارع لCVS وتحصل في طوابير طويلة على نحو متزايد لشراء بعض الحليب في CVS. وفي الوقت نفسه، الحجرة الخاص يعود للمنزل من له أو لها الدرجة، يأتي إلى الغرفة، ويفتح الثلاجة يريد حقا بعض الحليب، يفتح الثلاجة و، "اللعنة، لا الحليب." حتى انه أو انها تغلق الثلاجة، يمشي خارج الباب، ويذهب إلى برنامج الجسر الأكاديمي أو في مكان آخر غير المكان الذي أنت CVS لن تصطدم بعضها البعض للذهاب الحصول على بعض اللبن. بالطبع بضع دقائق في وقت لاحق، وكلاهما تحصل في الوطن والآن لديك الحليب مرتين بقدر ما يريد فعلا. ويجري الحليب، والآن انه سيكون سيئا للذهاب لأنك مثل الحليب ولكنك لا أحب الحليب، وحتى الآن كان لديك الكثير من الحليب، لذلك سيكون لتعكر. هذا هو فظيعة، فظيعة الوضع. كان من الممكن أن تحل هذه المعضلة ما إذا كنت في المنزل الحجرة الأولى؟ نعم. [طالب] يجب أن تكون قد ترك رسالة. [ضحك] جيدة. يجب أن كنت قد تركت ملاحظة. ينبغي أن يضع لك مذكرة بعد ذلك أو ما شابه قائلا: "ذهب للحليب،" ومن ثم فإن المفهوم الخاص الحجرة وتخوض من القيام فعلا ذلك. أو هل يمكن أن تذهب 1 الخطوة أخرى. هل يمكن قفل الثلاجة حرفيا مع بعض النوع من القفل، والآن سوف حرفيا الحجرة الخاصة بك يكون مؤمنا من الثلاجة. إذا كان لنا أن التعميم إلى البرمجة، يمكنك التفكير تقريبا من الثلاجة على انها نوع من متغير أو البنية و، نوع من الحاويات للحصول على معلومات. المشكلة الأساس هنا هو أن سمح كلا منكم لتفقد أو قراءة حالة هذا الهيكل البيانات، ولكن ينظر لكم انه في أوقات مختلفة وبعد كل واحد منكما اتخاذ قرار استنادا إلى حالة العالم في تلك اللحظات المختلفة في الوقت المناسب. لذلك كنت قد قفل الثلاجة، وكنت قد تجنب ما لا يقل عن شريك الغرفه بعد أن تمكنت من لتفقد أحوال العالم، لذلك يمكن له أن جعلت نفس المقرر. ذلك قواعد البيانات، كما اتضح، لديك هذه المشكلة باستمرار. دعونا نرى ما اذا كنا نستطيع بناء السيناريو. لنفترض أنك نوع من رجل سيء وتذهب إلى بنك أوف أميركا أو واحدة من الأماكن الأخرى في الساحة التي لديها أجهزة الصراف الآلي زوجين الجانب إلى جنب، وبرزت على نحو ما لكم كيف لتكرار بطاقة ATM - ليس كل ما الثابت. انها مجرد الشريط المغناطيسي. وذلك ما تريد القيام به هو محاولة لعب هذه اللعبة حيث يمكنك وضع بطاقة 1 إلى 1 آلة، وآخر بطاقة في آلة أخرى، وتريد أساسا في محاولة لسحب الأموال في وقت واحد، لأن نتصور أن القصة على النحو التالي. الجهاز على اليمين يأخذ بطاقة PIN الخاص بك و، ثم يقول: "أعطني 100 دولار." وتمت برمجة أجهزة الصراف الآلي للقيام أولا حدد على قاعدة البيانات الخاصة به أو ما يعادلها - مهما كانت قاعدة البيانات باستخدام انها - لمعرفة هل هذا مستخدم على الأقل 100 دولار في حسابه؟ إذا كان الأمر كذلك، ثم يبصقون من 100 دولار وطرح 100 دولار من موازناتها. ولكن بالطبع إذا كان هناك أجهزة متعددة هنا أو طرق متعددة للتفتيش الدولة من هذا العالم، وقبو البنك، لمعرفة كم من المال لديك، لنفترض أن مجرد صدفة الجهاز على اليسار واليمين كلا نسأل هذا السؤال في اللحظة نفسها تقريبا في الوقت المناسب. وهذا يمكن أن يحدث بالتأكيد. أجهزة الصراف الآلي وأجهزة الكمبيوتر في هذه الأيام. حتى إذا كان الجهاز على اليسار يقول: "نعم، لديك على الأقل 100 دولار،" وفي الوقت نفسه الجهاز على الحق يقول: "نعم، لديك على الأقل 100 دولار،" ثم كل منهما المضي قدما لإنهاء برامجها ويبصقون فعلا 100 دولار ويقول: "في السابق كان لديك 200 دولار." "اسمحوا لي تحديث المتغير ليكون 100 $ الآن ترك في الحساب." ولكن إذا كان كل منهم قد فحص رصيد حسابك، ووجدت أنه من $ 200 وكلا منهم ثم القيام الرياضيات و 200 أقول - 100، الآلات ويبصقون يحتمل من مشروعي قانونين 100 دولار في كل جهاز، ولكن لقد تحديثها فقط رصيد حسابك المبلغ ليكون 100 دولار. وبعبارة أخرى، كنت قد اتخذت من 200 دولار، ولكن لأنها تفقد حالة العالم في وقت واحد ومن ثم اتخاذ قرار بناء على تلك القيمة، لأنها قد لا تفعل الرياضيات بشكل صحيح في نهاية المطاف. حتى في حالة البنك أيضا كنت تريد حقا أن يكون نوعا من تأمين بحيث بمجرد كنت قد دققت في حالة بعض متغير هذا أمر مهم حقا، مثل رصيد الحساب الخاص بك، لا تدع أي شخص آخر اتخاذ القرارات على أساس أن تتم حتى تفعل الشيء الخاص بك، حيث في هذه الحالة أنت ATM على اليمين. قفل الجميع بها. يمكنك تحقيق هذا التأثير في الواقع في عدة طرق مختلفة. إن أبسط طريقة في الخلية هو خط من SQL التي قدمناها لك في مشكلة مواصفات المجموعة التي تبدو تماما مثل هذا. إدراج في الجدول - أيا كان يطلق عليه - معرف، رمزا، وحصة، وعدد من الأسهم، القيم التالية، على سبيل المثال. إذا كنت لم أقرأ حتى الآن المواصفات، وهذا هو مثال تنطوي كيف يمكنك أن تذهب نحو شراء 10 سهم من الأسهم بنس لهذا Skroob الرئيس، ID المستخدم الذي صادف أن يكون الرقم 7؟ هذا يقول INSERT INTO الجدول التالي هوية، رمز، وعدد الأسهم ، 7 'DVN.V'، و 10. ولكن - ولكن، ولكن، ولكن - في السطر الثاني هو المهم. ON KEY UPDATE أسهم مكررة = + سهم VALUES (سهم). تماما حتى خفي المظهر للوهلة الأولى. ولكن الحقيقة أن هذا الاستعلام SQL، على الرغم من أنها التفاف على خطوط 2، هو 1 الاستعلام طويلة، وهذا يعني أنه من ذرية بمعنى أن هذا الاستعلام إما سوف يتم تنفيذها جميعا أو لا على الاطلاق. وتعريف الخلية، هذه هي الطريقة التي تنفذ هذا الاستعلام. ومن جانب التعريف الوارد في دليل مضمونة لتنفيذ دفعة واحدة أو لا على الاطلاق. الدافع لذلك هو على النحو التالي. إذا في هذه الحالة تحاول شراء 10 سهم من الأسهم، انها نوع من قصة نفس الحليب، انها نوع من قصة بنفس ATM. إذا كنت نقع في خطأ عدم استخدام بناء الجملة التالي ولكن بدلا من ذلك اختيار من قاعدة البيانات لمعرفة عدد أسهم هذا السهم فلسا واحدا لا يكون الرئيس Skroob، ونفترض أن لديه 10 سهم، وبعد ذلك بعض من الثانية في وقت لاحق لديك ثم عبارة UPDATE، الذي هو آخر بيان في SQL التي تقول المضي قدما وإضافة 10 المزيد من الأسهم إلى 10 منصبه الحالي بشكل مثالي بحيث يكون المجموع 20، المشكلة هي أنه في نظم قواعد البيانات اليوم، ولأن أجهزة الكمبيوتر في اليوم لديك معالجات متعددة، متعددة النوى - وبعبارة أخرى، يمكن لأجهزة الكمبيوتر أن تفعل الأشياء حرفيا متعددة في وقت واحد - ليس هناك ضمان بأن ما تتمتعون به SELECT وUPDATE الخاص بك في هذه الحالة وسيحدث العودة إلى الوراء. لذلك السيناريو السيئ ستكون أنت تفعل SELECT لمعرفة عدد أسهم هذا السهم فلسا واحدا لا يكون Skroob، وبعد ذلك فقط عن طريق الصدفة يتم تنفيذ استعلام آخر قاعدة البيانات - ربما Skroob في نافذة متصفح أخرى تحاول شراء 10 سهم في إطار آخر تماما، مثل الكثير من ATM - وافترض أن يحصل في استعلام آخر بين SELECT وتحديث. يمكن أن يكون عليه الحال الآن أن يفقد بعض Skroob عدد الأسهم لأن عملية أخرى يتم فحص حالة عالمه، أو يحصل على المزيد من الأسهم مما كان ينبغي أن يكون. ونحن لن نذهب إلى تفاصيل عن بالضبط ما هذه الخطوط قصة معينة سيكون، ولكن النقطة هي إذا كان لديك للتحقق من قيمة المتغيرات ومن ثم اتخاذ قرار، إذا كان هناك خطر من شخص آخر القيام بشيء في ما بين تلك التصريحات 2، كما يمكن أن يحدث في الأنظمة ذات المعالجات المتعددة، في نظم مولتيكوري، أجهزة الكمبيوتر لديهم القدرة على القيام بأمور متعددة في آن واحد، يمكن أن تحدث أمور سيئة يتم خصم الحسابات المصرفية مثل بشكل غير صحيح، وشراء الحليب مرتين قدر، أو في هذه الحالة عددا خاطئا لسهم. ولكن هناك طريقة أسهل للتفكير في ذلك. تبين أن SQL يدعم أيضا، إذا قمت بتكوين الجدول الخاص بك بشكل صحيح، ما يسمى المعاملات، وأنا أزعم هو في الواقع أسهل لفهم من هذا، ولكنها ليست 1-الخطوط الملاحية المنتظمة، حتى انها في الواقع أكثر قليلا المعنية. هناك حرفيا في بيان SQL دعا TRANSACTION START. تماما مثل هناك SELECT، UPDATE، INSERT، DELETE، والانضمام وحفنة من الآخرين، هناك كلمات رئيسية مثل TRANSACTION START. وماذا تفعل بعد ذلك في سياق pset 7 - لم يكن لديك للقيام بذلك لpset 7؛ التنازل صراحة انه ليس من الضروري أنها، ولكن لمشاريع النهائي يمكن أن يكون مفيدا - إذا قمت استدعاء استعلام من TRANSACTION START ثم استفسار آخر وثم آخر ثم آخر والاستعلام، وآخر، وآخر، لن تلك الاستفسارات حتى يتم تنفيذها بالفعل استدعاء بيان SQL ارتكابها، وعند هذه النقطة، سواء كان في 2 بيانات أو تصريحات و20، كل ما يتم تنفيذها في وقت واحد، وهو ما يعني لا أحد يستطيع شراء بطريق الخطأ الكثير من الحليب أو الخصم الكثير من المال أو شراء أسهم كثيرة جدا لأن كل استفساراتك سيتم تنفيذ العودة إلى الوراء إلى العودة إلى الوراء. وهذا هو المهم فائقة، وخصوصا عندما كنت تفعل شيئا من هذا القبيل. هذا مثال التعسفية التي تقول دعونا تحديث حساب مصرفي عن طريق تحديد التوازن يساوي رصيد - 1000 دولار حيث رقم الحساب هو 2. ثم البيان الثاني هو الآن دعونا أن تودع 1000 $ في حساب شخص آخر رقم الحساب البنك الذي هو 1. وبعبارة أخرى، وهذا هو مثال ممتاز عن المكان الذي ترغب في التأكد من أن كلا من هذه البيانات أو لا يحدث على الإطلاق لأن خلاف ذلك العميل هو الذهاب الى الحصول على ثمل وأنت تسير على اتخاذ أموالهم وليس إيداع في مكان آخر، أو البنك هو الذهاب الى الحصول على ثمل أين أنت ذاهب لإيداع الأموال ولكن ليس طرح فعلا من حساب المستخدم. لذلك أنت تريد كل منهما لتنفيذ معا. يدخل بالتالي في المعاملات العالم. لذلك هذا شيء أن نأخذ في الجزء الخلفي من عقلك، وليس ذلك بكثير لأغراض المشروع مجرد النهائي، ولكن إذا كنت تريد أن تأخذ المشروع النهائي الخاص بك في مكان ما، إذا كنت ترغب في بدء بعض الشركات من حوله، إذا كنت ترغب في حل مشكلة بعض مجموعة الطالب في الحرم الجامعي وفعلا لديها حية، نشطة موقع، وهذه هي نوع من البق الدقيقة التي يمكن أن تنشأ إذا كنت لا أعتقد تماما من خلال ما يمكن أن يحدث إذا كان 2 الناس تحاول الوصول إلى موقع الويب الخاص بك في اللحظة نفسها حرفيا في الوقت المناسب، قد خلاف ذلك حيث الحصول على استفساراتهم متشابكة. مستعد لبعض جافا سكريبت، دعابة منه؟ هذه هي لغتنا مشاركة للفصل الدراسي. حسنا. لحسن الحظ، يبدو جافا سكريبت جدا، جدا، تشبه الى حد بعيد لغات 2، C وPHP، لقد فعلنا حتى الآن. ليس هناك الجافا سكربت في pset 7، ولكنه أداة مفيدة بشكل لا يصدق عندما يصل الأمر إلى القيام على شبكة الإنترنت أو المشاريع النهائية حقا البرمجة فقط على شبكة الإنترنت عموما أكثر. حتى لمحة سريعة عن ما يسمى DOM. وهنا لصفحة الويب سوبر البسيطة التي تقول حقا فقط مرحبا، العالم سواء في العنوان وفي الجسم. كما تم اقتراح المسافة البادئة لبعض الوقت، هناك بالفعل التسلسل الهرمي لصفحات الويب. ويمكنني أن يوجه هذا مقتطف من نفس HTML مثل شجرة، التفكير في العودة إلى مناقشاتنا هياكل البيانات في C، كما يلي. لدي بعض عقدة جذر خاصة تسمى العقدة الوثيقة، وسنرى هذا في التناظرية الجافا سكربت في لحظة واحدة. الطفل الأول والطفل الوحيد لأنه في هذه الحالة هو العلامة HTML. ليس هناك رسم الخرائط مباشرة من DOCTYPE. هذا شيء خاص، لذلك يجب علينا تجاهله عندما يتعلق الأمر هذه DOM، هذا طراز كائن المستند شجرة. تلاحظ أن علامة HTML التي صورت بشكل تعسفي لقد على شكل مستطيل، يوجد 2 الأطفال: الرأس والجسم. يتم رسمها على شكل مستطيلات وبالمثل تلك. فمن معنى بالصور التي هي رأس على يسار الجسم. وهذا يعني أن رئيس يأتي أولا في الشجرة. ولذلك لا يوجد في الواقع طلب إلى شجرة عند استدراجه من هذا القبيل، على الرغم من أن الأشكال وwhatnot تعسفية. من ناحية اخرى رئيس طفل واحد يسمى العنوان، ولقب في الواقع الطفل الخاصة به، والتي هي "مرحبا، العالم"، التي وجهت عمدا كما بيضاوي هنا لجعلها مختلفة قليلا من المستطيل. هذه المستطيلات هي عناصر، في حين مرحبا، العالم هو في الحقيقة عقدة النص. لذلك فمن عقدة في شجرة، ولكن هذا نوع مختلف من عقدة ووجه ذلك أنا بشكل مختلف بشكل تعسفي. وبالمثل لا يكون الجسم طفل يدعى مرحبا، العالم أيضا، عقدة مختلفة حتى على الرغم من انهم من قبيل الصدفة نفس النص، ولكن لقد وجهت إليه باستخدام نفس الشكل. لذلك من يهتم؟ حسنا، ما هو الجميل في HTML هو أنه لديه هذا النوع هرمي. وما هو لطيفة عن جافا سكريبت والمكتبات وخاصة التي تتوفر بحرية وشعبية مثل مسج، يمكنك التنقل في بنية شجرة من السهل بشكل مثير للدهشة. أي من الأشياء فعلنا في C مع مؤشرات والأشجار وتعبر recursing على العقد الطفل الأيسر للطفل الحق، فجأة ونحن يمكن فرز من الأمور المسلم كما يتم المنير مثير للدهشة بعض الشيء إن لم يكن محبطا ولكن ليس ما يقرب من وسيلة فعالة لتذهب نحو البرمجة. وحتى مع هذه اللغات مثل جافا سكريبت مستوى أعلى سوف نكون قادرين على التنقل هذه الشجرة أكثر حدسي. وبالفعل بناء الجملة ستكون مألوفة تماما. إذا كنت لم أر قط سكريبت قبل، وهذا هو مرجع لطيف من اهل موزيلا، والناس الذين جعل فايرفوكس، لذلك لا تتردد في تصفح هذا على راحتك. ما سوف تجد - وهذه الشرائح هي مطابقة لما كنا في ذلك اليوم - وبالمثل، قد ولى الرئيسية. حتى عندما كنت في كتابة برنامج جافا سكريبت، لا يوجد الوظيفة الرئيسية. كنت مجرد بداية كتابة التعليمات البرمجية. ولكن الفرق الرئيسي بين جافا سكريبت وC وPHP هو انه في حين C وPHP حتى الآن تم تنفيذ جانب الملقم من الأجهزة في هذه الحالة أو عادة أكثر من خادم، عادة يتم تنفيذ جافا سكريبت حسب التصميم من قبل المتصفح. وبعبارة أخرى، قد تكتب شفرة جافا سكريبت، ونحن على وشك، على ملقم في الجهاز، ولكنك إدراجه ضمن HTML الخاص بك، بين CSS الخاص بك، بين الخاص وPNGs متحركة وصور JPEG الخاص بك بحيث عندما يقوم المستخدم بزيارة صفحة الويب الخاصة بك، إذا كنت تستخدم جافا سكريبت، أن يأتي شفرة جافا سكريبت من خادم الى المتصفح، وانها المتصفح الذي ينفذ فعليا. ولذلك فإن هذا له آثار ذات مغزى للملكية الفكرية حتى. انها نوع من السخيف أن يفكر حتى عن حماية الملكية الفكرية الخاصة بك عندما يتعلق الأمر شفرة جافا سكريبت لأن من طبيعة اللغة يحصل تنفيذه عادة الجانب المتصفح. يمكنك تعتم عليه، مما يعني أنه يمكنك جعلها تبدو مجنونة والقبيح مع عدم وجود مسافة بيضاء، أسماء المتغيرات الرهيبة، لتجعل من الصعب على الناس لسرقة IP الخاص بك، ولكن المفتاح هو أن يتم تنفيذه الجانب المتصفح. على الرغم من باعتبارها جانبا جانب الملقم ويمكن استخدام جافا سكريبت، حالة الاستخدام الأكثر شيوعا في الوقت الحالي لا يزال على المتصفح. وهنا ما يبدو. هنا هو IF-IF-آخر بناء آخر مثل C، تماما مثل PHP. وهنا لعند التعبير المنطقي "أو" الأشياء 2 معا. هنا عند "و" الأشياء 2 معا. وهنا لبيان التبديل، وهو ما يماثل PHP في هذا يمكنك التبديل على أنواع مختلفة من القيم. وبالمثل لدينا الحلقات الحلقات هنا، والتي تنظم بشكل مماثل لما رأيناه من قبل. بينما حلقات، ونحن قد حصلت على القيام به أثناء الحلقات. المتغيرات، من أي وقت مضى حتى قليلا مختلفة. كنت بتعريف المتغيرات مثلك في PHP وC، ولكن بالمثل وكتابة سكريبت ضعيفة. لم تقم بتحديد كثافة العمليات أو تعويم أو سلسلة أو أي شيء من هذا القبيل عادة. يمكنك تحديد فار. لم يكن لديك لتحديد فار، ولكن لما له من آثار إذا لم تقم بذلك. إذا قمت بحذف فار عادة، يمكنك إنشاء متغير عمومي بطريق الخطأ بدلا من المحلية. لذلك اسمحوا لي أن أقترح عليك أن أقول دائما تقريبا فار ثم اسم المتغير. انها ليست النوع، انها فقط للمتغير فار. وهذا سيكون كمثال على ذلك، سواء كان ذلك 123 أو "مرحبا العالم". صفائف موجودة ومماثلة لبناء جملة PHP. أنا أقول أرقام فار وبعد ذلك استخدام الأقواس المربعة مرة أخرى لتعريف متغير الذي هو نوع الصفيف التي لديها هذه الأرقام خاصة في ذلك مفصولة بفواصل. ثم أخيرا، وهذا هو الوحيد الذي يبدو حقا مختلفة. أذكر أنه في PHP كنا نفذت مجموعة النقابي للطالب مثل Zamyla التي قد تبدو هذه، حيث يتم استدعاء المتغير الطلاب. المعقوفتين يعني هنا يأتي صفيف. حقيقة أنني لا تستخدم مؤشرات رقمية ولكن سلاسل - ID، المنزل، واسم - يعني أن هذا هو مجموعة النقابي، وهذه السهام مع علامة التساوي وقوس الزاوية يعني أن المفتاح هو "معرف"، القيمة هي 1؛ والمفتاح هو "المنزل"، القيمة هي ينثروب البيت؛ والمفتاح هو "اسم"، القيمة هي Zamyla تشان. ولذلك لا يوجد 3 مفاتيح داخل هذه المجموعة النقابي، كل منها له قيمة خاصة به. لقد رأينا أن في pset 7، أو كنت قريبا، في جافا سكريبت نفس الفكرة، لكنه سيحتاج للبحث من هذا القبيل. فار ذلك الطالب - أي علامة الدولار ولم يذكر نوع ولكن لا يزال فار - يساوي ثم قم بفتح الأقواس المتعرجة لفي جافا سكريبت عندما يكون لديك أزواج قيمة المفتاح، كنت فعلا استخدام ما يسمى كائن. وربما أولئك منكم الذين لم تأخذ ناقلات الجنود المدرعة أو ما شابه ذلك نذكر الكائنات من جافا أو لغات مشابهة. جافا سكريبت غير جافا، أولا وقبل كل شيء. لقد كان قرارا متعمدا لسنوات توقف عن التدخين شيء آخر التي كانت شعبية، اسمها، على الرغم من أنها لا علاقة أساسية لجافا نفسها. سكريبت لديه الكائنات، وإنشاء لهم عن طريق التدوين متعرج. الكائنات في جافا سكريبت هي جميلة يعادل الكثير لصفائف النقابي في PHP عندما يتعلق الأمر تخزين البيانات داخل منهم. ولكن حتى أكثر بقوة في جافا سكريبت كنت المنتسبين بسهولة جدا وظائف داخل كائن، ولكن يمكنك القيام بذلك في لغات أخرى، هو الى حد بعيد نموذج المشتركة، كما سنرى. باختصار، هذا الكائن يمثل الطالب الذي هو Zamyla خاصة، وانها مماثلة من الناحية المفاهيمية، تماما مختلفة بناء جملة من هذا. دعونا فعلا استخدام جافا سكريبت في ملف. اتضح أن هناك علامة النصي. شاهدنا علامة الأناقة ورأيناه به HTML الأخرى. العلامة النصي وسوف تحتوي على شفرة جافا سكريبت في الواقع بعض. اسمحوا لي ان اذهب الى الجهاز حيث لدينا بعض التعليمات البرمجية المصدر مسبقة الصنع. أنا لم تنشر حتى الآن على الموقع، ولكن سأفعل ذلك بعد انتهاء اليوم الدراسي. دعونا فتح هذا واحد، blink.html. مرة أخرى في 1990s، كان هناك حرفيا علامة HTML دعا العلامة طرفة، وكان هذا واحد من العلامات الأكثر يبالغ رائعة على الإنترنت حيث كنت زيارة بعض 1990s صفحة ويب نمط وتبدأ في رؤية النص وامض أنت مثل هذا، النتائج من العلامة ماركيز، والتي سوف النص مثل هذا. واحدة من المرات القليلة التي وافقت العالم في الواقع على مستوى شبكة الإنترنت، قتل الجميع في جميع المجالات العلامة ميض قبل بضع سنوات. ولكن يمكننا استئنافها مع جافا سكريبت كدليل على قوة لديك عندما يمكنك كتابة برنامج داخل صفحة الويب. دعونا أولا تخطي الاشياء الجديدة والتركيز فقط على النظام القديم. هنا الاشياء القديمة في هذا المثال. لدي علامة HTML، علامة الرأس، وعلامة العنوان. ثم لدي العلامة BODY هنا مع DIV، والتي تذكر هو مجرد تقسيم مستطيل من الصفحة أنني أعطيت معرف فريد تعسفا من "تحية" ل، فقط حتى لدي وسيلة للإشارة إلى أنه فريد، لديها بعض النصوص بسيطة جدا: مرحبا، العالم. والآن اسمحوا لي انتقل لأعلى إلى الأعلى من هذا الملف ونرى ما هو جديد. أول ما الجديد أعلى حتى هو علامة النصي، وداخل النصي إشعار العلامة لقد أعلن وظيفة. للإعلان عن وظيفة في جافا سكريبت، PHP جميلة مماثلة ل، تكتب حرفيا وظيفة ثم اسم الدالة، قوسين، وربما بعض الحجج إذا كان يأخذ أي. ثم أنا عندي بلدي قوس مجعد كالمعتاد، والآن لدينا بعض التعليمات البرمجية الجديدة قليلا، ولكن دعونا نرى ماذا يعني هذا. حتى DIV فار، هذا يعني فقط أن تعطيني DIV متغير يسمى. يمكن أن يكون ذلك دعوت فو، ولكني أردت أن يطلق عليه DIV لأسباب من شأنها أن تكون واضحة في الثانية. ثم تبين في جافا سكريبت - وهذا هو شفرة جافا سكريبت جزءا لا يتجزأ من صفحة الويب الخاصة بي - هناك متغير من نوع خاص يسمى العالمية الوثيقة. جافا سكريبت هي في الواقع لغة وجوه المنحى. ونحن لن أخوض في التفاصيل في 50 على ما يعنيه ذلك، لكن في الوقت الراهن نعلم أن كائن هو الى حد كبير مثل البنية. مثل رأينا في طريق العودة عندما واحدة من أقدم مجموعات مشكلة حيث وضعنا الكثير من المعلومات في البنية، وبالمثل يتم توثيق البنية الخاصة التي تأتي مع المتصفح، يأتي مع أي صفحة ويب. انها ليست شيئا أنا خلقت. داخل هذا الهيكل الوثيقة، على الرغم من، لديك ليس فقط البيانات ولكن لديك أيضا وظائف. وأي وقت لديك وظيفة داخل هيكل، داخل كائن، انه دعا أسلوب. ولكن هذا الشيء. وهناك طريقة هي وظيفة فقط أن يحدث ذلك لتكون داخل شيء آخر. ولذلك فإن هذا يعني أن هذا المتغير العالمي خاصة تسمى وثيقة لديه وظيفة تسمى getElementById أن يفعل حرفيا ذلك. سوف تحصل على عنصر من DOM، شجرة طراز كائن المستند، ID الذي هو في هذه الحالة تحية. وبعبارة أخرى، كل هذا الوقت قضينا على هياكل البيانات هنا يأتي دور. هذه صورة لDOM التي كانت لدينا قبل لحظة، على الرغم من أن الصفحة هي مختلفة قليلا، إذا كان لي DIV في هذه الصورة، ماذا document.getElementById سيعود لي على نحو فعال مؤشر إلى المستطيل في شجرة، في إشارة إلى المستطيل في الشجرة. بحيث ما يعنيه أن الكلمة في الواقع واحدة من تلك الوظائف. في هذه الحالة مرة أخرى انها DIV. انها ليست هيئة أو العنوان أ. لذلك دعونا نرى ما أقوم به بعد ذلك مع هذا DIV الآن أن لدي داخل هذا DIV متغير يسمى. اتضح مع جافا سكريبت لديك القدرة على قرص CSS من الصفحة الخاصة بك بشكل حيوي. حتى الآن، كل من CSS فعلناه، وإن كانت محدودة، في سمات النمط، أو في أي مكان آخر قد وضعنا CSS؟ النوع الأول من تلك التي فسدت. في علامة النمط في الجزء العلوي من الملف. أو كان في المركز الثالث؟ ملف خارجي، شيء ما. المغلق. حتى تلك هي 3 أماكن فعلناه CSS حتى الآن، لكن الصيد هو الثابت ترميز لدينا كل شيء. كنت قررت وأنت حمامة في pset 7، قررنا ما قبل محاضرة CSS سيكون لدينا. ولكن إذا كنت ترغب في تغيير CSS الخاص بك، يمكنك القيام به في الواقع أن مرة واحدة لديك لغة البرمجة الفعلية. CSS، HTML - لغات البرمجة لا. جافا سكريبت هي. لذلك تبين أن في أقرب وقت لديك واحدة من تلك المستطيلات من الشجرة دعا DOM، فقد بعض البيانات نفسها داخل منه. وبالتالي فإن DIV أن أمسكت فقط من شجرة لديه ما سنقوم استدعاء خاصية داخل منه دعا الاسلوب، والخاصية نمط له حد ذاته خاصية تسمى الرؤية. وأود أن أعرف هذا فقط عن طريق البحث عن دليل مستخدم لCSS. اتضح أن هناك خاصية CSS الرؤية التي تفعل ما تقول. فإنه يجعل شيئا مرئيا أم لا، مرئية أم لا. وكيف يمكنك أن تفعل ذلك هو هذا. أنا أسأل برمجيا إذا كان مخفيا وضوح هذا DIV، ما يمكنني تغييره إلى؟ مرئية. آخر إذا لم يتم إخفاء وضوح هذه الصفحة، I منطقيا لا تجعل من المخفية. ليس لدي فكرة لماذا انها مرئية وخفية وغير مرئية وغير مرئية. كان هذا قرارا سوء التصميم على طول الطريق. ولكن هذه هي في الواقع الأضداد في CSS: مرئية ومخفية. كل هذا لا يعني أنه هو تغيير CSS من ملفي وخارجها، وداخل وخارج لذلك DIV خاص. ولكن مرة أخرى، هذا هو وظيفة تسمى طرفة. عند وظيفة وميض دعا؟ تبين أن هناك آخر متغير العالمية الخاصة نافذة دعا، مماثلة للوثيقة، ولكن، في حين تشير الوثيقة إلى صفحة الويب الخاصة بك مثل شجرة DOM، أرسل HTML لك من خادم، نافذة يشير إلى الكروم المحيطة بها، شريط العناوين، وشريط العنوان، وجميع تلك الأشياء حول صفحة الويب الخاصة بك. واتضح أن الكائن النافذة لديها وظيفة خاصة داخل من وصفته setInterval أن تفعل ما تقول. فإنه سيتم تعيين فاصل زمني - في هذه الحالة كل ميلي ثانية 500 - و، واتخاذ تخمين، ما تنوي القيام به من كل 500 مللي ثانية؟ انه سيكون لتنفيذ ذلك برمشة وظيفة. وما هو لطيف هنا هو أننا كان يمكن أن يتم ذلك في C على الرغم من أننا لم يفعل. C لديها ما يسمى مؤشرات الدالة حيث يمكنك تمرير وظائف في جميع أنحاء كوسائط. وبالمثل يمكن في جافا سكريبت يمكنك تمرير اسم وظيفة في وظيفة أخرى. وتلاحظ ما أفعله. أنا لا أفعل هذا. إذا وضعت بين قوسين بعد طرفة، فهل يعني استدعاء الدالة طرفة. إذا كنت حذفت منها، وهذا يعني هنا هي وظيفة وميض لذلك يمكن أن يطلق عليه setInterval كل ميلي ثانية 500. وبالتالي فإن النتيجة النهائية، على الرغم من أنه الفظيعة، هو أن إذا ذهبت إلى المضيف المحلي والذهاب إلى blink.html، لدي الآن هذا يحدث مرارا وتكرارا. وإذا كنت فعلا فحص العنصر، دعونا نرى ما اذا كنا نستطيع رؤية ذلك. اسمحوا لي أن فحص العنصر، اسمحوا لي أن انتقل لأسفل قليلا، اسمحوا لي أن اختيار عناصر أكثر من هنا، ثم لاحظ المفتش DOM داخل كروم. انها حرفيا تغيير ذهابا وإيابا كل ميلي ثانية 500. إذا ذهبنا إلى صديقنا نيت، إذا كنت من أي وقت مضى يتساءل كيف يعمل هذا، فكرة مشابهة مع فاصل، ولكن في الواقع هو جعل نيت الاستخدام الفعال للغاية من اللون في هذه الحالة بالذات هنا. بحيث ما نقوم به في الواقع أكثر مع هذا؟ دعونا فتح مثال آخر ومحاولة شيء هذا برمجيا حتى أكثر فائدة من جعل الامور طرفة. اسمحوا لي أن انتقل إلى الدليل أشكال لدينا اليوم والذهاب إلى form0. وكان هذا بأبشع صورة ممكنة أن أتمكن من الخروج مع، واسمحوا لي أن تظهر لك فقط ما يبدو في مستعرض. اسمحوا لي أن انتقل إلى المضيف المحلي / أشكال، وهذا هو form0. هذا هو السوبر شكل HTML القبيح الذي يحتوي على حقول قليلة للبريد الإلكتروني، لكلمة، كلمة المرور، ثم خانة اختيار قليلا على الموافقة على بعض الشروط والأحكام. الصيد هو إذا أقوم بزيارة هذا الشكل، وأنا لا أريد أن أقدم لكم عنوان بريدي الإلكتروني، أنا لا أريد أن أوافق على الشروط والأحكام ربما، أستطيع انقر فوق تسجيل ويتيح لي من خلال أي حال. يحدث هذا أن يقدم إلى ملف PHP غبي دعا dump.php. كل ما يفعله هو طباعة محتويات $ _GET فقط لأغراض التشخيص. وهذا ما تم تقديمه من قبل المستخدم للتو. ولكن لنفترض أننا نريد فعلا للتحقق من صحة تقديم النموذج المستخدم. اسمحوا لي أن انتقل إلى الإصدار 1. هذا هو form1.html. يبدو جماليا مثلما سيئة، ولكن لاحظ كيف يتوهم هو عليه. إذا كنت انقر فوق تسجيل دون التعاون، وأحصل صرخ في و. "يجب توفير عنوان بريدك الإلكتروني." حسنا. لذلك اسمحوا لي أن أحاول ذلك. حتى malan@harvard.edu. أنا لست بحاجة إلى كلمة مرور. تسجيل. "يجب توفير كلمة مرور." حسنا. ولذا فإنني سوف توفر كلمة مرور من قرمزي. تسجيل. "كلمات المرور غير متطابقة." لا بد لي من كتابة هنا الآن في قرمزي. راجعت قصد ذلك. تسجيل. "يجب أن توافق على البنود والشروط". حسنا. أوافق هناك. تسجيل. والآن يظهر لي الناتج التشخيص هناك. ذلك ما حدث للتو؟ لدينا هذه القدرة على التحقق من صحة التقارير النموذج. في الواقع، إذا كنت فعلت الغوص في pset 7، هناك وظيفة الاعتذار أن يجعل من السهل جدا أن يصيح في المستخدم مع رسالة على الشاشة. أنا باستخدام آلية مختلفة قليلا، وظيفة التنبيه، وهي ليست وظيفة لابتسم لأنه يجعل على العضو رسائل قبيحة جدا. ولكن دعونا نرى ما أفعله هنا. هذا هو form1.html، وتلاحظ أن لدي بعض بناء جملة مألوفة جدا: العلامة الجسم، العلامة النموذج، سمة العمل، سمة الأسلوب. ولكن لاحظ لقد أعطيت بلدي نموذج معرف فريد للراحة. ثم انني قد حصلت على حقل البريد الإلكتروني الذي هو نوع النص، حقل كلمة المرور نوعه هو حقل كلمة السر تأكيد، التي هي كلمة السر نوع، ثم مربع اختيار اسمه اتفاق هنا، هو نوع مربع. ثم لقد حصلت على زر إرسال. ولكن لاحظت في الجزء العلوي أكثر ما لدي. بادئ ذي بدء، هناك استعمال آخر للعلامة النصي. إذا كان لديك بعض شفرة جافا سكريبت في ملف آخر، تماما مثل مع CSS يمكنك إدراجه. ويمكنك أن تفعل ذلك مع المصدر النصي، ثم لاحظ وأنا ربط على ما يبدو لgoogleapis.com إلى مسار طويل جدا ولكن اسم الملف الذي ينتهي في jquery.min لأدنى حد ممكن. شبيبة. مسج هي مكتبة جافا سكريبت السوبر شعبية لأن يجعل من مجرد سكريبت ومما يزيد من سهولة الاستخدام. أصبح بشكل فعال على مستوى الواقع. على الرغم من ذلك ما كنت على وشك أن نرى ليست نقية جافا سكريبت في حد ذاتها، بل هو على رأس مكتبة جافا سكريبت يشبه إلى حد كبير مكتبة CS50 هو عبارة عن طبقة على رأس من التعليمات البرمجية C على مستوى منخفض، والحقيقة هي تقريبا كل شخص على الإنترنت يستخدمه. لذلك فان هذه ليست عجلات التدريب. هذا هو مجرد ممارسة أفضل في هذه الأيام. تلاحظ الآن أن أدناه هو علامة بلدي النصي الخاصة، وتلاحظ ما فعلته هنا. تبين أن يفعل شيئا مسج يتوهم قليلا. سكريبت لديه علامات الدولار، لكنهم لا معنى لها. انهم مثل الحرف A B أو C. أو وقد اعتمدت مسج ببساطة اتفاقية أو نوع من المطالبة وضعت إلى حقيقة التي من شأنها أن تكون رمزا $ الخاصة. وذلك في أقرب وقت قمت بتحميل هذا الملف جافا سكريبت العالمية هنا مع العلامة النصي، لديك حق الوصول إلى متغير عالمي الخاص الذي يسمى $. أكثر بشكل صحيح يسمى مسج، ولكن هذا لا يبدو تقريبا مثل جنسي $. ولكن $ ليس له معنى خاص. في PHP كان لها معنى خاص. كان عليك أن يكون ذلك أمام متغير. هذا هو مجرد شيء مثير أن أخذوا على. ما يجري هنا؟ لاحظت أنا عابرة إلى وظيفة مسج المستند متغير عمومي ثم ادعو. جاهزة. ما لا مسج أساسا هو أنه يسمح لك أن تأخذ بعض الأشياء سكريبت الفانيليا مثل كائن مستند، الكائن النافذة، وإذا كنت تمر في وظيفة لمسج - ومرة أخرى، أن تكون واضحة، وهذا هو دالة يسمى مسج - ما يفعله هو أنه يعود لك إصدار خاص من الوثيقة لديها أكثر الوظائف المرتبطة به. حتى في جافا سكريبت الخام ليس هناك وظيفة جاهزة، ولكن إذا قمت بتمرير الوثيقة إلى وظيفة مسج الأولى، فإنها ترجع لك إصدار خاص من كائن مستند يحتوي على ميزات أكثر الهوى. وهذا هو السبب الذي جعل الناس ترغب في ذلك. فإنه يجعل الأمور أسهل فقط القيام به، ونحن على وشك أن نرى. فماذا يعني هذا السطر من التعليمات البرمجية يعني؟ هذا السطر من التعليمات البرمجية هنا يعني عندما يكون المستند على استعداد - وبعبارة أخرى، بمجرد الانتهاء من قراءة هذا المتصفح أعلى إلى أسفل الملف - والمضي قدما في تنفيذ الدالة التالية. ما هو حقا للاهتمام في جافا سكريبت - وPHP وهذا أيضا - هو مجهول وظائف. في جافا سكريبت إمكانية تعريف الوظائف التي ليس لها اسم ولكن لديهم الجسم. تلاحظ ما يحدث هنا. هذه هي وظيفة تسمى جاهزة، وهذا يعني فقط القيام بما يلي عندما صفحة ويب كاملة على استعداد، عندما يكون كل ذلك تم قراءة في من الخادم. ماذا تريد أن تفعل؟ أريد أن تنفيذ قطعة من التعليمات البرمجية. لاحظ أننا لا نريد أن تنفيذ هذه التعليمات البرمجية على الفور. إذا كنت حذف هذه، فإن هذا يعني على الفور بدء في تنفيذ هذه الأسطر من التعليمات البرمجية. ولكن الحقيقة أن أقوله لا، لا، لا، هذا التفاف وظيفة في مثل هذا المجهول يعني عدم تنفيذه حتى الآن؛ يطلق عليه في نهاية المطاف. رأينا هذا قبل لحظة في مثالنا النموذج السابق. ما وظيفة لم نسميه في نهاية المطاف، 500 مللي ثانية في وقت لاحق؟ الوميض. وبالتالي فإن الفكرة نفسها. مرة أخرى، حتى لو كان هذا يبدو قليلا غريبة، تأخذ فقط في الوقت الراهن على الإيمان أن تعلن وظيفة مجهول أن يطلق في نهاية المطاف، تكتب ببساطة وظيفة () { فما رمز نحن ذاهبون لتنفيذ في نهاية المطاف؟ ما يلي. هذا يبدو جدا جديدة قليلا، ولكن هذا يعني وهنا وظيفة مسج، وهذا هو الآن اختصار. هذا مقتطف من HTML في الجزء السفلي من الشاشة بالطبع لديه بعض التمثيل شجرة. انها ليست هذه. هذه الصفحة هو أكثر إثارة للاهتمام من هذا المثال مرحبا العالم. ولكن هناك بعض الأشجار الذي يتوافق مع هذه HTML. سيكون من ألم في الرقبة لدينا لتنفيذ بعض نوع من وظيفة العودية لبدء في عقدة الجذر ومن ثم العثور على العقدة التي ID هو التسجيل. وذلك ما يجعل من السهل سوبر مسج بالنسبة لنا هو حرفيا هذا. المضي قدما والحصول على البيانات أيا كان شكل أو DIV أيا كان، أيا كان عنصر HTML وجود هوية للتسجيل. وهذا يعادل document.getElementById ('تسجيل'). لماذا الناس مثل مسج؟ لأنه أقصر لكتابة. ولكن هذا كل ما هو عليه. انها نفس الفكرة. يحصل لي العلامة التي ID هو التسجيل. وعند تقديم هذه العلامة، الذي صادف أن يكون شكلا،، والمضي قدما في تنفيذ هذه التعليمات البرمجية. لذلك دعونا نلقي نظرة واحدة الآن في مستوى قيامنا بهذا الأمر التحقق من صحة النموذج. بناء الجملة خفي المسلم في البداية، ولكن ما الذي يحدث؟ إذا كان هذا الخط من التعليمات البرمجية صحيحا، انا ذاهب الى الصراخ للمستخدم لتوفير عنوان البريد الإلكتروني الخاص به. فما هو هذا السطر من التعليمات البرمجية؟ $ يعني مسج. تلاحظ الآن هذا. هذا هو نوع من مثل CSS. إذا كنت قد اتجه الى CSS حتى الآن، عليك أن تعرف أن هذا يعني العنصر الذي هو معرف تسجيل. مساحة يعني إيجاد طفل أو سليل تسجيل اسمه الإدخال. ومن ثم هذا الشيء بين قوسين معقوفين هو عامل تصفية قليلا. وحتى لو كان هذا يبدو خفي، وهذا يعني فقط الانتقال إلى النموذج الذي هو ID التسجيل، انتقل إلى إدخال عنصر داخل هذا اسمه البريد الإلكتروني، وبعد ذلك الحصول على قيمتها، مهما كانت قيمته يحدث أن تكون - قوات الدفاع الذاتى الجوية اذا كان هذا كل ما كتبته أو malan@harvard.edu اذا كان هذا ما كتبته أنا. إذا كان الأمر كذلك قيمة حقل البريد الإلكتروني للنموذج == لا شيء، يصيح في المستخدم. آخر إذا كانت قيمة حقل كلمة المرور == لا شيء، يصيح في المستخدم. آخر إذا كانت قيمة حقل كلمة المرور لا تساوي قيمة حقل تأكيد، التي كانت العنصر شكل آخر، يصيح في المستخدم. ثم أخيرا - وهذا واحد لديه أيضا بعض بناء الجملة جديدة من تلقاء نفسها، ولكن مرة واحدة كنت قد رأيت ذلك، فإنه على الأقل أكثر من ذلك بقليل معقولة - والا اذا شكل الذي هو معرف تسجيل يحتوي على عنصر المدخلات اسمه اتفاق ويتم اختبار ذلك، والمضي قدما ويصيح في المستخدم. لذلك أنا أعترف تماما هذا هو تماما الساحقة للوهلة الأولى. انها الكثير من بناء جملة جديدة. ولكن كل مسج يلي هذه الأنواع من الأنماط. وبصراحة، لم أكن أعرف حتى هذه كانت موجودة حتى قبل بضع دقائق. أنا googled، "كيف تحقق مما إذا تم سحب مربع اختيار في مسج؟" وهذا هو لغوي، لأنه لا يوجد طرق مختلفة للقيام بذلك مع شفرة جافا سكريبت الفعلية الخام. وذلك في الصفحة الأولى من مجموعة مشكلة 7 يؤكد، pset 7 هو إلى حد كبير ممارسة في إلباس الحذاء نفسك حيث قمنا بتوفير، ونأمل، والإطار المفاهيمي الذي لمعالجة pset. ولكن كما هو الحال غالبا مع تصميم المواقع الإلكترونية، والامر متروك لكم حقا لكزة حولها، إدراج قصاصات من رمز وأمثلة من الويب طالما كنت أذكر منهم في شروط على أن الورقة الأولى، وندرك أن تعلم HTML، CSS، JavaScript و SQL حتى ومن المفترض حقا أن تكون هذه العملية في المنزل ونحن نبدأ في اتخاذ هذه العجلات من التدريب. وندرك أيضا أن هناك أشياء كثيرة يمكنك القيام به أكثر مع متصفح. داخل معظم هذه العناصر هناك أشياء أخرى تسمى معالجات الأحداث. وعلى الرغم من أننا مجرد النظر في تلك onsubmit ودعا onready، يمكنك أن تفعل أشياء مثل حدثين onkeydown، onkeyup، مثل عندما يلمس المستخدم مفتاح، يمكنك الاستماع لذلك ومفتاح رفع. جوجل لديها اختصارات لوحة المفاتيح. كيف تتعامل Google تنفيذ اختصارات لوحة المفاتيح مثل C لإنشاء؟ يستمعون للأحداث، كما انهم يسمى، مثل onkeypress أو onkeyup وحدثين onkeydown. إذا كنت قد سبق لك حلقت مؤشر الفأرة فوق بعض خيار القائمة وجميع من فويلا، فجأة، تظهر قائمة أو يتغير لون الرسم، كيف يفعلون ذلك؟ بدلا من الاستماع لonready أو onsubmit، كنت استمع لonmouseover أو onmouseout. لذلك باختصار، مع هذه الأساسيات البسيطة جدا التي قد بدأنا تخدش سطح اليوم وسنقوم الغوص في مزيد من يوم الاربعاء، لديك، على نحو متزايد، القدرة على تنفيذ ذلك النوع من الأشياء التي كنت بالفعل على دراية. لذلك دعونا تنتهي عند هذا الحد، وسنواصل هذا يوم الاربعاء. [CS50.TV]