|
الشفرة البرمجية، لكيفية السيطرة على العالم، عن طريق الإنترنت |
قد يحدث لأحدكم أن يبرمج موقعًا أو تطبيقًا ما، بالـASP.NET، وقد تصادفه بعض المشكلات والأخطاء غير المتوقعة وغير المذكورة في كتب الشروحات.
وأنا أعمل في تطبيق ويب، مع إحدى الصديقات، صادفني خطأ، وهوَ كالتالي:
لدي صفحتان في السيرفر الخاص بي. أكتب الرقم السري الخاص بي في الصفحة الأولى، ثم أضغط على زر الارسال، للمرور للصفحة الثانية، وفي أثناء المرور، يتم نقل الرقم السري الذي أدخلته من الصفحة الأولى نحو الصفحة الثانية، باستعمال الأكواد التالية:
الصفحة 1 - كود الإرسال
Response.Redirect("Page1.aspx?code=" + code);
الصفحة 2 - كود الإستقبال - Page_Load
if (Request.QueryString["code"] != null)
{
int code = int.Parse(Request.QueryString["code"]);
req = "select * from Table1 where code='" + code + "'";
executeMyQuery(req);
}
أرسلُ الرقم السري الخاص بي من الصفحة الأولى، إلى الصفحة الثانية، ليتم تحميل معلوماتي من قاعدة البيانات، كي يتم إظهارها في الصفحة كما بُرمِجَت، في مجموعة من الأدوات والمساحات، كالـtextBox، الـcomboBox، وغيرها. لكن حين تعديل قيمة ما في الـtextBox، ليتم تعديلها وتحديثها بالتوازي في قاعدة البيانات، فإن السيرفر يستجيب لطلب التغيير، لكنه يحتفظ بالقيمة الأصلية، تلك التي حُمِّلَت في الـPage_Load، عوض أخد التغيير الطارئ بعين الإعتبار.
لحل المشكل، عدّلت من كود الإستقبال، المتواجد في الـPage_Load، فأصبح كالتالي:
if (Request.QueryString["code"] != null)
{
int code = int.Parse(Request.QueryString["code"]);
if(!IsPostBack)
{ req = "select * from Table1 where code='" + code + "'";
executeMyQuery(req);
Validate();
}
}
قد تبدو هذه التدوينة غريبة وغير مفهومة لأكثركم، لكني أنشرها هنا كتذكير لي أولاً، لعلاج نفس هذا المشكل إن صادفني أو صادفكم في القادم من المشاريع البرمجية.