[Powered by Google Translate] [مشكلة تعيين تجول 7] [Zamyla تشان] [جامعة هارفارد] [هذا CS50] [CS50.TV] مرحبا الجميع، ومرحبا بكم في الإرشادات التفصيلية 7، CS50 المالية. الآن تتم رسميا ونحن مع كل من psets في CS50، وغادر لتوه كنت مع واحد ونحن أكثر والتي ستكون متعة تنفيذ من موقع على شبكة الانترنت حيث يمكن للمستخدمين تسجيل الدخول إلى CS50 المالية وشراء وبيع الأسهم. اليوم، ونحن ستكون لدينا عدد قليل من الأدوات التي في حوزتنا. نحن ذاهبون الى الحديث عن الأذونات. كلما كان لديك مجلد على شبكة الإنترنت، كنت تريد الذهاب الى السماح للمستخدمين لتنفيذ بعض الملفات ولكن أيضا قرأت للتو منها الأخرى، لذلك سوف نبحث في أذونات وكيف يمكن أن يحدد تلك. ثم ونحن في طريقنا للنظر في PHP، HTML، ورمز SQL. الأولى، الأذونات. عندما كنت في المحطة في دليل معين، ثم ما تريد القيام به هو الذي تريد تشغيله الأمر chmod. هذا ما يليه إما الأحرف أو الأرقام المقابلة إلى ما تريد في الأساس العالم لرؤية، أنت نفسك أن نرى، الخ. على سبيل المثال، عندما يكون لديك مجلد، ثم تريد أن يكون هذا المجلد قابل للتنفيذ من قبل الجميع أن يراها، ذلك ما كنت تفعله هو هل يمكن تشغيل الأمر شمود + X ل ومن ثم اسم المجلد الخاص بك. عندما يكون لديك ملف مثل ملفات CSS أو ملفات الصور - مثل ملفات JPEG والصور النقطية، وأشياء من هذا القبيل، أو أي شفرة جافا سكريبت - تريد أن تكون قابلة للقراءة من قبل الجميع، حتى ذلك الحين ما عليك القيام به هو يمكنك استخدام حرف البدل - وهو النجمة - للإشارة أساسا في المجلد CSS - كل شيء في هذا المجلد -  انا ذاهب الى القول بأن ذلك سيكون للقراءة من قبل الجميع. مع الأذونات، عندما نستخدم الحروف، يمكننا أيضا استخدام الأرقام بدلا من ذلك. لذلك، ترى أنه في نهاية المطاف عندما تريد شيئا لتكون قابلة للتنفيذ - تعبر عن ذلك من خلال عدد 1 - شيء أن تكون قابلة للقراءة هو رقم 4 و ثم - للكتابة هو رقم 2 - وذلك أساسا عندما تريد مجموعة من هؤلاء، ثم إضافتها. إذا كنت تريد شيئا أن يكون، للكتابة للقراءة، وقابل للتنفيذ، ثم هل تضيف ما يصل 4، 2، و 1 و التي من شأنها أن تعطيك 7، ثم كلما كان لديك مجلد تريد أن تكون قابلة للتنفيذ من قبل الجميع - وكذلك قراءة وكتابة - ثم جعل لكم أن 7، 1، 1. من شأنها أن تكون 7 للكم، ثم 1 لأشخاص آخرين. عندما يكون لديك المواصفات، وأنها سوف تحدد في الواقع الذي المجلدات والملفات التي يجب أن تكون افتتاحية شمود على وجه التحديد. على سبيل المثال، عندما يكون لديك المجلدات - تلك هي 7-1-1 - عندما يكون لديك صور أو HTML، CSS، وجافا سكريبت، ثم تلك ستكون 6، 0 4، - أو 6، 4، 4 - وفوق ملفات PHP ستكون 6، 0، 0. والفكرة وراء ذلك هو أن المستخدمين لا ينبغي أن نرى في الواقع الخاص بك رمز PHP، ولكن أن يكون مجرد قادرا على رؤية الإخراج. عظيم! الانتقال إلى PHP. ببساطة، كلما أردت ملف PHP، لاحقة الملف. بي. يمكنك أيضا مزج مع رمز HTML PHP. إذا كان لديك ملف HTML، على سبيل المثال، ثم يمكنك أرفق مع زاوية اليسار، علامة استفهام، PHP - وضع برامجك - ثم قم بإغلاق أنه مع علامة استفهام أخرى وزاوية قائمة. المتغيرات في PHP هي أسهل كثيرا من التعامل مع المتغيرات في C. أي متغير يبدأ فقط مع علامة الدولار أمامه، وكنت كتبته ضعيفة فيها. هذا يعني أنك لا داعي للقلق حول إعداد شيء يساوي سلسلة أو عدد صحيح. يمكنك فقط أن أقول ببساطة، هذا هو اسمي المتغير ثم وهذا هو وقيمته، لذلك سيكون من الأسهل للتعامل مع هناك. شيء آخر هو أن PHP تسمح لك باستخدام صفائف النقابي. يمكنك فقط تحديد ببساطة مجموعة وكأنك في C قائلا: الدولار تسجيل الدخول الخاص بك اسم الصفيف يساوي، ثم بين قوسين معقوفين في الأساس مجرد قائمة من القيم لجميع العناصر في الصفيف. ولكن، في PHP ما يمكنك القيام به هو تحديد أيضا أساسا - انه نوع من مثل وظيفة التجزئة. يمكنك تحديد مؤشر - ما أنت تسير أن نسميها - ثم الذي يتوافق مع قيمة. إذا كنت تمر بالفعل في = 1، ب = 2، ج = 3، ثم الصفيف الخاص بك في مؤشر على أن أعطيك 1. وهذا pset الحارة لكم مع بعض PHP في قسم من الأسئلة، وبعد ذلك يغوص في CS50 المالية. لدينا بضعة - لدينا بعض الوظائف، في الأساس، لتنفيذ في هذا الموقع. نريد للسماح للمستخدمين لتسجيل في موقعنا باستخدام اسم مستخدم وكلمة مرور. نريد للسماح لهم للبحث عن اقتباس، ومن ثم فإننا طباعة اسم ذلك الاقتباس فضلا عن السعر الحالي أنه في. نريد أن تسمح لهم بالإطلاع على مجموعة من كافة الأسهم التي قد اشترى حتى الآن. نريد أيضا أن تسمح لهم لشراء الأسهم وكذلك بيعها. ثم أخيرا، نريد أن تسمح لهم بالإطلاع على تاريخ جميع المعاملات التي قمت بها كانت. ثم، أخيرا، وبعد لقد قمت بتنفيذ كل ذلك، ثم أنت حر لتنفيذ ميزة واحدة إضافية. سوف نذهب إلى تلك. يمكن لهذه أن تكون إما السماح للمستخدمين للحصول على نقدية اضافية عن طريق إيداع نقدية اضافية، أو هل يمكن أن تسمح لهم بتغيير كلمة المرور الخاصة بهم، أو شيء من هذا القبيل، إرسالها بالبريد الإلكتروني على إيصال عند شراء أو بيع الأوراق المالية. هناك قائمة محدودة من الميزات التي يمكن أن تنفذ نفسك، لذلك هذا هو آخر هناك. وبما أن هذا هو موقع على الانترنت، يا رفاق لديها أيضا الكثير من الحرية لتخصيصه. نحن لا توفر بعض التعليمات البرمجية CSS، ولكن كنت بالتأكيد مجانا على قرص عليه، جعلها تبدو أجمل، ولكن وراء ذلك هو وظيفة أساسية لذلك تشير دائما إلى المواصفات حول ما تحتاج فعلا لتشمل هناك. بعد المواصفات، ونحن في طريقنا إلى استخدام الأجهزة وكذلك ملقم. انه سيكون لاستضافة موقعنا بالنسبة لنا، على الخادم المحلي. اذا كنت تتبع هذه التعليمات وبفك شفرة pset 7 التوزيع في المجلد الظاهري المضيف المضيف / المحلية،  ثم يمكنك مجرد زيارة http://localhost/ في جوجل كروم في الجهاز، ومن ثم سوف تصل إلى رمز التي كنت قد كتبت pset 7. Pset 7 يأتي مع مجموعة من التعليمات البرمجية التوزيع، ونأمل we've - من خلال كل من psets قبل هذا - عودنا على القراءة من خلال توزيع التعليمات البرمجية، فهم ما يتم توفير وظائف بالفعل، وكيف أننا قد تكون قادرة على استخدام تلك وغيرها من المهام التي نحن ذاهبون الى أن المنفذين. في هذه الحالة، لدينا 3 مجلدات. لدينا مجلد HTML، ويتضمن المجلد، ومجلد القوالب. ما نحن ذاهبون الى أن تفعل هذا مع pset هو نوع من الفصل بين التفكير - التفكير البرمجة - من قانون PHP مع الجانب المرئي الفعلي. سوف لدينا واحدة PHP الملف الذي يفعل كل من التفكير، يقرأ في قاعدة البيانات، بطباعة الأشياء، وإذا كانت تصريحات - اشياء من هذا القبيل - وبعد ذلك سوف تمر البيانات في ملف القالب لدينا - أو الملف template.php. ما من شأنها أن تفعل وقراءة البيانات وبعد ذلك سيتم طباعته. يمكننا معالجة القوالب ب "الغبية" في أننا لا نريد حقا لهم أن تفعل الكثير من العمل في حساب الأشياء. نريد وحدات تحكم لدينا للقيام بذلك. قليلا على ذلك - دعونا نلقي نظرة على بعض من قانون التوزيع. هنا لدينا لدينا ملف index.html و كان فارغا جدا. ما يفعل أساسا - تقول، حسنا، انا ذاهب الى ملف configuration.php تتطلب. نحن لا نرى أن هناك حق، لكنه يدعو في الأساس ملف configuration.php، وتنفيذ ذلك. بعد أن يفعل ذلك، انه سيكون لتقديم محفظة. تقديم وظيفة، لذلك نحن كلما في وحدة تحكم، سنتصل تقديم، سنقوم إعطائها الملف ومن ثم البيانات التي تمر نحن في، بحيث انها سوف ندعو في portfolio.php نوع من تمريرة-في ذلك البيانات بحيث تستطيع التعامل مع محفظة ذلك. والآن، هنا، لدينا نموذج login.php.  هذا هو وحدة تحكم يأخذ أساسا الرعاية من تسجيل الدخول. هنا، فإنه يتحقق إذا قدم نموذج لهذا الملف ويتعامل مع التحقق من صحة الطلب. سوف نبحث في هذه الوظيفة الاعتذار. عندما نريد لطباعة رسالة خطأ، نستخدم الاعتذار والتي من شأنها أن إعادة توجيه المستخدم إلى صفحة معينة وأن طباعة رسالة الخطأ المحددة التي تبين لنا. استمرار على، فإنه الاستعلام عن قاعدة البيانات - we'll وصول الى أكثر من ذلك لاحقا. ثم ترى أن إلى هنا إذا لم يقدم نموذج، ثم أنها تجعل نموذج. وهذا يعني أنه يذهب إلى login_form.php، لذلك دعونا ننظر في ذلك. Login.php هو في الواقع حيث نرى أن التعامل مع الجانب HTML البصرية الفعلية. هنا لدينا علامة الإدخال لاسم المستخدم، مدخلا لكلمة المرور، وكذلك زر إرسال. هذا في الواقع حيث الناحية البصرية وشكل HTML وسوف تعقد. هنا، تقول إنها ستكون المقدمة من طريقة معينة، ودعا آخر. سوف نصل إلى الاختلافات بين طرق - أضف مقابل الحصول عليها، هناك أيضا ما يسمى وضع - سوف نصل إلى تلك الأساليب في وقت لاحق، ولكن لمصلحة من هذا pset، وأود أن أشجع بشدة لك لاستخدام آخر. ونحن نعلم أن يقدم مرة واحدة في الأساس هذا النموذج - من login_form.php-- بعد ذلك سوف يذهب إلى العمل - login.php-- تمر أساسا في كل تلك المعلمات من تلك النماذج في login.php. وترد النتائج من خلال هذا النموذج مجموعة النقابي هذا المنصب. المؤشرات العناصر المختلفة في الصفيف آخر هي بالضبط ما تحدده هنا. أنت تقول أن اسم هذا الإدخال هو اسم المستخدم. اسم هذا هو واحد كلمة المرور. وبالمثل، ترى اسم المستخدم والرقم القياسي لمجموعة النقابي هناك. إذا ذهبنا إلى المجلد يتضمن، لدينا هذا الملف الوظائف التي ستكون مفيدة جدا. يتم تنفيذ كل هذه المهام بالنسبة لك. لا تحتاج لتنفيذ أي من هذه على وجه التحديد نفسك، لكنهم ذاهبون الى مفيدة للغاية. لقد اعتذر، والتي كما قلت من قبل، سيتم طباعة أساسا من رسالة خطأ لك على صفحة محددة - apology.php. ثم لدينا تفريغ، حتى إذا كنت مجرد دعوة تفريغ ومن ثم تمرير في المتغير، بعد ذلك سوف تجلب لك إلى صفحة التي سيتم عرض هذا المتغير بالنسبة لك. ثم قمنا الخروج، والتي سوف تنتهي في الأساس جلسة عمل مستخدم معين ل. البحث ستكون مفيدة. لأننا نتعامل مع اقتباسات والأرصدة، ونحن في طريقنا لتكون قادرة - وانها أساسا الوقت الحقيقي. نحن بحاجة إلى معرفة ما هي تلك القيم الأسهم، لذلك لدينا وظيفة البحث التي تتعامل مع وثائق ياهو للأسهم. مرة واحدة قمت بالبحث رمزا معينة من الأوراق المالية، فإنه سيعود إليكم رمز السهم وكذلك اسم والسعر الحالي للأن الأسهم. هذا هو وظيفة البحث. ثم نتعامل مع MySQL، لذلك نحن ذاهبون الى أن الرغبة في تنفيذ بعض الاستعلامات على قاعدة البيانات SQL لدينا. لدينا للتعامل الاستعلام - لنوع من بعض مجردة من ذلك الخروج. ونحن في طريقنا إلى أن يمر في سلسلة كاملة من الاستعلام SQL لدينا - وجميع المتغيرات التي تذهب في ذلك - وهذا ما يفعله هو في الواقع أن تنفيذ بالنسبة لنا. بدلا من الاضطرار لكتابة كل هذا في كل مرة أن كنت تريد الاستعلام - عن طريق الحصول على كل النتائج من هذا الاستعلام - ثم يمكنك استدعاء الدالة الاستعلام فقط، وأنه سوف يعود لكم - اعتمادا على ما كنت تستخدم للاستعلام - ربما صف من كافة النتائج التي تطابق الاستعلام أو ما شابه ذلك. أكثر على ذلك لاحقا بالرغم من ذلك. وأخيرا، لدينا إعادة توجيه والتي، كما يوحي اسمها، والموجهات لك صفحة مختلفة. ثم لدينا تقديم، ونحن ذاهبون الى أن الدعوة عدة مرات. عندما كنت في وحدة تحكم، يمكنك استدعاء تجعل في الصفحة قالب ومن ثم تمرير في القيم التي ستتعامل القالب ثم مع. هذه القيم على الارجح الى أن التعامل مع نوع الإخراج الذي تريده إلى أن تظهر على صفحة القالب. حسنا. تلك هي المهام، وهناك الكثير لهذا الرمز التوزيع. وأهيب بكم أن يذهب من خلال ذلك، واستكشاف ذلك بنفسك. أيضا، فإن المواصفات المشي ربما لكم من خلال بعض العناصر الأخرى من قانون التوزيع. وفيما يلي ملخص لمهام وجدت في functions.php. حسنا. المهمة الأولى هي للسماح للمستخدمين التسجيل على الموقع. الآن، هناك نموذج تسجيل الدخول على الموقع، ويتم توفير لكم مع عدد قليل من المستخدمين مع كلمات السر. يمكنك استخدام هذه أسماء المستخدمين وتسجيل الدخول، ولكنك تريد أن تسمح للناس لجعل أسماء المستخدمين الخاصة بهم وإضافة أنفسهم إلى الموقع. تخطيط للتسجيل مشابه جدا لنموذج تسجيل الدخول، باستثناء اسم المستخدم ليس موجود مسبقا، ويحتاج المستخدم أيضا لتوفير كلمة مرور جديدة، ثم عادة لدينا تأكيد كلمة المرور. مرة واحدة في كل مدخلات المستخدم لتلك المعلومات، نحن نريد لإضافتها إلى قاعدة البيانات لدينا من المستخدمين. ونحن في طريقنا إلى وجود قاعدة بيانات - قاعدة بيانات SQL - أننا ذاهبون إلى مرجع. في قاعدة البيانات، سيكون لدينا جدول مع كافة المستخدمين تحتوي على اسم المستخدم الخاص بهم وكلمة المرور الخاصة بهم، وكيف أيضا الكثير النقدية لديهم. في سجل، ونحن نريد للسماح لهم بدخول تلك المعلومات. نحن نريد لعرض هذا النموذج. نحن نريد أن نتأكد من أن كلمة المرور الخاصة بهم - أن دخلوا واحد، ثم أيضا أن تتطابق كلمات المرور عند دخولهم مرتين. بعد كل ذلك يتم - على افتراض أن يتم التحقق من هذه الأخطاء - ثم نريد أن إضافة هؤلاء المستخدمين إلى قاعدة بياناتنا. وأخيرا، مرة واحدة كنت قد سجلت، انها مريحة جدا إذا كنت لا تحتاج إلى تسجيل الدخول مرة أخرى مرة واحدة لقد سجلت نفسك لذلك نحن في طريقنا للدخول بهم في الموقع الإلكتروني لانهم اذا سجلت الدخول بنجاح. المهمة الأولى هي لعرض النموذج، وهذا يحدث فعلا لتكون - هذه عملية التسجيل برمتها ستكون على غرار جميلة وثيق بعد تسجيل الدخول إلا بدلا من login.php قد يكون لديك register.php. بدلا من login_form.php-التي هي قالب - سيكون لديك سجل النموذج. فأنت تريد أن تضيف واحد أكثر الميدان - حقل تأكيد كلمة المرور - بدلا من اسم المستخدم واحد فقط وكلمة المرور واحدة. المقبل، ونحن نريد للتحقق ما إذا كان يطابق كلمات السر أو فارغة. لدينا وحدة تحكم - register.php-الذي يجري لرعاية تفعل هذه الشيكات. عند إرسال النموذج من خلال أسلوب آخر، ثم ترد كل هذه المتغيرات ضمن مجموعة آخر. كنت ترغب في التأكد من أن قيمة مجموعة في كلمة مؤشر آخر يطابق العنصر تأكيد. كنت ترغب في التأكد من أنها ليست فارغة، وتريد للتأكد من انهم نفس الشيء. شيء واحد مريحة حول PHP هو أننا لسنا في حاجة لاستخدام سلسلة مقارنة بعد الآن. يمكننا استخدام المشغل يساوي يساوي-  للتحقق ما إذا كان سلاسل متساوون مع بعضهم البعض. لمعالجة الأخطاء، فأنت تريد أن تعتذر. للاعتذار، يمكنك استدعاء ببساطة وظيفة  ثم حدد نوع الرسالة التي تريد الإخراج. ثم كنت تريد إضافة المستخدم إلى قاعدة البيانات. حتى الآن، كل الذي نقوم به هو التعامل محليا مع مجرد نتائج النموذج. الآن، ونحن نريد فعلا لإضافتها إلى قاعدة البيانات لدينا. لهذا، نريد أولا للتأكد من أن المستخدم ليس فارغا. نفهم أن على موقع على الانترنت، وكنت لا يمكن أن يكون العديد من المستخدمين باستخدام نفس اسم المستخدم، لذلك عليك نريد أن نتأكد من أنه عند إدراج شيء في قاعدة البيانات الخاصة بك - اضافة الى وجود مستخدم جديد - فإنك لا تحصل على اسم مستخدم تصادم بين القائمة من قبل واسم المستخدم الذي يحاول المستخدم أن يقدم. لهذا، وبمجرد تنفيذ استعلام - إدخال المستخدم مع كلمة المرور الخاصة بهم معينة ومبلغا أوليا قدره النقدية - مرة واحدة يمكنك استدعاء هذا الاستعلام، ثم الخلية سيعود فعلا كاذبة إذا فشلت. هيكل من المستخدمين هو أن هذه اسم المستخدم هو قيمة فريدة من نوعها، لذلك لا يمكن أن يكون أكثر من واحد. وعند محاولة إدراج صف جديد مع اسم مستخدم موجود بالفعل، وهذا سوف يعود كاذبة - مثل كاذبة ذات قيمة منطقية. شيء صعب هنا هو أن عليك أن ترغب في معرفة ما اذا كان النتيجة هي نتيجة الاستعلام الخاص بك. اذا فشلت، ثم عليك أن ترغب في التحقق مع مشغل الثلاثي قدم المساواة. أن يحدث في الواقع للتحقق ما إذا كان هناك فشل أم لا، في حين، في مجرد بسيطة يساوي-يساوي، فإنه يكون صحيحا إذا كان الصف فارغ. نتيجة لفشل إذا كان هناك تصادم بين أسماء المستخدمين هي القيمة الفعلية كاذبة. هنا كيف سيكون إدراجها في قاعدة بيانات. هنا هو الاستعلام الذي من شأنه أن يتعارض تماما في SQL. شيء واحد هو أنه يمكنك الذهاب فعلا إلى الموقع الذي يدير قاعدة البيانات SQL وهناك ألعب حولك عن طريق إدخال القيم أو إما يدويا الصفوف. فإنه سيتم إخراج ما هو الإخراج SQL. يمكنك أيضا تشغيل الأوامر SQL داخل قاعدة البيانات الخاصة بك  ونرى بعد ذلك ما قد يكون بناء الجملة، وترجمة ذلك إلى ثم وظيفة الاستعلام التي لدينا في pset 7، التي ستكون مشابهة جدا لتشغيل الاستعلامات التي في الواقع. إذا أردت أن إدراج صف جديد في الجدول المستخدمين بلدي، ثم أود أن تحديد INSERT INTO المستخدمين، والذي هو اسم بلدي الجدول. ثم أود أن تحديد أسماء الأعمدة. ثم أود أن توفير القيم جنبا إلى جنب مع كلمة السر الخاصة بي. لا يتم تخزين كلمات المرور في الجدول مستخدمينا كسلسلة فقط. يتم تخزينها كإصدار مشفرة، لذلك عليك أن ترغب في تشغيل سرداب الدالة على كلمة السر الفعلية، وسوف أعطيك أن النوع الصحيح من التخزين لمجموعة المستخدمين. وسوف تعمل هذه إدراج صف جديد في الجدول المستخدمين. للتعامل مع وظيفة الاستعلام، من قبل في C استخدمنا علامة النسبة المئوية كعنصر نائب. وبالمثل، فإن نفس المفهوم من عنصر نائب ينطبق هنا. مع الاستعلام، يمكنك تحديد الاستعلام كله، إلا كلما كنت تتعامل مع المتغيرات والمدخلات الخاصة بك في الاستعلام، ثم بدلا من وضع لهم فعلا داخل - مثل عندما كان لدينا البيانات printf في C. ونضع السلسلة ومن ثم يكون هناك عنصر نائب، ثم بعد كل فاصلة، حدد المتغير الذي كان لدينا. هنا، ونحن في طريقنا لاستخدام علامة وعلامة استفهام لدينا نائبا ومن ثم تمرير في كل متغير، على التوالي في النظام، لالنائبة - حيث يجب أن تذهب هذه المتغيرات. حتى هنا، سوف يتم استبدال علامة الاستفهام الأولى من قبل المستخدم الفعلي ثم علامة الاستفهام الثانية كلمة المرور. وأخيرا ثم، مرة واحدة كنت قد سجلت نفسك لهم، وأضاف لهم إلى قاعدة البيانات، ثم تريد تسجيل لهم في الموقع. لدينا نوع من متغير جلسة فائقة العالمي يسمى. الدورة يأخذ رقم معين، وأن رقم يتوافق مع المستخدم الذي تم تسجيل دخوله حاليا انها فيها. ما عليك تريد القيام به هو العثور على ما هو معرف المستخدم الخاص بهم ووضع بعد ذلك أن رقم الدورة بصفة المعرف الذي مستخدم معين. A الدالة التي سترغب في استخدام هنا هو أمر SQL من شأنها أن استرداد مشاركة رقم إدراجها من الجدول الخاص بك. ثم سوف الصفوف الاتصال - it'll استدعاء ID - it'll تعيين اسم إلى الرقم الذي تقوم بإرجاع. وأنها سوف تسمي تلك الهوية. الآن لقد انتهيت من التسجيل، ونحن يمكن ان تتحرك على حد تعبير. اقتباس يسمح للمستخدم لإدخال اسم الأسهم معينة، ومن ثم فإنه سوف يعود صفات هذا المخزون. ما سوف تريد أن تفعل هنا هو وحدة تحكم والقوالب بعض. في هذه الحالة، ونحن في طريقنا لديك وحدة تحكم الذي هو الذهاب الى بذل كل ما من التفكير بالنسبة لنا. انه سيكون للبحث عن رمز وثم تمرير في القيم إلى القوالب التي سوف طباعة. ونحن في طريقنا لدينا 2 قوالب هنا. ونحن في طريقنا لديك 1 القالب الذي يوفر للمستخدمين الشكل الذي سوف إدخال اسم السهم - اسم المشاركة. ثم ونحن في طريقنا أيضا إلى قالب آخر تريد أن يعرض تلك القيم. يمكن أن ننظر إلى تسجيل الدخول للحصول على مثال كيف سيكون لديك نموذج يقبل إدخال، إلا هنا، نحن نريد فقط 1 المجال. نحن لا نريد اسم المستخدم وحقل كلمة المرور. نحن نريد فقط 1 حقل النص الذي يسمح للمستخدم لإدخال اسم الأسهم معينة. ثم كنت ترغب في إرسال تلك البيانات - بمجرد أن نظرت إلى أعلى الأسهم التي - لquote_form.php. وبحث العودة رمزا للمخزون، واسم، وسعر. وترد تلك ضمن مجموعة النقابي. البحث عن وظيفة البحث داخل functions.php لمزيد من المعلومات على أنواع عودة هؤلاء. عظيم! حتى ذلك الحين وأخيرا، فأنت تريد لعرض المعلومات عن الأوراق المالية. فأنت تريد لعرضه على الأرجح - اختر مربع الطباعة ترغب في الوصول إلى هذه المتغيرات. وبمجرد الانتهاء من السعر في متغير - وكذلك اسم ورمز لل- ثم سوف تحتاج إلى عرض تلك الصفحة في القالب. يمكن أن يسمى تلك الصفحة قالب show_quote.php أو شيء. وصفحتك quote.php تقديم عرض اقتباس ثم تمرير في كل تلك القيم. ثم في الصفحة الخاصة بك PHP، قمت بطباعة هذه القيم فعلا إلى الجانب HTML للصفحة. كنت مجرد استخدام وظيفة الطباعة وتمرير في السعر. هناك 2 طرق - يمكنك إما أن سلسلة مع المشغل نقطة، أو استخدام العنصر النائب. للمستخدمين في نهاية المطاف ستكون شراء وبيع الأسهم. نريد أن تسمح لهم طريقة ما لرؤية كل من الأسهم التي لديهم حاليا. ونحن في طريقنا للدعوة التي محافظهم. ومحفظة، ويفترض لكل مستخدم، تحتوي على مجموعة من الصفوف سرد نوع من المشاركة التي لديهم ومن ثم كم من هؤلاء لديهم. الجدول الموجودة لدينا - الآن لدينا جدول المستخدمين في قاعدة بياناتنا. الذي يحتوي على اسم المستخدم للمستخدم وكذلك كلمة المرور الخاصة بهم ومدى النقدية لديهم. ليس هناك وسيلة حقيقية لتخزين جميع المخزونات في غضون ذلك. انها ليست مثل يمكننا إدراج أعمدة جديدة لكل سهم. من شأنه أن يكون على التوالي جدا، طويلة جدا لأن لدينا كمية لا حصر له من أنواع الأسهم التي قد يكون لها. وهكذا، بدلا ما سنقوم به هو داخل نفس قاعدة البيانات، سيكون لدينا جدول المستخدمين، ولكن بعد ذلك سيكون لدينا أيضا جدول محفظة. وسيتم ربط الجدول محفظة بالتأكيد الى طاولة المستخدمين، ولكن بدلا من ذلك سوف بنية الجدول محفظة الأسهم لديها معلومات، كم عدد أسهم الأوراق المالية أن المستخدم لديه، وكذلك المستخدم الى رقم معين. لديك جدول المستخدمين التي لديها رقم وكذلك اسم المستخدم، والتجزئة - التي هي كلمة المرور، كلمة المرور المشفرة - ثم مبلغ من المال لديهم. سيتم ربط رقم إلى رقم معرف من المحفظة. فإن محفظة يكون مجرد رمز للسهم وكذلك أسهم - عدد الأسهم من الأسهم التي أن المستخدم لديه. في هذا الجدول سيكون لديك محفظة في الأساس يمتلك كل سهم من قبل جميع المستخدمين على موقع الويب الخاص بك. في وقت لاحق، لتحديد الأسهم فقط مستخدم معين ل- فقط على محفظة - هل استرداد القيم من الجدول الخاص بك محفظة بحيث رقم معرف هو محددة لهذا المستخدم. عند عرض محفظة، فأنت تريد أن تقدم تقريرا كل من أسهم في محفظة المستخدم. فأنت تريد الإبلاغ عن عدد الأسهم والقيمة الحالية لتلك الأسهم. لا يتم تخزين تلك القيمة الحالية لتلك الأسهم في الجدول محفظة لأن ذلك سيكون تحديث - في الحد الأدنى - كل يوم من قبل ياهو. للحصول على هذه المعلومات، لا يمكنك أن ترجع من الاستعلام الخاص بك SQL. ما وظيفة على أن لنا؟ سوف تحصل على وظيفة ما الثمن؟ هذا البحث، وذلك باستخدام والبحث عن رمز معين تعطيك الكثير من المعلومات. سوف تعطيك 3 قطع من المعلومات - اسم، رمز، وكذلك السعر. بمجرد بحث رمزا معينة، ثم يمكنك الحصول على الأسعار، ثم يمكنك استخدام السعر ليتم عرضها في محفظتك. ينبغي للمحفظة أيضا عرض الرصيد المستخدم النقدية الحالية. يتم تخزين هذا المجال ضمن الجدول المستخدمين. تذكر ذلك فكيف نحن لها أساسا إلى - نحن لها أنواع مختلفة من الملفات PHP. ونحن في طريقنا لديك وحدة تحكم والتي أساسا يفعل كل تفكير بالنسبة لك. ثم لدينا القالب الذي القالب يتعامل مع البيانات إخراج. لديك للتفكير في ما المتغيرات وحدة تحكم سوف تحتاج إلى أن تتخذ فيها إذا كنا نتعامل مع مجموعة والتي بإخراج كل اسم، رمز، وعدد الأسهم، فضلا عن السعر الحالي للمخزون، ثم عليك تريد أن تجد طريقة ما لتمرير أساسا في - يمكنك تمرير في مجموعة من القيم التي تطابق ذلك. دعونا نذهب الى مثال كيف يمكن استرداد كافة الأسهم مملوكة من قبل مستخدم معين. هذا لا يتعامل - حتى الآن - مع سعر السهم. ما هذا من شأنه أن القيام به هو تشغيل استعلام. فإنه يجب الحصول على رمز، وكذلك من أسهم - ادعو هذا الجدول، ولكن في هذه الحالة ما يمكن أن يكون ذلك؟ ما هو اسم الجدول الذي نتعامل معه له رمز وأسهم لمستخدم معين؟ انها إما المستخدمين أو محفظة. المحفظة. ما هذا من شأنه أن القيام به هو محفظة الاستعلام عن رموز وأسهم لمستخدم معين. هنا، أقول، (SELECT الرمز، سهم من TBL - ولكن بدلا من الجدول، وأنت تسير ليحل محل ذلك مع المحفظة. 'أين' هو في الأساس حالتي. أنا أقول أريد فقط للحصول على تلك التي تتوافق مع صفائف النقابي  لهذا الشرط التالي - رقم يساوي.  ثم أضع عنصر نائب ثم هناك معرف جلسة العمل. ما هذا من شأنه أن القيام به هو يقول لكل صف في الصفوف. هذا هو وسيلة نظيفة بدلا من الاضطرار فعلا لإقامة حلقة لل أن يكرر على كل من الفهارس، ثم في PHP يمكن أن يكون هناك مقابل كل حلقة. إذا كان لديك مجموعة معينة، ثم يمكنك أن تقول أنا ذاهب لاستدعاء كل عنصر المتعاقبة - أنا ذاهب لاستدعاء كل عنصر هذا الاسم. لذلك، على كل واحد من هذه العناصر، وانا ذاهب لدعوتهم هذه، ثم يمكنني أن أفعل هذا. في هذا لكل، لديك مجموعة الصفوف والفعلية الخاصة بك، وكل صف كنت تريد الذهاب لاستدعاء الصف. في كل مرة تعدم الجسم، وسوف ترتفع وسوف تحديث صف إلى العنصر التالي في الصفوف. الآن، من حيث شراء الاسهم، ما نريد القيام به هو الحصول على الأسهم التي يريد المستخدم لشراء ومقدار الأسهم التي يريد المستخدم لشراء، وبعد ذلك - اذا كانوا يريدون - إضافة إلى أن الأسهم محافظهم. من الواضح، إذا يشترون شيئا، ثم أن يحدث في الانخفاض مبلغ من المال لديهم، بحيث يجري لتقليل النقدية. ونحن في طريقنا إلى أن التعامل مع محفظة تحديث وكذلك الجدول المستخدمين، الذي يحتوي على النقد. ولكن أولا، تحتاج إلى الحصول على كمية المخزون الفعلي والأسهم التي يريد المستخدم. لذلك، سوف تحتاج إلى شكل HTML التي من شأنها أن تسأل عن رمز السهم أن كنت ترغب في شراء وكذلك عدد الأسهم. ثم عليك تريد إضافته. سوف تحتاج إلى تحديد قيم معينة. لقد ذهبنا من خلال هذا قليلا قليلا بالفعل، ولكن عندما كنت في محاولة للحصول على بعض الصفوف - استرداد صفوف معينة من جدول SQL، هذا هو بناء الجملة التالية. كنت قد حدد، ثم إذا قمت بتحديد نجم، التي ترجع أساسا سوف العموم، الصف بأكمله لك. ثم مرة أخرى، لديك شرط فيها، ثم قمت بتحديد - أريد فقط اسم المستخدم لتكون مساوية في إلكتروني، لذلك سوف استرداد فقط في الصف الذي يتوافق مع المستخدمين في البريد الإلكتروني. عندما يريد المستخدم لإضافة حصة لمحفظة، تحتاج إلى التحقق من وجود أخطاء قليلة. كنت ترغب في التأكد من أن المستخدم يمكن أن تحمل في الواقع الأوراق المالية، لذلك فأنت تريد أن تحقق النقدية. من قبل، كنا نجوم لاسترداد صف بأكمله من جدول SQL. ولكن هنا، يمكننا في الواقع أن تحديد فقط أريد فقط 1 قيمة - أريد فقط نقدا. حتى هنا، فإنه يعود النقدية للمستخدم مع رقم 1. اذا كان المستخدم قد اشترى بالفعل مخزون معينة ولكن يشتري ثم أكثر من ذلك المخزون، ثم في محفظتك - كنت لا تريد سطر منفصل، آخر الصف الذي يحتوي على تلك المعاملة الجديدة. كنت فعلا تريد لتحديث المبلغ. كل ما تغير حقا هو مقدار الأسهم التي يملكها المستخدم أن. إذا كنت تستخدم في إدراج الاستعلام - حتى انها مجرد إدراج في محفظتك كل هذه القيم - المستخدم رقم وكذلك رمزا للالأسهم التي يشترون وأسهم، ثم سوف تحتاج أيضا إلى تحديد، وأيضا، إذا قمت بتشغيل إلى مفتاح مكرر - في هذه الحالة، مفتاح مكرر ليست فقط للمستخدم معرف ولكن أيضا رمز السهم - لأنك يمكن أن يكون لها فقط - لدينا فرضية أنه يمكن أن يكون فقط 1 الصف  الذي يتوافق إلى 1 رمز معين. بذلك، في مفتاح مكرر - إذا قمت بتشغيل إلى التصادم هناك - كنت مجرد الذهاب لتحديث سهم إلى قيمته الجديدة. سهم يساوي كل ما كان لدينا قبل بالإضافة إلى عدد الأسهم أن المستخدم هو شراء. الآن بعد أن قمنا تحديث الجدول محفظة، سنقوم تريد تحديث النقدية للمستخدم. هذا في الجدول المستخدمين، لذلك نحن سنتعرض لطرح كمية معينة من النقد. يفترض، فإنه سيكون النقدية يساوي ناقص النقدية - ومن ثم فترة معينة. لتحديث النقدية، وكنت - إذا أردت أن يأخذ المال من البريد في، ثم أود أن تشغيل هذا الاستعلام - 'للمستخدمين تحديث "ثم قم بتعيين العمود النقدية إلى نقد - وأود أن إزالة دولار 9999 فقط إذا كان اسم المستخدم يساوي في إلكتروني. ولكن، في هذه الحالة، ونحن لا نريد أن طرح 9999 على وجه التحديد. نحن نريد لتحديد، حسنا، نحن نريد أن طرح سعر الحالي للسهم مضروبا في عدد الأسهم التي يشترون. لقد سمح لنا الآن أن نرى منهم كل من الأسهم التي لديهم، وكذلك شراء ما أكثر الأسهم. لدينا أيضا يسمح لهم سابقا للبحث عن السعر الحالي للسهم. هنا نريد أن تسمح لهم بيعها. أولا نريد أن عرض في الأساس - نريد أن تسمح لهم بالإطلاع على كل من الأسهم التي لديهم، حتى هنا نحن نريد لعرض كافة الصفوف من المحفظة. إذا اختاروا لبيع الأسهم معينة، ثم ونحن في طريقنا لنفترض أنها ترغب في بيع كل ذلك. فهي ليست مجرد الذهاب لبيع 50٪ من أسهمها، انهم ذاهبون لبيع 100٪ من ذلك. يمكننا فقط حذف صف بأكمله من المحفظة. يمكننا حذف أسهم مستخدم معين لرمز معين. هناك بناء الجملة من أجل ذلك. ثم نريد لتحديث النقدية. ونحن في طريقنا إلى أن إضافة النقدية في مساوية لكمية الأسهم التي تم بيعها مضروبا في سعر الحالي للسهم - لا السعر الذي اشتروا منه، بل السعر الذي هم - السعر الحالي عندما يتم بيعه. مرجع السعر الحالي للمخزون، سوف تحتاج إلى استخدام البحث، والتي سوف تعطيك سعر السهم في الوقت الحالي. الآن نحن مع اليسار التاريخ، التي تريد السماح للمستخدم لتتبع كل معاملاتهم - يريد أن يرى كلما باعوا شيء، كلما اشترى الأسهم. نحن نريد لتحديد الوقت الذي فعلوه ذلك بالإضافة الى عدد اشتروها وما كان من الأسهم. لدينا أي الحالية وبناء القائمة التي تحدد ذلك؟ حسنا، لدينا محفظة الأسهم التي تعرض الرقم الذي يكون لدى مستخدم للحصول على حصة معينة. ولكننا هيكلة محفظة في الطريقة التي فإنه يقوم بتحديث عندما نشتري متعددة، في حين ينبغي التاريخ - إذا كنت تشتري أبل، 10 أسهم، ومن ثم في وقت لاحق بيع 5، ثم كنت تريد أن ترى تلك الإجراءات على حدة ومنفصلة، ​​صفوف منفصلة. في حين أن العمل لتصور أنه في الجدول محفظتنا سيكون مجرد تحديث لهذا الصف وجه الخصوص،  لذلك نحن نريد على الارجح الى جدول آخر. في قاعدة بياناتنا، لدينا جدول المستخدمين، لدينا جدول أعمالنا محفظة، والآن سنقوم ربما تريد جدول التاريخ. يمكن هذا الجدول التاريخ تتبع التاريخ الحالي، فضلا عن رمز السهم وجه الخصوص، وكذلك عدد الأسهم، ثم ما هو العمل الذي هو - سواء كنت شراء تلك الأسهم أو ما إذا كنت بيعها. للتعامل مع التاريخ، وهناك زوجين من الطرق التي يمكنك القيام بذلك. PHP لديه طريقة لمتابعة جديد الآن، والتي يمكنك البحث عن نفسك. في SQL يمكنك أيضا استخدام سواء الآن أو الطابع الزمني الحالي. هذا متروك لكم. فقط للتأكد من أن كل مرة يقوم فيها المستخدم تشتري أو تبيع، فسوف يكون تحديث أموالهم في الجدول المستخدمين، فسوف يكون تحديث الصفوف في الجدول المحافظ، ثم عليك أيضا أن تحديث التاريخ، لذلك هناك سوف يكون 3 استعلامات SQL منفصلة أن عليك أن تكون الدعوة هناك. لدينا مجموعة من الوظائف الآن. بضع رسائل التذكير أنه في ملف الفهرس الخاص بك، فإنك سوف تريد الارتباط به على الأقل لديك - ولكن انت تريد ان تسمح لمستخدم لربط صفحة buy.php. وهذا سوف يسمح للمستخدم - buy.php هو وحدة تحكم، بحيث سيكون لاما إرسال لك - وهذا سوف نرسل لك إلى النموذج الذي يسمح لك أن ننظر الامور. لدينا التاريخ. لدينا تسجيل الخروج، والحصول على الاقتباس وثم البيع. تلك هي على الأقل ما كنت تريد أن تظهر. من حيث محفظة، يظهر في الواقع في محفظة صفحة الفهرس. إذا ذهبنا إلى مؤشر، وهنا نرى أنه يجعل portfolio.php ويمر في مجموعة النقابي - في الأساس عنوان يساوي المحفظة. لذلك، وهذا هو وحدة تحكم. إذا نذهب إلى قالب من portfolio.php، ثم كل ما لديه هو - في الأساس يعرض الصورة التي تقول، يا، هذا الموقع قيد الإنشاء. في وقت لاحق، وبمجرد تمرير في - اختر مربع الطباعة أن يمر في المعلومات أساسا أكثر تحديدا. بدلا من العنوان فقط، عليك أن تمر في الأرجح أكثر الأشياء. وبمجرد الانتهاء من تلك القيم، ثم يمكن التعامل مع portfolio.php تلك القيم وطباعتها في أي نوع من النظام. بمجرد تنفيذ جميع تلك، تحتاج أيضا لتنفيذ ميزة 1 أكثر. وهذا يمكن أن يكون إما السماح للمستخدم تغيير كلمة المرور الخاصة بهم، لإعادة تعيين كلمة المرور الخاصة بهم إذا كانوا قد نسيت ذلك - لإعادة تعيين كلمة المرور لذلك، ثم سوف تحتاج أيضا ربما لتحرير التسجيل بحيث يسمح لهم لتحديد البريد الإلكتروني، حتى إذا كانت كلمة المرور الخاصة بهم ننسى، ثم يمكنهم الحصول على ذلك. فإنها يمكن أن تدخل اسم المستخدم الخاص بهم على الارجح في، ومن ثم سيتم إرسال رسالة إلكترونية لهم مع وصلة لتكون قادرة على إعادة تعيين كلمة المرور الخاصة بهم. هل يمكن أن يكون شيء الذي يتيح للمستخدمين الحصول على إيصالات في كل مرة تقوم بشراء أو بيع شيء ما، ثم أخيرا، والسماح لهم لإضافة النقدية لموقعه على الانترنت. فقط للعودة الى مفهوم وحدات تحكم والقوالب قليلا. سيكون لديك ما يشبه - لذلك سيكون لديك وحدة تحكم هنا. في الوقت الراهن، ونحن نبحث في المثال login.php. عندما يكون لدينا وحدة تحكم، وأساسا انها سوف تأخذ 2 الحالات. عندما يكون لدينا وحدات تحكم، ونحن في هذه القطعة أننا أيضا نوع من التعامل مع عندما يكون لدينا أشكال أيضا. وسوف يكون وحدة تحكم منفصلة أساسا الإجراءات - واحدة إذا تم بالفعل شكل المقدمة، ثم اثنين وإذا كان المستخدم قادم إلى تلك الصفحة لأول مرة وما زال يحتاج إلى إدخال هذا النموذج. انا ذاهب الى القفز الى أن الحالة الأولى قبل الذهاب إلى الحالة الأولى وجود شكل فيها هنا نقول، إذا كان قد تم إرسال النموذج مع آخر الطريقة - لا تقلق بشأن ذلك قليلا. لا تقلق بشأن ذلك كثيرا ولكن نفهم أن هذه الوظيفة أساسا يتعامل مع ما إذا كان قد تم تقديم نموذج أو لا. هذا الشرط صحيحا إذا كان المستخدم قد قدم النموذج. إن لم يكن، ثم نحن ذاهبون الى تريد الاتصال login_form.php تقديم، ومن ثم تمرير في العنوان. هذا العنوان هو مجرد الذهاب لتظهر أساسا في الرأس. هذا ما يفعله هو في الأساس يقول: حسنا - حسنا، إذا كان المستخدم يذهب إلى login.php ولم تقم بتسجيل الدخول فعليا في، ثم أريد أن ترسلها إلى الصفحة التي تحتوي هذا النموذج مما يسمح لهم لإدخال اسم المستخدم وكلمة المرور. ثم أذهب إلى login_form، ومن ثم لديها النموذج الفعلي. ثم، مرة واحدة يقوم المستخدم بإرسال هذا النموذج، انهم ذاهبون لعرضها علي login.php مع آخر الأسلوب. ثم أنا ذاهب فعلا لدخول هذا القسم من حلقة IF-بلدي آخر. ثم انه في هنا أن نتعامل مع القيم المدخلة في النموذج. انها هنا أن نتعامل مع تلك. ثم مرة واحدة كنت تتعامل مع تلك القيم - إذا كنت تتعامل مع - يقول نتعامل مع الصفحة quote.php حيث يمكن إدخال شخص الأسهم التي انهم يريدون للبحث عن، ونرى بعد ذلك أن العرض - وهذا النوع من مماثلة هنا. هنا لدينا نموذج تسجيل الدخول - you'd من المحتمل أن يكون شكل الكود - ولكن بعد ذلك مرة واحدة قدمت للمستخدم في الواقع هذه المعلومات، ثم عليك نريد وحدة تحكم لتنتقل إلى نموذج آخر وتبين لهم أن هذه المعلومات الفعلية. الحق في ذلك ثم في جميع أنحاء هنا، فإنك على الأرجح سوف - قرب نهاية حالتك هنا - إذا كان الأسلوب يساوي آخر - ثم عليك ربما تريد أن تجعل صفحة أخرى - عرض الاقتباس - الذي يرسل لك تلك الصفحة - show_quote.php-- وبعد ذلك سوف مرجع في هذا الملف تلك القيم. هل هذا معقول؟ لدينا وحدة تحكم الذي يتعامل أساسا مع الحالات 2 - سواء كنت قد دخلت في شكل أم لا. إذا لم تكن قد دخلت نموذج، بعد ذلك سوف توجيهك إلى هذا النموذج، والتي سوف ثم وضع يمكنك العودة إلى تلك الصفحة. ثم، مرة واحدة لديك معلومات في وحدة تحكم، وهذه الهيئة التي تتعامل مع المعلومات عند الضرورة - إما يبحث عن قيم للسهم، ثم بمجرد النظر عنه تلك القيم ولديه منها في مجموعة ومنسقة بشكل جيد، يمكن أن تمر بعد ذلك أن مجموعة في قالب الصفحة  التي تتعامل مع إخراج تلك المعلومات. مرة أخرى، منذ ذلك شبكة الإنترنت، فإنه سيكون من المرح. نحن خارج C بحيث كنت لا تقتصر علينا وASCII إلى أن الناتج الطرفية، بحيث يكون متعة مع هذا. يمكنك جعلها مرئية كما تريد. يمكنك السماح للمستخدمين لملايين دولار مساهمة في كل مرة، أو الحد منها وأن تعني في حقيقة الأمر والسماح لهم فقط لأدخل 1 قرش في وقت أو شيء من هذا القبيل. سيكون بالتأكيد المؤكد أن وقتا ممتعا مع هذا. PHP متاحة قليلا أبسط من حيث أنه أسهل قليلا لرسم شبة الكود الخاص بك في التنفيذ الفعلي. لذلك، يكون بالتأكيد متعة مع هذا لأنه هو في الواقع قطعة لدينا مشاركة في CS50. مع ذلك، كان هذه الإرشادات التفصيلية 7. مرة واحدة الانتهاء مشاهدة معاينة وانتهت pset الخاص بك، ثم كانت هذه أيضا psets، والآن نحن على إلى المنتج النهائي - بعد أن تحصل من خلال مسابقة 1. ثم نأمل يمكنك استخدام الأدوات التي كنت قد تعلمت من psets - ليس فقط بناء الجملة، ولكن أكثر من فكرة مجردة عن كيفية اتخاذ بعض - مثل، أريد أن أفعل هذا في الواقع ومن ثم تنفيذ ذلك. تعلم كيفية النضال من خلال بناء الجملة وتوزيع التعليمات البرمجية. قراءة رمز الآخرين، ومن ثم تفسير أن استخدام الوظائف الموجودة من قبل. لذلك، حظا سعيدا مع pset الماضي. لقد كان من دواعي سروري لقيادة كثروو. آمل انهم تم التصويت لك. وكانت هذه المواضيع الإرشادية، وشكرا جزيلا. [CS50.TV]