الجراحة تضاف php htm. PHP: إنشاء "قاعدة بيانات مصغرة" على ملف نصي. PHP إلى HTML - امتدادات الملفات

💖 أحببته؟شارك الرابط مع أصدقائك

كما هو الحال مع أي حرفة ، هناك الكثير من أنواع الحيل في PHP التي تساعد بشكل كبير في جعل الحياة أسهل لمبرمج بسيط. فيما يلي بعض من تلك الحيل.

الحيلة 1: تمرير المصفوفات من نموذج.

من نموذج HTML ، لا يمكنك تمرير القيم (المتغيرات) فحسب ، بل المصفوفات أيضًا. لنفترض أن لدينا نموذجًا بالحقل التالي:

عند إرسال البيانات من النموذج ، سيتلقى البرنامج النصي PHP القيمة من حقل الشحن كمتغير شحن $. ولكن إذا حددت "البضائع" بدلاً من "البضائع" ، فسيتم إرسال الحقل إلى البرنامج النصي ليس متغيرًا ، ولكن سيتم إرسال مصفوفة البضائع $ ، العنصر الوحيد الذي سيكون له وحدة كمفتاح ومحتويات الحقل كقيمة. عند إنشاء نموذج تلقائيًا (على سبيل المثال ، عند إنشاء قائمة أسعار بالعديد من الأسماء) ، فإن هذه الحيلة لا غنى عنها حقًا ، كما أن تنظيم مصفوفة باستخدام برنامج نصي أسهل بكثير من تحليل مجموعة من المتغيرات بأسماء مثل tovar1 و tovar2 وما إلى ذلك. .

الحيلة 2: شرط الاختزال في PHP.

تصميم...

صدى "param =" ؛ ~ ^ ~ if ($ a == 1) ~ ^ ~ (echo "1"؛) ~ ^ ~ else (echo "2" ؛)

من الأسهل (والأقصر) بكثير النص بشكل مختصر:

صدى "param =". ($ a == 1؟ "1": "2")؛

الحيلة 3: تحليل أزرار إرسال HTML.

زر "إرسال" HTML ، كما تعلم ، يرسل بيانات نموذج HTML إلى الخادم (في حالتنا ، للمعالجة بواسطة برنامج نصي PHP). ولكن ماذا لو احتاج النموذج إلى عدة أزرار توفر خيارات مختلفة لمعالجة البيانات؟ في مواجهة هذه المهمة ، لسبب ما ، يتذكر القليل من الأشخاص أن الأزرار من نوع "إرسال" لها خاصية "القيمة" الخاصة بهم. لا ، بالطبع ، يعلم الجميع أن هذه السمة تعرض النقش على الزر ، لكن كقاعدة عامة ، لا يعلقون بها أي معنى آخر. وفي الوقت نفسه ، إذا كانت الأزرار من النوع "إرسال" تحتوي على سمة "الاسم" ، فسيتم إرسال نص الملصقات الموجودة على الأزرار من النموذج إلى الخادم مع البيانات الأخرى ويمكن تحليلها بواسطة البرنامج النصي ، مما يجعل ذلك ممكنًا لأداء الكثير من معالجة البيانات المختلفة عن طريق الضغط على أزرار مختلفة من نوع "إرسال" بقدر ما يرغب قلبك. ميزة الحيلة هي أنه لا توجد حقول نوع "مخفية" مطلوبة في هذه الحالة.

الحيلة 4: معلمات وظيفة PHP غير موجودة.

من المعروف أنه عند استدعاء الدوال في PHP ، يجب أن تحدد بالضبط نفس عدد المتغيرات التي يجب أن تقبلها الدالة:

$ ساعة = 16 ؛ ~ ^ ~ $ دقيقة = 35 ؛ ~ ^ ~ صدى today_is ($ ساعة ، $ دقيقة) ؛ ~ ^ ~ ... ~ ^ ~ وظيفة today_is ($ ساعة ، $ دقيقة) ؛ ~ ^ ~ (~ ^ ~ ... ~ ^ ~)

الأقل شهرة هو أنه يمكنك تحديد القيم الافتراضية للمتغيرات في رأس الوظيفة (للاستخدام في حالة عدم وجود قيم متغيرة أو المتغيرات نفسها عند الوصول إليها من الخارج) ، مما سيسمح لك بالوصول إلى الوظيفة بأي رقم المتغيرات أو لا تحددها على الإطلاق:

