لائحة الطعام
مجاني
تحقق في
الرئيسية  /  النصيحة / ولادة لرجل البحث عن البند php I. قائمة متعددة المستوى على PHP و MySQL

ولادة رجل بحث البند php i. قائمة متعددة المستوى على PHP و MySQL

بواسطة إبراهيم Diallo.

تم النشر Jul 2 2014 ~ 16 دقيقة قراءة

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

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

// في Search.php File $ المصطلح \u003d isset ($ _ احصل على ["الاستعلام"])؟ $ _ احصل على ["الاستعلام"]: ""؛ $ المصطلح \u003d urlencode ($ المصطلح)؛ $ الموقع \u003d Urlencode ("www.yourwebsite.com")؛ $ Redirect \u003d "https://www.google.com/search؟q\u003dsite٪3a( rewswebsite) + ($ المدى)"؛ رأس ("الموقع: $ redirect")؛ خروج؛

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

حل البحث محلي الصنع

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

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

ملحوظة: إذا كان لديك 5000 مدونة، فأنت لا تزال بخير. وبعد

سنأخذ هيكل هذه المدونة كمرجع. كل وظيفة مدونة لديها:

  • العنوان p_title.
  • عنوان URL P_URL.
  • ملخص p_summary.
  • محتوى آخر P_Contentent
  • و catergorgors الفئة.tagname.

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

// تم العثور على المباريات المصطلح بالضبط في العنوان $ directltitle \u003d 6؛ / / تطابق العنوان في الجزء $ scoretitlekeyword \u003d 5؛ // تم العثور على المباريات المصطلح بالضبط في الملخص $ doursfullsmary \u003d 5؛ // تطابق الملخص في الجزء $ Scoresumneyword \u003d 4؛ // تم العثور على المباريات المصطلح الدقيق في المحتوى $ directuledocument \u003d 4؛ // تطابق المستند في الجزء $ scoredocumentkyword \u003d 3؛ // يطابق الفئة $ St.CategoryWorkWord \u003d 2؛ // يطابق عنوان URL $ directlkeyword \u003d 1؛

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

// إزالة الكلمات غير الضرورية من مصطلح البحث وإعادتها كدالة صفيف Filtersearchkeys (استعلام $) ($ الاستعلام \u003d Trim (preg_replace (preg_replace ("/ (\\ s +) + /"، ""، $ query))؛ $ الكلمات \u003d صفيف ()؛ // قم بتوسيع هذه القائمة مع كلماتك. $ قائمة \u003d صفيف ("في"، "IT"، "A"، "،"، "،" أنا "،" أنت "،" أنت "، ، "هو"، "أنا"، "الولايات المتحدة"، "هم"، "هي"، "إلى"، "ولكن"، "هذا"، "هذا"، "هؤلاء"، ثم "إذن")؛ $ c \u003d 0 ؛ foreach (تنفجر ("، الاستعلام $) كإجراء $) (IF (IN_ARRAY ($ مفتاح، قائم $)) (متابعة؛) $ الكلمات \u003d مفتاح $؛ إذا ($ c\u003e \u003d 15) (استراحة؛) $ c ++؛) إرجاع الكلمات $؛) // الحد من الكلمات عدد الأحرف يعمل LimitChars (استعلام $، DEST \u003d 200) (Return Substr (استعلام $، 0، $ DEST)؛

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

ملحوظة: لن أظهر كيفية الاتصال بقاعدة بيانات MySQL. إذا كنت تواجه مشكلات للاتصال بكفاءة قاعدة البيانات، أوصي بقراءة هذا.

دعنا نعطي وظيفتنا هيكل أولا. لاحظ أنني تركت العناصر النائبة حتى نتمكن من تنفيذ الأقسام بشكل منفصل.

