كيفية عمل خوارزمية بحث متعددة الكلمات في PHP من قاعدة بيانات. كيفية عمل خوارزمية بحث متعددة الكلمات في PHP من قاعدة بيانات إنشاء قاعدة بيانات

16.07.2021

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

يوجد جدول "الأخبار" يحتوي على الحقول التالية: المعرف والعنوان والمحتوى:

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

قائمة كود HTML:

بحث قاعدة البيانات

في سمات النموذج، نحدد المسار إلى المعالج الذي يحتوي على الخوارزمية وطريقة الإرسال اللاحق.

نستخدم جلسة لنقل مجموعة من العناصر المحددة.

للقيام بذلك، نقوم بتشغيله في بداية الصفحة.

للإخراج سوف نستخدم الدالة print_r().

ولمنع عرض النتيجة مرة ثانية بعد إعادة تحميل الصفحة، ننهي الجلسة باستخدام unset.

لنقم بإنشاء معالج search.php. أولاً، ابدأ الجلسة واتصل بقاعدة البيانات:

لمزيد من المعلومات حول الاتصال بقاعدة بيانات عبر PDO، راجع هذه المقالة.

يظهر تشغيل الخوارزمية في الرسم البياني:

دعونا نحلل العينة بناءً على الكلمة الأولى، باستخدام استعلام البحث "كيفية إنشاء موقع ويب" كمثال:

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

يعمل هذا الجزء من الخوارزمية على مبدأ "الفحص". لنفترض أن هناك عشر مقالات في قاعدة البيانات. بعد اختيار الكلمة الأولى، نحصل على معرف المقالات التي تحتوي على كلمة "كيف"، وكان هناك ستة مقالات من هذا القبيل. بعد ذلك، نقوم بالبحث عن الكلمة الثانية بين هذه المقالات الستة، وبالتالي تضييق نطاق البحث. يترك هذا التكرار أربع مقالات تتضمن الكلمتين "كيف" و"افعل". في التكرار الأخير، من بين المقالات الأربع المتبقية، نبحث عن كلمة "موقع". بعد هذا المرور، نحصل على معرف مقال واحد، والذي يتضمن جميع الكلمات الرئيسية.

عدد التكرارات يساوي عدد الكلمات في استعلام البحث. يمكن أن يكون العدد النهائي للمعرفات المستلمة أي شيء، اعتمادًا على الطلب ومحتويات جدول قاعدة البيانات.

إذا حصلنا، نتيجة لتنفيذ استعلام في حلقة، على معرف (متغير مؤقت) يساوي أحد معرفات التحديد السابق (id_mass)، فإننا نترك هذا المعرف دون تغيير. بخلاف ذلك، نقوم بتعيين قيمة -1 للعنصر id_mass[ j ]، وبالتالي استبعاده من المعالجة.

بعد انتهاء الحلقات، نحصل على مصفوفة من المعرفات التي توجد فيها الكلمات الرئيسية و-1. لتمرير المعرفات المطلوبة فقط إلى المستخدم، نستخدم حلقة تتحقق لتجاهل جميع العناصر التي تساوي -1. نقوم بنقل العناصر المتبقية إلى مصفوفة الجلسة:

يتم استخدام وظيفة الرأس لإعادة توجيه العميل إلى صفحة البحث.

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

راجع أيضًا مقالات إضافية حول MVC

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

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

سأقوم بإنشاء ملفين: search.php الذي سيحتوي على HTML وJavaScript. الملف الثاني do_search.php سيحتوي على كود PHP. لنبدأ في إنشاء الملف الأول:

عرض توضيحي لبحث PHP وjQuery $(function() ( $(".search_button").click(function() ( // احصل على ما كتبه المستخدم var searchString = $("#search_box").val(); // نموذج سلسلة استعلام var data = "search="+ searchString; // إذا لم تكن سلسلة البحث فارغة if(searchString) ( // قم بإجراء طلب ajax $.ajax(( type: "POST"، url: "do_search.php"، البيانات: البيانات، قبل الإرسال: function(html) ( // سيتم تشغيله قبل استدعاء الطلب $("#results").html(""); $("#searchresults").show(); $(". word").html (searchString); )، Success: function(html)( // سيتم تشغيله بعد تلقي النتائج $("#results").show(); $("#results").append(html) ؛ ) ) عودة كاذبة؛ ))؛ حاول إدخال كلمة اياكس
نتائج ل

في هذا الملف قمنا بإنشاء نموذج HTML عادي يرسل طلب POST إلى الملف الخلفي do_search.php.

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

دعونا نعطي كل شيء القليل من CSS:

Body( عائلة الخط: Arial، Helvetica، sans-serif؛ ) *( هامش: 0؛ الحشو: 0؛ ) #container ( هامش: 0 تلقائي؛ العرض: 600 بكسل؛ ) أ ( اللون: # DF3D82؛ زخرفة النص: لا شيء ) أ:تحويم ( اللون: #DF3D82؛ زخرفة النص: تسطير؛ ) ul.update ( نمط القائمة: لا شيء؛ حجم الخط: 1.1em؛ الهامش العلوي: 10 بكسل ) ul.update li ( الارتفاع: 30 بكسل؛ border-bottom:#dedede Solid 1px; text-align:left;) ul.update li:first-child( border-top:#dedede Solid 1px; height:30px; text-align:left;) #flash ( هامش- أعلى: 20px؛ محاذاة النص: يسار) #searchresults (محاذاة النص: يسار؛ الهامش العلوي: 20px؛ العرض: لا شيء؛ عائلة الخط: Arial، Helvetica، sans-serif؛ حجم الخط: 16px؛ اللون: #000) .word ( وزن الخط: غامق؛ اللون: #000000؛ ) #search_box ( الحشو: 4 بكسل؛ الحدود: الصلبة 1 بكسل # 666666؛ العرض: 300 بكسل؛ الارتفاع: 30 بكسل؛ حجم الخط: 18 بكسل؛ -moz- نصف قطر الحدود: 6 بكسل؛-webkit-border-radius: 6 بكسل؛ .search_button (الحدود: #000000 صلب 1 بكسل؛ الحشو: 6 بكسل؛ اللون: #000؛ وزن الخط: غامق؛ حجم الخط: 16 بكسل؛ -moz- الحدود -نصف القطر: 6px؛-webkit-border-radius: 6px).وجد (وزن الخط: غامق؛ نمط الخط: مائل؛ اللون: #ff0000؛ ) h2 ( الهامش الأيمن: 70 بكسل؛ )

لقد تعلمت كيفية إنشاء نموذج بحث بسيط يعمل دون إعادة تحميل الصفحة. أتمنى أنك استمتعت بالدرس.

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

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

قم بتطوير نماذج البحث باستخدام PHP، وكذلك التعرف على SQL (لغة الاستعلام المنظمة) - وهي لغة خاصة لجمع وتسجيل وتعديل المعلومات الموجودة في قواعد البيانات. قبل البدء، نوصي بتنزيل ملفات المشروع.

ما سوف تحتاجه

  • أداة للعمل مع قواعد بيانات MySQL.
  • خادم محلي أو بعيد مع دعم PHP.
  • محرر النص.
إنشاء قاعدة بيانات

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

الأداة الأكثر شيوعًا لإدارة MySQL هي PHP My Admin. ستكون هذه الأداة كافية لبرنامجنا التعليمي اليوم.

إنشاء جدول

يجب إنشاء جدولنا بالتنسيق التالي:

اسم العمود نوع البيانات طول فارغة أو غير فارغة المفتاح الأساسي؟ زيادة تلقائية
بطاقة تعريف إنت 1 غير فارغة نعم نعم
الاسم الأول فارتشار 50 غير فارغة لا لا
اسم العائلة فارتشار 50 غير فارغة لا لا
بريد إلكتروني فارتشار 50 غير فارغة لا لا
رقم التليفون فارتشار 15 غير فارغة لا لا

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

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

إضافة ممثلي الموظفين إلى الجدول

بمجرد فهم الجدول، ابدأ بملئه بالبيانات. 6 ملاحظات كافية لتثبيت الإجراء في عقلك. أدناه أقدم لك المثال الخاص بي:

معرف العمود الاسم الأول اسم العائلة بريد إلكتروني رقم التليفون
2 ريان كبير الخدم [البريد الإلكتروني محمي] 417-854-8547
3 برنت كالاهان [البريد الإلكتروني محمي] 417-854-6587
تطوير النموذج

لإنشاء نموذج بحث موقع عبر Google، افتح أي محرر نصوص مناسب. أوصي باستخدام PSPad المجاني. يمكنك استخدام أي محرر نصوص يوفر تمييزًا لبناء الجملة. سيؤدي هذا إلى تسهيل عملية كتابة وتصحيح كود PHP بشكل كبير. عند إنشاء صفحة لنموذج البحث الخاص بك، تأكد من حفظها بتنسيق .php، وإلا فلن يتم تحليل كود PHP بشكل صحيح. بمجرد حفظ المستند، انسخ العلامة التالية فيه:

اتصالات بحث:

بحث تفصيلي عن جهات الاتصال

يمكنك البحث بالاسم الأول أو اسم العائلة

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

التحقق من الامتثال للمعيار

عندما يقوم المستخدم بإدخال الاسم الأول أو اسم العائلة ثم ينقر فوق زر الإرسال، يقوم النموذج بتمرير البيانات إلى نفسه ويضيف سلسلة الاستعلام "go" في النهاية. في هذه المرحلة، نتحقق من وجود سلسلة استعلام go. إذا كانت النتيجة إيجابية، نقوم بعرض نتائج البحث.

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

أولاً، دعونا نضيف كتلة صغيرة من كود البحث في موقع PHP بعد علامة الإغلاق:

أولاً، نفتح كتلة من أكواد PHP باستخدام العلامة "".

سيتم تنفيذ أي كود PHP داخل زوج العلامات هذا بواسطة الخادم. ثم نتحقق مما إذا كان النموذج قد تم إرساله:

سنستخدم دالة isset المضمنة، والتي تُرجع منطقيًا، ونضع المصفوفة $_POST فيها. يسمح لنا التعبير المنطقي في البرمجة بالحصول على صواب أو خطأ.

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

نحن نضع تعبيرًا منطقيًا شرطيًا آخر داخل التعبير الرئيسي، لكن هذه المرة نستخدم المصفوفة $_GET مع القيمة "go". احفظ التغييرات في ملف search_go.php.

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

نضع تعبيرًا منطقيًا شرطيًا آخر داخل الاثنين. هذه المرة نستخدم تعبيرًا عاديًا للتحقق من صحة الإدخال. نحن نستخدم وظيفة preg_match المضمنة مع معلمتين: التعبير العادي وحقل النموذج الذي يجب تطبيق التحقق عليه.

في حالتنا، سيكون هذا هو حقل "الاسم" (الاسم). لاسترداد معلمات البحث المحددة من قبل الزائر، نقوم بإنشاء متغير $name، ونربط به قيمة POST مع اسم الحقل من النموذج الذي سيتم استخدامه في استعلام SQL. لقد قمنا الآن بتنفيذ ما يلي: (1) يتم إرسال بيانات النموذج، (2) تتضمن سلسلة الاستعلام القيمة go، و(3) يقوم الزائر بإدخال حرف أول كبير أو صغير. ويتم إجراء كل هذه الفحوصات قبل إجراء أي تغييرات على قاعدة البيانات. احفظ جميع التغييرات.

توصيل النتائج وتحديدها والاستعلام عنها وإرجاعها من جدول قاعدة البيانات

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

نقوم بإنشاء متغير $db وربطه بوظيفة MySQL المضمنة mysql_connect، والتي تأخذ ثلاث معلمات: الخادم مع قاعدة البيانات (المضيف المحلي إذا كنت تعمل محليًا)، وتسجيل الدخول وكلمة المرور.

بعد ذلك، نقوم بتشغيل وظيفة PHP المضمنة، والتي توقف تنفيذ المزيد من التعليمات البرمجية إذا لم يكن هناك اتصال بقاعدة البيانات. ونقوم بعرض معلومات حول الخطأ عن طريق تشغيل وظيفة MySQL المضمنة mysql_error والتي ستعيد سبب الخطأ. احفظ ملف search_connectdb.php.

نقوم بإنشاء متغير يسمى mydb وربطه بوظيفة MySQL المضمنة mysql_select_db، ثم نحدد اسم قاعدة البيانات التي أنشأناها سابقًا. بعد ذلك، نقوم بالاستعلام عن جدول قاعدة البيانات باستخدام استعلام SQL مع متغير اسم يحتوي على معلمات البحث التي أدخلها الزائر:

عند الاستعلام عن جدول قاعدة بيانات، نقوم بإنشاء متغير $sql وربطه بسلسلة تحتوي على استعلام SQL. نستخدم عبارة SELECT لاسترداد القيم من أعمدة المعرف وأعمدة الاسم الأول والأخير من جدول جهات الاتصال. نستخدم بعد ذلك جملة WHERE مع قيم الاسم الأول والأخير لتضييق نطاق البحث.

جنبا إلى جنب مع عامل التشغيل LIKE، نستخدم علامة النسبة المئوية (٪) - وهو حرف خاص يُرجع 0 حرفًا أو أكثر، بالإضافة إلى متغير الاسم من سلسلة البحث. ونتيجة لذلك، يقوم LIKE (بالاشتراك مع الحرف الخاص ) بالعثور على أي اسم مطابق في جدول قاعدة البيانات. يمكنك وصف العملية برمتها على النحو التالي: "نختار الاسم الأول والأخير من جدول جهات الاتصال المطابق للاسم الذي أدخله الزائر". احفظ ملف search_query.php.

نقوم بإنشاء متغير نتيجة $ ونخصص له قيمة الدالة mysql_query() عن طريق إضافته إلى $query. الآن يتم تخزين استعلامنا في متغير النتيجة. لإخراج النتيجة في PHP، نقوم بإنشاء حلقة ثم نخرج البيانات في قائمة غير مرتبة:

أولاً نقوم بإنشاء حلقة while، بداخلها نقوم بإنشاء متغير يسمى الصف، ونقوم بتهيئته باستخدام القيمة المرجعة للدالة mysql_fetch_array، والتي تأخذ المتغير الناتج، والذي يحتوي على استعلام SQL الخاص بنا. داخل حلقة while، نقوم بتعيين قيمة كل عمود لقيمة متغير يحمل نفس الاسم. ثم نقوم بإخراج القيم داخل القائمة غير المرتبة.

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

نظرًا لأننا نعرض الاسم الأول والأخير فقط، مع وجود معرف في نهاية علامة الارتساء الخاصة بنا، فيمكننا استخدام المعرف لاستعلام إضافي سيعرض معلومات إضافية حول الموظفين. احفظ الملف واختبر نموذج البحث في موقع PHP (search_display.php).

إزالة علامات التبويب

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

ul li (نوع نمط القائمة: لا شيء؛)

البحث بالحرف

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

أضف السطر التالي من التعليمات البرمجية بعد علامة إغلاق النموذج:

أ | ب | ك