دالة today_is ($ ساعة = 16 ، $ دقيقة = 0) ~ ^ ~ (~ ^ ~ ... ~ ^ ~)

الحيلة الخامسة: منع التخزين المؤقت لنصوص JS وأنماط CSS.

كم عدد الأشخاص الذين يقسمون كل يوم بعد تغيير محتوى نص JS أو أنماط CSS واكتشاف أن المتصفح مخزّن مؤقتًا نسخة قديمةولا تريد إظهار نتائج العمل الجديد بأي شكل من الأشكال. خاصة أولئك الذين لديهم إمكانية الوصول إلى الإنترنت من خلال خادم وكيل في الشركة. ما لم يتم فعله في مثل هذه الحالات: يتم وضع رؤوس منتهية الصلاحية ، وعلامات وصفية لمنع التخزين المؤقت ، وما إلى ذلك في قسم التعريف. وفي الوقت نفسه ، يكفي أحيانًا وضع معلمة زائفة في شكل رقم عشوائي تم إنشاؤه بواسطة قطعة قصيرة من كود PHP بعد ذكر الملف المقابل:

لذلك عند فتح الصفحة ، يتم دائمًا تحميل أحدث إصدار فقط من الملف.

الحيلة 6: الاقتباسات والفواصل العليا وتفسير النص.