وظيفة البحث (استعلام $) (استعلام $ \u003d Trim (استعلام $)؛ إذا (mb_strlen (query ($ ($ query) \u003d\u003d\u003d 0) (// no حاجة إلى فارغة البحث أليس كذلك؟ عودة كاذبة؛ ) الاستعلام $ \u003d limitchars (الاستعلام $)؛ // وزن عشرات $ directltitle \u003d 6؛ $ scoretitlekeyword \u003d 5؛ $ directlsummary \u003d 5؛ $ scoresumnword \u003d 4؛ $ directuledocument \u003d 4؛ $ scoredocumentkyword \u003d 3؛ أسعار النتائج ثلاثية TocyWord \u003d 2؛ $ supplyurlkeyword \u003d 1؛ الكلمات الرئيسية $ \u003d filtersearchkeys (استعلام $)؛ $ Escquery \u003d DB :: Escape (Quale $)؛ // انظر الملاحظة أعلاه للحصول على كائن DB $ titlesql \u003d صفيف ()؛ $ sumsql \u003d صفيف ()؛ $ docsql \u003d صفيف ()؛ $ الفئةSQL \u003d صفيف ()؛ $ URLSQL \u003d صفيف ()؛ / ** مطابقة حامل الحوادث الكاملة مكان ** / ** مطابقة الكلمات الرئيسية مكان حامل ** / $ SQL \u003d "حدد p.p_id، p.p_title، p.p_date_published، p.p_url، p.p_summary، p.p_content، p thumbumbnail، (- درجة العنوان .MPLODE ("+"، $ titlesql). ") + (- ملخص" .mplode ("+"، $ sumsql). ") + (- المستند". تنفجر ("+"، $ docsql). ") + (- العلامة / الفئة" .MPlode ("+"، $ الفئة SQL). ") + (- URL .implode (" + "، $ Urlsql).") كأحد الأهمية من Post P p.status \u003d "نشرت" لها أهمية\u003e

في الاستعلام، سيتم تلخيص جميع الدرجات كمتغير ذات الصلة ويمكننا استخدامها لفرز النتائج.

مطابقة الحوادث الكاملة.

نتأكد من أن لدينا بعض الكلمات الرئيسية أولا ثم أضف استفسارنا.

إذا (العد (الكلمات الرئيسية $ ($)\u003e 1) ($ titlesql \u003d "إذا كان (p_title مثل"٪. $ Escquery. "٪"، ($ usfulltle)، 0) "؛ $ sumsql \u003d" إذا (p_summary مثل "٪". $ EscQuery. "٪"، ($ scorfullsummary)، 0) "؛ $ docsql \u003d" إذا كان (p_content مثل "٪." $ Escquery. "٪"، ($ "، usfullldocument)، 0)"؛

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

تطابق حالات الكلمات الرئيسية.

نقوم بحلقة من خلال جميع الكلمات الرئيسية وتحقق مما إذا كانت تتناسب مع أي من الحقول. بالنسبة للفئة المباراة، ased استعلام فرعي لأن منشور يمكن أن يكون له فئات متعددة.

foreach (الكلمات الرئيسية $ CO دولار كإشارة $) ($ titlesql \u003d "إذا (p_title مثل"٪ ". DB :: Escape ($ مفتاح)."٪ "، ($ ScoretleKeyword)، 0)"؛ $ sumsql \u003d "إذا (p_summary مثل "٪." DB :: Escape (مفتاح $). "٪"، ($ scoresummaryword)، 0) "؛ $ docsql \u003d" إذا (p_content مثل "٪." DB :: Escape ($ مفتاح). "٪ "، ($ scoredocumentkyword)، 0)"؛ $ URLSQL \u003d "إذا كان (p_url مثل"٪. "DB :: Escape ($ مفتاح)."٪ "، ($"، ($ directlkeyword)، 0) "$ categorysql \u003d" إذا ( (حدد Count (conty.tag_id) من الفئة انضم إلى post_category على post_category.tag_id \u003d الفئة.tag_id حيث post_category.post_id \u003d p.post_id و الفئة .name \u003d "" .db :: Escape ($ مفتاح). "")\u003e 0، ($ streategategoryWord)، 0) "؛)

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

// فقط ungase under "فارغة، أضف 0 إذا (فارغ ($ titlesql)) ($ titlesql \u003d 0؛) إذا (فارغ ($ sumsql)) ($ sumsql \u003d 0؛) إذا (فارغة ($ docsql)) ( فارغة $ docsql \u003d 0؛) إذا (فارغة ($ URLSQL)) ($ URLSQL \u003d 0؛) إذا (فارغ ($ ($ agtql)) ($ tagsql \u003d 0؛)

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

// إزالة الكلمات غير الضرورية من مصطلح البحث وإعادتها كدالة صفيف Filtersearchkeys (استعلام $) ($ الاستعلام \u003d Trim (preg_replace (preg_replace ("/ (\\ s +) + /"، ""، $ query))؛ $ الكلمات \u003d صفيف ()؛ // قم بتوسيع هذه القائمة مع كلماتك. $ قائمة \u003d صفيف ("في"، "IT"، "A"، "،"، "،" أنا "،" أنت "،" أنت "، ، "هو"، "أنا"، "الولايات المتحدة"، "هم"، "هي"، "إلى"، "ولكن"، "هذا"، "هذا"، "هؤلاء"، ثم "إذن")؛ $ c \u003d 0 ؛ foreach (تنفجر ("، الاستعلام $) كإجراء $) (IF (IN_ARRAY ($ مفتاح، قائم $)) (متابعة؛) $ الكلمات \u003d مفتاح $؛ إذا ($ c\u003e \u003d 15) (استراحة؛) $ c ++؛) إرجاع الكلمات $؛) // الحد من الكلمات عدد الأحرف وظيفة limitchars (الاستعلام $، $ الحد \u003d 200) (return substr ($ الاستعلام، 0، $ الحد)؛) وظيفة البحث ($ الاستعلام) ($ الاستعلام) \u003d تقليم (استعلام $)؛ إذا (MB_STRLEN ($ الاستعلام ($ ($ الاستعلام) \u003d\u003d\u003d 0) (// لا حاجة للبحث الفارغ أليس كذلك؟ إرجاع False؛) $ الاستعلام \u003d Limitchars (الاستعلام $)؛ // درجات الترجيح $ directltle \u003d 6 ؛ $ scoretitlekeyword \u003d 5؛ $ scorfullsummary \u003d 5؛ $ scoresumaryword \u003d 4؛ $ scorfulldocument \u003d 4؛ $ scoredocumentkyword \u003d 3؛ $ scorecategategoryword \u003d 2؛ $ surelke yword \u003d 1؛ الكلمات الرئيسية $ \u003d filtersearchkeys (استعلام $)؛ $ Escquery \u003d DB :: Escape (Quale $)؛ // انظر الملاحظة أعلاه للحصول على كائن DB $ titlesql \u003d صفيف ()؛ $ sumsql \u003d صفيف ()؛ $ docsql \u003d صفيف ()؛ $ الفئةSQL \u003d صفيف ()؛ $ URLSQL \u003d صفيف ()؛ / ** مطابقة التحليل الكامل ** / إذا (العد ($ الكلمات الرئيسية)\u003e 1) ($ titlesql \u003d "إذا كان (p_title مثل"٪. "$ EscQuery."٪ "، ($"، ($ "، $ sumsql"؛ $ sumsql \u003d "إذا كان (p_summary مثل"٪. "$ Escquery."٪ "، ($ النتيجة Summary)، 0)"؛ $ docsql \u003d "إذا (p_content مثل"٪. $ Escquery. "٪"، ($ "usfullldocument)، 0 ) "؛) / ** مطابقة الكلمات الرئيسية ** / foreach (الكلمات الرئيسية $ كإشارة $) ($ titlesql \u003d" إذا كان (p_title مثل "٪". DB :: Escape ($ "، ($"، ($ scoretitlekeyword) ، 0) "؛ $ sumsql \u003d" إذا كان (p_summary مثل "٪". db :: Escape (مفتاح $). "٪"، ($ ScoresummaryWord)، 0) "؛ $ docsql \u003d" إذا (p_content مثل "٪" .db :: Escape (مفتاح $). "٪"، ($ scoredocumentkyword)، 0) "؛ $ URLSQL \u003d" إذا (p_url مثل "٪." DB :: Escape ($ مفتاح). "٪"، ($ "، ($"، ($ "، ($"، ($ "، ($"، ($ "، ($"، ($ ". النشرة النظيفة)، 0) "$ categorysql \u003d" إذا (حدد العد (الفئة (الفئة .tag_id) من الفئة انضم إلى post_category على post_category.tag_id \u003d الفئة.tag_id حيث post_category.post_id \u003d p.post_id و الفئة. الاسم \u003d ". DB: : الهروب (مفتاح $). "" ")\u003e 0، ($ ScoreCategategoryWord)، 0)"؛) // مجرد تكبدها فارغة، إضافة 0 إذا (فارغة ($ titlesql)) ($ titlesql \u003d 0؛) إذا. (فارغة ($ sumsql)) ($ sumsql \u003d 0؛ ) إذا (فارغ ($ docsql)) ($ docsql \u003d 0؛) إذا (فارغة ($ Urlsql)) ($ Urlsql \u003d 0؛) إذا (فارغة ($ ($ ($ ($ ($ ($ agtql)) ($ tagsql)) ($ tagsql \u003d 0؛) $ sql \u003d " حدد p.p_id، p.p_title، p.p_date_published، p.p_url، p.p_summary، p.p_content، p.thumbnail، ((- درجة العنوان .implode ("+"، $ titlesql). ") + (- ملخص" .implode ("+"، $ sumsql). ") + (- المستند" .implode ("+"، $ Docsql). ") + (Tag / الفئة" .mplode ("+ "، $ الفئةSQL).") + (- URL. الصلة Desc، p.page_views desc الحد 25 "؛ نتائج $ \u003d db :: استعلام ($ SQL)؛ إذا (! $ النتائج) (العودة كاذبة؛) عودة النتائج $؛ في

الآن يمكن لملف Search.php الخاص بك مثل هذا:

$ المصطلح \u003d isset ($ _ احصل على ["الاستعلام"])؟ $ _ احصل على ["الاستعلام"]: ""؛ $ search_results \u003d البحث ($ مصطلح)؛ إذا (! $ search_results) (echo "لا توجد نتائج"؛ خروج؛) // صفحة الطباعة مع النتائج هنا.

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

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

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

هل أعجبك هذا المقال؟ يمكنك الاشتراك في قراءة أكثر رهيبة. وبعد

في ملاحظة ذات صلة، إليك بعض المقالات المثيرة للاهتمام.

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

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

تعليقات (45)

الزرائل. 12 أغسطس 2015:

إيان مصطفى. 26 سبتمبر 2015:

روب 29 سبتمبر 2015:

اديم. 11 فبراير 2016:

إيفان فينيديكتوف. 3 أبريل 2016.

تم التحديث في 30 أبريل 2016

سأظهر لك كيفية إنشاء بحث بسيط باستخدام PHP و MySQL. سوف تتعلم:

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

تحضير.

أنت شالت لديها Apache و MySQL و PHP مثبتة وتشغيلها بالطبع (يمكنك استخدام منصات مختلفة أو WAMP للنوافذ، mamp for mac) أو خادم ويب / استضافة يدعم قواعد بيانات PHP و MySQL.

دعونا "إنشاء قاعدة بيانات، طاولة وملء مع بعض الإدخالات التي يمكننا استخدامها للبحث:

  • انتقل إلى phpmyadmin، إذا كان لديك خادم على جهاز الكمبيوتر الخاص بك، يمكنك الوصول إليه على http: // localhost / phpmyadmin /
  • إنشاء قاعدة بيانات، وأنا أسمى Mine Tutorial_search
  • إنشاء جدول استخدمته 3 حقلا، اتصلت مقالات الألغام.
  • التكوين للحقل الأول. الاسم: ID، النوع: int، تحقق Auto_incrent، فهرس: أساسي

int يعني ذلك صحيح
Auto_incrent يعني أن الإدخالات الجديدة سيكون لها رقم آخر (أعلى) غير السابق
الفهرس: يعني الأساسي أنه مفتاح فريد يستخدم لتحديد الصف

  • 2nd الحقل: الاسم: العنوان، النوع: varchar، الطول: 225

varchar يعني أنها سلسلة من النص، والحد الأقصى 225 حرفا (مطلوب لتحديد الحد الأقصى الطول)، واستخدامه للعناوين والأسماء والعناوين
طول يعني أنه لا يمكن "أن يكون أطول من 225 حرفا (يمكنك ضبطه على عدد أقل إذا كنت تريد)

  • الحقل الثالث: الاسم: النص، النوع: النص

النص يعني أنه سلسلة طويلة، إنه ليس من الضروري تحديد الطول، واستخدامه للنص الطويل.

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

يجب أن تبدو شيئا مثل هذا:

  • قم بإنشاء مجلد في دليل الخادم الخاص بك وملفتين: index.php و Search.php (في الواقع يمكننا أن نفعل كل هذا فقط مع ملف واحد فقط، ولكن اسمحوا السماح لك "استخدام اثنين، سيكون أسهل)
  • املأها برمجة HTML الافتراضية، DocType، Head، إلخ.

يبحث.

  • قم بإنشاء نموذج مع حقل البحث وإرسال زر في Index.php، يمكنك استخدام الأسلوب GET أو POST، تعيين الإجراء للبحث. يمكنني استخدام "الاستعلام" كاسم لحقل النص

Get - تعني أن معلوماتك سيتم تخزينها في عنوان URL (http: //localhost/tutorial_search/search.php؟ طلبك.)
Post - يعني معلوماتك التي فازت بها "T يتم استخدامها يتم استخدامها لكلمات المرور والمعلومات الخاصة وأمان أكبر بكثير من الحصول عليها

حسنا، دعنا نبدأ مع PHP.

  • افتح Search.php.
  • بدء PHP ()
  • الاتصال بقاعدة بيانات (قراءة التعليقات في التعليمات البرمجية التالية)

< to > استعلام $ \u003d mysql_real_escape_string (query $)؛ // يتأكد من عدم استخدام أحد حقن SQL $ RAG_RESULTS \u003d MYSQL_QUERY ("حدد * من المقالات حيث (" العنوان "مثل"٪ "٪" $ "."٪ ") أو (" نص "مثل"٪ "."٪ " ) ") أو يموت (mysql_error ())؛ // * يعني أنه يختار جميع الحقول، يمكنك أيضا الكتابة: `ID` العنوان" العنوان "،` النص "// // هو اسم طاولتنا //"٪ $ query٪٪ "هو ما تبحث عنه ،٪ يعني أي شيء، على سبيل المثال، إذا كان الاستعلام $ Hello //، فسوف يتطابق مع "Hello"، "Hello Man"، "Gogohello"، إذا كنت تريد استخدام المباراة الدقيقة "العنوان" \u003d "$ الاستعلام" // أو إذا كنت تريد لتتناسب مع كلمة كاملة فقط، لذا "Gogohello" خارج الاستخدام "٪ $ Query٪٪" ... "$ query٪٪" ... "٪ $ الاستعلام" إذا (mysql_num_rows ($ rail_results)\u003e

"نتائج $ [" العنوان "]."

". نتائج $ [" النص "]."

"// المشاركات النتائج التي حصلت عليها من قاعدة البيانات (العنوان والنص) يمكنك أيضا إظهار المعرف (نتائج $ [معرف"])) آخر (// إذا لم يكن هناك صفوف مطابقة هل تتبع الصدى "لا توجد نتائج"؛) آخر (// إذا كان طول الاستعلام أقل من الحد الأدنى من الصدى "الحد الأدنى للطول". $ min_length؛)؟\u003e

منجز!

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

index.php.

يبحث.

search.php.

نتائج البحث. \u003d $ min_length) (// إذا كان طول الاستعلام أكثر أو متساوا على الحد الأدنى، فيرست $ query \u003d htmlspecialchars (query query)؛ // تغيير الأحرف المستخدمة في HTML إلى معادلاتهم، على سبيل المثال:< to > استعلام $ \u003d mysql_real_escape_string (query $)؛ // يتأكد من عدم استخدام أحد حقن SQL $ RAG_RESULTS \u003d MYSQL_QUERY ("حدد * من المقالات حيث (" العنوان "مثل"٪ "٪" $ "."٪ ") أو (" نص "مثل"٪ "."٪ " ) ") أو يموت (mysql_error ())؛ // * يعني أنه يختار جميع الحقول، يمكنك أيضا الكتابة: `ID` العنوان" العنوان "،` النص "// // هو اسم طاولتنا //"٪ $ query٪٪ "هو ما تبحث عنه ،٪ يعني أي شيء، على سبيل المثال، إذا كان الاستعلام $ Hello //، فسوف يتطابق مع "Hello"، "Hello Man"، "Gogohello"، إذا كنت تريد استخدام المباراة الدقيقة "العنوان" \u003d "$ الاستعلام" // أو إذا كنت تريد لتتناسب مع كلمة كاملة فقط، لذا "Gogohello" خارج الاستخدام "٪ $ Query٪٪" ... "$ query٪٪" ... "٪ $ الاستعلام" إذا (mysql_num_rows ($ rail_results)\u003e 0) (//\u003e إذا تم إرجاع أحد الصفوف أو أكثر من الصفوف بعد ذلك ($ النتائج \u003d mysql_fetch_array ($ raw_results)) (// $ النتائج \u003d mysql_fetch_array ($ rain_results) يضع البيانات من قاعدة البيانات إلى صفيف، في حين أنه صالح حلقة صدى "

"نتائج $ [" العنوان "]."

". نتائج $ [" النص "]."

"// المشاركات النتائج التي حصلت عليها من قاعدة البيانات (العنوان والنص) يمكنك أيضا إظهار المعرف (نتائج $ [معرف"])) آخر (// إذا لم يكن هناك صفوف مطابقة هل تتبع الصدى "لا توجد نتائج"؛) آخر (// إذا كان طول الاستعلام أقل من الحد الأدنى من الصدى "الحد الأدنى للطول". $ min_length؛)؟\u003e

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

لتبدأ، قم بإنشاء جدول في قاعدة البيانات مع الحقول التالية:

  • هوية شخصية - مرشح فريد.
  • لقب - ربط الروابط في القائمة.
  • حلقة الوصل. - العنوان الذي سيكون عنصر القائمة.
  • parent_id. - معرف الوالدين. إذا لم يكن هناك عنصر أحد الوالدين، فستكون NULL هنا (أو يمكنك وضع 0 أكثر).

تم فرز الطاولة، لقد حان الوقت الآن PHP-Code.وبعد ممتلىء كود PHP تقع أدناه:

$ mysqli \u003d mysqli جديد ("localhost"، "الجذر"، ""، "DB")؛ / / الاتصال بقاعدة البيانات
$ feeds_set \u003d $ mysqli-\u003e الاستعلام ("حدد * من" القائمة ")؛ / / نصنع عينة من جميع الإدخالات من الجدول مع القائمة
البنود $ \u003d صفيف ()؛ / / صفيف عناصر القائمة
بينما (($ TWR \u003d $ feeds_set-\u003e fetch_assoc ())! \u003d كاذبة) عناصر $ [$ TW [«ID]] \u003d $ صف؛ / / املأ مجموعة العينة من قاعدة البيانات
$ للأطفال \u003d صفيف ()؛ / / صفيف للمطابقة لعناصرها الوالدية
foreach (البنود $ كعنصر دولار) (
إذا كان (البند $ ["Parent_ID"]) $ للأطفال [ID INDION [ID "] \u003d 8 دولار [" parent_id "]؛ / / املأ صفيف
}
وظيفة printItem (البند $ 8، البنود $، أطفال $) (
/ * عرض عنصر القائمة * /
صدى صوت "

  • ";
    صدى ". البند $ [" العنوان "]." "؛
    $ ul \u003d false؛ / / هل عرضت عناصر الأطفال؟
    احيانا صحيح) (
    / * حلقة لانهائية التي نبحث فيها عن جميع عناصر الأطفال * /
    $ مفتاح \u003d Array_search ($ عنصر [ID "]، $ للأطفال)؛ // نحن نبحث عن عنصر الطفل
    إذا (! $ مفتاح) (
    / * عناصر ابنة غير موجودة * /
    إذا ($ UL) صدى ""؛ // إذا تم الإخراج عناصر الأطفال، ثم أغلق القائمة
    فترة راحة؛ // يخرج من الدورة
    }
    UNSET ($ للأطفال [مفتاح $])؛ / / حذف العنصر الموجود (بحيث لا يظهر مرة أخرى)
    إذا (! $ ul) (
    صدى صوت "
      "؛ // نبدأ القائمة الداخلية إذا لم تكن عناصر الأطفال بعد
      $ ul \u003d صحيح؛ // اضبط العلم
      }
      صدى printitem (عناصر $ [مفتاح $]، البنود $، الأطفال $)؛ / / عرض بشكل متكرر كل العناصر الطفل
      }
      صدى صوت "";
      }
      ?>

      ومع ذلك، فإن هذا الرمز عامل تماما، ومع ذلك، يجب أن تفهم أنه لا أحد يكتب (على وجه الخصوص، الاستنتاج من خلال صدى صوت. أتش تي أم أل تاجوف). ومهمتك هي أن تأخذ الخوارزمية من هذا الرمز، ولكن ليس الكود نفسه. ثم هذه الخوارزمية متصلة بمحركك. حاولت التعليق بعناية على رمز الإخراج قائمة متعددة المستوى على PHP و MySQLولكن، بالطبع، ليس أكثر شفافية ويتطلب معرفة أولية جيدة. إذا كنت لا تزال تعرف PHP و mysql.ثم في البداية أوصي بشدة بعد هذا

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

      النطق الرائد نخب لغرفة عيد ميلاد وينتهي به بكلمات:

      الشمبانيا في النظارات صب
      ويشربون كل شيء معا إلى أسفل!
      للشباب نخب الخاص بك نحن نرفع،
      والشباب ليس وحده!

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

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

      يتم إجراء الضيوف لمرتكب مرتكب الاحتفال الرومانسية الغجر القديم
      (يمكن اثنان من الاحتفاظ، وجميع الآخرين يلتقطون جوقة):

      يتم صب النظارات
      في لهم بصيص العنبر،
      ويواجه تضيء
      كيف الفجر الهزلي!

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

      جوقة:

      جوقتنا يغني القديمة القديمة،
      يصب نهر الشمبانيا!
      بالنسبة لك، صديقنا محبوب،
      كتاب عيد ميلادنا (ربما الاسم) عزيزي!

      ما يمكن أن يكون رائعا
      عندما، أحب طايع،
      لقد قابلت أغنية
      الأصلي والأصدقاء!

      دع المساء يبدأ،
      كيف الحياة دائرة جديدة،
      وكل الأحلام تتحقق،
      وكل شيء يزهر في جميع أنحاء!

      جوقة:
      في صحتك! في صحتك! في صحتك!

      وقفة موسيقية.

      ثم اتصل نخب للوالدين.

      قيادة:

      حسنا، الآن، أصدقاء، اللحظة قد حان
      ملء الزجاج للآباء والأمهات!
      بالنسبة لأولئك الذين أعطوا فرحة الحياة
      وفي العالم، تحدى الأبواب الرائعة،

      لأولئك الذين يعلمونه
      وتم تسليم ترحيل البطارية.
      لواكم بفضل من، الآن
      عيد ميلادنا يجلس بيننا!

      حتى تشرب للآباء والأمهات ... (يدعوهم بالاسم

      وقفة موسيقية.

      يتحدث المقدم بإيجاز عن طريق حياة اليوبيل.

      المضيف: والآن نحن تغني "الأغاني القديمة حول البطل الرئيسي لقضاء عطلتنا".

      (يغنون الضيوف دافع الأغاني عن الطيارين)


      بدون اليوبيل، دعنا نقول مباشرة، لا يوجد شيء للقيام به.
      سنجتمع على الطاولة،
      نظارات كاملة نندميس
      ولل أغانيه الصحية نحن نغني:

      حان الوقت لنا أن نلاحظ
      وهذا اليوم للقاء

      اسمحوا لك ليس وعشرين وليس ثلاثين، سمحوا!
      أنت لا تخفض حاجزك!
      مشاهدة سنكون بدقة
      أنت لا تؤذينا، كما تعلمون أيضا!

      نرى شجاعا، شجاعا، شجاع
      نحيلة الرجال، جميلة، مجعد!
      دع السلسلة تذهب لسنوات
      لكننا نتمنى لك دائما
      بقيت روحك شابا!

      حان الوقت لنا أن نلاحظ
      حان الوقت للاحتفال، احتفل بالذكرى السنوية المجيدة!
      وهذا اليوم للقاء
      في الشركة الكبيرة للأقارب والأصدقاء!

      دع المصير في بعض الأحيان يكون قاسيا لنا، واسمحوا!
      ردا على ذلك، تترك النكات الخاصة بك!
      اتبع نفس بدقة
      لا تقترع اليأس حولها!

      الليلة، في المساء، في المساء
      بدون اليوبيل باهظة الثمن، لا يوجد شيء تفعله!
      سنشرب مرة واحدة، سنشرب اثنين
      للذكرى السنوية وشؤونها
      لكن هذا غدا لم يؤذي رأسي!

      نحن الحب اليوبيل والاحترام
      وتستمر تهانينا!

      (يغني الضيوف على نغمة نغمة "لا أستطيع علي في عيد ميلادك ..." :)

      لا يمكننا في عيد ميلادك
      عزيزي مرسيدس تعطي،
      لكن هدية سلمت، بلا شك
      وعلى استعداد لتكرار مائة مرة:

      أنك لطيف، البهجة، اليقظة
      وفي الأمور المقبولة عموما العروض الخاصة،
      ما أنت رائع
      والرفيق، والزوج والأب!

      قيادة:

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

      (يغني الضيوف بمثابة أغنية الجندي "الطريق بعيدا عنا معك ...")

      رجل عيد ميلاد - رجل شجاع
      النظر في Sokol في صفوف!
      احترم الجميع بحق
      وفي الخدمة، كما في المعركة!

      جوقة:

      ________ (اسم عيد الميلاد) على الطريق! لنصل الى الطريق! لنصل الى الطريق!
      إلى مائة عام
      وتبقى قوي
      مصير يدعوك!
      ________ (اسم عيد ميلاد) إلى الأمام!

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

      جوقة.

      منح Anniversarier هدية ولا تنسى الميدالية مع نقش: "للحصول على مزايا كبيرة في العمل والصداقة والحب". (يمكن ملء الميدالية من الشجرة وتعلقها على عنق حفلة عيد ميلاد على الشريط

      المنافسة على الموضوع "الذي يعرف عيد ميلاد أفضل"!

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

      وقفة موسيقية.

      مسابقة في أعياد الميلاد

      أصدقائي الأعزاء! دعونا نحاول تحديد الضيف erudite جدا! الموضوع، بالطبع، لا يزال هو نفسه - عيد ميلاد. فقط ليس في الحياة، ولكن على الشاشة!

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

      أسئلة وأجوبة هزلية

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

      الرقص من قبل فريق الرصاص

      تحية البرقيات - الألغاز (بما في ذلك الضيوف)

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

      دعهم يهمسون عن الحب لك على الأذن!
      Tsarevna للقلب ... ضفدع

      أود أن أشرب النبيذ خمر فقط!
      عطلة سعيدة لك! مالفينا

      أتمنى الغناء في كثير من الأحيان تحت الغيتار!
      شركة جيدة لك! روتارو.

      أتمنى ألا أقابل حب غير مجدولة!
      مرحبا بك الموسيقية من ... بولانوفا

      لايف، سيريوزها، المرح والرائع!
      لا تنسى طفولة! ... ملكة

      أتمنى لك الكثير من الموسيقى والضحك،
      الحب والشباب الأبدي! ... بيعة

      دع المال دائما يذهب إلى الشكل!
      والساقين الدجاج! ... بابا ياجا

      لأنه في كثير من الأحيان في هذا المجال وفي الغابة!
      صحة لك قوية! ... شم

      سعددي لا تسمح أبدا!
      كبير مرحبا من أمي! ... orloe.

      لا تدخل في PE واطلاق النار!
      أتمنى لك حياة طويلة! مجموعة… السهام

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

      لغز اليانصيب

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

      اليانصيب - التوقعات

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

      اختبار "رسم حيوان غير موجود"

      أنت تطلب الضيوف رسم حيوانا غير موجود واكتب اسمه.

      اختبار "رسم رجل صغير"

      من الضروري رسم شخص من 12 شخصيات: تحتاج إلى استخدام جميع الأشكال - دائرة ومثلثات، مربعات. (بمبلغ 12)

      في ختام المساء، يمكنك تقديم الضيوف لفتح حساب لهاتف عيد ميلاد. بعد ذلك، لتحمل 3rd - جرة لتر حيث يمكن لجميع الضيوف رمي في العشرة الأوائل.