غالبًا ما يكون من المعتاد الاقتراب من اختيار حاوية لقيم السلسلة (النصية) بطريقة عرضية إلى حد ما. لكن عبثًا: كثير من الناس ينسون أن مترجم PHP يحلل دائمًا محتويات اقتباسات نصية مزدوجة (") لوجود المتغيرات ، في حين أنه غير مكترث تمامًا بمحتويات حاويات علامات الاقتباس المفردة (الفواصل العليا) ، ويعرضها بالضبط حرفًا لـ شخصية بدون تفسير.

لذلك ، من الأنسب إرفاق النصوص بمتغيرات في علامات اقتباس مزدوجة غير منقسمة:

$ text = "مرحبًا $ (عميل)!" ؛

من ناحية أخرى ، تعمل التعليمات البرمجية غير القابلة للقراءة ذات الفواصل العليا بشكل أسرع ، خاصة في الحلقات:

$ text = مرحبًا. $ client.!؛

الخدعة 7: الإخراج الفوري.

آخر طريقة عظيمةتسريع تنفيذ البرنامج النصي - بدلاً من عرض كل شيء على الفور وفي كل مرة مع الأمر صدى صوت، قم بتجميع محتوى الاختبار في متغير ، ثم قم بإخراج هذا المتغير مرة واحدة:

$ mytext = "variant 1"؛ ~ ^ ~ $ mytext. = "encode"؛ ~ ^ ~ $ mytext. = "access"؛ ~ ^ ~ echo $ mytext؛

يرجى ملاحظة أن عملية التسلسل مكتوبة بصيغة مختصرة: $ mytext. =، لكن لا $ mytext = $ mytext.. توفير الوقت - تقليل وقت الإخراج حتى عشرة أضعاف. بديع؟

الحيلة 8: تمرير مصفوفة من حقول النوع خانة الاختيار.

تتيح لنا الخدعة رقم 1 تمرير المصفوفات من نموذج HTML. وفي هذه الحيلة ، دعنا نحلل موقفًا آخر: لنفترض أننا بحاجة إلى تمرير مصفوفة من نموذج لا يوجد فيه سوى حقول من النوع خانة الاختيار(هذا مربع صغير يظهر فيه علامة عند الضغط عليه). على سبيل المثال ، لدينا قائمة بالمدن التي يمكن للمستخدم من خلالها تحديد المدن التي يحتاجها ، ولكن عند إرسال البيانات ، لا نريد فقط إرسال معرفات المدن التي حددها المستخدم ، ولكن أيضًا إرسال أسماء هذه الأخيرة. والحقول المخفية مثل مختفيبجوار مربعات الاختيار ، لا نريد فعل ذلك حقًا (حتى لا نجعل رمز الصفحة أثقل وكتلة البيانات المرسلة إلى الخادم). كيف تكون؟

الخروج بسيط جدا. كما تعلم ، بشكل افتراضي حقل من النوع خانة الاختيار(مثل هذا ، يمكنك حتى النقر فوقه: ) عادةً ما تحتوي على القيمة "on" (يتم تحديد الحقل ، أي أنه يحتوي على علامة اختيار) أو "off" (لم يتم تحديد الحقل). يمكنك أيضًا تحديد قيمة بديلة للحقل ، على سبيل المثال ، 1. ومع ذلك ، لا يعتقد الجميع أنه يمكن تحديد أي قيمة لهذا الحقل على الإطلاق ، حتى نص رواية "الحرب والسلام". وسيتم تمرير هذه القيمة بعناية إلى البرامج النصية للخادم للتحليل والمعالجة:

يقوم المستخدم بتحديد العناصر المطلوبة ، والضغط على الزر "إرسال" ، ويتم إرسال مجموعة من مربعات الاختيار المحددة إلى الخادم ، حيث يتم الخيار اسمخانة الاختيار هي اسم المتغير والخيار قيمة- معناها. تنطبق على بي أتش بيهذا يعادل الخط:

$ id548 = تويوتا لاندكروزر ؛

لنعد الآن إلى الحيلة رقم 1. لنفترض أننا لا نريد تحليل مجموعة من المتغيرات ، لكننا نريد تحليل مصفوفة واحدة بدلاً من ذلك. إنه سهل أيضًا:

ونتيجة لظهور قوسين مربعين حول الرقم في وسيطة الخيار اسمخانة الاختيار المرسلة إلى الخادم لم تعد متغيرة id548 دولارًا، وعنصر المصفوفة معرف $مع مفتاح 548.

حصيلة؟ جيد جدًا: من مربع اختيار واحد ، مررنا ما يصل إلى ثلاث معلمات إلى الخادم - اسم المصفوفة ومفتاح العنصر وقيمته ، بدون أي حقول مخفية إضافية ورمز HTML إضافي.


صدى صوت " ";
صدى صوت " ";
صدى صوت " ";
صدى "مرحبًا ، اليوم هو" ؛
تاريخ الصدى ("l، F jS، Y") ؛ // كود php آخر هنا صدى "";
صدى صوت "";
?>

ومع ذلك ، سيؤثر هذا على خيار تلوين كود HTML في معظم برامج تحرير HTML / PHP ، مما يتيح سهولة فهم دور علامات HTML. يجب عليك تخطي كل اقتباس مزدوج في كود HTML بشرطة مائلة للخلف.

PHP في HTML - امتدادات الملفات

عندما يحتوي ملف معين على كود PHP ، يجب أن يكون له امتداد PHP. في معظم الحالات ، يكون هذا هو .php ، ولكن يمكنك أيضًا تكوين ملف .htaccess لقراءة كود PHP في ملف HTML دون إعادة تسميته أو تغيير امتداده. أدناه يمكنك عرض "المعالجات" ، والتي يجب إضافتها من أجل تحقيق ذلك

بالنسبة لخادم الويب الذي تم تكوينه بشكل طبيعي:

AddHandler cgi-script .html .htm

خادم ويب يقوم بتشغيل FastCGI:

AddHandler fcgid-script .html .htm ملحوظة:تم اختبار هذا ويعمل مع خوادم استضافة الويب NTC. إذا كنت تستخدم موفر استضافة مختلفًا ، فاستشره للحصول على المساعدة. بالإضافة إلى ذلك ، إذا كنت تواجه مشكلات مستمرة هناك ، فيمكنك التفكير في التبديل إلى NTC Hosting من أجل الحصول على خوادم PHP المستقرة التي تحتاجها.

HTML في PHP

يمكنك أيضًا استخدام كود HTML في برنامج نصي PHP. يمكن أن يكون هذا مفيدًا جدًا إذا كنت قد أنشأت صفحتك بالكامل بلغة PHP ، لكنك تريد تضمين نموذج HTML مخصص ، على سبيل المثال. كل ما عليك فعله هو عكس ترتيب علامات فتح HTML و PHP ، وفتح الصفحة باستخدام PHP:

باستخدام HTML في PHP:


$ Fname = $ _POST ["Fname"] ؛
$ Lname = $ _POST ["Lname"] ؛
?>


معلومات شخصية



الاسم الأول:

اسم العائلة:


صدى "Hello،". $ Fname. "". $ Lname. ".
";
?>

في حين أن هذا يبدو معقدًا بعض الشيء ، إلا أنه يوفر لك الكثير من التعليمات البرمجية. هنا ، نستخدم $ PHP_SELF super global ، الذي يسمح لنا باستخدام قيمة الحقول المحددة تحته ، في نفس الملف. عادة ، يتم إنشاء ملفين لمثل هذه النماذج - الأول هو نموذج HTML نفسه والثاني هو ملف PHP الخلفي ، والذي يقوم بكل العمل.

إذا كان لديك بالفعل تطبيق PHP معقد ، والذي يعتمد على عدد كبير من الملفات ، وتريد فقط أن تبقي كل شيء بسيطًا قدر الإمكان ، فقد يكون هذا مفيدًا للغاية.

PHP مع NTC Hosting

تقدم NTC Hosting لعملائها حل استضافة الويب النهائي. توفر جميع خطط استضافة الويب الخاصة بنا دعمًا لـ HTML وتمنحك إمكانية الاختيار من بينها

(PHP 4 ، PHP 5 ، PHP 7)

htmlspecialchars- يحول الأحرف الخاصة إلى كيانات HTML

وصف

خيط أتش تي أم أل خاصة (سلسلة $ [, int $ flags = ENT_COMPAT | ENT_HTML401 [, string $ encoding = ini_get ("default_charset") [, منطقي $ double_encode = صحيح ]]])

في HTML ، بعض الأحرف لها معاني خاصة ويجب تمثيلها ككيانات HTML من أجل الاحتفاظ بمعناها. ترجع هذه الدالة السلسلة التي أجريت عليها هذه التحولات. إذا كنت بحاجة إلى تحويل جميع الكيانات الممكنة ، استخدم htmlentities ().

إذا تم تمرير سلسلة الإدخال إلى هذه الوظيفة والوثيقة الناتجة تستخدم نفس ترميز الأحرف ، فإن هذه الوظيفة كافية لإعداد البيانات للإدراج في معظم أجزاء مستند HTML. ومع ذلك ، إذا كانت البيانات تحتوي على أحرف غير محددة في ترميز الأحرف للمستند الناتج وتتوقع تخزين هذه الأحرف (ككيانات رقمية أو مسماة) ، فإن هذا و htmlentities ()الدوال (التي تقوم فقط بتحويل السلاسل الفرعية مع الكيانات المقابلة). تحتاج إلى استخدام الوظيفة mb_encode_numericity ().

يتم إجراء التحولات التالية:

  • يتم تحويل "&" (علامة العطف) إلى "&"
  • "" "(علامة اقتباس مزدوجة) يتم تحويلها إلى" "" في الوضع ENT_NOQUOTESلم يتم تعيين.
  • "" "(علامة اقتباس مفردة) يتم تحويلها إلى" "(أو") فقط في الوضع ENT_QUOTES.
  • "<" (знак "меньше чем") преобразуется в "<"
  • ">" (علامة أكبر من) يتم تحويلها إلى ">"

قائمة المعلمات

السلسلة المطلوب تحويلها ( خيط).

قناع بت للعلامات التالية يحدد كيفية التعامل مع علامات الاقتباس والتشفير غير الصحيح ونوع المستند المراد استخدامه. الافتراضي هو ENT_COMPAT | ENT_HTML401.

القيم المتاحة لمعلمة الأعلام
اسم الثابت وصف
ENT_COMPAT تحويل علامات الاقتباس المزدوجة ، لم يتم تغيير علامات الاقتباس المفردة.
ENT_QUOTES تحويل علامات الاقتباس المزدوجة والمفردة.
ENT_NOQUOTES يترك كلا من علامات الاقتباس المزدوجة والمفردة دون تغيير.
ENT_IGNORE يتجاهل تسلسلات التعليمات البرمجية غير الصالحة بدون أي رسائل إعلام بدلاً من إرجاع سلسلة فارغة. لا يُنصح باستخدام هذه العلامة لأنها قد تؤدي إلى »تداعيات أمنية سلبية.
ENT_SUBSTITUTE يستبدل الترميزات غير الصالحة بحرف استبدال Unicode U + FFFD عند استخدام UTF-8 و FFFD ؛ عند استخدام ترميز مختلف ، بدلاً من إرجاع سلسلة فارغة.
ENT_ تم الرفض يستبدل رموز الأحرف غير الصالحة لنوع المستند المحدد بحرف استبدال unicode U + FFFD (UTF-8) أو FFFD ؛ (عند استخدام ترميز مختلف) بدلاً من تركه كما هو. يمكن أن يكون هذا مفيدًا ، على سبيل المثال ، لضمان تنسيق مستندات XML ذات المحتوى الخارجي المضمن بشكل جيد.
ENT_HTML401 معالجة الكود وفقًا لـ HTML 4.01.
ENT_XML1 معالجة الكود وفقًا لـ XML 1.
ENT_XHTML معالجة الكود وفقًا لـ XHTML.
ENT_HTML5 معالجة الكود وفقًا لـ HTML 5.
التشفير

وسيطة اختيارية تحدد الترميز المستخدم عند تحويل الأحرف.

إذا لم يتم تحديدها ، فإن القيمة الافتراضية للتشفير تعتمد على إصدار PHP المستخدم. في الإصدار 5.6 من PHP والإصدارات الأحدث ، يتم استخدام خيار التكوين default_charset للقيمة الافتراضية. استخدام PHP 5.4 و 5.5 UTF-8تقصير. الإصدارات السابقة من استخدام PHP ISO-8859-1.

على الرغم من أن هذه الوسيطة اختيارية من الناحية الفنية ، إلا أنه يوصى بشدة بتوفير القيمة الصحيحة للرمز الخاص بك إذا كنت تستخدم PHP 5.5 أو أعلى ، أو إذا كان خيار التكوين default_charset الخاص بك قد لا يتم تعيينه بشكل صحيح للإدخال.

لأغراض وظيفة الترميز هذه ISO-8859-1, ISO-8859-15, UTF-8, cp866, cp1251, cp1252و KOI8-Rمتكافئة عمليًا ، بافتراض أن سلسلة السلسلة نفسها تحتوي على الأحرف الصحيحة في الترميز المحدد ، ثم يتم تعديل الأحرف htmlspecialchars ()، ستبقى في نفس الأماكن في كل هذه الترميزات.

الترميزات التالية مدعومة:

الترميزات المدعومة
التشفير اسماء مستعارة وصف
ISO-8859-1 ISO8859-1 لاتينية أوروبا الغربية -1.
ISO-8859-5 ISO8859-5 نادرًا ما يستخدم الترميز السيريلي (لاتيني / سيريلي).
ISO-8859-15 ISO8859-15 اللاتينية أوروبا الغربية - 9. يضيف حروف اليورو والفرنسية والفنلندية إلى مجموعة الأحرف اللاتينية -1 (ISO-8859-1).
UTF-8 8 بت Unicode متوافق مع ASCII.
cp866 ibm866، 866 يستخدم الترميز السيريلي في DOS.
cp1251 نظام التشغيل Windows-1251 و win-1251 و 1251 يستخدم الترميز السيريلي في Windows.
cp1252 نظام التشغيل Windows-1252 ، 1252 ترميز أوروبا الغربية المستخدم بواسطة Windows.
KOI8-R koi8-ru، koi8r ترميز روسي.
5 كبيرة 950 الصينية التقليدية ، وتستخدم بشكل رئيسي في تايوان.
GB2312 936 الصينية المبسطة ، الترميز الوطني القياسي.
BIG5-HKSCS تم استخدام Big5 الموسع في هونغ كونغ.
Shift_JIS SJIS ، SJIS-win ، cp932 ، 932 ترميز ياباني.
EUC-JP EUCJP ، فوز eucJP ترميز ياباني.
ماكرومان الترميز المستخدم في نظام التشغيل Mac OS.
"" تقوم السلسلة الفارغة بتنشيط الوضع لتحديد الترميز من ملف البرنامج النصي (Zend multibyte) و default_charset والإعدادات المحلية الحالية (انظر أدناه). nl_langinfo ()و setlocal ()) بهذا الترتيب. لا يوصى باستخدامه.

تعليق: الترميزات الأخرى غير مدعومة ، سيتم تطبيق التشفير الافتراضي بدلاً من ذلك وسيتم إنشاء تحذير.

مزدوج

إذا تم تعطيل خيار double_encode ، فلن تقوم PHP بتحويل كيانات html الحالية. بشكل افتراضي ، يتم تحويل كل شيء دون قيود.

يُسمح بتمرير البيانات عبر مصفوفة $ _SESSION مرة واحدة ، ويتم حذف البيانات المنقولة على الفور. يمكن أن يكون هذا مفيدًا ، على سبيل المثال ، عند "إعادة" البيانات التي تم إدخالها في وحدة نمطية أخرى إلى النموذج.

إنه لأمر جيد عندما يتم دمج جميع وظائف الأداة المساعدة في وحدة نمطية واحدة ، والتي يتم توصيلها بواسطة الوحدات النمطية الرئيسية عبر التوجيه required_once. سنقوم بتسمية وظيفة الوحدة النمطية لوظيفة المنفعة الخاصة بنا.

  • قراءة () - سيقرأ قاعدة البيانات الحالية ويعيد مجموعة من السجلات ؛
  • كتابة ($ a) - ستكتب مصفوفة من السجلات $ a إلى ملف ؛
  • get_index_by_name ($ a، $ name) - سيبحث بواسطة $ name عن الإدخال المقابل ويعيد رقمه (من الصفر) أو -1 إذا لم يتم العثور على الإدخال. هذا مفيد للتمييز بين إضافة إدخال جديد وتحرير إدخال موجود.

بالإضافة إلى ذلك ، سيتضمن ملف الوظائف ملف التكوين وبدء الجلسة - قد تكون هناك حاجة إلى هذه الميزات من قبل أي وحدة نمطية تتضمنها.

ملف function.php
$ item) (list ($ myname، $ mynumber) = explode (DIV، $ item)؛ if ($ name == mb_strtolower (trimall ($ myname)، "UTF-8")) إرجاع $ index؛) إرجاع -1 ؛ )؟>

يرجى ملاحظة أن وظيفة القراءة تقوم أيضًا بتصفية مصفوفة السجلات من السلاسل الفارغة (فقط في حالة عدم حدوثها بالفعل) ، وستحل أداة trimall أولاً محل أي سلسلة غير فارغة من المحددات بمسافة واحدة (preg_replace الثاني) ، و ثم قم بإزالة المحددات الإضافية المحتملة في بداية ونهاية السطر المتبقي (أول preg_replace).

هناك أيضًا فارق بسيط مع وظيفة القراءة من حيث توافق الكود. نظرًا لوجود وظيفة مجهولة في السطر الوحيد ، فمن المفترض استخدام PHP الإصدار 5.3 أو أعلى. إذا لزم الأمر ، استبدل الكود بآخر يتم فيه تسمية وظيفة التصفية أو عدم استخدامها على الإطلاق ، مثل هذا:

مقروء () ( [بريد إلكتروني محمي] _get_contents (FILENAME) ، $ a = explode ("\ n"، $ str)؛ العودة $ a؛ )

من المهم أيضًا تحويل سلسلة Unicode بشكل صحيح إلى أحرف صغيرة (انظر mb_strtolower في الكود). نحن لا نستخدم اللغة هنا.

يبدو أن الوقت قد حان لكتابة ملف index.php الرئيسي. ستؤدي المهام التالية:

  • عرض نموذج لإضافة إدخال جديد ، والذي تتم معالجته بواسطة الوحدة النمطية add.php ؛
  • بجانب نموذج الإضافة ، سنعرض أوامر إضافية - مسح النموذج عن طريق "الاستدعاء الذاتي" للبرنامج النصي بدون معلمات (زر لن تعمل هنا ، لأن لا يرسل البيانات إلى الخادم) ورابط إلى الوحدة النمطية لفرز السجلات المسماة sort.php ؛
  • تلقي من وحدات أخرى نتائج عملهم في شكل متغير رقمي الحالة $ وعرض الرسائل المقابلة ($ status_msg array). سيتم أخذ قيمة الحالة $ التي تساوي الصفر بشكل افتراضي ، وهي تتوافق مع ناتج تعليمات مختصرة حول البرنامج ؛
  • إذا لم تكن قاعدة البيانات فارغة ، فقم بإظهار مدخلاتها وتوفير انتقال للتحرير أو الحذف.

حتى لا تفرط في تحميل الجدول بأزرار وروابط إضافية ، سنضغط بالاسمذاهبًا لتحرير المنشور باستخدام وحدة edit.php والنقر حسب الحقل "الرقم"سوف يتوافق مع حذف الإدخال بواسطة وحدة del.php.

إليك ما يبدو عليه الأمر مع إضافة بعض الإدخالات:

ظهور البرنامج النصي "Mini-DB على ملف نصي"

ملف index.php
اسم: رقم: فرز واضح"؛ $ status_msg = array (" انقر على الاسم للتعديل أو الرقم لحذف الإدخال "،" الإدخال موجود بالفعل ، تم تصحيح القيمة فيه "،" تعذر العثور على الإدخال بالرقم المحدد "، "لم يتم تمرير أي بيانات لإضافتها") ؛ إذا (فارغ (الحالة $)) $ status = 0 ؛ صدى "

". status_msg [$ status]."

"؛ if (count ($ a)> 0) (echo" "."\ن". " "." \ n "؛ foreach ($ a as $ index => $ item) (echo" "." \ n "؛ list ($ name، $ number) = explode (DIV، $ item)؛ echo" "."\ن". " "."\ن". ""." \ n "؛) صدى"
اسمرقم
".htmlspecialchars (trimall ($ name))."".intval (trimall ($ number))."
"." \ n "؛) تشمل" foot.php "؛؟>

الآن دعونا نتعامل مع الوحدات المفقودة. يبدو أن add.php لديه مهمة بسيطة - الحصول على متغيرات $ name و $ number من index.php وكتابتها في ملف. ومع ذلك ، يجب أن تتحقق الوحدة النمطية من أن البيانات غير الفارغة قد تم تمريرها إليها ، وأن تكون أيضًا قادرة على تمييز الموقف عند إدخال اسم موجود بالفعل في قاعدة البيانات من إدخال سجل جديد (انظر ما إذا كان ($ id> -1) ( ...) آخر (...) في الكود). في الحالة الأخيرة ، يُضاف الإدخال دائمًا إلى النهاية ، لأنه سيكون هناك وحدة لفرز السلاسل أبجديًا.

من المهم أيضًا أن تكون السلسلة $ name ، "التي تم تمريرها" عبر معالج المعلمات ، خالية بالفعل من الأحرف "الحرجة" للترميز مثل "،"،< и >، وفي المصفوفة $ a التي تُقرأ من ملف البيانات ، تكون جميع الصفوف "كما هي" ، و<>لن يتم العثور على 123 إذا أصبح $ name<>123. لذلك ، وظيفة البحث عن الإدخال ، والتي نسميها get_index_by_name ، يتم تمرير سلسلة محولة "للخلف" إلى شكلها الأصلي باستخدام دالة htmlspecialchars_decode القياسية (متوفرة منذ PHP 5.1). في نفس النموذج ، يتم إرجاع السلسلة إلى index.php عبر مصفوفة $ _SESSION. سيوفر هذا بعض الراحة للعمل - بعد إدخال إدخال جديد ، ستبقى بياناته في النموذج وسيكون من الممكن إدخال إدخال آخر يختلف قليلاً في الاسم ("Ivanova" بعد "Ivanov").

حسنًا ، العائد نفسه من وحدة إلى وحدة نموذجية تمامًا - من خلال وظيفة الرأس القياسية. تذكر أنه لا يمكن استخدامه إلا إذا لم تعرض الوحدة أي شيء في المتصفح بعد.

ملف add.php
-1) (list ($ name، $ number0) = تنفجر (DIV، $ a [$ id])؛ $ a [$ id] = $ new_string ؛؛ $ status = 1؛) else ($ id = count ($ أ) +1 ؛ array_push ($ a ، $ new_string) ؛) اكتب ($ a) ؛ $ _SESSION ["id"] = intval ($ id) ؛ ) وإلا $ status = 3 ؛ $ _SESSION ["name"] = htmlspecialchars_decode ($ name)؛ $ _SESSION ["number"] = intval (رقم بالدولار) ؛ header ("Location: index.php". ($ status == 0؟ "": "؟ status =". $ status))؛ ؟>

الآن حول التحرير ، سيتم تنفيذه في Edit.php. نموذج التحرير هو نفسه تقريبًا نموذج الإضافة ، لقد كنا كسالى جدًا لعمل وظيفة منفصلة لعرض النموذج. والأهم من ذلك ، أن الوحدة نفسها ستكون هي معالج البيانات المقدمة من خلال نموذج التحرير ، مما يعني أنه يجب عليها التمييز بين الموقف الذي تم استدعاؤه للتو والحالة عندما نقر المستخدم على "حفظ". المهمة الأخيرة هي التحقق

If (! blank ($ _ POST ["submit"]) &&! blank ($ name) && isset ($ number) && isset ($ id)) (

يحدد ما إذا كان الزر مضغوطًا وتم نقل جميع البيانات. الفرع الثاني -

Else if (isset ($ a [$ id])) (

مخصص للموقف عندما يكون للمصفوفة $ a إدخال تم تمرير رقمه إلى البرنامج النصي ويحتاج إلى تحريره. يتم تخزين رقم السجل في حقل HTML مخفي .

تحرير. php
اسم: رقم: خلف"؛ تضمين" foot.php "؛ خروج (0) ؛) else $ status = 2 ؛ header (" Location: index.php ". ($ status == 0؟" ":"؟ status = ". $ status) ) ؛؟>

ستكون وحدة إزالة إدخال del.php بسيطة إلى حد ما ، فكل ما تحتاج إليه هو الحصول على إدخال صالح $ id (رقم عنصر في المصفوفة $ a) ، وإزالة الإدخال المقابل من المصفوفة ، وإعادة كتابة الملف ، والعودة إلى صفحة الوحدة الرئيسية.

ملف del.php

أخيرًا ، ستؤدي وحدة الفرز sort.php إلى ظهور مشكلة جديدة - كيفية فرز سلاسل Unicode أبجديًا دون التمييز بين الأحرف الكبيرة والصغيرة؟ الفرز "المباشر" باستخدام وظيفة الفرز القياسية غير مناسب - فهو يعتبر الأحرف الصغيرة والكبيرة أحرفًا مختلفة. لم نقم بتعيين الإعدادات المحلية ، خاصة أنه لا يوجد نموذج تسجيل واحد لتعيينه لجميع أنظمة التشغيل.

نحن نقيد أنفسنا بحقيقة أنه من بين مجموعة متنوعة من وظائف فرز المصفوفات نختار الاستخدام باستخدام وظيفة مقارنة عنصر يحددها المستخدم.

أعتقد أن المقارنة "المباشرة" المطبقة لسلاسل Unicode المكونة من حرف واحد ليست صحيحة تمامًا ، لكن strcmp تقارن السلاسل بايتًا بايت ولن تعمل بالنسبة لنا ، ولكنها في الواقع مقارنة صحيحة أيتعتبر السلاسل في Unicode مهمة صعبة للغاية ... نجح كل شيء بالنسبة لي للغة الروسية والإنجليزية في النظام ، على سبيل المثال ، بعد الفرز ، تم الحصول على ترتيب الكلمات الطبيعية ، مثل

أبا ، أفكا ، أوكليت ، باسيا ، بوبي ، بوبيك ، بوبيك ، بوبينا

ملف sort.php
$ cb) إرجاع 1 ؛ ) إذا ($ alen<$blen) return -1; else if ($alen>$ blen) إرجاع 1 ؛ آخر إرجاع 0 ؛ ) usort ($ a، "cmp") ؛ الكتابة ($ a) ؛ header ("الموقع: index.php") ؛ ؟>

يبقى بالنسبة لنا إنشاء ملف في المجلد المسمى .htaccess ، حيث سنكتب ترميز Unicode الافتراضي ونحدد التوجيهات الخاصة بتعيين علامات الاقتباس للموقع ، بحيث ...

في نفس المجلد ، قم بإنشاء ملف data.txt فارغ (0 بايت) (اختياري إذا تم تكوين جميع الحقوق).

ملف htaccess
AddDefaultCharset UTF-8 php_flag magic_quotes_gpc off php_flag magic_quotes_runtime off php_flag magic_quotes_sybase off

يمكنك أن ترى ما حدث وتخبرني بالمشاكل التي تم العثور عليها ، لقد كتبت النص بسرعة كبيرة ، في خطوتين ، وربما لم أفكر في شيء ما :)

أخبر الأصدقاء